跨程序的多个并行会话访问内部表

2020-08-13 18:35发布

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

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


专家们,

我们有一个独特的要求,即必须跨运行在不同应用服务器上的并行会话中运行的同一程序访问内部表。

此内部表将具有顺序填充并需要进行比较的所有会话的字段值的总和。

因为这是在增强中,所以我们也不能提交数据库登台表。

期待您的想法。

谢谢

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

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


专家们,

我们有一个独特的要求,即必须跨运行在不同应用服务器上的并行会话中运行的同一程序访问内部表。

此内部表将具有顺序填充并需要进行比较的所有会话的字段值的总和。

因为这是在增强中,所以我们也不能提交数据库登台表。

期待您的想法。

谢谢

付费偷看设置
发送
6条回答
DafaDDDa
1楼 · 2020-08-13 18:51.采纳回答

请更具体地说明为什么您无法设置任何并行任务,并因此取决于您的要求,即所有并行任务必须同时具有对公共对象的读写权限?

当前,我可以为您提供三个选择:

  1. 使用ABAP频道
    ABAP通道是基于ABAP通道的事件通信,使用应用程序服务器之间(以及与Internet的消息)进行通信。 AMC部分是您需要实现的部分:
    ABAP消息传递渠道(AMC )是ABAP程序之间使用消息进行通信的一种方法。 使用发布和订阅机制,可以在任何AS ABAP程序之间交换消息,包括不同用户会话和应用程序服务之间的通信
  2. 使用共享对象
    共享对象是共享内存区域中的对象。共享对象是Application Server特定的。
    a)创建共享 在一个特定的应用服务器上的对象A
    b)为AS A创建目标
    c)创建一个"暴露"共享对象的FM
    如果您的程序在AS A上运行,则可以访问Shared 对象
    如果您的程序在不同的AS上运行,则可以通过RFC将其访问到AS A。
  3. 重写您的编码
    您将需要进行一些工作来设置1。 2.以及用脑力找出如何处理对共享库的并发读写访问(与DB相同)
    重写代码以及如何设置并行进程 最好的选择。

重写选项:

  • 设置并行任务,使他们不需要了解其他任务的任何信息,例如 也许只并行执行性能较高的部分,但将对齐部分留在主程序中
  • 如果并行任务给出的返回值需要在完成后与其他任务对齐,则只需要使用 带有选项的"呼叫功能",包括"开始新任务"和"在任务结束时执行"。
呼叫功能'YOUR_PARALLEL_FUNCTION'
         开始新任务职位名称
         DESTINATION IN GROUP server_group
         在任务结束时执行receive_tasks
      导出" ... 
吹牛啤
2楼-- · 2020-08-13 18:54

Siva Paruchuri ,请继续处理您的未解决问题。

  • 评论答案或您的问题是否还有未解决的问题。
  • 否则将答案标记为接受,如果它可以帮助您解决问题
  • 或发布您自己的答案并接受 如果您自己找到了另一个有用的解决方案
  • ,或者将您的问题重定向到另一个相关且对解决您的问题有用的问题
  • 最后,请关闭您的问题
奄奄一息的小鱼
3楼-- · 2020-08-13 18:59

如果您使用其他数据库连接,则可以使用临时数据库表

https://help.sap.com/doc/abapdocu_750_index_htm/7.50/zh-CN/abapselect_additions.htm#!ABAP_ADDITION_3@3@

何必丶何苦呢
4楼-- · 2020-08-13 19:12

Siva Paruchuri ,谢谢您接受答案。 您能否提供简短信息,说明您选择了哪个选项来解决问题?

樱桃小丸子0093
5楼-- · 2020-08-13 19:05

使用自定义数据库表。 在出口处执行INSERT/DELETE,但不提交工作。
尝试一下。!

梦想连接
6楼-- · 2020-08-13 19:07

这可以通过将内容存储在自定义数据库表中来实现。

只需将会话ID作为数据库表的键的一部分,这样并行线程就不会在数据库锁上彼此同步。

然后,主线程可以读取聚合的数据-然后它将等待任何线程对任何数据库的锁定。 通过在COMMIT上使用PERFORM来最小化数据库锁的时间跨度(如果增强的标准功能通过更新来写数据,则可以执行更新任务)来最小化数据库锁的时间跨度。

一周热门 更多>