CPI中Exchange Property和 Write Variables控件的使用

前些时间在项目上遇到一个需求,通过Odata从S4抽出数据之后,调用打印服务器的地址去打印生成PDF,但是打印服务器每次只能接收一条数据,而S4返回的数据有多条,所以需要在CPI中进行循环操作,依次按照索引将对应的单据内容传递给打印服务器,所以就遇到了两个问题:

1.如何将S4返回的内容拆分;

2.如何每次只将对应的数据发送过去,而不丢失原有完整的数据。

第一个问题,如何拆分:

这个问题比较容易解决,S4端返回的内容格式为XML格式,所以在CPI中使用脚本对XML内容进行解析重构,将一个XML拆分为多个XML,存放在数组中,后续按照所以依次访问即可

Groovy中操作XML的介绍文档链接:https://www.baeldung.com/groovy-xml

返回的数据格式如下:

在mapping完返回数据之后,创建Groovy脚本对其进行拆分

执行完这步后,可以看到数据已经被拆分并依次存放为数组,第一个问题已解决。

第二个问题,如何依次访问数组内容而不丢失原有完整数据:

这里问题主要是每次向打印服务器发送数据时,假如从S4返回的body中有10条数据,则需要循环发送10次,而每次body中只能发送一条,那么就需要覆盖掉body中的内容,所以问题就是下次怎么才能获取到最初完整的数据,来根据下标获取第二次发送的数据。

最开始对CPI中各种控件的使用方法不熟悉,不知道如何实现这种需求,查阅资料后,发现有个Write Variables的控件,该控件是将数据可以写入服务器中的存储空间中,可以在任何时候去读取其中的内容,就解决了上面这个问题。

执行后,可以在监控控制台中看到创建的变量

这里我将上述程序中创建的变量删除了,因为在总结这篇文章时,查阅了官网的资料,看到官方针对同一iflow中共享数据的建议是利用Exchange Property来进行数据共享,所以后来采用了这个方式,实现方式如下:

(PS:2022.3.10日更新,当我再后来总结另一个控件的用法时,我才发现其实我这里并不应该用Property,就是应该使用持久化存储的方式,也就是DataStore或者Write Variables,因为在我的这个使用场景下,可能会处理很大量的数据,关于DataStore的使用方式以及其他几种数据共享方式的区别,在我另一篇帖子中有提到:CPI控件Data Store使用介绍

1.创建属性

2.创建循环调用控件

3.在任何需要使用到原始数据的地方之前,通过content modifier组件获取属性中的数据

什么时候应该使用Exchange Property,什么时候应该使用Write Variables?首先看一下官方文档中对变量的说明:

这里提到两点

第一点,变量会占用客户的服务器存储空间;

第二点,如果不是必要,同一iflow之间数据共享推荐使用Exchange Property。(数据量少时推荐)

场景一:

Iflow最初接收到的header数据在后面需要用到,但是中间有一个远程调用需要删掉该header数据,这种情况,就可以在最开始接收到header之后,通过Exchange Property创建一个属性,将其获取到的header值作为属性存储起来,这个属性将后续在整个iflow中可用。

场景二:

在获取了有效负载,也就是body中的内容后,在后续需要用到这个有效负载,但是中间有一步操作需要更新body中的值,其实就是我这本程序的需求,这种情况下,就可以通过Exchange Property创建一个属性,来将其存储起来。

场景三:

这种场景下,不要在子分支中更改通用的属性,因为分支是并行的,或者以定义的顺序进行处理的,并且存在以下注意点:

1.在传播分支前设置的properties或者header,在子分支中都可以访问到

2.在子分支中设置的properties或者header,在其他子分支中不可以访问到

3.在合并分支后,子分支中设置的属性可以在主分支中访问到,但是子分支中设置的header不可以在合并后访问到

场景四:

当两个独立的iflow之间需要共享数据时,数据只能通过全局变量或者DataStore来共享数据

在设置全局变量时,有一个全局范围的选项,勾上这个选项代表任何iflow可以访问到该变量,不勾则代表只能当前iflow在下次运行时获取到该变量,由此想到了一个在以后项目上可以实际应用到的场景

以上图为例

所有远程调用的链接都是可以配置成外部参数的,方便迁移到Q环境以及P环境后,进行设置地址,而这些参数是可以设置成动态变量的,如上图中的圈2,目前项目上都是每一本iflow迁移过去后,挨个设置新环境的地址,如CPI的日志地址,S4的wsdl地址,FTP服务器的地址,但如果创建一个单独的iflow,专用做将这些通用的地址信息通过全局变量或者DataStore创建,后面每一本iflow中通过content modifier组件去获取到这些变量值,后续在设置地址时将对应的变量动态拼接在url中,即可免除每次迁移都需要重新配置的工作,节省开发时间。

以上。

内容概要:本文围绕发光太阳聚光器开展蒙特卡洛光线追踪研究,重点利用Matlab编程实现光线在聚光系统中的传播路径模拟。通过蒙特卡洛方法对大量随机光线进行统计追踪,精确分析光能在接收面上的分布特性、聚焦效率及系统整体光学性能,进而评估不同几何结构与材料参数对聚光效果的影响,为高效太阳能收集系统的设计与优化提供理论依据技术支持。研究不仅涵盖核心算法实现,还结合多个跨领域科研案例(如电力系统、路径规划、信号处理、机器学习等),展示了Matlab/Simulink在科研建模与仿真中的广泛应用价值,突出了算法仿真与多学科交叉融合的重要性。; 适合人群:具备一定Matlab编程基础,从事光学工程、新能源技术、仿真建模及相关领域研究的科研人员,尤其适合研究生及青年研究人员。; 使用场景及目标:①掌握蒙特卡洛方法在光学系统仿真中的原理与应用;②学习使用Matlab实现光线发射、反射、折射及能量统计的完整追踪流程;③通过实际代码实践优化聚光器结构设计;④借鉴文中多领域仿真案例,拓展科研视野与技术迁移能力; 阅读建议:此资源以代码实现为核心,建议读者结合Matlab环境动手运行与调试程序,重点关注光线追踪的物理建模与数值计算细节,并参照其他仿真范例举一反三,全面提升科研建模与算法实现能力。
内容概要:本文复现并深入探讨了一种基于价格弹性矩阵的居民峰谷分时电价激励策略,属于电力系统需求响应领域的关键技术研究。研究通过构建价格弹性矩阵精确刻画居民用户对不同时段电价变化的用电行为响应特性,结合优化算法设计科学合理的峰谷分时电价方案,有效引导用户在高峰时段减少用电、低谷时段增加用电,实现削峰填谷,提升电网运行稳定性与能源利用效率。文中配套提供了完整的Matlab代码实现,涵盖数据处理、模型构建、优化求解及结果可视化等模块,具有较强的可复现性与工程应用价值,适用于需求侧管理政策仿真与学术研究。; 适合人群:面向具备一定电力系统基础知识、能源经济学或需求响应研究背景的科研人员,以及从事相关课题的硕士、博士研究生;熟悉Matlab编程且关注智能电网优化的技术人员亦可从中获益。; 使用场景及目标:①用于居民侧用电行为建模与电价敏感性分析;②支撑峰谷电价政策的设计、仿真评估与优化调整;③作为高校教学中需求响应机制的算法实现案例与科研入门实践项目。; 阅读建议:建议读者结合Matlab代码逐模块解析其实现逻辑,重点掌握价格弹性矩阵的构造方法、目标函数与约束条件的数学建模过程,以及优化求解器的调用方式,同时可尝试引入其他智能优化算法进行对比实验,以深化对电价激励机制设计原理的理解与创新能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

觉得有用的佛系投币哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值