C# ExecuteMultipleResponse;如何从响应中读取和存储guid
我使用ExecuteMultipleResponse方法使用SSIS一次插入10条帐户记录C# ExecuteMultipleResponse;如何从响应中读取和存储guid,c#,list,dynamics-crm-2011,dynamics-crm,crm,C#,List,Dynamics Crm 2011,Dynamics Crm,Crm,我使用ExecuteMultipleResponse方法使用SSIS一次插入10条帐户记录 List<Entity> _Accounts = new List<Entity>(); // Check the batch size and process public override void InputAccount_ProcessInput(InputAccountBuffer Buffer) { //List<int> personID
List<Entity> _Accounts = new List<Entity>();
// Check the batch size and process
public override void InputAccount_ProcessInput(InputAccountBuffer Buffer)
{
//List<int> personIDs = new List<int>();
int index = 0;
while (Buffer.NextRow())
{
_Accounts.Add(InputAccountFromBuffer(Buffer));
//personIDs.Add(int.Parse(Buffer.sPersonID));
index++;
if (index == 10)
{
ImportBatch();
index = 0;
}
}
ImportBatch();
}
private void ImportBatch()
{
if (_Accounts.Count > 0)
{
var multipleRequest = new ExecuteMultipleRequest()
{
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = true,
ReturnResponses = true
},
Requests = new OrganizationRequestCollection()
};
foreach (var profContact in _Accounts)
{
CreateRequest reqCreate = new CreateRequest();
reqCreate.Target = profContact;
reqCreate.Parameters.Add("SuppressDuplicateDetection", false);
multipleRequest.Requests.Add(reqCreate);
}
ExecuteMultipleResponse multipleResponses = (ExecuteMultipleResponse)organizationservice.Execute(multipleRequest);
var responses = (ExecuteMultipleResponseItemCollection)multipleResponses.Results["Responses"];
foreach (var response in responses)
{
if (response.Fault != null)
{
// A fault has occurred, handle it here
}
else
{
// THIS IS WHERE I KNOW THE GUID VALUE EXIST.
}
}
//IEnumerator f = multipleResponses.Responses.GetEnumerator();
_Accounts.Clear();
}
}
我甚至设法开始检查响应是否有“错误”,如果没有错误,那么响应中应该存在Guid值
在QuickWatch中运行response.response.Results.Values会向我显示guid,但我找不到直接读取它并将其存储为guid的方法。
所创建记录的guid应存储在OrganizationResponse中,可在ExecuteMultipleResponseItem中找到 尝试以下操作以字符串形式获取guid:
string id = response.Response.Results["id"].ToString()
如果它按预期工作,您还应该能够实例化guid(如果需要):
Guid guid = new Guid(id);
谢谢你,Guido,但是我首先不能得到guid值。那么如何将其存储在数组中呢。我知道响应本身一次包含10条记录,但当我尝试响应.result.Values.Item[0]时,我得到一个错误,即该项不存在。我正在尝试找到一种方法,将传递到ExecuteRequest的数据链接到响应中返回的Guid。是不是响应的[0]元素对应于原始多个请求的[0]元素?这是有效的!先生,你是个天才。非常感谢@Henrik,在我的头撞在桌子上三个小时后,我终于可以看到Guid了。谢谢你id是Results属性返回的唯一内容,还是返回用于创建记录的其他值?我希望找到一种方法将每个响应与它的特定请求联系起来——希望首先使用请求中发送的值。
Guid guid = new Guid(id);