执行多重响应;如何从响应中读取和存储 Guid
ExecuteMultipleResponse; How to read and store Guids from the response
我正在使用 ExecuteMultipleResponse 方法使用 SSIS 一次插入 10 条帐户记录。
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。此信息对于包中的下一步至关重要。我知道,如果我要创建单个记录,我可以简单地说,
Guid newRecord = _service.Create(account);
我什至设法下来检查响应是否有 'Fault',如果没有错误,则响应中应该存在 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);
我正在使用 ExecuteMultipleResponse 方法使用 SSIS 一次插入 10 条帐户记录。
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。此信息对于包中的下一步至关重要。我知道,如果我要创建单个记录,我可以简单地说,
Guid newRecord = _service.Create(account);
我什至设法下来检查响应是否有 'Fault',如果没有错误,则响应中应该存在 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);