2012-02-21 1 views
0

、その後、エンティティを作成:ダイナミクスCRM - どのように私はこれを行う必要があり、.NETプログラムを持っている同じトランザクションにIDを保存

  1. エンティティを作成します:アカウント、住所、連絡など
  2. 新しく作成されたエンティティのIDを取得する
  3. このIDをカスタムエンティティの新しいレコード、たとえば「CreateJournal」に保存します。
  4. これらはすべて一種のトランザクションで実行する必要があります。つまり:1と3が一緒に行かなければならない手順:

を失敗するか成功どちらか私はこれを試してみました:

Account acc = new Account(); 
acc.Name = "test on " + DateTime.Now.ToString(); 
Context.AddObject(acc); 

CreateJournal jEntry = new CreateJournal(); 
jEntry.targetid = acc.Id.ToString(); 
Context.AddObject(jEntry); 

Context.SaveChanges(); 

しかし、それは動作しません、するtargetIdはGuid.Emptyです。

コンテキストはOrganizationServiceContextです。

答えて

1

興味のある各エンティティでプラグインを使用すると、ログが記録されます。あなたのジャーナル・エンティティを作成する作成イベントのポストステージ・プラグイン。それは "トランザクション"モードで動作します。

+0

良いアイデアですが、その後どのように私はによって作成された「連絡先」を知ることができます私自身のコードとは?これらの2つのケースのそれぞれに対してプラグインが実行されるためです。 – Flavius

+1

@Flavius誰が連絡先を作成するかを知る普遍的な方法はありませんが、いくつかの回避策が可能です。例えばあなたのコードでのみ設定されるいくつかの新しいフィールドを追加するか、あるいはあなたのコードがいくつかの事前定義されたユーザー資格の下で動作するかもしれません。 – paramosh

1

CRMでは、レコードを作成する前に新しいオブジェクトのIDを割り当てることができます。 GUIDは整数IDと異なり、グローバルに一意であるため、guidベースのシステムではこの "set id first"の動作をサポートするのが一般的です。あなたがのために運の外にあるので、このコードは、プラグインのコードで実行されていない(申し訳ありませんが、私は実現didntは):

Account acc = new Account(); 
acc.Name = "test on " + DateTime.Now.ToString(); 
acc.Id = Guid.NewGuid(); 
Context.AddObject(acc); 

EDITを次のようにあなたのコードに固有

... acc.Id割り当てる試してみてくださいトランザクション。 http://social.microsoft.com/Forums/en/crmdevelopment/thread/229dec17-6c49-43ad-9751-6ea61e4ecd36を参照してください。

あなたが聞いたことがあるかもしれトランザクションの振る舞いを部分的にここに文書やCRMにおけるトランザクションサポートの状況を説明している: http://msdn.microsoft.com/en-us/library/gg327941.aspx#bkmk_DatabaseTransactions

+0

私はこれを試みましたが、なぜ "SaveChanges"がトランザクションのように振る舞わないのか分かりません。私がしたこと:例外をスローするCreateJournalエンティティ(操作前)の「作成」メッセージのプラグインを追加したので、毎回失敗します。その後、コードを実行すると、アカウントが表示され、CreateJournalは表示されません。 – Flavius

+0

は、非同期として登録されたプラグインの手順ですか?彼らはあなたが探しているトランザクションの動作を取得するために同期する必要があります。 – BenPatterson1

+0

このコードはプラグインの内部にはないので、コンソールアプリケーションです。私は当初、 "Context.SaveChanges"はトランザクションのように動作すると考えましたが、そうではありません。実際には、オブジェクトをバッチとしてサーバーに送信しますが、一度そこに挿入されたオブジェクトはアトミックです。 – Flavius

関連する問題