使用两个字段的通用增量

2020-08-25 16:33发布

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

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


hi BI专家,

请让我知道如何为我在这两个字段中所指的(NEW和CHANGED)记录提取增量。

听说可以通过功能模块来完成。

如果有人这样做,可以通过Konain2k @向我发送代码。 gmail.com

等待快速回复。

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

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


hi BI专家,

请让我知道如何为我在这两个字段中所指的(NEW和CHANGED)记录提取增量。

听说可以通过功能模块来完成。

如果有人这样做,可以通过Konain2k @向我发送代码。 gmail.com

等待快速回复。

付费偷看设置
发送
6条回答
1楼-- · 2020-08-25 17:09

嗨,穆斯塔法,

您具有控制此的InfoObject 0RECORDMODE。 可能的值为:

残像

X图像前

添加

D删除(仅键)

N张新图片

R反像

Y更新图片(来自更新的值)

关于

Silvio Messias

SKY徐
2楼-- · 2020-08-25 17:08

嗨,穆斯塔法,

请让我知道有关您的问题情况的更多详细信息。

我认为问题在于将数据分为两个不同的目标。 因此,您可以将其视为每个UR。

关于

Silvio Messias

哎,真难
3楼-- · 2020-08-25 17:13

我希望您要问的是如何在创建通用数据源的同时启用两个字段作为DELTA字段。

如果这是问题。 我认为您不能同时启用两个字段作为启用增量的字段。 可以使用三种类型的字段来启用增量。 它们是数值,日历天和时间。

小c菟菟
4楼-- · 2020-08-25 17:09

嗨,穆斯塔法,

您可以在SAP的帮助中找到有关它的所有信息。 为了方便起见,我在下面添加了链接:

编辑数据源和应用程序组件层次结构:

http://help.sap .com/saphelp_nw04/helpdata/zh-CN/49/ae67401d4988448036b180dc9ec1e6/content.htm

添加追加结构

http://help.sap .com/saphelp_nw04/helpdata/zh-CN/cf/21ebc9446011d189700000e8322d00/frameset.htm

增强数据源:

http://help.sap .com/saphelp_nw70/helpdata/en/6e/fe6e420f00d242e10000000a1550b0/content.htm

如果您不了解ABAP,则需要认识的人提供帮助。

此致

Silvio Messias。

闻人可可
5楼-- · 2020-08-25 17:25

有一个PDF文件,告诉您如何获取通用数据源的变化量。

您应该可以在SDN上找到它。

它告诉您如何编写功能模块以启用通用数据源的增量更新。 我认为这可以解决问题。 您可以在传输规则中使用映射到0storno的orecordmode,在更新规则级别使用0recordmode/0storno映射。 如果您使用的是ODS,则可以在通信结构中映射0recordmode。

shere_lin
6楼-- · 2020-08-25 17:07

嗨,

您需要创建一个新的日期字段,例如ZDATE,并将其用于Delta的RSO2中。 现在,需要以这种方式填充ZDATE字段,以便根据新的和更改的Date字段带来新记录和更改记录的更改值。

我正在为难以编写此代码的新成员提供FM代码。

在下面的示例中,我们采用了SAP表MCHB及其字段ERSDA(创建日期)和LAEDA(更改日期)。

功能zbw_get_mchb。
*" ------------------------------------ ----------------------------------
*" *"本地接口 :
*"导入
*" VALUE(I_REQUNR)类型SRSC_S_IF_SIMPLE-REQUNR
*" VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE可选
*" VALUE(I_MAXSIZE)TYPE SRSC_S_IF_SIMPLE-MAXSIZE可选
*" VALUE(I_INITFLAG)TYPE SRSC_S_IF_SIMPLE-
*" VALUE(I_READ_ONLY)类型SRSC_S_IF_SIMPLE-READONLY可选
*" VALUE(I_REMOTE_CALL)类型SBIWA_FLAG默认SBIWA_C_FLAG_OFF
*" 表
*" I_T_SELECT类型SRSC_S_IF_SIMPLE-T_SELECT可选
*" I_T_FIELDS类型SRSC_S_IF_SIMPLE-T_FIELDS可选
*" E_T_DATA ZBW_MCHB可选结构
*"例外情况
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
< em> *" -------------------------------------------------- ------------------------

*示例:表MCHB
表的数据源:mchb。

字段符号:类型ls_mchb,
类型 ls_mara。
数据:ls_mchb的it_mchb类型标准表,
ls_mara的it_mara类型标准表。
数据:w_t_data类似于zbw_mchb。

*辅助选择标准结构
数据:l_s_select类型srsc_s_select。

* DB表的最大行数
静态值:s_s_if类型srsc_s_if_simple,

* 计数器
s_counter_datapakid,如sy-tabix,

*游标
s_cursor类型的游标。
*选择范围 < br>范围:用于zbw_mchb-matnr的l_r_matnr,
用于zbw_mchb-werks的l_r_werks,
用于zbw_mchb-ersda的l_r_ersda,
用于zbw_mchb-b的l_r_lfgja,用于zbw_mchb-m_b_b_b的ed,用于 l-r 用于zbw_mchb-zdate。

*初始化模式(通过SAPI首次调用)或数据传输模式
*(跟随调用)?
如果i_initflag = sbiwa_c_flag_on。

******************************************** ********************************
*初始化:检查输入参数
*缓冲区输入参数
*准备数据选择
****************** ****************************************************** ****

*检查数据源的有效性
案例i_dsource。
当" ZBW_MCHB"时。
当其他时。
如果1 = 2.消息e009(r3)。 endif。
*这是一个典型的日志调用。 请这样写每个错误消息
log_write'E'"消息类型
'R3'"消息类
'009' "邮件编号
i_dsource "邮件变量1
''。 "消息变量2
引发error_passed_to_mess_handler。
终结符。

将i_t_select的行附加到s_s_if-t_select。

*填充参数缓冲区 用于数据提取调用
s_s_if-requnr = i_requnr。
s_s_if-dsource = i_dsource。
s_s_if-maxsize = i_maxsize。

*填写字段列表 优化的选择语句
*(如果InfoSource字段
*与数据库表字段之间不存在1:1关系,则可能会难以为继
删除i_t_fields [],其中fieldnm ='MEINS'或fieldnm ='ZDATE'。
将i_t_fields行添加到s_s_if-t_fields。

else。" 初始化模式还是数据提取?

*********************************** **********************************************
*数据传输:第一次调用OPEN CURSOR + FETCH
*仅在后续调用FETCH时
************** ****************************************************** ********

*如果s_counter_datapakid = 0,则第一个数据包->打开游标
*

*填充范围表BW仅会传递简单选择条件
*类型SIGN ='I'和OPTION ='EQ'或OPTION ='BT'。
在s_s_if-t_select处循环进入l_s_select,其中fieldnm =' MATNR'。
将对应的l_s_select移动到l_r_matnr。
附加l_r_matnr。
endloop。

在s_s_if-t_select处循环到l_s_select中,其中fieldnm ='WERKS'。 l_s_select到l_r_werks。
附加l_r_werks。
endloop。

在s_s_if-t_select处循环到l_s_select中,其中fieldnm ='ERSDA'。
endloop。


在s_s_if-t_select处循环进入l_s_select,其中fieldnm ='LFGJA'。
将l_s_select对应于l_r_lfgja进行移动。
附加l_r_lfgja。
endloop。

在s_s_if-t_select处循环进入l_s_select,其中fieldnm ='LAEDA'。
将对应的l_s_select移至l_r_laeda。
应用
endloop。

在s_s_if-t_select处循环进入l_s_select,其中fieldnm ='ZDATE'。
将l_s_select对应移动到l_r_zdate。
l_r_zdate-sign ='I'。 br> l_r_zdate-option ='GE'。
清除l_r_zdate-high。
附加l_r_zdate。
endloop。

*确定每个FETCH语句要读取的数据库记录数
*来自输入参数I_MAXSIZE。 如果DataSource表行和数据库条目之间存在一对一的关系
*,则这是微不足道的。
*在其他情况下,这可能是不可能的
*必须确定一些估计值。
按住s_cursor打开光标,以便
从mchb
选择(s_s_if-t_fields)
其中(((l_r_zdate
中的ersda或l_r_zdate中的laeda)
和l_r_matnr
中的matnr和l_r_werks
中的werks和l_r_ersda
中的ersda和l_r_lfgja中的lfgja)。

万一。 "第一个数据包?

*将记录提取到接口表中。
*名为E_T_"提取结构的名称"。 em>
获取下一个游标s_cursor
附加表it_mchb
包大小s_s_if-maxsize的对应字段
。如果sy-subrc <> 0,则


关闭游标s_cursor 。
引发no_more_data。
尾数。

**从MARA表中获取单位,在MATNR(Material)上加入条件


选择matnr
mear
从mara
到表it_mara
,其中it_mchb
中的所有条目,其中matnr = it_mchb-matnr。

按lv_matnr对it_mara进行排序。

*如果不存在更改的日期,则使用创建的日期作为Delta(ZDATE)。

如果it_mchb []不是初始的。
取消分配
清除w_t_data。< br>
在it_mchb处循环,分配
取消分配
读取表it_​​mara用键lv_matnr = -matnr
二进制搜索分配
。 br>如果sy-subrc是初始的。
w_t_data-meins = -lv_meins。
endif。
如果 -laeda是初始的。
-ersda移至w_t_data-zdate。
else。
-laeda移至 w_t_data-zdate。
endif。
将:
-mandt移至w_t_data-mandt,
-matnr移至w_t_data-matnr,
-werks,
-lgort到w_t_data-lgort,
-ersda到w_t_data-ersda,
-ernam到w_t_data-ernam,
-laeda 到w_t_data-laeda,
-aenam到w_t_data-aenam,
-chrue到w_t_data-chrue,

-sgt_scat到w_t_data-sgt_scat。
将w_t_data附加到e_t_data。
endloop。
endif。


s_counter_datapakid = s_counter_datapakid + 1.
< br> endif。 "初始化模式还是数据提取?

终端功能。


一周热门 更多>