【问题标题】:D365 C# - Retrieve Multiple and Updating Very SlowD365 C# - 检索多个并且更新非常慢
【发布时间】:2018-04-18 16:47:01
【问题描述】:

我正在构建一个连接到 D365 实例的控制台,使用 fetch XML 查找记录并使用特定值更新这些记录。它有效,它正在更新记录。但是,它每秒只更新大约一两个,这远非理想,我有数十万条记录要更新。我见过/使用过至少每秒更新数百次的控制台应用程序。

我是否以错误的方式去做我想做的事?我的代码中一定有一些东西使它变得非常低效/愚蠢。我还应该说这是我第一次使用 C#,所以我可能正在做一些非常愚蠢的事情。

using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Tooling.Connector;


namespace My.Crm.RetrieveMultipleConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var connectionString = @"AuthType = Office365; Url = xxxx/;Username=xxxx;Password=xxxx";
                CrmServiceClient conn = new CrmServiceClient(connectionString);

                IOrganizationService service = (IOrganizationService)conn.OrganizationWebProxyClient != null ? (IOrganizationService)conn.OrganizationWebProxyClient : (IOrganizationService)conn.OrganizationServiceProxy;

                string fetchquery = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
  <entity name='account'>
    <attribute name='name' />
    <order attribute='name' descending='false' />
    <filter type='and'>
      <condition attribute='name' operator='like' value='%Tom%' />
    </filter>
  </entity>
</fetch>";

                var multipleRequest = new Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = false,
                        ReturnResponses = true
                    },
                    Requests = new OrganizationRequestCollection()
                };
                EntityCollection accounts = service.RetrieveMultiple(new FetchExpression(fetchquery));
                foreach (var c in accounts.Entities)
                {

                    Console.WriteLine("accountid: {0}", c.Attributes["name"]);                
                    Microsoft.Xrm.Sdk.Messages.UpdateRequest updateRequest = new Microsoft.Xrm.Sdk.Messages.UpdateRequest { Target = c };
                    multipleRequest.Requests.Add(updateRequest);
                    c.Attributes["name"] = "New Name";
                    Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse multipleResponse = (Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse)service.Execute(multipleRequest);

                }
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            Console.ReadLine();
        }
    }
}

【问题讨论】:

    标签: c# dynamics-crm microsoft-dynamics fetchxml dynamics-crm-365


    【解决方案1】:

    foreach 循环中取出您的service.Execute(multipleRequest),将其放在外面。这样执行就真的是ExecuteMultipleRequest了。

    var multipleRequest = new Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest()
                    {
                        Settings = new ExecuteMultipleSettings()
                        {
                            ContinueOnError = false,
                            ReturnResponses = true
                        },
                        Requests = new OrganizationRequestCollection()
                    };
                    EntityCollection accounts = service.RetrieveMultiple(new FetchExpression(fetchquery));
                    foreach (var c in accounts.Entities)
                    {
    
                        Console.WriteLine("accountid: {0}", c.Attributes["name"]);                
                        Microsoft.Xrm.Sdk.Messages.UpdateRequest updateRequest = new Microsoft.Xrm.Sdk.Messages.UpdateRequest { Target = c };
                        multipleRequest.Requests.Add(updateRequest);
                        c.Attributes["name"] = "New Name";
    
                    }
    
    Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse multipleResponse = (Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse)service.Execute(multipleRequest);
    

    【讨论】:

    • @Arun 你能给我提供一个用于 executemultiplerequest 的 SOAP 主体示例吗?我不懂c#
    • @utkarsh2k2 请创建一个包含更多上下文的新问题,谢谢
    • @Arun 这是问题的链接stackoverflow.com/questions/53021029/… 请注意没有附加代码,因为我们不知道soap请求的样子
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2013-11-06
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多