2

プラグインが初めてです。私の問題は、ケースが作成されたら、ケース ID を台帳に更新する必要があることです。この 2 つを接続するのは、leadid です。私の場合、リードの名前をアウトバウンド コールに変更しました。

これは私のコードです。それが正しいかどうかはわかりません。エラーが発生するため、皆さんがこれを手伝ってくれることを願っています。なんとか登録できました。ビルドと登録は問題ありませんが、ケースを作成するとエラーが発生します。

using System;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Client;
using System.Net;
using System.Web.Services;


/*
 * Purpose: 1) To update case number into lejar
 *         
 * Triggered upon CREATE message by record in Case form.
 */
namespace UpdateLejar
{
    public class UpdateLejar : IPlugin
    {
        /*public void printLogFile(String exMessage, String eventMessage, String pluginFile)
        {
            DateTime date = DateTime.Today;
            String fileName = date.ToString("yyyyMdd");
            String timestamp = DateTime.Now.ToString();

            string path = @"C:\CRM Integration\PLUGIN\UpdateLejar\Log\" + fileName;
            //open if file exist, check file..
            if (File.Exists(path))
            {
                //if exist, append
                using (StreamWriter sw = File.AppendText(path))
                {
                    sw.Write(timestamp + " ");
                    sw.WriteLine(pluginFile + eventMessage + " event:  " + exMessage);
                    sw.WriteLine();
                }

            }

            else
            {
                //if no exist, create new file
                using (StreamWriter sw = File.CreateText(path))
                {
                    sw.Write(timestamp + " ");
                    sw.WriteLine(pluginFile + eventMessage + " event:  " + exMessage);
                    sw.WriteLine();
                }
            }
        }*/

        public void Execute(IServiceProvider serviceProvider)
        {

            ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            //for update and create event
            if (context.InputParameters.Contains("Target") &&
                context.InputParameters["Target"] is Entity)
            {
                // Obtain the target entity from the input parmameters.
                Entity targetEntity = (Entity)context.InputParameters["Target"];

                // Verify that the entity represents a connection.
                if (targetEntity.LogicalName != "incident")
                {
                    return;
                }

                else
                {
                    try
                    {

                        //triggered upon create message
                        if (context.MessageName == "Create")
                        {
                            Guid recordid = new Guid(context.OutputParameters["incidentid"].ToString());

                            EntityReference app_inc_id = new EntityReference();
                            app_inc_id = targetEntity.GetAttributeValue<EntityReference>("new_outboundcalllid");
                            Entity member = service.Retrieve("new_lejer", ((EntityReference)targetEntity["new_outboundcallid"]).Id, new ColumnSet(true));
                            //DateTime createdon = targetEntity.GetAttributeValue<DateTime>("createdon");

                            if (app_inc_id != null)
                            {
                                if (targetEntity.Attributes.Contains("new_outboundcallid") == member.Attributes.Contains("new_outboundcalllistid_lejer"))
                                {



                                    member["new_ringkasanlejarid"] = targetEntity.Attributes["incidentid"].ToString();
                                    service.Update(member);
                                }
                            }

                        }

                        tracingService.Trace("Lejar updated.");
                    }


                    catch (FaultException<OrganizationServiceFault> ex)
                    {
                        //printLogFile(ex.Message, context.MessageName, "UpdateLejar plug-in. ");
                        throw new InvalidPluginExecutionException("An error occurred in UpdateLejar plug-in.", ex);
                    }

                    catch (Exception ex)
                    {
                        //printLogFile(ex.Message, context.MessageName, "UpdateLejar plug-in. ");
                        tracingService.Trace("UpdateLejar: {0}", ex.ToString());
                        throw;
                    }
                }
            }
        }
    }
}
4

2 に答える 2

3

チェックしてください、

属性を含むエンティティかどうかです。

それをチェックして試してください:

if (targetEntity.Contains("new_outboundcallid"))
((EntityReference)targetEntity["new_outboundcallid"]).Id
于 2013-07-31T17:04:39.397 に答える
2
member["new_ringkasanlejarid"] = targetEntity.Attributes["incidentid"].ToString();

new_ringkasanlejarid のタイプは何ですか? あなたはそれに文字列を設定しています。new_ringkasanlejarid がエンティティ参照である場合、これが問題を引き起こしている可能性があります。

エラーの詳細またはトレース ログを共有することをお勧めします。私たちにできることは、現時点で問題が何であるかを推測することだけです。

于 2013-04-24T13:24:57.343 に答える