将字符串值转换为类型值
在调用流中,流程作者希望将中的字符串值转换为键入值的情况并不少见。 对于许多基本数据类型,Architect 支持将字符串值转换为另一种类型。
以下场景说明了流程作者在尝试转换字符串值 “5” 时可能遇到的问题,该值在运行时返回整数值 5。
ToInt("5")
在此示例中,流程必须将字符串转换为基于网络的数据类型。 流程想要将呼叫转接到队列,然后调用 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 不支持此功能的原因有很多:
- 在调用流运行时,基于网络的数据类型(例如字符串中的队列)的解析目前需要从边缘到云的往返。 这种情况可能会产生大量的网络流量。
- 断开连接时边缘可能会运行。 在这种情况下,无法通过调用云将字符串值的运行时解析为基于网络的值。
- 在两个具有相同名称的基于网络的对象的极少数情况下,按名称查找变得不明确,因为系统可能会返回两个或更多具有相同名称的对象。
但是,您可以使用各种 “查找” 和 “获取” 操作来执行搜索和查找操作。 有关详细信息,请参阅 任务和状态编辑器操作。