处理工作队列
工作队列处理是指管理需要按特定顺序完成的工作项列表。 此列表包含有关每个项的信息,例如其名称、优先级、过期日期、状态和要处理的实际值。
处理工作队列的方法:
使用 Dataverse 专业开发人员功能(仅适用于高级集成方案):
详细了解 Dataverse 的专业代码工具:Dataverse 开发人员文档。
处理演练
为了展示一些可用的处理选项,这里提供了三种不同的处理方案。
Power Automate Desktop (PAD) 中基于桌面流的工作队列处理
流程工作队列项以及更新示例
在 Power Automate Desktop 中使用工作队列操作的第一步是在您的工作环境中创建一个工作队列,并加载一些包含要在下游使用的数据的队列项。 队列项可以通过桌面流、云端流或批量形式加载到工作队列中,如此处所述有关填充队列项的内容。 在此示例中,某些队列项已手动添加到工作队列中,用于说明如何使用 Power Automate Desktop 中的操作。
工作队列项已创建,值字段包括 JSON 格式的文本,文本将在桌面流中的下游使用。
我们将用于演示工作队列操作使用情况的示例流模拟一个流程,该流程将使用来自云的工作队列项,处理值字段中包括的数据,并将数据转换为自定义对象以便在下游处理。 请注意,使用 JSON 或自定义对象作为工作队列项的值并非必需,但要整理具有多个属性并且遵循特定架构的值,这是一种很有用的方法。
处理工作队列项操作用于指定在桌面流中可以使用哪个工作队列中的项,以及可处理哪个工作队列。 此操作可以配置为使用向下箭头从列表中选择工作队列,并传递包括队列名称的变量。 运行时,此操作将工作队列中的第一个(最早)项转移到包含已排队状态的流中。 队列项开始在流中处理后,其状态将自动更改为正在处理。
通过在流中操作 3 旁边单击,设置一个断点(红点),然后通过 PAD 控制台运行。 当流程在断点处暂停时,WorkQueueItem 变量可以通过双击流变量下已填充的值来打开,这样将显示与正在处理的工作队列项相关的所有属性。
在流的操作 2 中,我转换了返回的 JSON 值,在这种情况下,该值通过 %WorkQueueItem.Value% 访问并转换为一个自定义对象。 这样做的原因是,有助于分析 JSON 并在流中的下游使用 JSON 属性。 在此假设案例中,相关信息将用来输入 Farbrikam 的财务门户。
{ "InvoiceId": "I-1006", "InvoiceDate": "06/04/2023", "AccountName": "Fabrikam", "ContactEmail": "invoicing@fabrikam.com", "Amount": 1253.78, "Status": "Paid", "WorkQueueKey": "Vendor Invoices", "ComponentState": 0, "OverwriteTime": "1900-01-01T00:00:00" }
例如,假设作为流程的一部分要求将发票 ID 输入到财务系统的字段中,您要在流程中自动执行 Web 或桌面流的 UI - 您可以使用 %JsonAsCustomObject.InvoiceId% 调用该值,以填充文本字段和按下按钮。
接下来,此示例在完成步骤处理后包含一些条件语句,并在 Fabrikam 数据输入子流中使用自定义对象中的数据。 如果流程以端到端形式运行且未遇到任何与输入系统相关的异常,则将使用更新工作队列项操作,来将工作队列项的状态更改为已处理,并且可以使用处理结果字段输入一些可选注释。 如果到期时间字段保留为空,则新队列项将保留工作队列属性中定义的项目过期时间值。
异常处理选项可以通过以下方式进行配置:在更新工作队列项操作配置窗口中单击出错时。 “高级”选项卡下有三个用于进行自定义的选项。如果手动或通过其他系统流程,在工作队列项在 PAD 中完成处理之前,将工作队列项从队列中删除,可能会出现找不到工作队列项错误。 如果自动化流程或某人在流门户中将正在处理的工作队列项的状态更改为暂停,而队列项正在处理中,可能会出现工作队列项已暂停错误。 如果队列项不再存在于队列中,或者已置于暂停状态,可能会出现无法更新工作队列项错误。 上述为可能会出现的极端案例 - 从此处详细了解如何在桌面流中处理错误。
如果在将工作队列项的数据处理到数据输入系统的过程中确定了某个问题,可能会为工作队列项分配一般异常、IT 异常或业务异常状态。 如果您的自动化应用场景满足可能适用的条件,可以使用这些异常状态。
假设处理队列项时,满足场景 2 的条件。 在这种情况下,队列项在原始队列中标记为一般异常。 根据具体场景,您可以决定将无法成功处理的队列项的状态更改为备用状态选项之一。 然后,您可以确定是否需要人工干预,或者使用管理每个异常状态所需的逻辑构建后续过程。
自动重试模式
Power Automate 桌面中的处理工作队列项目操作包括一个高级选项,用于配置或覆盖自动重试机制。 该功能允许您指定每个工作队列项的最大自动重试计数,这可用于处理瞬间网络错误或临时系统不可用等 IT 异常。 它使计算机能够保留项目并执行受控重试,而无需对项目重新排队,从而确保更高效、更灵活的工作队列处理。
您可以在 Dataverse 中设置并集中控制工作队列记录的最大重试次数。 此默认值适用于通过处理工作队列项目操作处理此工作队列的所有桌面流。
要覆盖流程中的队列级别默认值,请导航至处理工作队列项目操作的高级部分,并切换覆盖工作队列自动重试配置选项。 此设置允许您将最大重试次数调整到更高或更低的值,甚至通过将最大重试次数设置为 0 来禁用重试机制。
当您在状态设置为 IT exception
且最大自动重试计数大于 0 的情况下使用更新工作队列项目操作时,系统不会立即将更新发送到工作队列编排程序。 相反,它将重试操作,直到它到达指定的最大重试计数。 工作队列项中唯一更新的值是 retrycount
。 此值从第二次更新尝试开始增加,直到达到最大自动重试计数。 此外,名为 CurrentRetryCount
的本地工作队列项变量随着每次重试而递增。 此变量允许您根据需要基于其值实现自定义逻辑。
如果满足以下条件,当流程返回到处理工作队列项目操作的顶部时,不会请求新项目:
- 未达到最大重试次数。
- 除了 IT 例外,不会发生其他更新。
当达到最大重试次数时,更新操作会将更新发送到编排程序,将项目的状态更改为 IT 例外,并包括任何提供的处理注释。
从 PAD 中添加和排队工作队列项示例
添加工作队列项目使桌面流用户能够将工作队列项目填充到工作队列中,该工作队列已在流门户中设置。 使用添加工作队列项目操作支持批处理项目创建。
在此示例中,.csv 格式的 Excel 文件每天都将置入一个目录中,每一行都需要添加到一个工作队列中。
此示例流程中的前几个操作映射一个文件夹,每天的 Contoso Invoices.csv 文件将放入其中 - 流程运行时,将首先从 CSV 文件中读取数据表。 CSVTable 变量包含已导入且将处理至新队列项的数据。
操作 3 和操作 4 生成相应时间,在将新的队列项添加到工作队列后,我们选择在该时间使队列项过期。 操作 3 捕获当前系统数据和时间,然后使用 %添加到日期/时间% 操作将时间(对于此示例,为 7 天)添加到工作队列中。 输出存储到一个名为 ExpiryDatetime 的变量中,添加工作队列项操作中将使用该变量。
操作 5 引入了 For each 循环,用于迭代访问所导入的 CSVTable 中的每行数据 - 此操作呈现正在处理的当前项的数据行。
此示例桌面流中的所有先前操作将合并,用于为添加工作队列项操作设置值。
工作队列参数设置为我们要向其中添加新工作队列项的队列 - 在此例中,通过从下拉菜单中进行选择的方式选择了演示 PAD 队列。
优先级参数保留为默认值正常,但低和高也是可选的。 混合进入同一工作队列时,优先级更高的工作队列项将先处理,然后处理正常优先级和低优先级。
设置了名称参数以及静态前缀和变量值 CurrentItem['ID'] - 包含正在处理的数据行的 ID 单元格中的值。 这是可选参数,但根据您的应用场景,可能会很有用。
使用变量 CurrentItem 的数据行中的值时,输入参数将以 JSON 格式进行输入。 注意每个标头名称使用表示法 ['标头的名称'] 追加到了 currentitem 变量末尾
到期时间字段填充了日期/时间变量,我们在前面的步骤中添加了“7 天”。 保留为空时,要添加的工作队列项将包含为工作队列设置的项目到期时间值。
处理注释为可选项 - 认为必要的情况下使用
运行流程时,导入的 CSV 中每个数据行都会创建一个工作队列项,其中包含已排队状态,意味着可供进行处理。
这些只是可以在 PAD 中使用工作队列操作的众多方法的一些。 花一些时间探索和寻找可将工作队列合并到您的 Power Automate 流中的创意用法。
具有延迟的重新排队项目示例
具有延迟的重新排队项目操作使桌面流用户能够重新排队项目并设置一个延迟时间段,在该时间段内可以再次释放项目进行处理。
在本例中,有一个工作队列加载了一些项目,这些项目将在 24 小时后到期,但它们无法及时得到处理,因为 IT 部门正在执行一些日常系统维护,这些项目需要重新排队。 维护将在一夜之间完成,因此我们将每个队列项目延迟 24 小时,然后将它们设置为在发布期后 24 小时到期。
该示例流程的前三个操作是日期时间操作。 “获取当前日期和时间”操作捕获操作运行时的系统日期时间。 接下来,我们使用“添加到日期时间”操作来满足两个需求,首先,我们需要通过将 24 小时添加到当前日期时间来定义延迟时间,然后我们需要将 48 小时添加到当前日期时间作为到期时间。
接下来,在该示例中,“处理工作队列项目”操作被配置为指向加载的工作队列,并且“具有延迟的重新排队项目”被放置在循环中。
现在,可以将为延迟和到期生成的值传递到“具有延迟的重新排队项目”操作中。 “工作队列项”字段由循环产生的变量填充 - 这指示哪个队列项要重新排队。 接下来,我们插入使用日期时间操作为“延迟到”和“过期”字段创建的值。 “延迟到”是必填字段,但是您可以根据自己的判断使用“过期”和“处理结果”。
通过此简单的流程,您可以将队列中所有可用的项目重新排队,将它们延迟一段时间,还可以设置过期日期和处理结果。
云端流和基于连接器的处理
取消排队工作队列项并处理它的最简单方法如下所示:
转到 Power Automate 并使用您的凭据登录。
在左侧菜单中选择我的流。
在工具栏上,选择 + 新建流,然后选择即时云端流。
提供流名称,例如我的第一个工作队列流,然后选择手动触发流。
选择创建。
流设计器打开后,选择 + 新建步骤,然后选择 Microsoft Dataverse 连接器。
在操作列表中,选择执行绑定操作。
参数 | 价值 | 说明 |
---|---|---|
表名 | 工作队列 | 工作队列表的名称。 |
操作名称 | 取消排队 | 从队列中获取下一个可用项的操作。 |
行 ID | [工作队列 ID] | 要取消排队的队列的工作队列 ID (GUID)。 您可以通过导航到队列的“工作队列详细信息”页面并打开高级详细信息面板来获得此值。 |
备注
绑定操作是在特定表(在我们的示例中为工作队列)上定义并且只能对该表的记录执行的 Dataverse 操作。 平台使用绑定操作对特定记录执行自定义业务逻辑或操作。
- 您的流现在应该与此类似。
选择保存,然后测试您的流。
在测试侧窗格中,选择手动、测试、运行流和已完成。
如果成功运行了流,您应该获得类似的结果(但具有不同的 ID)。
- 接下来,从正文字段复制整个 JSON 内容,然后选择流右上角的编辑。
小费
取消排队工作队列项后,使用该项的 JSON 内容作为解析该项的 JSON 属性的架构示例。 这使您可以轻松访问工作队列业务流程协调程序在后续流操作中返回的项的任何属性。
- 选择 + 新建步骤,搜索称为分析 JSON 的操作并选择该操作,可以添加新步骤。
- 将鼠标放在内容字段中,然后选择上一操作的 body 属性。
接下来,选择从示例生成,然后将之前复制的 JSON 字符串粘贴到对话框中,然后选择完成。
选择 + 新建步骤,然后选择 Microsoft Dataverse 连接器。
从操作列表中选择更新行。
在表名称字段中,选择工作队列项表,将光标放在行 ID 字段中。
在动态内容列表中,现在您将具有工作队列项表中可用的所有字段。
选择显示高级选项,然后将 RowID、处理结果、状态和状态描述字段设置为以下值。
字段 | 价值 | Details |
---|---|---|
行 ID | workqueueitemid | 可以在动态内容列表对话框中选择该值。 |
处理结果 | 该项已成功处理。 | |
执行状态 | 已处理 | |
状态描述 | 已处理 |
选择保存,然后再次测试流。
如果成功运行了流,您应该获得与以下类似的结果。
现在,导航到工作队列详细信息页面,并在工作队列项列表部分选择查看全部。
筛选状态字段,仅显示正在处理 和已处理的项,以确认取消排队和更新操作是否按预期方式运行。
恭喜,您刚才完成了第一个工作队列处理方案!
支持桌面流的基于云端流的处理
对于此方案,我们通过也添加桌面流处理步骤来扩展前一个方案。
返回并编辑我的第一个工作队列流。
直接在解析 JSON 操作后添加新操作,并搜索桌面流连接器和运行使用 Power Automate 桌面版构建的流。
在桌面流下拉列表中,选择并编辑现有桌面流或选择 + 创建新桌面流,然后按照屏幕上的说明创建桌面流并启动 Power Automate 桌面版。 如果您不熟悉桌面流,可以在此处了解更多信息。
打开 Power Automate 桌面版设计器后,创建两个名为 WorkQueueItemValue 和 WorkQueueItemName 的输入变量,然后添加两个名称分别为 ProcessingNotes 和 ProcessingStatus 的输出变量,它们的数据类型都应该是文本。
为 WorkQueueItem 变量提供默认值,以便以后在本地测试脚本。 如果您已按照批量导入教程操作,则供应商发票队列中应包含其值为 JSON 格式的工作队列项。 下面是使用的一个值的示例。
{ "InvoiceId": "I-1006", "InvoiceDate": "06/04/2023", "AccountName": "Fabrikam", "ContactEmail": "invoicing@fabrikam.com", "Amount": 1253.78, "Status": "Paid", "WorkQueueKey": "Vendor Invoices", "ComponentState": 0, "OverwriteTime": "1900-01-01T00:00:00" }
现在,保存该流。
在操作面板中,打开变量操作组,然后双击将 JSON 转换为自定义对象操作,以将其添加到设计区域,设计区域会打开其属性窗口。
在 JSON 字段中选择变量图标,然后选择 WorkQueueItemValue 变量。
将生成的输出变量从 JsonAsCustomObject 重命名为 VendorInvoice 并选择保存。
接下来,从条件组中添加 If 操作,并按如下方式配置其属性:
First operand Operator Second operand %VendorInvoice['Amount']% 小于 (<) 5000 选择保存。
添加条件组中称为 Else 的另一个操作,并将其添加到 If 和 End 操作之间。
现在,添加变量组中称为设置变量的另外两个操作,将它们添加到 If 和 Else 操作之间,并且将 ProcessingNotes 和 ProcessingStatus 变量设置为以下值:
变量 价值 %ProcessingNotes% 发票已被处理 %ProcessingStatus% 已处理 复制这两个设置变量操作,将它们粘贴到 Else 和 End 操作之间,然后更改其值以匹配这些操作:
变量 价值 %ProcessingNotes% 业务异常:发票金额大于 $5000,这需要经理批准。 %ProcessingStatus% 例外 您的流现在应该与此类似。
保存此流并运行它以确认流逻辑按预期工作。
返回去编辑我的第一个工作队列流。
从列表中选择新创建(或编辑)的桌面流,然后选择已参与作为其运行模式。
填写工作队列项值和工作队列项名称参数,如下所示:
在更新行操作前添加条件操作。
将鼠标放到选择值字段中,然后从动态内容列表对话框中选择处理状态。
将鼠标放在另一个选择值字段中,然后输入已处理作为文本值。
将更新行操作拖放到条件操作的如果是部分中。
打开更新行操作详细信息并替换值,以匹配以下内容:
在红色的如果没有框中,添加另一个更新行操作,并选择工作队列项作为表名。
接下来,选择 workqueueitemid 作为行 ID,并打开显示高级选项部分,选择处理注释作为处理结果值。
选择错误作为状态,并选择 GenericException 作为状态描述。
选择保存和测试以测试总体自动化,并观察桌面流操作中的输出。
若要确认已处理工作队列项,您可以转到工作队列详细信息页,选择工作队列项部分中的查看全部,然后按已处理状态筛选这些项。
干得好,您刚才完成了一个更高级的方案,其中包括混合工作队列处理!