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);
}
}
安格。
感謝您的幫助!
測試了這一點後,我經歷了在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