使用 SharePoint Designer 循环在另一个列表中的字段更新时更新列表中的字段
Using SharePoint Designer Loops to Update a field in a list when the field in another list is updated
我已经尝试过几次,但只能更新一条记录。希望有人可以阐明我做错了什么,假设这是可能的。
我有一个员工列表(列表 A),在该列表中我有一个字段要在他们离开时进行标记。
第二个列表(列表 B)是一个活动列表。我需要能够过滤此列表以排除所有离开或不再活跃的人。我在这个列表中添加了一个等效的 Yes/No 字段。
我想做的是在列表 A 中该字段已更改的员工的每条记录中更新列表 B 中的非活动字段。
My Lists before and after look like this
My Basic Workflow Loop looks like this
列表 A = 当前列表
列表 B = 休假请求
如果有人能帮助我解决这个问题,我可以分解上面的所有选择。
谢谢
这可以通过结合使用 REST API 和工作流来完成。作为 Sharepoint 的完全新手,我花了一段时间才弄清楚,但希望这个循序渐进的工作流示例能对其他人有所帮助。
首先,我主要使用这两个博客来提出我的解决方案:
Wonder Laura - Loop through multiple Sharepoint items
Kemanth Kumar - Loop Through SharePoint Custom List Items
最终工作流程
第 1 步:在 Sharepoint 中创建您的两个列表。在我的例子中,列表 A 称为 StaffList,它是所有员工的列表,列表 B 称为 LeaveRequests。
查看日志:
您会注意到我在整个脚本中都写入了日志历史记录。要查看这些日志,请转到列表 A 页面,单击您将要更换的员工,工作流图标会在顶部的功能区中亮起。单击它,您所有具有 运行 或 运行 正在为该特定员工工作的工作流程将被列出。
API 结果
我们将呼叫 API,但有时看不到 API return 会很烦人。请参阅此 post 的结尾,了解如何查看 API 结果轻松查看电子邮件。
第 2 步: 打开 Sharepoint 设计器,单击左侧面板中的 "Workflows","List Workflow" 应该会在顶部功能区中弹出。单击您创建的 "List Workflow" 和 select 列表 A (StaffList)。这将是将由用户手动更新的列表,并将 运行 工作流。在弹出的框中键入名称和描述,平台类型需要是 Sharepoint 2013 Workflow。
您需要使此工作流程 运行 自动进行,因此保存工作流程,然后单击顶部功能区中的工作流程设置,然后在启动选项下,select 工作流程在项目出现时自动启动已更改。
步骤 3: 使用网络服务器时间显示开始时间。
从功能区创建一个舞台并将其命名为开始时间。
在“操作”功能区中单击“设置工作流变量”。单击工作流变量并创建一个名为 StartUrl 的新字符串变量。在字符串生成器中将值设置为您的 Sharepoint 或网站地址。
Select 从操作功能区创建词典。单击“此”,将弹出一个框。在其中创建两个项目,一个名为“Accept”,另一个名为“Content-Type”,两者都类型为字符串,值将为 application/json;odata=verbose。然后输出到一个名为 requestHeaders.
的新字典变量
现在您将从操作功能区调用 HTTP Web 服务。单击“this”并在 URL 框中输入第一个变量。不要输入变量,因为它不起作用通过单击添加或更改查找来执行查找。将弹出一个框,select Workflow Variables and Parameters from the Date source 和变量 StartUrl from Field from Source。使用方法 GET 单击确定。将响应内容设置为名为 responseContent 的字典变量,将 response headers 设置为名为 responseHeaders 的字典变量,并将响应状态代码设置为字符串变量 responseCode。然后通过单击右下拉箭头并单击属性来编辑调用属性。会弹出一个框,将requestheaders设置为变量requestHeaders.
现在您需要使用操作功能区中的“从词典中获取项目”来获取呼叫的响应。项目路径应设置为 Date/(0),字典应为 responseHeaders(通常为 responseContent,但服务器的日期位于 Headers 中)。输出到名为 StartDate 的字符串变量。有关这方面的更多详细信息,请转到这个有用的 link。请注意,这是在 GMT 时间完成的。如果有人对将其转换为更具可读性的日期格式有任何想法,请告诉我。
现在您可以记录开始日期。 Select 从操作功能区登录到历史记录并单击消息并键入已启动:现在您必须输入变量。不要输入变量,因为它不起作用通过单击添加或更改查找来执行查找。将弹出一个框,select 来自日期源的工作流变量和参数以及来自源的字段的变量开始日期。
步骤 4: 创建一个阶段,该阶段将从 LeaveRequests 列表(列表 B)中获取需要更新的记录列表。通过在 Start Time Stage 的 Transition to stage 区域中插入“go to stage”操作,将 Start Time 阶段指向这个新阶段。
我已将用户用作两个列表之间的公共字段。目的是使用是或否更新名为 StaffListInactive 的列。这些值实际上取自列表 A 中的一个字段。
让我们从获取 ID o 开始正在更改的列表 A 中的工作人员。设置一个名为 StaffListID 的 Integer 类型的工作流变量。使用当前列表的数据源查找值,在我的例子中来自源的字段将是员工姓名和 return 字段作为用户 ID(作为整数)。字段将是员工姓名,值将是当前项目、员工姓名和 returned 作为用户 ID 号的查找。
现在设置另一个工作流变量类型字符串,它将是一个名为 RestUrl 的 REST API。这个 url 中发生了很多神奇的事情,包括获取列表 GUID,select 从您想要 return 的列表中输入字段,仅过滤我们需要的结果并增加结果的数量是 returned。 Sharepoint 的默认值为 100 条记录。
用于从列表中获取项目的 url 格式对于您的 BASE sharepoint 站点如下:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid‘哟urlistguid’)/物品
对于 link 附加 queries/filters:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid'yourlistguid')/Items?$select=ColumnName,Column2Name&$filter=ColumnName eq 'content'&$top=9999
要获取 GUID,在 Sharepoint 设计器 2013 中,单击左侧面板中的“列表和库”,select 列表 B (LeaveRequests)。然后您将看到列表 ID。将其插入“和”之间的 GUID 区域。
如果您的列名有 space,您需要插入 x0020 代替 space。所以我的看起来像这样 Employee_x0020_Name。另外要注意的一点是,为了获取员工 ID,您需要在列名末尾包含该 ID:Employee_x0020_NameId。要过滤此列需要 Employee_x0020_Name/Id.
所以最后我的 url 看起来像这样:
http://****.sharepoint.com/_api/web/lists/getbyid(guid'************************')/项目?$select=ID,StaffListInactive, Employee_x0020_NameId &$filter= Employee_x0020_Name/Id eq '[%Variable: StaffListID%]'&$top=9999
记得在插入变量时进行查找。
现在您需要像上面第 3 步那样构建一个字典。您可以复制操作,然后重新分配新变量(尽管对于此工作流来说不是必需的)。您需要更改的唯一变量是上面创建的对 RestUrl 的 Web 服务调用中的 URL 变量。如果您跨构建字典操作进行复制,则需要再次向其中添加接受和 Content-Type 项。
对于“从字典中获取项目”操作,您的路径将为 d/results,您的字典现在将为 responseContent,并将其输出到名为 List 的字典变量。
第 5 步: 现在我们计算从 API 和 运行 中提取的结果数,循环将更新每条记录。
创建另一个 Stage Cclled Update Inactive Status。
添加“计算字典中的项目”操作并将字典设置为列表变量并输出一个名为 ItemCount 的新整数变量。
设置一个名为 index 的整数变量,值为 0。
从循环功能区插入一个带有条件的循环。更新值,使它们读取的变量索引小于变量 ItemCount。
在循环中,您可以记录哪个循环是 运行ning,方法是添加一个 Log 操作并将其命名为 Loop Number: Variable Index。
现在不需要包括下一部分,但我觉得进行此检查以查看正在更新的用户实际上是您要更新的用户是很好的。 IE,我们比较两个列表中用户的ID。
添加路径为 d/results([%Variable:index%])/Employee_x0020_NameId 的“从字典中获取项目”操作。请记住对变量进行查找。字典将是 responseContent,我们将调用 EmployeeID 类型整数的输出变量。
现在我们从条件功能区添加“如果任何值等于值”并将第一个值设置为以下值:数据源是当前列表,来自源的字段是员工姓名,字段是员工姓名,值是查找数据源是当前项目,来自源的字段是员工姓名和 return 用户 ID 号。
对于 If 语句中的第二个值 select 从列表中查找用户的工作流,然后单击添加,当弹出框时,数据源将是工作流变量和参数,源中的字段将是变量EmployeeID.
现在我们需要通过从列表 A (StaffList) 获取值并将其设置在列表 B (LeaveRequests) 中来更新记录。
从操作功能区添加“更新列表项”,然后单击此列表并从列表下拉列表中选择列表 B(休假请求)。单击添加按钮和“设置此字段”到您要更改的列(我的是 StaffListInactive),然后单击查找“To this value”。当箱子更新日期源是当前列表,来自源的字段是非活动的(这是您要从列表 A 更新的字段),字段是非活动的,值是对当前项目和非活动的查找。
完成后,您需要更新“更新列表项”中的字段和值window。将字段设置为 ID,值是工作流变量和 EmployeeID 的查找。
记录已更新的记录。
现在我们需要将索引变量加1并设置它。这位于 if 语句之外,但仍在循环内。
添加“执行计算”动作并将其设置为变量索引加 1。将其输出到数字变量 IndexPlusOne。
现在将变量索引设置为变量 IndexPlusOne。
第 6 步:记录完成时间。
这与开始时间阶段相同。因此,复制开始时间阶段并将其粘贴到工作流程的底部,并记住确保所有阶段都已 linked。根据需要更新详细信息。
总而言之,当您更新列表 A 的详细信息时,列表 B 现在将根据已更改的工作人员更新 selected 字段以匹配列表 A 中的 selected 字段.
API 结果续...
这对很多人来说可能是老生常谈,但对错误测试非常有用。
在您的任何 Web 服务调用之后添加发送到电子邮件操作。 Select 在收件人字段中输入您的电子邮件并为其指定主题。在电子邮件的 body 中添加 responseHeaders 和 responseContent 变量。每次您的工作流程 运行 秒,您都会收到电子邮件。电子邮件的发送速度比工作流日志中的记录更新速度快,因此我可以更快地进行故障排除。
我已经尝试过几次,但只能更新一条记录。希望有人可以阐明我做错了什么,假设这是可能的。
我有一个员工列表(列表 A),在该列表中我有一个字段要在他们离开时进行标记。
第二个列表(列表 B)是一个活动列表。我需要能够过滤此列表以排除所有离开或不再活跃的人。我在这个列表中添加了一个等效的 Yes/No 字段。
我想做的是在列表 A 中该字段已更改的员工的每条记录中更新列表 B 中的非活动字段。
My Lists before and after look like this
My Basic Workflow Loop looks like this
列表 A = 当前列表
列表 B = 休假请求
如果有人能帮助我解决这个问题,我可以分解上面的所有选择。
谢谢
这可以通过结合使用 REST API 和工作流来完成。作为 Sharepoint 的完全新手,我花了一段时间才弄清楚,但希望这个循序渐进的工作流示例能对其他人有所帮助。
首先,我主要使用这两个博客来提出我的解决方案:
Wonder Laura - Loop through multiple Sharepoint items
Kemanth Kumar - Loop Through SharePoint Custom List Items
最终工作流程
第 1 步:在 Sharepoint 中创建您的两个列表。在我的例子中,列表 A 称为 StaffList,它是所有员工的列表,列表 B 称为 LeaveRequests。
查看日志:
您会注意到我在整个脚本中都写入了日志历史记录。要查看这些日志,请转到列表 A 页面,单击您将要更换的员工,工作流图标会在顶部的功能区中亮起。单击它,您所有具有 运行 或 运行 正在为该特定员工工作的工作流程将被列出。
API 结果
我们将呼叫 API,但有时看不到 API return 会很烦人。请参阅此 post 的结尾,了解如何查看 API 结果轻松查看电子邮件。
第 2 步: 打开 Sharepoint 设计器,单击左侧面板中的 "Workflows","List Workflow" 应该会在顶部功能区中弹出。单击您创建的 "List Workflow" 和 select 列表 A (StaffList)。这将是将由用户手动更新的列表,并将 运行 工作流。在弹出的框中键入名称和描述,平台类型需要是 Sharepoint 2013 Workflow。
您需要使此工作流程 运行 自动进行,因此保存工作流程,然后单击顶部功能区中的工作流程设置,然后在启动选项下,select 工作流程在项目出现时自动启动已更改。
步骤 3: 使用网络服务器时间显示开始时间。
从功能区创建一个舞台并将其命名为开始时间。
在“操作”功能区中单击“设置工作流变量”。单击工作流变量并创建一个名为 StartUrl 的新字符串变量。在字符串生成器中将值设置为您的 Sharepoint 或网站地址。
Select 从操作功能区创建词典。单击“此”,将弹出一个框。在其中创建两个项目,一个名为“Accept”,另一个名为“Content-Type”,两者都类型为字符串,值将为 application/json;odata=verbose。然后输出到一个名为 requestHeaders.
的新字典变量现在您将从操作功能区调用 HTTP Web 服务。单击“this”并在 URL 框中输入第一个变量。不要输入变量,因为它不起作用通过单击添加或更改查找来执行查找。将弹出一个框,select Workflow Variables and Parameters from the Date source 和变量 StartUrl from Field from Source。使用方法 GET 单击确定。将响应内容设置为名为 responseContent 的字典变量,将 response headers 设置为名为 responseHeaders 的字典变量,并将响应状态代码设置为字符串变量 responseCode。然后通过单击右下拉箭头并单击属性来编辑调用属性。会弹出一个框,将requestheaders设置为变量requestHeaders.
现在您需要使用操作功能区中的“从词典中获取项目”来获取呼叫的响应。项目路径应设置为 Date/(0),字典应为 responseHeaders(通常为 responseContent,但服务器的日期位于 Headers 中)。输出到名为 StartDate 的字符串变量。有关这方面的更多详细信息,请转到这个有用的 link。请注意,这是在 GMT 时间完成的。如果有人对将其转换为更具可读性的日期格式有任何想法,请告诉我。
现在您可以记录开始日期。 Select 从操作功能区登录到历史记录并单击消息并键入已启动:现在您必须输入变量。不要输入变量,因为它不起作用通过单击添加或更改查找来执行查找。将弹出一个框,select 来自日期源的工作流变量和参数以及来自源的字段的变量开始日期。
步骤 4: 创建一个阶段,该阶段将从 LeaveRequests 列表(列表 B)中获取需要更新的记录列表。通过在 Start Time Stage 的 Transition to stage 区域中插入“go to stage”操作,将 Start Time 阶段指向这个新阶段。
我已将用户用作两个列表之间的公共字段。目的是使用是或否更新名为 StaffListInactive 的列。这些值实际上取自列表 A 中的一个字段。
让我们从获取 ID o 开始正在更改的列表 A 中的工作人员。设置一个名为 StaffListID 的 Integer 类型的工作流变量。使用当前列表的数据源查找值,在我的例子中来自源的字段将是员工姓名和 return 字段作为用户 ID(作为整数)。字段将是员工姓名,值将是当前项目、员工姓名和 returned 作为用户 ID 号的查找。
现在设置另一个工作流变量类型字符串,它将是一个名为 RestUrl 的 REST API。这个 url 中发生了很多神奇的事情,包括获取列表 GUID,select 从您想要 return 的列表中输入字段,仅过滤我们需要的结果并增加结果的数量是 returned。 Sharepoint 的默认值为 100 条记录。
用于从列表中获取项目的 url 格式对于您的 BASE sharepoint 站点如下:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid‘哟urlistguid’)/物品
对于 link 附加 queries/filters:
http://yoursharepointid.sharepoint.com/_api/web/lists/getbyid(guid'yourlistguid')/Items?$select=ColumnName,Column2Name&$filter=ColumnName eq 'content'&$top=9999
要获取 GUID,在 Sharepoint 设计器 2013 中,单击左侧面板中的“列表和库”,select 列表 B (LeaveRequests)。然后您将看到列表 ID。将其插入“和”之间的 GUID 区域。
如果您的列名有 space,您需要插入 x0020 代替 space。所以我的看起来像这样 Employee_x0020_Name。另外要注意的一点是,为了获取员工 ID,您需要在列名末尾包含该 ID:Employee_x0020_NameId。要过滤此列需要 Employee_x0020_Name/Id.
所以最后我的 url 看起来像这样:
http://****.sharepoint.com/_api/web/lists/getbyid(guid'************************')/项目?$select=ID,StaffListInactive, Employee_x0020_NameId &$filter= Employee_x0020_Name/Id eq '[%Variable: StaffListID%]'&$top=9999
记得在插入变量时进行查找。
现在您需要像上面第 3 步那样构建一个字典。您可以复制操作,然后重新分配新变量(尽管对于此工作流来说不是必需的)。您需要更改的唯一变量是上面创建的对 RestUrl 的 Web 服务调用中的 URL 变量。如果您跨构建字典操作进行复制,则需要再次向其中添加接受和 Content-Type 项。
对于“从字典中获取项目”操作,您的路径将为 d/results,您的字典现在将为 responseContent,并将其输出到名为 List 的字典变量。
第 5 步: 现在我们计算从 API 和 运行 中提取的结果数,循环将更新每条记录。
创建另一个 Stage Cclled Update Inactive Status。
添加“计算字典中的项目”操作并将字典设置为列表变量并输出一个名为 ItemCount 的新整数变量。
设置一个名为 index 的整数变量,值为 0。
从循环功能区插入一个带有条件的循环。更新值,使它们读取的变量索引小于变量 ItemCount。
在循环中,您可以记录哪个循环是 运行ning,方法是添加一个 Log 操作并将其命名为 Loop Number: Variable Index。
现在不需要包括下一部分,但我觉得进行此检查以查看正在更新的用户实际上是您要更新的用户是很好的。 IE,我们比较两个列表中用户的ID。
添加路径为 d/results([%Variable:index%])/Employee_x0020_NameId 的“从字典中获取项目”操作。请记住对变量进行查找。字典将是 responseContent,我们将调用 EmployeeID 类型整数的输出变量。
现在我们从条件功能区添加“如果任何值等于值”并将第一个值设置为以下值:数据源是当前列表,来自源的字段是员工姓名,字段是员工姓名,值是查找数据源是当前项目,来自源的字段是员工姓名和 return 用户 ID 号。
对于 If 语句中的第二个值 select 从列表中查找用户的工作流,然后单击添加,当弹出框时,数据源将是工作流变量和参数,源中的字段将是变量EmployeeID.
现在我们需要通过从列表 A (StaffList) 获取值并将其设置在列表 B (LeaveRequests) 中来更新记录。
从操作功能区添加“更新列表项”,然后单击此列表并从列表下拉列表中选择列表 B(休假请求)。单击添加按钮和“设置此字段”到您要更改的列(我的是 StaffListInactive),然后单击查找“To this value”。当箱子更新日期源是当前列表,来自源的字段是非活动的(这是您要从列表 A 更新的字段),字段是非活动的,值是对当前项目和非活动的查找。
完成后,您需要更新“更新列表项”中的字段和值window。将字段设置为 ID,值是工作流变量和 EmployeeID 的查找。
记录已更新的记录。
现在我们需要将索引变量加1并设置它。这位于 if 语句之外,但仍在循环内。
添加“执行计算”动作并将其设置为变量索引加 1。将其输出到数字变量 IndexPlusOne。
现在将变量索引设置为变量 IndexPlusOne。
第 6 步:记录完成时间。
这与开始时间阶段相同。因此,复制开始时间阶段并将其粘贴到工作流程的底部,并记住确保所有阶段都已 linked。根据需要更新详细信息。
总而言之,当您更新列表 A 的详细信息时,列表 B 现在将根据已更改的工作人员更新 selected 字段以匹配列表 A 中的 selected 字段.
API 结果续...
这对很多人来说可能是老生常谈,但对错误测试非常有用。
在您的任何 Web 服务调用之后添加发送到电子邮件操作。 Select 在收件人字段中输入您的电子邮件并为其指定主题。在电子邮件的 body 中添加 responseHeaders 和 responseContent 变量。每次您的工作流程 运行 秒,您都会收到电子邮件。电子邮件的发送速度比工作流日志中的记录更新速度快,因此我可以更快地进行故障排除。