2012-04-12 3 views
1

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

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 = "[email protected]", 
         Id = Guid.NewGuid() 
        }; 
        _contactId = contact.Id; 

        oContext.AddObject(contact); 

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

     } 
    } 
} 

答えて

2

私はあなたがある1文の欠けていることがわかります。

oContext.AddObject(contact); 
oContext.SaveChanges(); // <= Saves the changes 
0

それは問題を解決しないが、それは今、別のエラー投げている:

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

でMicrosoft.Xrm.Sdk.AssemblyBasedKnownProxyTypesProvider.GetTypeForNameでKnownProxyTypesProvider.RegisterAssembly(アセンブリアセンブリ) (文字列名、アセンブリproxyTypesAssembly) それは、私には権利の問題があるようです。あなたは今私が逃しているものを提案できますか?

UPDATE:私はOWNERID =新しい実体参照(「systemuser」、context.UserId)を追加することで問題を解決し

0

うーん、私はあなたが、IDフィールドを完了する必要がないと考えたときに、あなたがするので、作成すると、CRMからIDが送信されます。

私が連絡先を作成するのではなく、インシデントを作成するために役立つかどうかわかりません。しかし、私はプロセスが同じだと思う。だから私はあなたを見てみましょう。

プライベートのGuid createCase(IOrganizationService CrmService、エンティティの電子メール)

{ 
     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"]; 

/* END */

 tracingService.Trace("tracing 2."); 

/*ここでは、CRMにレコードを作成*/

 Guid caseid = CrmService.Create(incident); 

/* END */

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

     return caseid; 
    } 
関連する問題