2012-04-26 4 views
1

私は数日前にMS CRM開発を開始しました。この非常に簡単な基本操作で今日は時間を費やしています。 。フォームロード時のMiddleNameフィールドの更新 - MS CRM 2011プラグイン

レコードの作成時に連絡先エンティティのミドルネームを更新したいとします。そして、私は次のコードで行うことができます。

しかし、私は連絡先レコードを開くときに同じことをしたいと思います。私は連絡先のEntityの下でRetrieve Messageに新しいステップを登録しました。しかし、それは動作しません..例外はスローされません。

public class IzzyPlugin : IPlugin 
{ 
    public void Execute(IServiceProvider serviceProvider) 
    { 
     try 
     { 
      IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 

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


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


       if (currentEntity.Attributes.Contains("middlename")) 
       { 
        currentEntity.Attributes["middlename"] = "Middle name changed"; 
       } 
       else 
       { 
        currentEntity.Attributes.Add("middlename", "Middle name changed"); 
       } 

       service.Update(currentEntity); 


      } 
     } 
     catch (Exception f) 
     { 
      throw new InvalidPluginExecutionException(f.ToString()); 
     } 

    } 

} 
+2

プラグインが起動していますか?それは私には大丈夫です。コードを単純な例外Exception()に置き換え、UIを使用して連絡先を作成しようとすると操作がキャンセルされることを確認します。 – glosrob

+0

私はこれをしました。予想通りに例外がスローされます。しかし、更新された質問に答えることができますか? – Shank

答えて

0

JavaScriptを使用してこれを行うことをお勧めします。私はあなたがレコードを開くときに起動することができるプラグインを登録することはできないと思う。

+0

こんにちは、Retrieveメッセージは何をしますか?レコードをロードするときにトリガーがかかると思った – Shank

+0

それはそうです。あなたはRetrieveにプラグインを登録することができます。それは単にパフォーマンスを著しく低下させる可能性があります。 –

2

レコードを開いたときにページの読み込み時にjavascriptを使用してmiddlenameの値を設定することはできませんか? IMO

このonloadのような何かが

Xrm.Page.getAttribute( 'middlename')をうまくいく多くの方が簡単だろうのsetValue( '新しいミドルネーム')。

同じエンティティ内の他のフィールドの中間名を計算する必要がある場合は、XRM Page documentation on MSDNを参照してください。

0

私はあなたがこれをやりたい理由やあなたのミドルネームの価値を得るところに疑問は思っていませんが、問題はあなたのプラグイン/アップデートのシーケンスの周りにあると思われます。 Retrieveメッセージに対して頻繁に呼び出されるようにプラグインを作成することは、実際には良い考えではありません。個人的に私はあなたがmiddlenameに値を挿入し、単にデータベースにこれをコミットせずに取得する上ではなく、これをユーザに戻したい場合は(私はこれを知っている

のJScriptが進むべき道だと思いますが、...これを入れ

  1. あなたのコードで取得したメッセージ
  2. ポスト操作上のプラグインを登録します:当時)あなたの正確な問題ではありませんでした
>  Entity currentEntity = (Entity)context.OutputParameters["Entity"]; 
>  if(currentEntity.Attributes.contains("middlename"){ 
>   currentEntity["middlename"] = "New value";  
>  }else{ 
>   currentEntity.Attributes.Add("middlename","New value"); 
>  } 

あなたはmiddlenameに値を挿入し、取得にこれをユーザに戻ってデータベースにこれをコミットしたいなら、私はあなたが前と後に登録され、単一のプラグインの中に両方を結合する必要があります疑いますRetrieveの操作をしてこのようなことをします(ただし、すべてのRetreiveでアップデートを試みることには非常に注意しています...):

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

      if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
      { 
       var middleNameValue = "Middle name changed"; 
       Entity currentEntity; 

       // Pre-stage plugin 
       if(context.Stage < 30){ 
        currentEntity = (Entity)context.InputParameters["Target"]; 

        if (currentEntity.Attributes.Contains("middlename")) 
        { 
         currentEntity.Attributes["middlename"] = middleNameValue; 
        } 
        else 
        { 
         currentEntity.Attributes.Add("middlename", middleNameValue); 
        } 
        service.Update(currentEntity); 
       }else{ 
        currentEntity = (Entity)context.OutputParameters["Entity"]; 
        if(currentEntity.Attributes.contains("middlename"){ 
         currentEntity["middlename"] = middleNameValue;  
        }else{ 
         currentEntity.Attributes.Add("middlename",middleNameValue); 
        }     
       } 
      } 
     } 
     catch (Exception f) 
     { 
      throw new InvalidPluginExecutionException(f.ToString()); 
     } 
    } 
} 
関連する問題