无法访问ABSL中的PSM发布的节点项

2020-09-06 16:58发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我过去曾问过同样的问题,但没人能给我正确的答案,可能是因为我的问题不够清楚。 这是我要实现的目标:在SAP Business ByDesign中,在创建采购订单时,当项目时间为"服务"且流程类型为"第三方"时,我尝试默认服务提供位置的值。 当前的默认值是" On-Site",我想将其设置为" Supplier Service Center"。


* 注意:我知道,如果这是"服务订单",那么我可以遵循: https://apps.support.sap.com/sap/support/knowledge/public/en/2740657 但并非如此*

因此,我去了SDK,为采购订单BO创建了业务对象扩展,并创建了一个After-Modify事件,该事件假定为获取节点Item下的注释元素TypeCode的值。 并检查值是否为19-服务,然后使ServiceProvisionLocationTypeCode的值等于3。

我确保所有组件均已发布PSM

这就是为什么我这样做并且遇到上述错误。 有人可以帮我解释一下发生了什么吗? 或向我提供有效的代码段!

谢谢

Mousa

(139.6 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我过去曾问过同样的问题,但没人能给我正确的答案,可能是因为我的问题不够清楚。 这是我要实现的目标:在SAP Business ByDesign中,在创建采购订单时,当项目时间为"服务"且流程类型为"第三方"时,我尝试默认服务提供位置的值。 当前的默认值是" On-Site",我想将其设置为" Supplier Service Center"。


* 注意:我知道,如果这是"服务订单",那么我可以遵循: https://apps.support.sap.com/sap/support/knowledge/public/en/2740657 但并非如此*

因此,我去了SDK,为采购订单BO创建了业务对象扩展,并创建了一个After-Modify事件,该事件假定为获取节点Item下的注释元素TypeCode的值。 并检查值是否为19-服务,然后使ServiceProvisionLocationTypeCode的值等于3。

我确保所有组件均已发布PSM

这就是为什么我这样做并且遇到上述错误。 有人可以帮我解释一下发生了什么吗? 或向我提供有效的代码段!

谢谢

Mousa

(139.6 kB)
付费偷看设置
发送
6条回答
葫芦娃快救爷爷
1楼 · 2020-09-06 17:25.采纳回答

嗨,

在您的ABSL脚本中," this.item"带有值的集合。 因此,您需要循环访问每个条目以访问相应的节点字段。

示例代码可能是:

 var items = this.item;
 foreach(项目中的var inst)
 {
 inst.ServiceProvisionLocationypeCode =" 19";
 } 

感谢

Saurabh

哎,真难
2楼-- · 2020-09-06 17:35

感谢Saurabh。

我在两个事件中尝试了此代码,一个在Root下,一个在Item节点下,却不知道可能是什么问题?

3楼-- · 2020-09-06 17:34

亲爱的Mousa,

我希望你一切都好!

为了满足您的要求,必须记住您正在执行脚本来检查具有0..N多重性的BO节点。

这意味着该采购订单实例在任何时候都可以有0或N个项目。

我可以看到Saurabh已经谈到了这一点,但是下面是与您的设计类似的ABSL代码:

在上面,您可以看到您正在使用GetFirst()函数访问Item节点上的"实例",然后检查TypeCode元素。

类似地,您应该使用ForEach循环(取决于您的方案)执行相同的操作,并遍历Purchase Order BO实例上的每个项目。

希望这对您和您的发展有帮助! (如果问题已解决,请标记为已回答!)。

亲切的问候,

安迪·布朗克利

Haoba3210
4楼-- · 2020-09-06 17:25

亲爱的安德鲁。

感谢您的输出。 我试过了,当在根节点或项目节点下发生事后修改事件时,它在根节点或项目节点下不起作用。 我正在尝试进行实时响应,例如每当用户将物料从材料更改为服务时,此方法都会生效。 这应该与ABSL代码或UI设计器有关(因为我仍然是新手)。

谢谢!

当学会了学习
5楼-- · 2020-09-06 17:37

嗨,

如果您刚刚创建了AfterModify操作,则在这种情况下启用了Mass enabled标志,那么您的" this"是一个集合,您必须对其进行循环:

 foreach(此中的var inst){
 foreach {inst.Item中的可变项} {
 if(item.TypeCode ==" 19"){
 item.ServiceProvisioningTypeCode =" 3";
 }
 }
 } 

这是结构,请检查语法。

最诚挚的问候

Thomas

Tong__Ming
6楼-- · 2020-09-06 17:33

嗨Mousa,

SAP Cloud Application Studio性能最佳实践,由 Stefan Hagen

,如果您想了解更多信息,请参阅指南质量启用事件的最佳实践,由 Pradeep Kumar N

我希望这可以帮助您解决问题:)

最诚挚的问候

托马斯

一周热门 更多>