SAP 工具箱数据同步平台十调用传递选择条件

作者:ABAP技巧与实战 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, SD, 开发, 数据工程, 销售分销
SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

数据同步平台是在ABAP中开发的一个数据同步工具,类似于LTRC,通过配置实现任意两个数据库的数据同步(ABAP需要配置相关的外部数据库连接).

数据同步平台的底层通过调用ADBC类实现远程数据库的读取,写入.

数据同步平台也支持调用PO传递数据

**本文主要介绍怎么在其它程序中调用数据同步平台并传递选择条件**

数据选择条件

数据同步平台通过动态选择屏幕获取选择条件. 回车后, 会读取接口编号上次保存的选择条件

通过临时复选框区分选择条件是正式使用,还是当前界面临时使用. 避免临时使用的选择条件影响了正式运行的后台作业(临时标记和执行程序的用户名关联的).

详情参阅

> 数据过滤机制 无峰,公众号:ABAP 技巧与实战 [ SAP 工具箱 数据同步平台(八 改进数据过滤机制)

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487684&idx=1&sn=f321832e37db563aa0ac23b844025e4c&chksm=cf5dcdf2f82a44e4be9bf4d54abd5b25886d7676e64a7b82a2357d72404e5c8d7d40a8a323d1&token=284235980&lang=zh_CN#rd)

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

选择条件的保存

过滤条件通过EXPORT TO DATABASE 语句写入特殊表 INDX 区域 sl

其中 gt_cond内表是后续数据处理时需要的内容(确定数据的过滤条件).

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

选择条件的使用

通过import 语句读取之前写入的条件

其中内表GT_COND 通过类型 RSDS_TWHERE 定义

gt_cond TYPE rsds_twhere,

该内表的内容可以通过函数

FREE_SELECTIONS_EX_2_WHERE获取

函数需要传递的内表包含下图的结构. 其中通过OPTION LOW HIGH 定义复杂的数据筛选条件.(类似与选择屏幕的RANGE: SIGN OPTION

LOW HIGH)

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

_**01** _

**数据结构**

函数传入参数的基本数据使用下图的结构

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

_**02** _

**嵌套内表**

通过嵌套内表表达每个表的选择条件,数据同步平台作为接口使用时,只会使用主表字段作为选择条件.所以这里TABLENAME填写主表表名即可.

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

_**03** _

**几种表达方式**

单个字段单个条件

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

单个字段多个条件

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

多个字段,每个字段多个条件

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

多个字段,其中一个字段单个条件

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

多个字段,都是单一条件

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

示例程序

源代码附在文末

核心逻辑是把特定字段的选择按总结的规则写入lt_tab内表, 调用函数转换成SQL条件. 并通过 EXPORT TO DATABASE 传递条件.

数据同步平台会使用相应的规则读取之前写入的条件.

_需要注意的是, 因为ID的命名规则中使用了用户名. 如果submit调度后台作业, 需要确保这里使用的用户名与后台作业执行的用户名一致_

_P_LOG用来控制是否显示处理日志_

_下图是数据同步平台的示例代码调用的接口配置

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

总结

数据同步平台一般情况下是通过后台调度. 特殊情况可能需要使用其它程序来调用.这样丰富了数据同步平台的更多的应用场景.

示例程序源代码

*&---------------------------------------------------------------------**& Report ZTS_CALL_SYNC*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zts_call_sync.

PARAMETERS: p_subrc TYPE i. "几种数据过滤条件PARAMETERS: p_log AS CHECKBOX .

START-OF-SELECTION. PERFORM call_sync.

*&---------------------------------------------------------------------**& Form call_sync*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& --> p1 text*& <-- p2 text*&---------------------------------------------------------------------*FORM call_sync . DATA: lv_jiekno(12). DATA: lv_id TYPE indx_srtfd. DATA: lt_expr TYPE rsds_texpr, lt_tab TYPE rsds_expr_tab, lt_cond TYPE rsds_twhere.

"指定需要调用的接口编号 lv_jiekno = 'SYN001'. "示例接口编号 "设置保存数据的ID,确保用户名同最终数据同步平台执行的用户名一致(后台调度) lv_id = lv_jiekno && sy-uname && '_TEMP'. "构造选择条件:选择字段来自接口的主表中的字段 CASE p_subrc. WHEN 0. "单个字段,多个条件 lt_tab = VALUE #( ( logop = 'OR' arity = 2 ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A01' high = '' ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A02' high = '' ) ). WHEN 1. "单个字段,单个条件 lt_tab = VALUE #( ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A02' high = '' ) ). WHEN 2. "多个字段,多个条件 lt_tab = VALUE #( ( logop = 'AND' arity = 2 ) ( logop = 'OR' arity = 2 ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A01' high = '' ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A02' high = '' ) ( logop = 'OR' arity = 2 ) ( logop = '' arity = 0 fieldname = 'EXNAM' option = 'EQ' low = 'AA' high = '' ) ( logop = '' arity = 0 fieldname = 'EXNAM' option = 'EQ' low = 'BB' high = '' ) ). WHEN 3. "多个字段,其它一个字段单条件 lt_tab = VALUE #( ( logop = 'AND' arity = 2 ) ( logop = 'OR' arity = 2 ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A01' high = '' ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A02' high = '' ) ( logop = '' arity = 0 fieldname = 'EXNAM' option = 'EQ' low = 'BB' high = '' ) ). WHEN 4. "多个字段,都是单一条件 lt_tab = VALUE #( ( logop = 'AND' arity = 2 ) ( logop = '' arity = 0 fieldname = 'EXSYS' option = 'EQ' low = 'A01' high = '' ) ( logop = '' arity = 0 fieldname = 'EXNAM' option = 'EQ' low = 'BB' high = '' ) ). ENDCASE. lt_expr = VALUE #( ( tablename = 'ZTIF001' expr_tab = lt_tab ) ). "调用函数获取选择条件 CALL FUNCTION 'FREE_SELECTIONS_EX_2_WHERE' EXPORTING expressions = lt_expr IMPORTING where_clauses = lt_cond EXCEPTIONS expression_not_supported = 1 OTHERS = 2. "保存选择条件 EXPORT gt_cond = lt_cond TO DATABASE indx(sl) ID lv_id. COMMIT WORK AND WAIT. "调用特定接口 DATA: lr_jiekno TYPE RANGE OF ztsync_c1-jiekno. lr_jiekno = VALUE #( ( sign = 'I' option = 'EQ' low = lv_jiekno ) ). SUBMIT zbc_sync_remote_table_para WITH s_jiekno IN lr_jiekno WITH p_zjk = 'X' "接口模式 WITH p_temp = 'X' "临时动态选择 WITH p_ini = 'X' "全量 WITH p_chg = '' "变化量 WITH p_log = p_log "控制是否显示日志 AND RETURN.ENDFORM.

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

SAP 工具箱数据同步平台十调用传递选择条 - 封面图
SAP 工具箱数据同步平台十调用传递选择条 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

申请进入公众号讨论群提问或者参与话题讨论

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP工具箱数据同步平台十调用传递选择条件.md」整理生成,仅用于内部技术分享与学习交流。