dynamics crm - 如何创建实体,然后将id保存在同一事务中

时间:2012-02-21 13:37:32

标签: transactions hyperlink dynamics-crm microsoft-dynamics

我有一个必须这样做的.net程序:

  1. 创建实体:帐户,地址,联系方式等。
  2. 检索新创建的实体的ID
  3. 将此ID保存为自定义实体中的新记录,例如“CreateJournal”
  4. 所有这些必须在某种交易中发生。也就是说:步骤1和3必须一起:失败或成功
  5. 我试过了:

    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

2 个答案:

答案 0 :(得分:1)

在您感兴趣的每个实体上使用插件有一个日志,例如创建事件的post stage插件,它将创建您的Journal实体。它将在“事务”模式下工作。

答案 1 :(得分:1)

CRM支持在创建记录之前为其ID分配新对象。记住Guids与整数ID不同,它是全局唯一的,因此基于guid的系统通常支持这种“set id first”行为。

特定于您的代码...尝试按如下方式分配acc.Id:

Account acc = new Account();
acc.Name = "test on " + DateTime.Now.ToString();
acc.Id = Guid.NewGuid();
Context.AddObject(acc);  
编辑:(抱歉,我没有意识到)这段代码没有在插件代码中运行,所以你运气不好。请参阅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