最近項目用到online版本的MS Dynamic CRM開發,以前一直都是用本地Server版本的,這裏記錄下開發遇到的一些問題。如何在C#code中,創建與crm的連接。
- 在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();
}