1

我创建了一个插件(使用开发人员的工具包),每当创建 a 时,它将发送一封邮件到Participants已转换的邮件。但是这个插件不工作。当我尝试调试它时,插件注册工具(SDK)中出现以下消息ContactsParticipants

Profiler> Plug-in AppDomain Created
Profiler> Parsed Profiler File Successfully.
Profiler> Constructor Execution Started: XXXXXXXX
Profiler> Constructor Execution Completed Successfully (Duration = 8ms).
Profiler> Profiler Execution Started: XXXXXXXXXXX
Plug-in> Entered CRMEmailToParticipantsPackage.EmailPlugins.PostParticipantCreate.Execute(), 
Plug-in> Exiting CRMEmailToParticipantsPackage.EmailPlugins.PostParticipantCreate.Execute(),
Profiler> Profiler Execution Completed Successfully (Duration = 57ms).
Profiler> Profiler AppDomain Unloaded

. 管道阶段是创建消息的预验证。这是我的代码:

protected void ExecutePostParticipantCreate(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;

    if (context.InputParameters.Contains("Target") &&
        context.InputParameters["Target"] is Entity)
    {
        try
        {
            Entity entity = (Entity)context.InputParameters["Target"];
            if (entity.LogicalName == "new_participant")
            {
                Guid Contact_id = ((EntityReference)entity.Attributes["new_participantscontact"]).Id;


                Guid trip_Id = ((EntityReference)entity.Attributes["new_tripparticipants"]).Id;

                ColumnSet col1 = new ColumnSet("new_name", "new_date", "new_destination");
                Entity trip = service.Retrieve("new_trip", trip_Id, col1);
                var Trip_name = trip.Attributes["new_name"];
                var Trip_date = trip.Attributes["new_date"];
                var Trip_destination = trip.Attributes["new_destination"];
                string emailBody = "Hi, your " + Trip_name.ToString() + "is booked on : " + Trip_date.ToString() + "; Destination : " + Trip_destination.ToString();
                Guid _userId = context.UserId;

                ActivityParty fromParty = new ActivityParty
                {
                    PartyId = new EntityReference(SystemUser.EntityLogicalName, _userId)
                };


                ActivityParty toParty = new ActivityParty
                {
                    PartyId = new EntityReference("new_participantscontact", Contact_id)
                };

               Email email = new Email
                    {
                    To = new ActivityParty[] { toParty },
                    From = new ActivityParty[] { fromParty },
                    Subject =Trip_name.ToString()+ "  :Trip Details",
                    Description = emailBody,
                    DirectionCode = true
                    };

                Guid emailID = service.Create(email);

               SendEmailRequest req = new SendEmailRequest();
               req.EmailId = emailID;
               req.TrackingToken = "";
               req.IssueSend = true;

               SendEmailResponse res = (SendEmailResponse)service.Execute(req);
            }
        }
        catch (FaultException ex)
        {

            throw new InvalidPluginExecutionException("An error occurred in the plug-in.", ex);
        }
    }
}

我在这里做错了吗?

谢谢你。

4

3 回答 3

1

我认为第一件事是发现您的插件是否被触发。尝试调试或使用ITracingService来了解这一点。如果您发现您的插件没有被触发,则代码是不必要的。请注意,在 CRM Online 中部署插件具有仅在沙盒模式下运行的限制。尝试在 CRM Online 中查看插件的分步部署。

于 2013-03-14T09:40:40.200 回答
1

您是否能够使用此处列出的步骤进行调试:http ://microsoftcrmworld.blogspot.com/2013/01/debug-plugins-on-your-local-pc-without.html ?

如果没有,您可以添加一些 localContext.trace() 调用,然后在执行方法的最后抛出异常。下载并查看日志文件以查看 localContext.trace() 的输出。这将使您了解正在发生的事情。

于 2013-03-14T17:45:08.270 回答
0

您的代码似乎很好...我观察到您正在向自定义实体发送邮件...您是否在自定义期间启用了“发送电子邮件”选项?

检查此链接以启用它

于 2013-03-15T10:43:42.130 回答