2014-11-05 21 views
1

我試圖通過編寫插件爲CRM 2013更新實體的屬性的狀態和值。我確實嘗試使用setStateRequest設置活動的狀態,但我不確定如果我們也可以更新屬性值。我已經在Merge消息上註冊了插件來更改活動的狀態。如何更新屬性值以及狀態更改?這是到目前爲止我的代碼爲國家CH使用插件更新狀態和屬性值

protected void ExecutePreCaseMerge(LocalPluginContext localContext) 
 
     { 
 
      if (localContext == null) 
 
      { 
 
       throw new ArgumentNullException("localContext"); 
 
      } 
 

 
      // TODO: Implement your custom Plug-in business logic. 
 

 
      IPluginExecutionContext context = localContext.PluginExecutionContext; 
 
      IOrganizationService service = localContext.OrganizationService; 
 

 
      //The InputParameters collection contains all the data passed in the message request. 
 
      if (context.InputParameters.Contains("SubordinateId") && 
 
       context.InputParameters["SubordinateId"] is Guid) 
 
      { 
 
       try 
 
       { 
 
        Guid subordinateId = (Guid)context.InputParameters["SubordinateId"]; 
 

 
        var fetch = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> 
 
            <entity name='task'> 
 
            <attribute name='new_issuephase' /> 
 
            <filter type='and'> 
 
             <filter type='and'> 
 
             <condition attribute='regardingobjectid' operator='eq' uitype='incident' value='" + subordinateId + @"' /> 
 
             <condition attribute='statecode' operator='eq' value='0' /> 
 
             </filter> 
 
            </filter> 
 
            </entity> 
 
           </fetch>"; 
 

 
        EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetch)); 
 
        
 

 
        if (ec.Entities.Count > 0) 
 
        { 
 
         
 
         // Create an ExecuteMultipleRequest object. 
 
         ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest() 
 
         { 
 
          // Assign settings that define execution behavior: continue on error, return responses. 
 
          Settings = new ExecuteMultipleSettings() 
 
          { 
 
           ContinueOnError = false, 
 
           ReturnResponses = true 
 
          }, 
 
          // Create an empty organization request collection. 
 
          Requests = new OrganizationRequestCollection() 
 
         }; 
 

 
         foreach (var item in ec.Entities) 
 
         { 
 

 
          SetStateRequest setStateRequest = new SetStateRequest(); 
 
          setStateRequest.EntityMoniker = new EntityReference("task", item.Id); 
 
          setStateRequest.State = new OptionSetValue(2); 
 
          setStateRequest.Status = new OptionSetValue(6); 
 

 
          requestWithResults.Requests.Add(setStateRequest); 
 

 
         } 
 

 
         ExecuteMultipleResponse responseWithResults = 
 
          (ExecuteMultipleResponse)service.Execute(requestWithResults); 
 
        } 
 
       }

安格。

感謝您的幫助!

回答

1

你必須做的更新作爲一個單獨的請求,但你可以用相同的ExecuteMultipleRequest內SetStateRequests一起執行:

foreach (var item in ec.Entities) 
{ 

    SetStateRequest setStateRequest = new SetStateRequest(); 
    setStateRequest.EntityMoniker = new EntityReference("task", item.Id); 
    setStateRequest.State = new OptionSetValue(2); 
    setStateRequest.Status = new OptionSetValue(6); 

    requestWithResults.Requests.Add(setStateRequest); 

    //New Code 
    item.Attributes["attributetobeupdated"] = "Updated Value"; 
    UpdateRequest request = new UpdateRequest() { Target = item }; 
    requestWithResults.Requests.Add(request); 

} 

ExecuteMultipleResponse responseWithResults = 
    (ExecuteMultipleResponse)service.Execute(requestWithResults); 

注意,如果任何請求的失敗ExecuteMultipleRequest不會引發錯誤,但將返回ExecuteMultipleResponse中單個失敗的詳細信息。看起來這種操作失敗的一個常見原因是,默認情況下SQL服務器查詢被配置爲在30秒後超時。這裏更多的信息:

http://manyrootsofallevilrants.blogspot.in/2012/09/ms-crm-2011-timeout-settings-and-limits.html

+0

測試了這一點後,我經歷了在ExecuteMultipleRequest解僱,但什麼都沒有發生同樣的問題。這是因爲當個別請求中存在錯誤時,MultipleRequest不會失敗,而是在ExecuteMultipleResponse中返回這些錯誤(這裏也有類似的情況:https://community.dynamics.com/crm/f/117/t/ 144172.aspx)。在我的情況下,我得到一個SQL超時,並需要更新註冊表項:http://manyrootsofallevilrants.blogspot.in/2012/09/ms-crm-2011-timeout-settings-and-limits.html – Zach 2014-11-06 16:16:23