[英]CRM 2011 PLUGIN - PostTaskSetState
I'm creating a plugin to, when the user set the status of a task in the crm, verify all tasks that are associated with a incident. 我正在创建一个插件,当用户在crm中设置任务的状态时,验证与事件关联的所有任务。 If, there's no tasks opened, the incident should be closed.
如果没有打开任务,则应该关闭事件。
When I use a profile to debug the plugin it works fine, but otherwise nothing happens. 当我使用配置文件调试插件时,它工作正常,但没有任何反应。
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);
}
}
}
Somebody can help me? 有人可以帮帮我吗? Thanks.
谢谢。
Try registering your plugin also for the SetStateDynamicEntity
message, in addition to doing the same for SetState
. 尝试为
SetStateDynamicEntity
消息注册插件,此外还要为SetState
执行相同的操作。 From my experience, entities need to be registered for both in order to work, although I'm not 100% clear on whether it's necessary, I know for a fact that it works. 根据我的经验,实体需要注册才能工作,虽然我不是100%明确是否有必要,但我知道它有效。 Several searches did not give me a definitive answer.
几次搜索没有给我一个确定的答案。 Check out this popular CRM blog with the same suggestion.
查看这个受欢迎的CRM博客与相同的建议。 http://nishantrana.wordpress.com/2010/01/29/plug-in-for-setstate-and-setstatedynamicentity-messages/
http://nishantrana.wordpress.com/2010/01/29/plug-in-for-setstate-and-setstatedynamicentity-messages/
I know with entities that I've worked with, failing to register for SetStateDynamic will cause the plugin not to trigger. 我知道我使用过的实体,未能注册SetStateDynamic会导致插件无法触发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.