将字符串值转换为类型值

在调用流中,流程作者希望将中的字符串值转换为键入值的情况并不少见。 对于许多基本数据类型,Architect 支持将字符串值转换为另一种类型。

以下场景说明了流程作者在尝试转换字符串值 “5” 时可能遇到的问题,该值在运行时返回整数值 5。

ToInt("5")
注意: 虽然此过程适用于许多数据类型,包括布尔、整数、十进制、DateTime 和持续时间,但基于网络的数据类型不支持在调用流中将字符串转换为该类型。 基于网络的数据类型目前包括用户、队列、技能、组和总结代码。 .

在此示例中,流程必须将字符串转换为基于网络的数据类型。 流程想要将呼叫转接到队列,然后调用 Bridge 操作来检索队列的名称。 Bridge 操作以字符串形式返回队列名称。 “转移到 ACD” 操作将执行转移到队列。

如果流程作者试图直接在 “转移到 ACD” 操作上使用该字符串作为队列设置,则系统会返回错误。 “转移到 ACD” 操作要求系统为队列转移目的地提供队列值。 由于 Tto 函数将一种类型转换为另一种类型,因此流程作者可能会尝试使用 toQueue 函数使用 toQueue 函数将字符串转换为队列。 但是,由于 Architect 没有将字符串值转换为队列值的 toQueue 实现,因此无法在流程中将字符串转换为基于网络的数据类型:

转换字符串

在 Architect 中,使用并行数组将字符串值转换为另一种值类型。 由于此解决方案有效地设置了键 > 值映射,并且指定的值是无限的,因此它的工作原理超出了基于网络的值类型。

例如,流程包含一个名为 Task.queueNames 的字符串集合变量和一个名为 Task.Queeues 的队列集合变量。 两个系列中的物品数量相同。 您可以配置变量,以便在 Task.Queeues 中快速查找关联的队列,以查找在 Task.queuenNames 中找到的字符串值。

使用 “更新数据” 操作配置针对这些变量设置的集合:

任务 .queuenNames 任务。队列
“销售” Genesys 云销售队列
“市场营销” Genesys 云营销队列
Web 技术支持 Genesys Cloud 技术支持队列

接下来,构建一个表达式来执行查找,如果系统找不到为查找转换提供的字符串,则有一个回退默认队列。 首先,将 Task.defaultQueue 设置为该组织的 Genesys 云操作员队列。

现在,构建按名称查找队列并返回与该字符串关联的队列的表达式:

If(FindFirst(Task.QueueNames, Task.QueueNameStr)!=-1, Task.Queues[FindFirst(Task.QueueNames, Task.QueueNameStr)], Task.DefaultQueue)

现在,您可以将字符串值映射到呼叫流中的队列。 上面的表达式适用于具有少量项目的集合。 对于较大的集合,请将 findFirst 调用中的值保存到变量中,这样可以确保系统不会在同一表达式中执行两次调用。 如果将 findFirst 调用的值保存到 Task.foundIndex 整数变量中,请将上述表达式重写为:

If(Task.FoundIndex!=-1, Task.Queues[Task.FoundIndex], Task.DefaultQueue)

目前,Architect 不包含将字符串转换为基于网络的类型的内置函数。 Architect 不支持此功能的原因有很多:

  • 在调用流运行时,基于网络的数据类型(例如字符串中的队列)的解析目前需要从边缘到云的往返。 这种情况可能会产生大量的网络流量。
  • 断开连接时边缘可能会运行。 在这种情况下,无法通过调用云将字符串值的运行时解析为基于网络的值。
  • 在两个具有相同名称的基于网络的对象的极少数情况下,按名称查找变得不明确,因为系统可能会返回两个或更多具有相同名称的对象。

但是,您可以使用各种 “查找” 和 “获取” 操作来执行搜索和查找操作。 有关详细信息,请参阅 任务和状态编辑器操作