ABAP domain 里 conversion exit 的设计原理

举报
汪子熙 发表于 2022/03/28 17:27:33 2022/03/28
【摘要】 我们之前用了这个data element。 UI framework的getter 会自动检测data type的domain上是否维护conversion exit,如果有,就自动调用,我们没有写任何代码。还是这个routine只控制ui field?Conversion exit 有 in 和 out 这一对,out 负责data 输出的时候,自动被gui call到,In 负责user...

我们之前用了这个data element。 UI framework的getter 会自动检测data type的domain上是否维护conversion exit,如果有,就自动调用,我们没有写任何代码。

还是这个routine只控制ui field?

Conversion exit 有 in 和 out 这一对,out 负责data 输出的时候,自动被gui call到,

In 负责user input 执行结束触发PAI 时候自动被call到,

但这套东西只针对sap gui的环境,webclient ui里面就只能像现在框架里的getter 那样,由框架的开发人员手动去call 这些conversion exit。

如果正在运行一个transaction,这个时候系统有一个transport request import进来, 这个TR包含了一些DDIC object的change, 并且这些DDIC object正在被当前transaction使用,就会出现这个exception:

SAP的建议是在晚上user很少的时候import TR。用SGEN只能通过在user launch transaction之前预先生成最新的ABAP LOAD来避免这个问题,但是对于TR import之前已经load到memory开始执行的transaction则无能为例。
Hybris不会遇到类似的问题,因为其data type分为design time source和runtime artifact两种:

直接修改items.xml不会对runtime transaction造成任何影响 - items.xml的change必须重新build整个Hybris之后才会生效。

ABAP

使用事务码SM36或者SE80里的右键菜单:

Hybris

所有的cron job handler class必须声明AbstractJobPerformable为父类并重载perform方法。

在方法末尾必须返回执行结果是成果还是失败。
然后在Spring配置文件里注入这个bean:

Bean的id为oldPaymentSubscriptionResultRemovalJob:

执行这段代码:

完了就能在servicelayerjob里查询出来:


update 2018-09-19

Kubernetes也有job的概念:

Job是K8s用来控制批处理型任务的API对象。批处理业务与长期伺服业务的主要区别是
批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管
理的Pod根据用户的设置把任务成功完成就自动退出了。成功完成的标志根据不同的
spec.completions策略而不同:单Pod型任务有一个Pod成功就标志完成;定数成功型任
务保证有N个任务全部成功;工作队列型任务根据应用确认的全局成功而标志成功。

ABAP里的tenant isolation是通过DB table的client ID来区分的.
Hybris也有multi tenant的concept:

Hybris multi tenant典型的使用场景:

(1) Hosting SAP Hybris Commerce for several individual customers
(2) One single, corporate-wide SAP Hybris Commerce serving individual countries with individual product and customer data
(3) Using the SAP Hybris Commerce CMS module to power country-specific versions of a company website
在project folder下的project.properties里定义一个Hybris server上支持哪些tenant:


Hybris里tenant isolation是通过table name prefix来实现的
不同的tenant需要定义不同的table prefix:
配置文件的naming convention: tenant_.properties:

table prefix在.properties里的定义方式:

在admin console里对tenant进行管理:

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。