2016-09-01 10 views

答えて

4

これは、PublishとPublishAllメッセージで動作するプラグインです。この目的のために作成したエンティティを使用してイベントをログに記録します(必要に応じて変更できます)。

イベントがパブリッシュの場合、プラグインはParameterXmlパラメータ(MSDN)を使用して、パブリッシュされているコンポーネントを記録します。 PublishAllメッセージの場合、このパラメータは存在しないため、詳細は表示されません(すべてを公開しているため意味があります)。

public class PublishPlugin : IPlugin 
{ 
    public void Execute(IServiceProvider serviceProvider) 
    { 
     IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
     IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
     IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 

     if (context.MessageName != "Publish" && context.MessageName != "PublishAll") 
      return; 

     string parameterXml = string.Empty; 
     if (context.MessageName == "Publish") 
     { 
      if (context.InputParameters.Contains("ParameterXml")) 
      { 
       parameterXml = (string)context.InputParameters["ParameterXml"]; 
      } 
     } 

     CreatePublishAuditRecord(service, context.MessageName, context.InitiatingUserId, parameterXml); 
    } 

    private void CreatePublishAuditRecord(IOrganizationService service, string messageName, Guid userId, string parameterXml) 
    { 
     Entity auditRecord = new Entity("fjo_publishaudit"); 
     auditRecord["fjo_message"] = messageName; 
     auditRecord["fjo_publishbyid"] = new EntityReference("systemuser", userId); 
     auditRecord["fjo_publishon"] = DateTime.Now; 
     auditRecord["fjo_parameterxml"] = parameterXml; 

     service.Create(auditRecord); 
    } 
} 

これは、CRMでどのように見えるかです:

enter image description here

あなたは私のGitHubからプラグインプロジェクトとCRMソリューションをダウンロードすることができます。

+0

@ Federico-Joussetありがとうございます。私の問題を解決するのに役立ちます。 –

1

有効なDynamics CRMメッセージの一覧については、こちらを参照してください。 PublishとPublishAllの両方がリストされています。 2011年以降のCRMの全バージョンでも有効です。

https://msdn.microsoft.com/en-us/library/gg328576.aspx

は、他のようなあなたのプラグインを登録が、メッセージのために公開またはPublishAll使用し、ブランクとしてエンティティを残します。

パブリッシュの場合、パブリッシュされているエンティティを絞り込むことができないというドキュメントを見ているようです。必要に応じて、あなたが扱っているエンティティを調べることができるかどうかを調べるために、入力パラメータがあなたに与えるものを見てみる必要があります。

+0

パブリッシュメッセージでは、ParameterXmlプロパティ(プラグインのInputParameterコレクションにあります)を使用して、どのコンポーネントが公開されているかを絞り込むことができます。** [MSDN](https://msdn.microsoft.com/en -ie/library/microsoft.crm.sdk.messages.publishxmlrequest.parameterxml.aspx) –

関連する問題