CRM 9 — Привязка таблицы / сетки HTML динамически на основе записей из JS

#javascript #html #dynamics-crm #dynamics-crm-2016

#javascript #HTML #динамика-crm #динамика-crm-2016

Вопрос:

Я работаю над HTML-страницей внутри Dynamics CRM 9.0. Я написал JavaScript с веб-ресурсом, который я вызвал через HTML-страницу. В моем JavaScript есть функция, которая извлекает данные из объекта CRM, как показано ниже,

 var Query = "$select=ParameterValue,transactioncode,ParameterNameamp;$filter= PhonceCallId/Id eq(guid'"   phoneid   "')";
 XrmSvcToolkit.retrieveMultiple({
    entityName: entity ,  
    odataQuery: Query,
    async: false,
    successCallback: successCallback,
    errorCallback: errorCallback
});
  

Теперь, по отношению к PhoneCallId, я извлекаю записи и, пожалуйста, обратите внимание, что записи являются динамическими по своей природе, что означает, что количество строк, извлекаемых при каждом попадании, не является фиксированным (я могу получить 3 строки в первый раз, 5 строк в следующий раз и так далее).

Я хочу динамически привязывать эти записи к моей HTML-странице, например, к gridview, в котором будут столбцы заголовка, а затем записи будут привязаны во время выполнения к этому gridview.

Ответ №1:

Этого можно добиться разными способами. Например, вот одна из моих скрипок с использованием KnockoutJS, которая заполняет данные. В этой скрипке данные являются статическими для объяснения, и их можно динамически заполнять из CRM, и вы можете показать, сколько строк нужно отображать на странице. Приведенный ниже код — это просто ссылка на скрипку

В основном приведенный ниже код — это то, что вам нужно для получения данных из CRM в ваш локальный массив

 var req = new XMLHttpRequest(); 
req.open("GET", Xrm.Page.context.getClientUrl()   "/api/data/v9.1/accounts?$select=accountnumber,emailaddress1,nameamp;$filter=accountid ne null", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations="*"");
var tempArray = new array();
req.onreadystatechange = function() {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 200) {
            var results = JSON.parse(this.response);
            for (var i = 0; i < results.value.length; i  ) {
                var accountnumber = results.value[i]["accountnumber"];
                var emailaddress1 = results.value[i]["emailaddress1"];
                var name = results.value[i]["name"];
                tempArray.push(results.value[i]["accountnumber"],results.value[i]["emailaddress1"],results.value[i]["name"]);

            }
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send();
  

Обычная таблица HTML, добавляющая данные. Ссылка для справки

Комментарии:

1. Уважаемый @AnkUser. Спасибо за ваш ответ, но я получаю данные внутри переменной responseData и не хочу разбивки на страницы. Итак, как я могу этого добиться?

2. Вот еще один базовый HTML-пример создания таблицы Dynamics jsfiddle.net/JSFiddleChamp/ycfdL3oe/2 В Array вы можете добавить свои данные, поступающие из RetreiveMultiple, а затем просто перебирать массив и отображать данные. Это заставит вас работать. Если это поможет вам продвинуться вперед, пожалуйста, отметьте это как решенное.

3. Когда я пытаюсь получить доступ к моим responseData, например, к responseData[0] [0] . Это выдает мне неопределенную ошибку, тогда как когда я запрашиваю вот так responseData[0][«Значение параметра»], он выдает мне значение параметра с 0-м индексом

4. Вы путаете значение, поступающее из Crm в объект массива JavaScript. Что вам нужно сделать, это создать переменную массива, одну за другой вставляя ваше значение из данных ответа в массив. Затем у вас есть объект массива (локальный) со всеми данными из Crm, а затем отображение значения из массива в таблицу.

5. Спасибо за ваш ответ. Не могли бы вы показать мне пример того, как я могу это сделать?