SAP工作流对象类

目录

        1. 实现IF_WORKFLOW接口

        2. 创建流程属性

        3. 接口方法参考

        4. 定义事件

        5. 工作流触发(事件抛出)


        业务对象作为工作流的数据内核,也是联系业务流程和工作流的重要核心,体现形式一般为BOR或者业务对象类,用来标识不同业务流程的工作流。示例步骤为工作流对象类的创建。

        1. 实现IF_WORKFLOW接口

        如下方法需要逐个实现并激活(不论是否需要填充代码逻辑)

        2. 创建流程属性

        MV_INSTANCE_ID: 流程唯一业务ID,可以视为主键,可以为多个字段组合

        MS_LPOR:流程业务对象属性,和流程关联。

        LPOR-INSTID=》SWW_WI2OBJ-INSTID

        LPOR-TYPEID =》SWW_WI2OBJ-TYPEID

        LPOR- CATID =》SWW_WI2OBJ- CATID。

        MO_INSTANCE:当前工作流类实例对象

注意:key关键字段和参考类型(非数据字典类型的属性可能无法在工作流中使用)

        3. 接口方法参考

        CONSTRUCTOR 构造方法

        构造方法主要包含属性字段的赋值逻辑,参考如下,其余逻辑根据需求填充

  METHOD constructor.

    mv_instance_id  = iv_instid.
    ms_lpor-catid   = cl_swf_evt_event=>mc_objcateg_cl.
    ms_lpor-typeid  = me->get_class_name( ).
    ms_lpor-instid  = iv_instid.

  ENDMETHOD.

         接口IF_WORKFLOW的六个方法中,实施方法BI_PERSISTENT~FIND_BY_LPOR和BI_PERSISTENT~LPOR,其它方法可置空,根据业务场景确定逻辑。

  METHOD bi_persistent~lpor.
    result = me->ms_lpor.
  ENDMETHOD.

  METHOD bi_persistent~find_by_lpor.

    IF mo_instance IS NOT INITIAL.
      CLEAR mo_instance.
    ENDIF.

    CREATE OBJECT mo_instance
      EXPORTING
        iv_instid = lpor-instid.

    result = mo_instance.

  ENDMETHOD.

        其它参考方法示例

        DUMMY方法(部分工作流任务无需逻辑处理,可以使用该方法,比如事件驱动的审批节点)

  method DUMMY.
  endmethod.

        GET_CLASS_NAME 获取当前实例类名

 value( RV_CLASS_NAME )	TYPE ABAP_ABSTYPENAME

   METHOD get_class_name.

    DATA:
      lv_class_name TYPE abap_abstypename,
      lo_descr_ref  TYPE REF TO cl_abap_typedescr.

* determine type
    lo_descr_ref = cl_abap_typedescr=>describe_by_object_ref( me ).
    lv_class_name = lo_descr_ref->get_relative_name( ).

    rv_class_name = lv_class_name.

  ENDMETHOD.

        4. 定义事件

注:事件中也可以定义参数,事件参数可以在抛出事件时传出,并随事件传递到工作流中。

        5. 工作流触发(事件抛出)

 IV_UNAME	TYPE UNAME	User Name
 
  METHOD start_workflow.

    DATA: lo_event           TYPE REF TO if_swf_evt_event,
          lv_object_id       TYPE sibfinstid,
          lo_event_container TYPE REF TO if_swf_ifs_parameter_container.

    lv_object_id = mv_instance_id.

    TRY.
* start workflow
        lo_event = cl_swf_evt_event=>get_instance(
              im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
              im_objtype  = me->get_class_name( )
              im_event    = gc_submit
              im_objkey   = lv_object_id ).

        lo_event_container = lo_event->get_event_container( ).
        lo_event_container->set(
          EXPORTING
            name       = gc_iv_initiator  "IV_INITIATOR event container parameter
            value      = iv_uname ).  "Value to be set

      CATCH cx_swf_cnt_cont_access_denied cx_swf_cnt_elem_access_denied cx_swf_cnt_elem_not_found
            cx_swf_cnt_elem_type_conflict cx_swf_cnt_unit_type_conflict cx_swf_cnt_elem_def_invalid
            cx_swf_cnt_container.
        ##NO_HANDLER
    ENDTRY.

    TRY.
        lo_event->raise( ).
      CATCH cx_swf_evt_invalid_objtype cx_swf_evt_invalid_event.
        ##NO_HANDLER
    ENDTRY.

  ENDMETHOD.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值