MS CRM 2015,插件似乎无法解决

时间:2015-01-12 11:24:00

标签: plugins dynamics-crm dynamics-crm-2015

我在使用新的MS CRM 2015时遇到了一些麻烦,因为我无法启动插件。 我甚至尝试从2015 SDK中获取一些非常简单的插件示例,并将它们注册为“非沙箱”,但结果是一样的。

我唯一不能在触发事件上做任何事情的是插件分析器,但这对我没什么帮助。

还有其他人有这个问题吗?

我真的可以使用一些关于下一步尝试/检查的建议,因为在这种情况下Google似乎不是我的朋友?

当前部署是内部部署的,但服务器上没有可用的Visual Studio。

这是来自示例的代码,我只更改了一小部分,只触发了1个特定帐户。

using System;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;

namespace Microsoft.Crm.Sdk.Samples
{
    public class FollowupPlugin: IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            //Extract the tracing service for use in debugging sandboxed plug-ins.
            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            // Obtain the execution context from the service provider.
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            //</snippetFollowupPlugin1>

            //<snippetFollowupPlugin2>
            // The InputParameters collection contains all the data passed in the message request.
            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                // Obtain the target entity from the input parameters.
                Entity entity = (Entity)context.InputParameters["Target"];
                //</snippetFollowupPlugin2>

                // Verify that the target entity represents an account.
                // If not, this plug-in was not registered correctly.
                if (entity.LogicalName != "account")
                    return;

                try
                {
                    if (entity.Attributes.ContainsKey("accountid"))
                    {
                        if (entity.GetAttributeValue<Guid>("accountid").ToString().ToLower() == "ee03d883-5b18-de11-a0d1-000c2962895d") // specific test account
                        {
                            // Create a task activity to follow up with the account customer in 7 days. 
                            Entity followup = new Entity("task");

                            followup["subject"] = "Send e-mail to the new customer.";
                            followup["description"] = "Follow up with the customer. Check if there are any new issues that need resolution.";
                            followup["scheduledstart"] = DateTime.Now.AddDays(7);
                            followup["scheduledend"] = DateTime.Now.AddDays(7);
                            followup["category"] = context.PrimaryEntityName;

                            // Refer to the account in the task activity.
                            if (context.OutputParameters.Contains("id"))
                            {
                                Guid regardingobjectid = new Guid(context.OutputParameters["id"].ToString());
                                string regardingobjectidType = "account";

                                followup["regardingobjectid"] = new EntityReference(regardingobjectidType, regardingobjectid);
                            }

                            //<snippetFollowupPlugin4>
                            // Obtain the organization service reference.
                            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
                            //</snippetFollowupPlugin4>

                            // Create the task in Microsoft Dynamics CRM.
                            tracingService.Trace("FollowupPlugin: Creating the task activity.");
                            service.Create(followup);
                        }
                    }
                }
                //<snippetFollowupPlugin3>
                catch (FaultException<OrganizationServiceFault> ex)
                {
                    throw new InvalidPluginExecutionException("An error occurred in the FollupupPlugin plug-in.", ex);
                }
                //</snippetFollowupPlugin3>

                catch (Exception ex)
                {
                    tracingService.Trace("FollowupPlugin: {0}", ex.ToString());
                    throw;
                }
            }
        }
    }
}

注册截图:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

尝试使用以下代码:

using System;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
namespace Microsoft.Crm.Sdk.Samples
{
    public class FollowupPlugin: IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            //Extract the tracing service for use in debugging sandboxed plug-ins.
            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            // Obtain the execution context from the service provider.
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            //</snippetFollowupPlugin1>

            //<snippetFollowupPlugin2>
            // The InputParameters collection contains all the data passed in the message request.
            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                // Obtain the target entity from the input parameters.
                Entity entity = (Entity)context.InputParameters["Target"];
                //</snippetFollowupPlugin2>

                // Verify that the target entity represents an account.
                // If not, this plug-in was not registered correctly.
                if (entity.LogicalName != "account")
                    return;

                try
                {

                        if (entity.Id.Equals(new Guid("ee03d883-5b18-de11-a0d1-000c2962895d")) // specific test account
                        {
                            // Create a task activity to follow up with the account customer in 7 days. 
                            Entity followup = new Entity("task");

                            followup["subject"] = "Send e-mail to the new customer.";
                            followup["description"] = "Follow up with the customer. Check if there are any new issues that need resolution.";
                            followup["scheduledstart"] = DateTime.Now.AddDays(7);
                            followup["scheduledend"] = DateTime.Now.AddDays(7);
                            followup["category"] = context.PrimaryEntityName;
                            followup["regardingobjectid"] = entity.ToEntityReference();

                            //<snippetFollowupPlugin4>
                            // Obtain the organization service reference.
                            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
                            //</snippetFollowupPlugin4>

                            // Create the task in Microsoft Dynamics CRM.
                            tracingService.Trace("FollowupPlugin: Creating the task activity.");
                            service.Create(followup);
                        }
                }
                //<snippetFollowupPlugin3>
                catch (FaultException<OrganizationServiceFault> ex)
                {
                    throw new InvalidPluginExecutionException("An error occurred in the FollupupPlugin plug-in.", ex);
                }
                //</snippetFollowupPlugin3>

                catch (Exception ex)
                {
                    tracingService.Trace("FollowupPlugin: {0}", ex.ToString());
                    throw;
                }
            }
        }
    }
}