1

以下は、CRM 2011 オンラインで連絡先を作成するために使用しているコードです。エラーはスローされませんが、連絡先も作成されません。メールエンティティのPost-Operation createイベントにプラグインを登録しました。何かが欠けているかどうかはわかりません。どんな助けでも感謝します。

public class RegistrationPlugin : IPlugin
{
    private OrganizationServiceContext oContext;

    public void Execute(IServiceProvider serviceProvider)
    {
        Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
       serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

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


        oContext = new OrganizationServiceContext(service);

        //service.EnableProxyTypes();

        if (context.InputParameters.Contains("Target") &&
              context.InputParameters["Target"] is Entity)
        {
            try
            {
                Entity entity = (Entity)context.InputParameters["Target"];

                if (entity.LogicalName == "email")
                {
                    Guid _contactId;
                    var contact = new Contact()
                    {
                        FirstName = "Mary Kay",
                        LastName = "Andersen",
                        Address1_Line1 = "23 Market St.",
                        Address1_City = "Sammamish",
                        Address1_StateOrProvince = "MT",
                        Address1_PostalCode = "99999",
                        Telephone1 = "12345678",
                        EMailAddress1 = "marykay@contoso.com",
                        Id = Guid.NewGuid()
                    };
                    _contactId = contact.Id;

                    oContext.AddObject(contact);

                }
            }
            catch (Exception x)
            {
                throw new Exception(x.ToString() + "\n" + x.InnerException.ToString());
            }

        }
    }
}
4

3 に答える 3

2

次のステートメントが 1 つ欠けていることがわかります。

oContext.AddObject(contact);
oContext.SaveChanges(); // <= Saves the changes
于 2012-04-12T13:24:37.923 に答える
0

ID フィールドを作成するときに CRM から ID が送信されるため、ID フィールドに入力する必要はないと思います。

連絡先ではなくインシデントを作成するため、それが役立つかどうかわかりません。でも過程は同じだと思います。だから私はあなたに見てもらいました。

プライベート Guid createCase(IOrganizationService CrmService, Entity email)

    {
        ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
        tracingService.Trace("Just to tracing my plugin");

/* エンティティの作成: ここにインシデントを入力しますが、連絡先、アカウントなどの可能性もあります */

        Entity incident = new Entity("incident");
        incident["title"] = email.Attributes["subject"].ToString();
        incident["caseorigincode"] = new OptionSetValue(2);

        EntityCollection ec = email.Attributes["from"] as EntityCollection;
        Entity from = ec.Entities.FirstOrDefault();
        incident["customerid"] = (EntityReference)from.Attributes["partyid"];

/* 終わり */

        tracingService.Trace("tracing 2.");

/* ここで、CRM でレコードを作成します */

        Guid caseid = CrmService.Create(incident);

/* 終わり */

        tracingService.Trace("tracing 3. ID: "+ caseid.ToString());

        return caseid;
    }
于 2013-07-02T14:58:06.223 に答える
0

問題は解決しますが、別のエラーがスローされます。

未処理の例外: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: プラグインからの予期しない例外 (実行): Microsoft.Crm.Sdk.Samples.RegistrationPlugin: System.Exception: Microsoft.Xrm.Sdk.SaveChangesException: この要求の処理中にエラーが発生しました。---> System.TypeLoadException: メンバーのオーバーライド中に継承セキュリティ ルールに違反しました: 'Microsoft.Crm.Services.Utility.DeviceRegistrationFailedException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. オーバーライドするメソッドのセキュリティ アクセシビリティは、オーバーライドされるメソッドのセキュリティ アクセシビリティと一致する必要があります。System.Reflection.RuntimeAssembly で。

私には権利の問題のように思えます。私が今欠けているものを提案できますか?

更新: OwnerID = new EntityReference("systemuser", context.UserId) を追加して問題を解決しました

于 2012-04-13T10:04:11.597 に答える