object dependencies assignment routing

FUNCTION zfunc_assign_od_to_routing.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_PLNTY) LIKE  PLKO-PLNTY DEFAULT 'N'
*"     VALUE(I_PLNNR) LIKE  PLKO-PLNNR OPTIONAL
*"     VALUE(I_PLNAL) LIKE  PLKO-PLNAL DEFAULT 1
*"     VALUE(I_STTAG) LIKE  PLKO-DATUV DEFAULT SY-DATUM
*"     VALUE(I_VORNR) LIKE  PLPO-VORNR OPTIONAL
*"     VALUE(I_PLNKN) LIKE  OPR_CLASS_DATA-PLNKN OPTIONAL
*"----------------------------------------------------------------------

*  1. load task list into internal ewb-buffer
  PERFORM load_task_list
    USING
      i_plnty
      i_plnnr
      i_plnal
      i_sttag
      i_vornr.

* 2. change the loaded task list
  PERFORM change_task_list
    USING
      i_plnty
      i_plnnr
      i_plnal
      i_plnkn.

* 3. save changed task list to database
  PERFORM save_to_database.

  COMMIT WORK AND WAIT.

  CALL FUNCTION 'CP_CL_S_OPR_UNLOCK'
    EXPORTING
      i_plnty             = i_plnty
      i_plnnr             = i_plnnr
      i_plnal             = i_plnal
    EXCEPTIONS
      wrong_parameters    = 1
      foreign_lock        = 2
      system_failure_lock = 3
      update_required     = 4
      OTHERS              = 5.

ENDFUNCTION.

*&———————————————————————*
*&      Form  LOAD_TASK_LIST
*&———————————————————————*
*       load task listr into internal EWB-BUFFER
*———————————————————————-*
*      –>I_PLNTY  task list type
*      –>I_PLNNR  task list number = group number
*      –>I_PLNAL  group counter
*      –>I_STTAG  keydate
*      –>I_VORNR  Activity Number
*———————————————————————-*
FORM load_task_list
  USING
    i_plnty LIKE plko-plnty
    i_plnnr LIKE plko-plnnr
    i_plnal LIKE plko-plnal
    i_sttag LIKE plko-datuv
    i_vornr LIKE plpo-vornr.

  DATA: l_classes_in_workarea TYPE classes_in_workarea.
  DATA: l_tsk_plnty_selection  TYPE cpsc_plnty_type,
        lt_tsk_plnty_selection TYPE cpsc_plnty_type OCCURS 0,
        l_tsk_plnnr_selection  TYPE cpsc_plnnr_type,
        lt_tsk_plnnr_selection TYPE cpsc_plnnr_type OCCURS 0,
        l_tsk_plnal_selection  TYPE cpsc_plnal_type,
        lt_tsk_plnal_selection TYPE cpsc_plnal_type OCCURS 0,
        l_tsk_selection        TYPE cpsc_tsk_sel_type.

  DATA: l_opr_vornr_selection  TYPE cpsc_vornr_type,
        lt_opr_vornr_selection TYPE cpsc_vornr_type OCCURS 0,
        l_opr_selection        TYPE cpsc_opr_sel_type,
        l_cpsc_odp_sel         TYPE cpsc_odp_sel_type.

* objects for loading
  l_classes_in_workarea-mtk_inarea = 'X'.
  l_classes_in_workarea-tsk_inarea = 'X'.
  l_classes_in_workarea-seq_inarea = 'X'.
  l_classes_in_workarea-opr_inarea = 'X'.
  l_classes_in_workarea-suo_inarea = 'X'.
  l_classes_in_workarea-prt_inarea = 'X'.
  l_classes_in_workarea-odp_inarea = 'X'.

* fill selection conditions – TSK
  CONCATENATE 'I' 'EQ' i_plnty INTO l_tsk_plnty_selection.
  APPEND l_tsk_plnty_selection TO lt_tsk_plnty_selection.
  l_tsk_selection-plnty = lt_tsk_plnty_selection.

  CONCATENATE 'I' 'EQ' i_plnnr INTO l_tsk_plnnr_selection.
  APPEND l_tsk_plnnr_selection TO lt_tsk_plnnr_selection.
  l_tsk_selection-plnnr = lt_tsk_plnnr_selection.

  CONCATENATE 'I' 'EQ' i_plnal INTO l_tsk_plnal_selection.
  APPEND l_tsk_plnal_selection TO lt_tsk_plnal_selection.
  l_tsk_selection-plnal = lt_tsk_plnal_selection.

* fill selection conditions – OPR
  CONCATENATE 'I' 'EQ' i_vornr INTO l_opr_vornr_selection.
  APPEND l_opr_vornr_selection TO lt_opr_vornr_selection.
  l_opr_selection-vornr = lt_opr_vornr_selection.


  CALL FUNCTION 'CP_CC_S_LOAD_COMPLEX_BY_OPR'
    EXPORTING
      i_class                        = 'P'
      i_classes_in_workarea          = l_classes_in_workarea
      i_cpsc_tsk_sel                 = l_tsk_selection
      i_cpsc_opr_sel                 = l_opr_selection
      i_cpsc_odp_sel                 = l_cpsc_odp_sel
    EXCEPTIONS
      workarea_not_found             = 1
      class_wrong_type               = 2
      workarea_wrong_type            = 3
      class_in_workarea_inconsistent = 4
      workarea_not_specified         = 5
      opr_not_found                  = 6
      no_selection_criteria          = 7
      invalid_selection_period       = 8
      key_date_required_for_ecm      = 9
      OTHERS                         = 10.
ENDFORM.                    " load_task_list

*———————————————————————*
*       FORM change_task_list                                         *
*———————————————————————*
*         changes the short text of all operations to
*         'SIMPLE_EWB_TEST'
*———————————————————————*
*         –> i_sttag  keydate                                        *
*———————————————————————*
FORM change_task_list USING i_plnty LIKE plko-plnty
                            i_plnnr LIKE plko-plnnr
                            i_plnal LIKE plko-plnal
                            i_plnkn LIKE opr_class_data-plnkn.

  DATA: lt_opr_class_data TYPE TABLE OF opr_class_data,
        l_opr_class_data  TYPE opr_class_data,
        lt_opr_ident      TYPE cpcl_opr_tab_type,
        l_opr_ident       TYPE cpcl_opr_type,
        lt_opr_lock       TYPE cpcl_opr_lock_tab_type,
        opr_ident         TYPE cpcl_opr_type,
        odp_link          LIKE cuob-knobj.

  CALL FUNCTION 'CP_CL_S_OPR_PROVIDE'
    TABLES
      e_opr_class_data = lt_opr_class_data
    EXCEPTIONS
      wrong_key        = 1
      OTHERS           = 2.

* lock the operations and reload operations
  LOOP AT lt_opr_class_data INTO l_opr_class_data.
    MOVE-CORRESPONDING l_opr_class_data TO l_opr_ident.
    APPEND l_opr_ident TO lt_opr_ident.
  ENDLOOP.

  CALL FUNCTION 'CP_CC_S_RELOAD_BY_OPR'
    EXPORTING
      i_flg_set_lock        = 'X'
    IMPORTING
      e_opr_lock            = lt_opr_lock
    CHANGING
      c_opr_ident           = lt_opr_ident
    EXCEPTIONS
      reloading_not_allowed = 1
      OTHERS                = 2.
  IF NOT lt_opr_lock[] IS INITIAL.
    WRITE: /'error: some operations are already locked'.
    EXIT.
  ENDIF.

  opr_ident-mandt = sy-mandt.
  opr_ident-plnty = i_plnty.
  opr_ident-plnnr = i_plnnr.
  opr_ident-plnal = i_plnal.
  opr_ident-plnfl = '000000'.
  opr_ident-plnkn = i_plnkn."'00000002'.



  DATA:lv_allocation_number LIKE cuob-knobj.
  DATA:lt_knowl_alloc_di_tab TYPE TABLE OF rcuob1 WITH HEADER LINE.
  lt_knowl_alloc_di_tab-knnam = 'ROUTINE_CALC1'.
  lt_knowl_alloc_di_tab-xknnam = 'ROUTINE_CALC1'.
  lt_knowl_alloc_di_tab-knsrt = '0001'.
  APPEND  lt_knowl_alloc_di_tab.

  CALL FUNCTION 'CP_BD_EDIT_KNOWLEDGE'
    EXPORTING
      allocation_number  = '000000000000000000'
      table              = 'PLPOD'
    IMPORTING
      allocation_number  = lv_allocation_number
    TABLES
      knowl_alloc_di_tab = lt_knowl_alloc_di_tab.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.


  CALL FUNCTION 'CP_CL_S_OPR_ODP_CHANGE'
    EXPORTING
*     i_ecn_s            = effectivity-aennr
      i_key_date_s       = sy-datum
      i_opr_ident        = opr_ident
*     i_opr_ident_ecn    = validity-aennr
*     i_opr_ident_date   = validity-datuv
      i_opr_odp_link     = lv_allocation_number
    EXCEPTIONS
      no_valid_operation = 1.
ENDFORM.                     " change_task_list

*&———————————————————————*
*&      Form  SAVE_TO_DATABASE
*&———————————————————————*
*       save to database
*———————————————————————-*
FORM save_to_database.
  CALL FUNCTION 'CP_CC_S_SAVE'.
ENDFORM.                    " save_to_database

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值