CRM事件增强
2016-12-06 20:01
225 查看
上一篇转载了SDN上面的一篇博文。写的非常棒,将event的事情说的很透彻。
这篇就实际谈谈具体是怎么操作的,多说无益,直接上代码。
使用事务代码CRMV_EVENT,创建一个如下的事件功能:
交易类别 BUS2000115 销售
执行时间 30 抬头处理结束
优先级 自己定
对象名称 ORDERADM_H
事件 AFTER_CREATE_WITH_REFERENCE
属性 <*>
功能
Z开头的FUNC
然后func的相关代码如下:
这篇就实际谈谈具体是怎么操作的,多说无益,直接上代码。
使用事务代码CRMV_EVENT,创建一个如下的事件功能:
交易类别 BUS2000115 销售
执行时间 30 抬头处理结束
优先级 自己定
对象名称 ORDERADM_H
事件 AFTER_CREATE_WITH_REFERENCE
属性 <*>
功能
Z开头的FUNC
然后func的相关代码如下:
FUNCTION zxxxxxxxxx. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(IV_HEADER_GUID) TYPE CRMT_OBJECT_GUID *" REFERENCE(IV_OBJECT_GUID) TYPE CRMT_OBJECT_GUID *" REFERENCE(IV_OBJECT_NAME) TYPE CRMT_OBJECT_NAME *" REFERENCE(IV_EVENT_EXETIME) TYPE CRMT_EVENT_EXETIME *" REFERENCE(IV_EVENT) TYPE CRMT_EVENT *" REFERENCE(IV_ATTRIBUT) TYPE CRMT_EVENT *" REFERENCE(IV_STRVAL_OLD) TYPE ANY *" REFERENCE(IV_STRVAL_NEW) TYPE ANY *" REFERENCE(IV_RCODE_STATUS) TYPE SY-SUBRC *" REFERENCE(IV_STRUC_NAME) TYPE CRMC_EVENT_STRUC-STRUC *" EXCEPTIONS *" ERROR_OCCURRED *"---------------------------------------------------------------------- DATA: lv_ref_kind TYPE crmt_object_kind, ls_payplan_wrk TYPE crmt_payplan_wrk, lt_payplan_d_wrk TYPE crmt_payplan_d_wrkt, ls_payplan_com TYPE crmt_payplan_com, lt_payplan_d_com TYPE crmt_payplan_d_comt, ls_pr_copy_ma_key TYPE crmt_pr_copy_ma_key, ls_it_copy_ma_key TYPE crmt_it_copy_ma_key, ls_pr_copy_ma TYPE crmc_pr_copy_ma, ls_it_copy_ma TYPE crmc_it_copy_ma, ls_input_field_names TYPE crmt_input_field_names, lt_input_field_names TYPE crmt_input_field_names_tab, ls_input_fields TYPE crmt_input_field, lt_input_fields TYPE crmt_input_field_tab, lv_message_text TYPE crmt_msgtext, lv_allowed TYPE crmt_boolean, ls_payplan_d_wrk TYPE crmt_payplan_d_wrk, ls_payplan_d_com TYPE crmt_payplan_d_com. DATA: lv_ref_strval_old TYPE REF TO data, lv_ref_strval_new TYPE REF TO data, lv_structure_name TYPE crmt_tablename. FIELD-SYMBOLS: <ls_strval_old> TYPE any, <ls_strval_new> TYPE any, <lv_ref_guid> TYPE crmt_object_guid, <lv_field> TYPE any. * look if there is something to do CHECK iv_object_name EQ gc_object_name-orderadm_h OR iv_object_name EQ gc_object_name-orderadm_i. * determine name of structure CALL FUNCTION 'CRM_OBJECT_NAMES_DETERMINE' EXPORTING iv_object_name = iv_object_name IMPORTING ev_wrk_structure_name = lv_structure_name. * disable copy function if predeccesor document is template CALL FUNCTION 'CRM_TSRV_TEMPLATE_CHECK_COPY' EXPORTING iv_strval_new = iv_strval_new iv_structure_name = lv_structure_name iv_object_name = iv_object_name IMPORTING ev_no_copy_allowed = lv_allowed. CHECK lv_allowed EQ false. CREATE DATA lv_ref_strval_old TYPE (lv_structure_name). ASSIGN lv_ref_strval_old->* TO <ls_strval_old>. <ls_strval_old> = iv_strval_old. CREATE DATA lv_ref_strval_new TYPE (lv_structure_name). ASSIGN lv_ref_strval_new->* TO <ls_strval_new>. <ls_strval_new> = iv_strval_new. DATA:iu_orderadm_h TYPE crmt_orderadm_h_wrk. DATA:is_ref_orderadm_h TYPE crmt_orderadm_h_wrk. is_ref_orderadm_h = iv_strval_old. iu_orderadm_h = iv_strval_new. DATA:lt_orderadm_i TYPE crmt_orderadm_i_comt. DATA:ls_orderadm_i TYPE crmt_orderadm_i_com. DATA: lt_schedlin_i TYPE crmt_schedlin_i_comt, is_schedlin_i TYPE crmt_schedlin_i_com, is_schedlins TYPE crmt_schedlin_extd. DATA:lt_product_i TYPE crmt_product_i_comt. DATA:ls_product_i TYPE crmt_product_i_com. DATA:ls_items_maint TYPE crmt_guid_handle. DATA:lt_items_maint TYPE crmt_guid_handle_tab. DATA:in_exception TYPE crmt_exception_t. DATA: it_objects_to_save TYPE crmt_object_guid_tab. DATA: is_objects_to_save TYPE crmt_object_guid. DATA:et_saved_objects TYPE crmt_return_objects. DATA:et_exception TYPE crmt_exception_t. DATA:et_objects_not_saved TYPE crmt_object_guid_tab. DATA:return LIKE bapiret2. DATA:item_guid TYPE crmt_object_guid. DATA:lt_input_fields TYPE crmt_input_field_tab. DATA:ls_input_fields TYPE crmt_input_field . DATA:ls_input_field_names TYPE crmt_input_field_names. DEFINE add_field. clear ls_input_field_names. ls_input_field_names-fieldname = &1. insert ls_input_field_names into table ls_input_fields-field_names. END-OF-DEFINITION. DATA: it_header_guid TYPE crmt_object_guid_tab, et_orderadm_h TYPE crmt_orderadm_h_wrkt, et_orderadm_i TYPE crmt_orderadm_i_wrkt, es_orderadm_i TYPE crmt_orderadm_i_wrk, ls_orderadm_i1 TYPE crmt_orderadm_i_com, et_product_i TYPE crmt_product_i_wrkt, et_schedlin TYPE crmt_schedlin_wrkt, et_schedlin_i TYPE crmt_schedlin_i_wrkt. CLEAR:ls_orderadm_i. REFRESH:lt_orderadm_i,lt_input_fields. ls_orderadm_i-handle = '0000000001'. ls_orderadm_i-mode = 'A'."创建 ls_orderadm_i-header = iu_orderadm_h-guid. ls_orderadm_i-number_int = '0000000010'. ls_orderadm_i-itm_type = 'ZXXX'. ls_orderadm_i-ordered_prod = 'ZYYY'. ls_orderadm_i-Z自定义字段 = '123abc'. INSERT ls_orderadm_i INTO TABLE lt_orderadm_i. CLEAR:ls_input_fields,ls_input_field_names. ls_input_fields-ref_handle = '0000000001'. ls_input_fields-ref_kind = 'B'."管理项目 ls_input_fields-objectname = 'ORDERADM_I'. add_field 'REF_KIND'. add_field 'ORDERED_PROD'. add_field 'ITM_TYPE'. add_field 'MODE'. add_field 'NUMBER_INT'. add_field 'HEADER'. add_field 'Z自定义字段'. INSERT ls_input_fields INTO TABLE lt_input_fields. * ITEMS_MAINT REFRESH lt_items_maint. CLEAR ls_items_maint. ls_items_maint-handle = ls_orderadm_i-handle. COLLECT ls_items_maint INTO lt_items_maint. *创建item CALL FUNCTION 'CRM_ORDER_I_MAINTAIN_MULTI_OW' EXPORTING iv_header_guid = iu_orderadm_h-guid it_items_maint = lt_items_maint CHANGING ct_orderadm_i = lt_orderadm_i ct_input_fields = lt_input_fields EXCEPTIONS ac90 error_occurred = 1 OTHERS = 2. *修改数量QUANTITY CLEAR ls_orderadm_i. READ TABLE lt_orderadm_i INTO ls_orderadm_i INDEX 1. item_guid = ls_orderadm_i-guid. REFRESH lt_input_fields. REFRESH lt_schedlin_i. CLEAR: is_schedlin_i, is_schedlins. is_schedlins-quantity = 12345. is_schedlins-handle = 0. is_schedlins-logical_key = '00000000000000000000000000000000'. INSERT is_schedlins INTO TABLE is_schedlin_i-schedlines. is_schedlin_i-ref_guid = item_guid. is_schedlin_i-mode = 'A'."创建 CLEAR:ls_input_fields. REFRESH lt_input_fields. ls_input_fields-ref_guid = item_guid. add_field 'QUANTITY'. ls_input_fields-ref_kind = 'B'. ls_input_fields-objectname = 'SCHEDLIN'. ls_input_fields-logical_key = '00000000000000000000000000000000'. INSERT ls_input_fields INTO TABLE lt_input_fields. CLEAR:ls_input_fields. CALL FUNCTION 'CRM_SCHEDLIN_I_MAINTAIN_OW' CHANGING cs_schedlin_i_com = is_schedlin_i ct_input_fields = lt_input_fields EXCEPTIONS schedlin_i_change_error = 1 schedlin_i_create_error = 2 error_occurred = 3 OTHERS = 4. ENDFUNCTION.
相关文章推荐
- CRM事件增强补遗
- Microsoft Dynamics CRM 2016 增强版的解决方案(CRM新特性,开发者的福利)
- 新战略和中小企业CRM产品将进一步增强甲骨文在中国CRM市场的领先地位
- CRM开发总结1:线索增强程序
- 如何用CRM增强客户在物联网时代的体验
- 转:使用.net下的系统事件增强应用程序
- windows 2003/2008 禁用关闭事件跟踪程序 自动登录 禁用 IE 增强的安全配置
- Delphi XE的RTTI增强,动态Hook某些内部事件
- [译]Visual Basic 2005在语言上的增强(十)应用程序级别事件
- 增强的CHtmlView类,在视图里处理HTML元素事件和交换数据
- Microsoft Dynamics CRM 2011 表单OnSave(ExecutionObj)、OnChange、PageOnLoad事件理解
- 增强的事件组件
- crm2011处理save事件和获取当前窗体信息
- 增强的CHtmlView类,在视图里处理HTML元素事件和交换数据
- crm2011处理save事件和获取当前窗口信息
- Building Coder(Revit 二次开发) - 空闲事件(Idling Event)增强和外部事件(External Event)
- Qomolangma实现篇(四):基本特性增强与多投事件系统
- SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强
- CRM:把 isv.config.xml 按钮事件移动到 entity.onload()
- 增强的CHtmlView类,在视图里处理HTML元素事件和交换数据 -[今天转几篇基础桌面技术文章]