在工作流后台步骤中信息类型更新失败

2020-09-17 05:25发布

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

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


专家们,

我在工作流程中遇到信息类型更新的问题。

我实现了用于分配给工作流程任务的类方法,在该方法中,我使用了'HR_INFOTYPE_OPERATION'Fm更新信息类型。

请检查下面所附的代码。

问题是当我直接执行类方法时,信息类型已正确更新

但是当我运行整个工作流程周期时,只有内部表'it_item'的第一条记录

正在更新。

我已经尝试了所有可能的方法来实现它

*添加一些等待时间

*在方法中使用提交报告

*在方法等中使用呼叫事务。

我错过了什么吗?

请帮助我解决此问题。

-先谢谢

Sundeep。

数据:infty TYPE prelp-infty,
            编号TYPE p0001-pernr,
            子类型TYPE p0001-subty,
            objectid TYPE p0001-objps,
            锁定指示器TYPE p0001-sprps,
            Validend TYPE TYPE p0001-endda,
            有效性从TYPE p0001-begda开始,
            记录号TYPE p0001-seqnr,
            TYPE pspar-actio操作,
            tclas TYPE pspar-tclas,
            dialog_mode TYPE c,
            nocommit TYPE bapi_stand-no_commit,
            view_identifier TYPE p0003-viekn,
            lw_return TYPE bapireturn1,
            返回TYPE bapireturn1,
            lw_key TYPE bapipakey。

     数据:zhcmt066a的lt_item类型表,
            ls_item TYPE zhcmt066a,
            wa_item TYPE zhcmt066a,
            zhcmt066a的it_item类型表,
            ls_pa2006 TYPE p2006,
            lv_lines TYPE sy-index,
            req_id类型zhcmt066-req_id。

     呼叫方法me-> get_request
       出口
         im_req = im_req
       输入
         请求=请求。
     req_id = im_req。

     如果request-app_level ='FA'。  "检查批准级别
       选择*从zhcmt066a
         进入表lt_item
         在哪里req_id = req_id
         AND认可='M'。
       如果sy-subrc = 0。
         循环至lt_item INTO ls_item。
           读取表it_​​item使用键req_date = ls_item-req_date进入wa_item。
           如果sy-subrc = 0。
             wa_item-rec_hrs = wa_item-rec_hrs + ls_item-rec_hrs。
             从wa_item索引sy-tabix TRANSPORTING rec_hrs修改it_item。
           其他。
             将ls_item附加到it_item。
           万一。
           清除:ls_item,wa_item。
         结局。
 *使用所有选定记录更新信息类型
         循环到it_item INTO wa_item。
           ls_pa2006-pernr =请求-pernr。
           ls_pa2006-subty ='10'。
           ls_pa2006-endda = wa_item-req_date。
           ls_pa2006-begda = wa_item-req_date。
           ls_pa2006-anzhl = wa_item-rec_hrs。

           通话功能'BAPI_EMPLOYEE_ENQUEUE'
             出口
               数字= request-pernr
             输入
               返回=返回。
如果返回是初始的。 infty ='2006'。 数字= request-pernr。 子类型=" 10"。 operation ='INS'。 lockindicator ='X'。 有效性结束= wa_item-req_date。 有效性开始= wa_item-req_date。 通话功能" HR_INFOTYPE_OPERATION" 出口 infty ='2006' 数字=数字 亚型=亚型 objectid =对象ID lockindicator =锁定指示器 有效性结束=有效性结束 有效性开始=有效性开始 记录= ls_pa2006 操作=操作 tclas ='A' dialog_mode ='0' 输入 返回= lw_return 键= lw_key。 如果lw_return-id ='E'并且lw_return不是INITIAL。 消息ID return-id TYPE return-type NUMBER return-number 使用return-message_v1 return-message_v2 return-message_v3 return-message_v4。 ELSEIF lw_return是INITIAL。 提交工作。 等待最多2秒。 万一。 ELSEIF return-id ='E'并且返回不是初始的。 消息ID return-id TYPE return-type NUMBER return-number 使用return-message_v1 return-message_v2 return-message_v3 return-message_v4。 万一。 通话功能'BAPI_EMPLOYEE_DEQUEUE' 出口 数字= request-pernr 输入 return =返回。 清除:infty,wa_item,ls_pa2006,return,lw_return,子类型,
操作,锁定指示符,validityend,validationbegin。 结局。 万一。 ENDIF。

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

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


专家们,

我在工作流程中遇到信息类型更新的问题。

我实现了用于分配给工作流程任务的类方法,在该方法中,我使用了'HR_INFOTYPE_OPERATION'Fm更新信息类型。

请检查下面所附的代码。

问题是当我直接执行类方法时,信息类型已正确更新

但是当我运行整个工作流程周期时,只有内部表'it_item'的第一条记录

正在更新。

我已经尝试了所有可能的方法来实现它

*添加一些等待时间

*在方法中使用提交报告

*在方法等中使用呼叫事务。

我错过了什么吗?

请帮助我解决此问题。

-先谢谢

Sundeep。

数据:infty TYPE prelp-infty,
            编号TYPE p0001-pernr,
            子类型TYPE p0001-subty,
            objectid TYPE p0001-objps,
            锁定指示器TYPE p0001-sprps,
            Validend TYPE TYPE p0001-endda,
            有效性从TYPE p0001-begda开始,
            记录号TYPE p0001-seqnr,
            TYPE pspar-actio操作,
            tclas TYPE pspar-tclas,
            dialog_mode TYPE c,
            nocommit TYPE bapi_stand-no_commit,
            view_identifier TYPE p0003-viekn,
            lw_return TYPE bapireturn1,
            返回TYPE bapireturn1,
            lw_key TYPE bapipakey。

     数据:zhcmt066a的lt_item类型表,
            ls_item TYPE zhcmt066a,
            wa_item TYPE zhcmt066a,
            zhcmt066a的it_item类型表,
            ls_pa2006 TYPE p2006,
            lv_lines TYPE sy-index,
            req_id类型zhcmt066-req_id。

     呼叫方法me-> get_request
       出口
         im_req = im_req
       输入
         请求=请求。
     req_id = im_req。

     如果request-app_level ='FA'。  "检查批准级别
       选择*从zhcmt066a
         进入表lt_item
         在哪里req_id = req_id
         AND认可='M'。
       如果sy-subrc = 0。
         循环至lt_item INTO ls_item。
           读取表it_​​item使用键req_date = ls_item-req_date进入wa_item。
           如果sy-subrc = 0。
             wa_item-rec_hrs = wa_item-rec_hrs + ls_item-rec_hrs。
             从wa_item索引sy-tabix TRANSPORTING rec_hrs修改it_item。
           其他。
             将ls_item附加到it_item。
           万一。
           清除:ls_item,wa_item。
         结局。
 *使用所有选定记录更新信息类型
         循环到it_item INTO wa_item。
           ls_pa2006-pernr =请求-pernr。
           ls_pa2006-subty ='10'。
           ls_pa2006-endda = wa_item-req_date。
           ls_pa2006-begda = wa_item-req_date。
           ls_pa2006-anzhl = wa_item-rec_hrs。

           通话功能'BAPI_EMPLOYEE_ENQUEUE'
             出口
               数字= request-pernr
             输入
               返回=返回。
如果返回是初始的。 infty ='2006'。 数字= request-pernr。 子类型=" 10"。 operation ='INS'。 lockindicator ='X'。 有效性结束= wa_item-req_date。 有效性开始= wa_item-req_date。 通话功能" HR_INFOTYPE_OPERATION" 出口 infty ='2006' 数字=数字 亚型=亚型 objectid =对象ID lockindicator =锁定指示器 有效性结束=有效性结束 有效性开始=有效性开始 记录= ls_pa2006 操作=操作 tclas ='A' dialog_mode ='0' 输入 返回= lw_return 键= lw_key。 如果lw_return-id ='E'并且lw_return不是INITIAL。 消息ID return-id TYPE return-type NUMBER return-number 使用return-message_v1 return-message_v2 return-message_v3 return-message_v4。 ELSEIF lw_return是INITIAL。 提交工作。 等待最多2秒。 万一。 ELSEIF return-id ='E'并且返回不是初始的。 消息ID return-id TYPE return-type NUMBER return-number 使用return-message_v1 return-message_v2 return-message_v3 return-message_v4。 万一。 通话功能'BAPI_EMPLOYEE_DEQUEUE' 出口 数字= request-pernr 输入 return =返回。 清除:infty,wa_item,ls_pa2006,return,lw_return,子类型,
操作,锁定指示符,validityend,validationbegin。 结局。 万一。 ENDIF。
付费偷看设置
发送
8条回答
SC_Yao
1楼-- · 2020-09-17 06:05

你好,Sundeep,

我想我将在此代码(lw_return变量)中检查HR_INFOTYPE_OPERATION调用的结果。 此变量的内容可以作为您问题的答案(或至少可以提供提示)。

土豆飞人
2楼-- · 2020-09-17 06:08

更多信息(与问题无关)

  1. 您将任务描述为"更新",但是代码中有操作=" INS"。 正确吗?
  2. 您可能有两次提交:一次是在您的代码中,另一次是在标准hr代码中,这是由于可选参数NOCOMMIT =''
  3. 您可以使用COMMIT WORK AND WAIT而不是COMMIT + WAIT UP TO ...
  4. 在此代码中,您并未处理所有可能的选项(lw_return-id ='S'等)
如果lw_return-id ='E'并且lw_return不是INITIAL。
               消息ID return-id TYPE return-type NUMBER return-number
                  使用return-message_v1 return-message_v2 return-message_v3 return-message_v4。
             ELSEIF lw_return是INITIAL。
               提交工作。
               等待最多2秒。
             ENDIF。
闻人可可
3楼-- · 2020-09-17 06:04

嗨,

请检查用户ID和WF-BATCH之间的用户参数差异。 在HR参数中,molga(国家代码)在诸如功能之类的许多地方使用,并且会影响SAP行为。

亲切的问候,Rob Dielemans

小灯塔
4楼-- · 2020-09-17 05:57

嗨,

SAP HR使用用户参数molga来确定行为。 因此,如果使用您的用户ID将东西放在前台,而东西在后台不起作用(即sy-uname = WF-BATCH),则您必须关注两者之间的差异。

根据我向wf-batch用户修复的工作流hr-masterdata更新问题添加molga的经验。

亲切的问候,罗伯·迪勒曼斯

callcenter油条
5楼-- · 2020-09-17 05:52
  • 不要忘记为LOOP中的每个新记录清除RETURN参数。 (如果FM本身未清除它,则先前的成功或错误消息将阻止后续记录处理。)
  • 您在BAPI_EMPLOYEE_ENQUEUE之后检查了RETURN,但在HR_INFOTYPE_OPERATION之后没有检查,您也可以在此检查它。 (但只有在您应用了先前的更正后才可以)

空代码
6楼-- · 2020-09-17 05:53

执行了这些步骤后,您在RETURN参数中是否遇到了一些错误(锁定,应用程序错误,授权等)

一周热门 更多>