如何使用 REST 在 SharePoint 2013 设计器中循环遍历多值人员字段或查找字段

How do I Loop through a multi-value People Field or Lookup field in SharePoint 2013 designer using REST

我有一个多值人员选择器和一个多值查找字段,我需要阅读 2013 工作流程中的所有条目。我知道如何创建一个工作流来检索数据并使用 REST 和字典遍历每个列表项。鉴于我正在遍历每个项目,我现在需要遍历每个多值字段。

过去,我使用循环迭代器和表示多值字段中数据的第二个字典条目来完成此操作,但我无法再访问此代码。我可以使用循环并使用 find 函数解析我的 responseContent,但这并不可靠,因为我的 reponseContent 中会有多条记录,而且我知道可以使用第二个字典条目来完成。

我的 REST 查询是:

_api/lists/GetByTitle('EmailSetup')/Items?$select=EmailYN,EmailSubject,EmailBody,EmailTo/EMail,Emailcc/EMail,EmailToWorkflowPerson/Title,EmailccWorkflowPersons/Title&$filter=(Title%20eq%20%27BSM%20Review%27)%20and%20(WorkflowName%20eq%20%27ProcessBSMRequests%27)&$expand=EmailTo,Emailcc,EmailToWorkflowPerson,EmailccWorkflowPersons

我的多值字段是 Emailcc 和 EmailccWorkflowPerson(分别是人员选择器和查找)。

我有我的第一个字典作为捕获 requestHeaders 的以下数据结构

Accept        String  application/json;odata=verbose
Content-Type  String  application/json;odata=verbose

在我的第一个循环中,我获得了所有属性,但不确定如何获得多值字段 Emailcc 和 EmailccWorkflowPersons。

是的,我可以解析我的响应,但是有更好的方法可以以某种方式将这些多值字段放入一个结构中,然后循环遍历这些字段。

我需要的是什么是结构(字典)以及如何将数据放入该结构,然后如何循环遍历该结构。

最终结果应该是这样的(伪代码),其中 Index 是我所在的记录,Index2 是我所在的多值。

d/results([%Varaible: Index%])/Emailcc/Email[%Variable: Index2%])xxx

经过大量调试,我得到了一半的答案,也许有人可以帮助我解决另一半问题。数据通过 REST 返回时的数据结构如下所示(对我们自己的数据进行一些屏蔽):

responseContent={"d":{"results":[{
"__metadata":{"id":"Web\/Lists(guid'c7bb71c8-a9dd-495f-aa5f-4dcacdf8db5c')\/Items(1)","uri":"https:\/\/xxxxx.xxxxxx.xxxxxxxxx.xxx\/hc\/teams\/MES\/_api\/Web\/Lists(guid'c7bb71c8-a9dd-495f-aa5f-4dcacdf8db5c')\/Items(1)","etag":"\"13\"","type":"SP.Data.EmailSetupListItem"},
"EmailTo":{"__metadata":{"id":"b493bee4-ec1a-4b76-a028-11766bdb7e5b","type":"SP.Data.UserInfoItem"},"EMail":"xyxee.dyff@homeward.com"},
"EmailToWorkflowPerson":{"__deferred":{"uri":"https:\/ \/xxxxx.xxxxxx.xxxxxxxxx.xxx\/hc\/teams\/MES\/_api\/Web\/Lists(guid'c7bb71c8-a9dd-495f-aa5f-4dcacdf8db5c')\/Items(1)\/EmailToWorkflowPerson"}},
"Emailcc":{"results":[{"__metadata":{"id":"790a690a-515b-4d07-bba3-73bf325fbbed","type":"SP.Data.UserInfoIt em"},"EMail":"xyxee.dyffns1@homeward.com"},{"__metadata":{"id":"3d77e75c-5fa8-4df6-937c-97e572714843","type":"SP.Data.UserInfoItem"},"EMail":"xyxee.dyffr@homeward.com"}]},
"EmailccWorkflowPersons":{"results":[{"__metadata":{"id":"06582ed9-09 10-4932-9b43-0cfb072942c7","type":"SP.Data.WorkflowPersonsListItem"},"Title":"Assistant Administrator"},{"__metadata":{"id":"13d03566-1703-4550-a21f-08ea286d4940","type":"SP.Data.WorkflowPersonsListItem"},"Title":"Initiator"}]},
"EmailYN":"No",
"EmailSubject":"BSM Request # %%ID%%",
"EmailBody":"<div class=\"ExternalClass645790473F7D4B62BE6224DD7B93990F\">%%IDLINK%%<br><\/div><div class=\"ExternalClass645790473F7D4B62BE6224DD7B93990F\">and the BSM#&#160;%%ID%%<br><\/div><div class=\"ExternalClass64 5790473F7D4B62BE6224DD7B93990F\"><br><\/div>"
}]}}

我创建了另一个字典变量 EmailResults 作为第一个存储多值 emailcc 地址的变量。

然后如下Get:

Get d/results([%variable: Index%)/Emailcc/results from Variable:responseContent (Output to Variable: EmailccResults)

为了获取记录数,我使用 EmailccResults 中的 Count Items

我将我的第二个索引设置为从零开始并根据 EmailccResults 中的计数循环遍历数字。 设置我的中间电子邮件地址(一次从多值人物选择器中获取一个值)。

Get d/results([%variable: Index%)/Emailcc/results(%Variable: Index2%)/EMail from Variable: responseContent (Output to Variable: EmailCc)

然后我递增 Index2 变量并转到下一条记录。这非常有效。

现在我的问题是我有一个包含在此查询中的多值查找(请参阅上面的结果)。我尝试了相同的逻辑,并且成功地获得了计数,但不是 Title 字段。 我得到的是:

从Variable:responseContent获取d/results([%variable: Index%)/EmailccWorkflowPersons/results(输出到变量:EmailccResults)

我的实际作业是:

Get d/results([%variable: Index%)/EmailccWorkflowPersons/results(%Variable: Index2%)/Title from Variable: responseContent (Output to Variable: tmpvar)

** Lookup 的工作方式完全相同。我的问题是我的上面的文本框中有一些空行。