2015-12-14 80 views
1

我已經得到父子關係中的實體類型。使用ExecuteTransactionRequest創建相關實體

由於ExecuteTransactionRequest執行多個消息請求一個 tranasaction,會按照我的意願去做以下工作嗎?

有3個父母沒有孩子下手:

//Create a 4th parent 
cs_parent parent4 = new cs_parent{ cs_name = "p4" }; 
CreateRequest createParentRequest = new CreateRequest { Target = parent4 }; 
request.Requests.Add(createParentRequest); 

EntityCollection parents 
    = context.RetrieveMultiple(/*fetchExpression to get all parents (I'm expecting 4 now)*/); 

//Create a child for each parent 
foreach (var p in parents.Entities) 
{ 
    cs_child child = new cs_child 
    { 
    cs_parentid = p.ToEntityReference(); 
    } 
    CreateRequest createChildRequest = new CreateRequest { Target = child }; 
    request.Requests.Add(createChildRequest); 
} 
response = (ExecuteTransactionResponse)context.Execute(request); 

會我會得到4對父母有一個孩子每次話,還是隻有3當我取回多以來,第四一個不是招」尚未創建(?)?

如果不是,我該如何修改我的代碼仍然是一個Execute命令在最後?

回答

1

我實際上並沒有爲自己運行你的代碼100%確定,但它看起來會出錯,因爲第四個父記錄在你指定爲時沒有必要的信息子實體上的EntityReference。儘管你可以輕鬆解決這個問題。 CRM允許這種類型的情況,即相互間的記錄都可以在一個批次Create請求中提交。通常,當您在CRM中創建記錄時,系統會爲其分配一個唯一標識符(guid),但您可以通過簡單地分配自己的guid來覆蓋此值,然後在其他對象上設置它爲EntityReference。所以,當你創建第四父母,你有這樣的事情:

cs_parent parent4 = new cs_parent { cs_name = "p4",cs_parentId = Guid.NewGuid()); 

在你的實體Id字段只是猜測,但你的想法。

有一件事我不確定從你的代碼示例中得知,context是什麼,所以我不能肯定地說如果做一個檢索就會返回你的parent4對象。您可能需要兩個循環,一個用於爲其創建子記錄的現有cs_parent記錄,另一個循環用於在request.Requests列表中創建尚未在系統中的父記錄的子記錄......用於思考的食物。

1

編輯:我知道我誤解了部分問題,但以下內容仍然適用於要創建的新的父記錄。將其添加到ExecuteTransactionRequest請求。

孩子添加到父Entity's RelatedEntities收集(僞爲例):

// Create parent object 
var invoice = new Entity("invoice"); 
// Create list of child objects 
var invoiceDetailList = new List<Entity>() { new Entity("invoicedetail"), new Entity("invoicedetail") }; 
// Add child records to parent record's RelatedEntities 
invoice.RelatedEntities.Add(new Relationship("invoice_invoicedetails"), new EntityCollection(invoiceDetailList)); 
// Add to ExecuteTransactionRequest. 
transactionRequest.Requests.Add(new CreateRequest { Target = invoice }); 

這樣,你不需要知道父記錄的GUID前面。