如何通过ECC更新TM中货运单附件文件夹中的链接?

2020-08-31 18:59发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我需要使用入站代理从...

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

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


大家好,

我需要使用入站代理从ECC更新TM中的吓人令附件文件夹中的链接。

我首先尝试测试一个示例代码以更新FO中的附件文件夹。

下面是代码:

数据:ls_key TYPE/bobf/s_frw_key,
       lt_key TYPE/bobf/t_frw_key,
       lt_target_key类型/bobf/t_frw_key,
       lt_data类型/BOBF/T_ATF_DOCUMENT_K,
       lo_message类型参考/bobf/if_frw_message。


 数据:lref_srvmgr_tor类型参考/bobf/if_tra_service_manager,
       lt_doc/bobf/s_atf_document_k类型表,
       lref_doc类型参考/bobf/s_atf_document_k,
       root_key TYPE/bobf/conf_key,
       lt_mod TYPE/bobf/t_frw_modification,
       lref_change类型参考/bobf/if_tra_change,
       lref_message类型参考/bobf/if_frw_message,
       lt_failed_key TYPE/bobf/t_frw_key,
       lt_doc_trkey TYPE/bobf/t_frw_key,
       lo_chg类型参考/bobf/if_tra_change,
       lo_msg_all类型参考/bobf/if_frw_message,
       lo_tra类型参考/bobf/if_tra_transaction_mgr,
       lv_rejected TYPE abap_bool,
       lt_rej_bo_key TYPE/bobf/t_frw_key2,
       lt_tor_source TYPE/bobf/t_atf_root_k,
       lv_text_assoc_key类型/bobf/conf_key。


 FIELD-SYMBOLS: TYPE/scmtms/s_tor_root_k,
                 TYPE/bobf/s_frw_modification,
                 TYPE/bobf/s_atf_root_k,
                类型/bobf/s_frw_key。


 *创建BO TOR实例
 DATA(lo_srv_mgr)=/bobf/cl_tra_serv_mgr_factory => get_service_manager(
    /scmtms/if_tor_c => sc_bo_key)。


 DATA(lo_frw_conf)=/bobf/cl_frw_factory => get_configuration(
      iv_bo_key =/scmtms/if_tor_c => sc_bo_key)。


 * BO Tor的示例根密钥
 ls_key-key ='022AB6755DFC1EE9A4D2D7496D17CC26'。
 附加ls_key至lt_key。


 *设置节点和关联
 DATA(lv_root_node)=/scmtms/if_tor_c => sc_node-root。
 DATA(lv_target_node)=/scmtms/if_tor_c => sc_node-ATTACHMENTFOLDER。
 DATA(lv_association)=/scmtms/if_tor_c => sc_association-root-ATTACHMENTFOLDER。
 DATA(lv_do_assoc_key)=/BOBF/IF_ATTACHMENT_FOLDER_C => sc_association-root-document。


 *字-黑名单警告!
 *我没有写单词a_s_s !!!!  ;-)-好的,让我们这样尝试:
 DATA(lv_content_cat)=/bobf/if_conf_c => sc_content_a $$。


 *读取目标节点的关联密钥


 数据(lv_assoc_key)= lo_frw_conf-> get_content_key_mapping(
      iv_content_cat = lv_content_cat
      iv_do_content_key = lv_do_assoc_key
      iv_do_root_node_key = lv_target_node)。


 *读取目标密钥
 lo_srv_mgr-> retrieve_by_association(
     出口
       iv_node_key = lv_root_node
       it_key = lt_key
       iv_association = lv_association
     输入
       et_target_key = lt_target_key)。


 *检索节点附件文件夹的数据
 lo_srv_mgr-> retrieve_by_association(
     出口
     iv_node_key = lv_target_node"在这里,我们必须使用目标节点作为节点密钥
     it_key = lt_target_key" ...并将目标键作为键
     iv_association = lv_assoc_key" ...和映射的关联密钥
     iv_fill_data = abap_true
     输入
     eo_message = lo_message
     et_data = lt_data)。

 **现在在文件夹中创建一个新链接

 将表lt_target_key读入数据(lw_attach_key)索引1。
 data(lv_attach_key)= lw_attach_key-key。


 将初始行添加到lt_doc参考中,并添加到lref_doc中。
 lref_doc-> key = lo_srv_mgr-> get_new_key()。
 lref_doc-> parent_key = lv_attach_key。
 lref_doc-> root_key = ls_key-key。
 lref_doc-> name ='URL'。
 lref_doc-> alternative_name ='URL'。
 * lref_doc-> schema ='DEFAULT'。
 lref_doc-> attachment_type ='LINK'。
 lref_doc-> external_link_web_uri ='https://testurl.com'。
 *
/scmtms/cl_mod_helper => mod_create_single(
   出口
     is_data = lref_doc-> *
     iv_node =/scmtms/if_tor_c => sc_node-attachment文件夹
     iv_key = lref_doc->密钥
     iv_root_key = lref_doc-> root_key
     iv_association = lv_assoc_key
     iv_source_node =/scmtms/if_tor_c => sc_node-root
     iv_parent_key = lref_doc-> parent_key
   输入
     es_mod = DATA(ls_modification))。
 *
 追加ls_modification到lt_mod。
 清除ls_modification。


 读取表lt_mod ASSIGNING FIELD-SYMBOL()索引1。
 如果sy-subrc = 0。
    -change_mode =/bobf/if_frw_c => sc_modify_create。
 万一。


 在lt_doc_trkey ASSIGNING FIELD-SYMBOL()上附加初始行。
 -键= lref_doc->键。


 如果lt_mod不是INITIAL。
   lo_srv_mgr->修改(
   出口
    it_modification = lt_mod)。
 万一。


 *"举报活动
 lo_srv_mgr-> do_action(
   出口
     it_key = lt_doc_trkey
     iv_act_key =/BOBF/IF_ATTACHMENT_FOLDER_C => sc_association-root-document"'483ED376A4351B4EE10000000A42172E'
   输入
     et_failed_key = lt_failed_key
     eo_change = lref_change
     eo_message = lref_message)。


 lo_tra =/bobf/cl_tra_trans_mgr_factory => get_transaction_manager()。
 lo_tra-> save(
 正在导入ev_rejected = lv_rejected
           eo_change = lo_chg
           eo_message = lo_message
           et_rejecting_bo_key = lt_rej_bo_key)。
 

但是执行" DO_ACTION"时出现转储。如果我跳过该部分,则附件文件夹不会更新。

能帮我吗?

3条回答
Doze时光
2020-08-31 19:25

请在下面找到示例代码。

 数据:lref_srvmgr类型参考/bobf/if_tra_service_manager,

        lref_message类型参考/bobf/if_frw_message,

        lref_trans类型参考/bobf/if_tra_transaction_mgr,

        ls_key TYPE/bobf/s_frw_key,

        lt_key TYPE/bobf/t_frw_key,

        lt_trq_root TYPE/scmtms/t_trq_root_k,

        lt_target_key类型/bobf/t_frw_key,

        lt_failed_key TYPE/bobf/t_frw_key,

        lt_item TYPE/scmtms/t_trq_item_k,

        lt_item_db TYPE/scmtms/t_trq_item_k,

        lt_key_link TYPE/bobf/t_frw_key_link。







 "获取服务经理

 呼叫方法/bobf/cl_tra_serv_mgr_factory => get_service_manager

   出口

     iv_bo_key =/scmtms/if_trq_c => sc_bo_key

   接收

     eo_service_manager = lref_srvmgr。





 ls_key-key ='005056BA65A31ED692977687566553C0'。

 附加ls_key至lt_key。





 "检索

 * lref_srvmgr->检索(

 *出口

 * iv_node_key =/scmtms/if_trq_c => sc_node-root"节点

 * it_key = lt_key"密钥表

 ** iv_before_image = ABAP_FALSE"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 ** iv_edit_mode ="更改模式

 * iv_fill_data = abap_true"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 ** iv_invalidate_cache = ABAP_FALSE"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 ** it_requested_attributes ="名称列表(例如字段名)

 *重要

 ** eo_message ="消息对象的接口

 ** eo_change ="变更对象的接口

 * et_data = lt_trq_root

 * et_failed_key = lt_failed_key"键表

 *)。

 *"按协会检索

 lref_srvmgr-> retrieve_by_association(

   出口

     iv_node_key =/scmtms/if_trq_c => sc_node-root"节点

     it_key = lt_key"密钥表

     iv_association =/scmtms/if_trq_c => sc_association-root-attachmentfolder"关联

 * is_parameters =

 * it_filtered_attributes =

     iv_fill_data = abap_false"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

     iv_before_image = abap_false"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 * iv_invalidate_cache = ABAP_FALSE"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 * iv_edit_mode ="更改模式

 * it_requested_attributes ="名称列表(例如字段名)

   输入

 * eo_message ="消息对象的接口

 * eo_change ="变更对象的接口

 * et_data =

 * et_key_link = lt_key_link"密钥链接

     et_target_key = lt_target_key"密钥表"这是附件文件夹DO的密钥(如果已创建)。 如果未创建,则需要创建它

 * et_failed_key ="密钥表

 )。





 数据:lr_root类型参考/bobf/s_atf_root_k。

 数据:lr_doc类型参考/bobf/s_atf_document_k。

 数据:lv_rej TYPE布尔值。

 DATA(lo_tra)=/bobf/cl_tra_trans_mgr_factory => get_transaction_manager()。

 数据:lt_mod类型/bobf/t_frw_modification。

 数据:lv_root_key TYPE/bobf/conf_key。



 如果lt_target_key是INITIAL。  "如果尚未创建附件,则该附件为空。我们需要立即创建。



   创建数据lr_root。

   lr_root-> key =/bobf/cl_frw_factory => get_new_key()。

   lr_root-> host_bo_key =/scmtms/if_trq_c => sc_bo_key。

   lr_root-> host_node_key =/scmtms/if_trq_c => sc_node-root。

   lr_root-> host_key = ls_key-key。

   插入值#(

     change_mode =/bobf/if_frw_c => sc_modify_create

     键= lr_root->键

     数据= lr_root

     节点=/scmtms/if_trq_c => sc_node-attachmentfolder

     关联=/scmtms/if_trq_c => sc_association-root-attachment文件夹

     source_node =/scmtms/if_trq_c => sc_node-root

     source_key = ls_key-key)插入表lt_mod。



   lref_srvmgr->修改(

     出口

       it_modification = lt_mod"更改

     输入

       eo_change = DATA(lr_change)"更改对象的接口

       eo_message = DATA(lr_msg)"消息对象的接口

       )。



   lo_tra-> save(

 *出口

 * iv_transaction_pattern =/BOBF/IF_TRA_C => GC_TP_SAVE_AND_CONTINUE"交易模式的数据元素

     输入

       ev_rejected = lv_rej"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 * eo_change ="交易变更对象的接口

 * eo_message ="消息对象的接口

 * et_rejecting_bo_key ="密钥表

   )。

   清除lt_mod。

 万一。

 数据:ls_root_key类型/bobf/s_frw_key。



 如果lt_target_key是INITIAL。

   lv_root_key = lr_root->密钥。

 其他。

   读取表lt_target_key INTO ls_root_key INDEX 1。

   lv_root_key = ls_root_key-key。

 万一。







 "以上数据是针对根的。



 "现在,我们需要创建DOCUMENT节点,为此需要运行时密钥

 数据:lv_attachment_node_do_key TYPE/bobf/obm_node_key,

        lv_attachment_node_assoc_key TYPE/bobf/obm_assoc_key,

        lv_attachment_node_root_key类型/bobf/obm_node_key。



/scmtms/cl_common_helper => get_do_keys_4_rba(

    出口

      iv_host_bo_key =/scmtms/if_trq_c => sc_bo_key

      iv_host_do_node_key =/scmtms/if_trq_c => sc_node-attachment文件夹

      iv_do_node_key =/bobf/if_attachment_folder_c => sc_node-root

    输入

      ev_node_key = lv_attachment_node_root_key)。





/scmtms/cl_common_helper => get_do_keys_4_rba(

     出口

       iv_host_bo_key =/scmtms/if_trq_c => sc_bo_key

       iv_host_do_node_key =/scmtms/if_trq_c => sc_node-attachment文件夹

       iv_do_node_key =/bobf/if_attachment_folder_c => sc_node-document

       iv_do_assoc_key =/bobf/if_attachment_folder_c => sc_association-root-document

       输入

         ev_node_key = lv_attachment_node_do_key"这是附件根的运行时执行密钥

         ev_assoc_key = lv_attachment_node_assoc_key"这是将根目录附加到文档节点的运行时关联密钥。

                  )。







 创建数据lr_doc。

 lr_doc-> key =/bobf/cl_frw_factory => get_new_key()。

 lr_doc-> parent_key = lv_root_key。

 lr_doc-> root_key = ls_key-key。

 lr_doc-> name ='URL'。

 lr_doc-> alternative_name ='URL'。

 lr_doc-> attachment_type ='LINK'。

 lr_doc-> external_link_web_uri ='https://testurl.com'。



 插入值#(

  change_mode =/bobf/if_frw_c => sc_modify_create

  键= lr_doc->键

  数据= lr_doc

  节点= lv_attachment_node_do_key

  关联= lv_attachment_node_assoc_key

  source_node = lv_attachment_node_root_key

  source_key = lv_root_key)插入表lt_mod。





 lref_srvmgr->修改(

     出口

       it_modification = lt_mod"更改

     输入

       eo_change = lr_change"变更对象的接口

       eo_message = lr_msg"消息对象的接口

       )。





 lo_tra-> save(

 *出口

 * iv_transaction_pattern =/BOBF/IF_TRA_C => GC_TP_SAVE_AND_CONTINUE"交易模式的数据元素

   输入

     ev_rejected = lv_rej"域BOOLE的数据元素:TRUE(='X')和FALSE(='')

 * eo_change ="交易变更对象的接口

 * eo_message ="消息对象的接口

 * et_rejecting_bo_key ="密钥表

 )。





 

一周热门 更多>