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

最近項目用到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();
                            }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章