c# - CRM 2011 插件 - PostTaskSetState

标签 c# plugins dynamics-crm-2011 dynamics-crm crm

我正在创建一个插件,当用户在 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);
                    }
                }
            }

有人可以帮助我吗? 谢谢。

最佳答案

尝试为 SetStateDynamicEntity 消息注册您的插件,除了为 SetState 做同样的事情。根据我的经验,实体需要为两者注册才能工作,尽管我不是 100% 清楚是否有必要,但我知道它确实有效。几次搜索都没有给我一个明确的答案。查看这个具有相同建议的热门 CRM 博客。 http://nishantrana.wordpress.com/2010/01/29/plug-in-for-setstate-and-setstatedynamicentity-messages/

我知道在我合作过的实体中,未能注册 SetStateDynamic 将导致插件无法触发。

关于c# - CRM 2011 插件 - PostTaskSetState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17579002/

相关文章:

c# - 电话号码验证 MVC

c# - CRM 2011 Pre-Operation Update 相关实体查找字段

dynamics-crm - 回复 mscrm 2011 电子邮件实体中的功能

c# - C# 中的字符串到字典或数组

c# - 事件始终为 Null,因此无法处理

c# - 在 C# 中旋转多列

c# - 注册 Dynamics CRM 插件时出错

android - android可以在 native 模式下从sdcard加载dll吗

plugins - 从stark-security升级到Spring Security插件

javascript - 在 Dynamics 2011 中调用对话框并将多个 recordID 传递给它