ユーザーが CRM でタスクのステータスを設定したときに、インシデントに関連付けられているすべてのタスクを確認するためのプラグインを作成しています。開いているタスクがない場合は、インシデントをクローズする必要があります。
プロファイルを使用してプラグインをデバッグすると正常に動作しますが、それ以外の場合は何も起こりません。
IPluginExecutionContext context = localContext.PluginExecutionContext;
IOrganizationService service = localContext.OrganizationService;
EntityReference entity = (EntityReference)context.InputParameters["EntityMoniker"];
ColumnSet cols = new ColumnSet();
cols.AllColumns = true;
Entity entityComplete = service.Retrieve("task", entity.Id, cols);
if (((OptionSetValue)entityComplete.Attributes["statecode"]).Value == 0) //se o status for cancelado ou concluído
{
if (entityComplete.Attributes.Keys.Contains("regardingobjectid") && ((EntityReference)entityComplete.Attributes["regardingobjectid"]).LogicalName == "incident")
{
QueryExpression query = new QueryExpression();
query.EntityName = "task";
query.ColumnSet = cols;
query.LinkEntities.Add(new LinkEntity("task", "incident", "regardingobjectid", "incidentid", JoinOperator.Inner));
query.Criteria.AddCondition(new ConditionExpression("statecode", ConditionOperator.Equal, 0));
query.Criteria.AddCondition(new ConditionExpression("activityid", ConditionOperator.NotEqual, entityComplete.Id));
query.Criteria.AddCondition(new ConditionExpression("regardingobjectid", ConditionOperator.Equal, ((EntityReference)entityComplete.Attributes["regardingobjectid"]).Id));
EntityCollection collection = service.RetrieveMultiple(query);
if (collection.Entities.Count == 0)
{
Entity incident = service.Retrieve("incident", ((EntityReference)entityComplete.Attributes["regardingobjectid"]).Id, cols);
SetStateRequest setState = new SetStateRequest();
setState.EntityMoniker = new EntityReference();
setState.EntityMoniker.Id = incident.Id;
setState.EntityMoniker.LogicalName = incident.LogicalName;
setState.State = new OptionSetValue(1);
SetStateResponse setStateResponse = (SetStateResponse)service.Execute(setState);
}
}
}
誰かが私を助けることができますか?ありがとう。