在博客中,我将尝试解释如何从技术上解决创建动态查询的常见问题,使用OData或SuccessFactors receiver Adapter获取数据时需要多次创建动态查询userId即"00000813"和"00001079"将根据输入的有效负载动态添加。
这里有两个userId值,大数据人工智能,但是如果传入的有效负载有数千个userId,我们需要动态获取它们,例如:
……
……
等等。
还有,我们必须考虑到我们不能构建一个巨大的查询(查询的大小取决于目标系统是否是Employee Central、S/4 Hana或任何第三方OData服务),因为
场景:
考虑到以上所有点,我们正在CPI中构建一个Iflow,淘客模板,它需要一个文件输入。这个文件有大约25K的大数据,是一个以"|"分隔的文件(在其他情况下,它可以是","分隔的,甚至是固定长度的)。文件的每一行都有多个字段,其中第10个字段是Employee Id,我们需要从SuccessFactors的EmpJob中提取相应的CostCenter(在实际场景中,它可以是Company、payscaleArea等多个其他字段,但这里我们只是为了方便而取CostCenter)。也,有可能在文件中一个员工id可能出现多次或同一个员工id可能重复,云服务器和普通服务器,因此我们只能获取唯一的id和相应的成本中心值。
输入-文件:
员工id列:
以下:
说明:
有一个主集成流调用使用"循环进程调用"的另一个本地子进程或本地集成流,即根据条件多次调用子流。同样在图像中,子流的名称是:"CallempJobDynamics"。
在主流中,我们从内容修饰符开始添加有效负载(而不是调用sftp并上载文件,以便于使用)。23K数据作为常量复制到有效载荷体中。
另外,我们定义了两个稍后使用的属性:
下一步,我们有一个groovy脚本,它从负载中创建一个具有唯一雇员Id的数组列表:
在这里,低价云服务器,我们首先基于'\n'拆分每一行,然后为每一行取tempdata[9],即雇员Id(在每一行中的位置是第10位),如果它们不为null或不存在,则将它们添加到arraylist:
之后,我们还有另一个脚本,它接受arraylist'empidarray',它作为一个属性存储在消息上下文中,并从中创建一个动态查询。还要记住,查询应该有一个固定的大小(前面讨论的原因),我们决定对于每个获取的查询,不应该有超过100个userId(这与文件中的雇员Id相同)(如果您觉得这样,根据您的目标系统,您可以有超过100个userId)。输出arraylist的每一行都带有–userId eq'00093147'或者userId eq'00000813'…最多100行,根据输入文件中存在的唯一雇员Id的数量有多行:
上面groovy脚本的输出arraylist:
最后,我们使用循环进程调用调用子进程:'CallempJobDynamic'
循环逻辑是arraylist(arraylist名称为–"empidquery")形成,应该至少有一行在其中调用循环:
在子流程:
中,我们首先读取arraylist的第一行'empidquery'作为名为–'OneLineOfArray'
的内容修饰符中的标题元素,然后在下一个请求-回复步骤中使用此标题'queryempnow'作为筛选条件,以从的EmpJob实体获取数据Employee Central.
我们通过内容修饰符删除任何标题,这样它们就不会出现在下一个调用中:
下一个是添加的脚本,只是为了显示响应,还有两个突出显示子流被多次调用:(在真实流中,您将用groovy替换此groovy,以收集用户ID和相应的成本中心并存储其中)
脚本:
EmpJob的响应:
突出显示子流程被多次调用:
最后,我们调用最后一个Groovy脚本从arraylist中删除顶行'empidquery',使下一行成为arraylist中的顶行,循环继续顺利进行。
结论:
这个博客是写给减轻开发人员的痛苦,因为在构建iFlow时,我们确实遇到了多种情况,其中在OData接收器适配器中,263云通信企业版,我们需要基于动态查询获取数据,而动态部分的值来自源负载。在所有这些情况下,上面的blog都有助于快速构建lflows,通过循环调用根据有效负载数据创建的动态url获取数据。它通过提供架构和可重用的代码来加速这些开发,这些代码是关于如何实现结果的。