使用功能模块的提取器-区分INIT DELTA和FULL吗?

2020-08-19 00:44发布

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

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


使用RSAX_BIW_GET_DATA_SIMPLE作为模板,我创建了一个新的自定义提取器来加载新的自定义多维数据集。 提取器按宣传的方式工作。 但是,我想根据我通过InfoPackage执行的负载的"类型"在提取器中做出一些逻辑决策。 通过负载的"类型",我指的是初始化vs.增量vs.满负载。

我已经查看了ISU-Utilities的标准交付提取器中使用的其他一些功能模块(即使用功能模块MDEX_MATERIAL_MD的提取器0MATERIAL_ATTR)。 在查看此功能模块时,逻辑似乎利用类型组SBIWA中参数I_UPDMODE中的值来确定通过InfoPackage执行的负载类型。 这是我为此FM看到的值:

  • 更新模式允许的值:

常量:SBIWA_C_UPDMODE_FULL TYPE SBIWA_S_INTERFACE-UPDMODE

值'F',

SBIWA_C_UPDMODE_DELTA类型SBIWA_S_INTERFACE-UPDMODE

VALUE'D',

SBIWA_C_UPDMODE_INIT类型SBIWA_S_INTERFACE-UPDMODE

VALUE'I',

SBIWA_C_UPDMODE_REPEAT TYPE SBIWA_S_INTERFACE-UPDMODE

VALUE'R',

SBIWA_C_UPDMODE_DELTAINIT类型SBIWA_S_INTERFACE-UPDMODE

VALUE'C'。

在我的提取器功能模块的"导入"选项卡中,我输入了具有关联类型SBIWA_S_INTERFACE-UPDMODE的I_UPDMODE。 但是,在Debug中运行提取程序时,没有任何内容传递给I_UPDMODE。

有什么我想念的吗? 或者-还有其他方法可以使程序中的负载类型区分吗?

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

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


使用RSAX_BIW_GET_DATA_SIMPLE作为模板,我创建了一个新的自定义提取器来加载新的自定义多维数据集。 提取器按宣传的方式工作。 但是,我想根据我通过InfoPackage执行的负载的"类型"在提取器中做出一些逻辑决策。 通过负载的"类型",我指的是初始化vs.增量vs.满负载。

我已经查看了ISU-Utilities的标准交付提取器中使用的其他一些功能模块(即使用功能模块MDEX_MATERIAL_MD的提取器0MATERIAL_ATTR)。 在查看此功能模块时,逻辑似乎利用类型组SBIWA中参数I_UPDMODE中的值来确定通过InfoPackage执行的负载类型。 这是我为此FM看到的值:

  • 更新模式允许的值:

常量:SBIWA_C_UPDMODE_FULL TYPE SBIWA_S_INTERFACE-UPDMODE

值'F',

SBIWA_C_UPDMODE_DELTA类型SBIWA_S_INTERFACE-UPDMODE

VALUE'D',

SBIWA_C_UPDMODE_INIT类型SBIWA_S_INTERFACE-UPDMODE

VALUE'I',

SBIWA_C_UPDMODE_REPEAT TYPE SBIWA_S_INTERFACE-UPDMODE

VALUE'R',

SBIWA_C_UPDMODE_DELTAINIT类型SBIWA_S_INTERFACE-UPDMODE

VALUE'C'。

在我的提取器功能模块的"导入"选项卡中,我输入了具有关联类型SBIWA_S_INTERFACE-UPDMODE的I_UPDMODE。 但是,在Debug中运行提取程序时,没有任何内容传递给I_UPDMODE。

有什么我想念的吗? 或者-还有其他方法可以使程序中的负载类型区分吗?

付费偷看设置
发送
3条回答
何必丶何苦呢
1楼-- · 2020-08-19 01:08

确定Delta还是Init所需要做的全部工作是:

 *检查提取模式(增量初始化或增量)
   如果i_initflag EQ sbiwa_c_flag_on。
 

然后,确定是Full还是Delta(这恰好是确定创建日期或更改日期的delta):

 *如果在会计年度选择时满负荷
       如果r_aedat []是INITIAL。

 *完全提取
         游标
         与HOLD s_cursor FOR
       选择(s_s_if-t_fields)
         来自vbfa AS a
         加入pnwtyv AS b
           在a〜vbelv EQ b〜sdvbeln上
        r_vbelv中的a〜vbelv
          和r_posnv中的a〜posnv
          和r_vbeln中的a〜vbeln
          和a_posnn IN r_posnn
          与NE〜0
          AND_ERDAT IN r_erdat
          和b〜sdvbeln NE空间。

       其他。

 *使用ERDAT和AEDAT进行Delta提取
         游标
         与HOLD s_cursor FOR
       选择(s_s_if-t_fields)
         来自vbfa AS a
         加入pnwtyv AS b
           在a〜vbelv EQ b〜sdvbeln上
        r_vbelv中的a〜vbelv
          和r_posnv中的a〜posnv
          和r_vbeln中的a〜vbeln
          和a_posnn IN r_posnn
          与NE〜0
          AND(a〜erdat IN r_erdat
           或a〜aedat IN r_aedat)
          和b〜sdvbeln NE空间。

       万一。  "如果r_aedat []初始
 
悻福寶寶
2楼-- · 2020-08-19 01:07

丹尼斯

非常感谢您的快速回复。

我上午在调试模式下工作,测试了您提供的代码。

在我的程序中,紧随声明之后的第一行逻辑就是这个。 请记住,您在此处阅读的注释是模板程序提供的注释-我没有对其进行修改。:

  • 初始化模式(通过SAPI首次调用)或数据传输模式*

**(以下通话)?*

如果i_initflag = sbiwa_c_flag_on。

我在调试模式下同时运行了INIT加载和DELTA加载。 在这两种情况下,当执行第一行代码时,i_intflag ='X'和sbiwa_c_flag_on ='X'。 换句话说,至少在程序中,使用这些标志的INIT和DELTA之间似乎没有区别。

然后我在程序的下一行之前直接设置第二个断点。 这是我开始从源系统获取记录之前的代码行。

  • 第一个数据包-> OPEN CURSOR *

如果s_counter_datapakid = 0。

这时,对于INIT和DELTA,i_intflag =空白,而sbiwa_c_flag_on ='X'。 再次-使用这些标志的INIT和DELTA之间没有区别。

我假设要使用这些标志来区分INIT加载和DELTA加载,i_initflag应该仅在INIT加载期间='X'。 我的程序似乎并非如此。

另外,如果我由于要处理的大数据量以及执行任务的机会窗口有限,而在几天之内没有进行多次INIT InfoPackage加载,则区分FULL和DELTA的技术将非常有效。 在我们的生产环境中加载。 不过,这很正常,因为在此讨论中,我将不会执行FULL加载。 但是,这对于将来的项目来说是一个很好的逻辑。 所以谢谢你。

为什么要考虑这些标志没有保存您期望用来区分INIT和DELTA的值? 如果您需要,我可以为您提供更多代码。

克里斯

哎,真难
3楼-- · 2020-08-19 01:11

嗨。 有什么答案吗? 您能否告诉我是否找到了INIT/DELTA的运行时间指示器?

一周热门 更多>