ExecuteMultipleResponse; 如何从响应中读取和存储Guids

4

我正在使用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();
    }

}

以上代码运行良好,但是现在我需要从响应中读取和存储Guids到一个列表中。这些信息对于包中的下一步操作至关重要。我知道,如果我正在创建单个记录,我可以简单地说,

Guid newRecord = _service.Create(account);

我甚至尝试检查响应是否存在“Fault”,如果没有错,则响应中应存在Guid值。

在QuickWatch中运行response.Response.Results.Values会显示Guid,但我无法直接读取并将其存储为Guid。

enter image description here

谢谢Guido,但我一开始就无法获取guid值。那么我该如何将其存储在数组中呢?我知道响应本身是每次10个记录的数组,但是当我尝试使用Response.Results.Values.Item [0]时,会出现错误,提示该项不存在。 - kmria
1
我正在尝试找到一种方法,将传递到“ExecuteRequest”的数据链接到响应中返回的Guid。是否这样,Responses中的[0]元素对应于原始多个请求的[0]元素? - Don Cheadle
1个回答

6
创建的记录的 GUID 应该存储在 `ExecuteMultipleResponseItem` 中的 `OrganizationResponse` 中。尝试以下代码作为字符串获取 GUID:
string id = response.Response.Results["id"].ToString()

如果一切顺利,您应该也能够实例化 GUID(全局唯一标识符),如果需要的话。
Guid guid = new Guid(id);

太好了!您真是个天才先生。非常感谢@Henrik,在我把头撞在桌子上三个小时后,我终于能看到Guid了。全靠您了。 :) - kmria
“id”是Results属性返回的唯一值吗?还是它会返回用于创建记录的其他值?我希望有一种方法将每个响应与其特定请求关联起来 - 希望首先使用发送的请求中的值。 - Don Cheadle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接