Dynamics retrieveMultipleRecords异步问题

问题描述 投票:0回答:1

我对Xrm.WebApi.retrieveMultipleRecords有一个问题,我希望能得到一些提示或建议。

使用Dynamics 365,我有一个包含DevExpress控件的对话框。需要使用一组发票模板初始化此控件。

我的代码(摘录):

Dialog html:

<script language="javascript" type="text/javascript">
  debugger;
  Globalize.culture('de-CH');
  var TableContent = getInvoiceTemplates();         

  var dataGridTemplates = $("#TemplateContainer").dxDataGrid({
    dataSource: TableContent,
      selection: {
        mode: 'single'                  
      },
      .....
   .....

数据源(TableContent)由函数getInvoiceTemplates()初始化

function getInvoiceTemplates()
{   
  debugger;
  var TableContent = new Array();

  var fetchTemplates = "<fetch>"+
                       "  <entity name='invoice'>" +
                       "    <attribute name='name' />" +
                       "    <attribute name='invoiceid' />" +
                       "    <filter type='and' >" +
                       "      <condition attribute='ambcust_vorlage_twooption' operator='eq' value='1' />" +
                       "    </filter>" +
                       "    <order attribute='name' descending='false' />" +
                       "  </entity>" +
                       "</fetch>";
  fetchTemplates = "?fetchXml=" + encodeURIComponent(fetchTemplates);
  Xrm.WebApi.retrieveMultipleRecords("invoice", fetchTemplates).then(
    function success(result)
    {
      for (var i = 0; i < result.entities.length; i++) 
      {
        var RowContent = new Object();          

        if(result.entities[i].invoiceid != null)
        {
          RowContent["TemplateID"] = result.entities[i].invoiceid;              
        }
        else
        {
          RowContent["TemplateID"] = "";                
        }

        if(result.entities[i].name != null)
        {
          RowContent["TemplateName"] = result.entities[i].name;
        }
        else
        {
          RowContent["TemplateName"] = "";
        }   

        TableContent.push(RowContent);  
      }
      return TableContent;
    },
    function (error)
    {
      alert("Error");
    }
  );
}

问题是函数正确检索模板,函数中的属性TableContent包含模板,但它总是返回null,因此对话框中控件的DataSource将为空。

我知道API函数是异步的,但我认为在成功回调中返回数组就足够了。

我在这里错过了什么吗?

javascript asynchronous dynamics-crm microsoft-dynamics dynamics-crm-webapi
1个回答
1
投票

您可以使用TableContent本身内部的successCallback移动代码来克服这个问题。

Xrm.WebApi.retrieveMultipleRecords("invoice", fetchTemplates).then(
        function success(result)
        {
            for (var i = 0; i < result.entities.length; i++) 
            {
                var RowContent = new Object();          

               ....

                TableContent.push(RowContent);  
            }

            var dataGridTemplates = $("#TemplateContainer").dxDataGrid({
            dataSource: TableContent,
            selection: {
                mode: 'single'                  
            },
        },
        function (error)
        {
            alert("Error");
        }
    );
© www.soinside.com 2019 - 2024. All rights reserved.