MSCRM365 在线版本的connection Alternate key使用 MultipleRequest批量查询提交

来源:互联网 发布:哪个软件有姜草漫画 编辑:程序博客网 时间:2024/05/25 19:58

最近项目用到online版本的MS Dynamic CRM开发,以前一直都是用本地Server版本的,这里记录下开发遇到的一些问题。如何在C#code中,创建与crm的连接。

  1. 在connectionstring添加CRM 连接信息,以前server里是用service去call,现在可以直接用登录的domain name URL, admin的用户名和密码。
 <add name="Xrm" connectionString="AuthType=Office365;Url=https://dev.crm5.dynamics.com; Username=username; Password=password;" />
添加引用的reference,你可以在官方SDK中下载找到。 主要是下面我标出来的,用tooling.Connector 这个工具包去创建connection。

代码中拿到CRM connectionString
var connectionStr = ConfigurationManager.ConnectionStrings["Xrm"].ToString();
可以看到 connector中很多不同参数的构造方法。实现new 一个CrmServiceClient,

然后代码里直接这样用就可以。
                    using (var service = new CrmServiceClient(connectionStr))                    {                        var query = new QueryExpression("product")                        {                            ColumnSet = new ColumnSet(true)                        };                        var result = service.RetrieveMultiple(query);     }

Alternatekey,使用,有时候做数据更新或者查询时候,希望根据一个一个外键进行操纵,这里可以用到Alternatekey 很容易操做。在entity下面创建alternate key,然后在code中
创建实体的时候就可以用了。
                       
var product = new Entity(Constants.EntityName.Entity_Product, "KeyName", keyValue);
                        product["url"] = requestEntity.URL;                        UpdateRequest request = new UpdateRequest                        {                            Target = product                        };                        service.Execute(request);
如果有多个请求数据需要update操作,我们可以用MultipleRequest做批量提交
new 一个 ExecuteMultipleRequest 类如下,在foreach循环中没次都添加到reuqest中,但是没有提交。

ExecuteMultipleRequest multipleRequest = new ExecuteMultipleRequest                        {                            Settings = new ExecuteMultipleSettings                            { ContinueOnError = true, ReturnResponses = true },                            Requests = new OrganizationRequestCollection()                        };                        var initCount = 0;                        var processingTime = 1;
Entity updateEntity = new Entity("entityName", "keyName", keyValue);
UpsertRequest request = new UpsertRequest                            {                                Target = updateEntity                             };                            multipleRequest.Requests.Add(request);
这里每次批量提交999条起更新操作。每次操作完了清空request,然后继续。
initCount++;                            if ((memberlist.Count < 999 && memberlist.Count == initCount) || initCount >= 999 * processingTime                                || ((memberlist.Count - initCount) < 999 && memberlist.Count == initCount))                            {                                ExecuteMultipleResponse MultipleResponse = (ExecuteMultipleResponse)service.Execute(multipleRequest);
                                processingTime++;                                multipleRequest.Requests.Clear();                            }


阅读全文
0 0
原创粉丝点击