MDG NWBC设置默认值
开发需求
MDG 主数据维护界面,需要在新建时将实体编码设置为默认的流水号
实现原理
- 增强feeder class方法
- 增强底层类CL_FPM_BOL_BASE
- 实施rule service增强点
实现方式
- 通过post-exit 增强方法flush或process event方法
METHOD ipo_ypwk_acc_default_value~process_event. *"------------------------------------------------------------------------* *" Declaration of POST-method, do not insert any comments here please! *" *"methods PROCESS_EVENT *" importing *" !IO_EVENT type ref to CL_FPM_EVENT *" !IV_RAISED_BY_OWN_UI type BOOLE_D optional *" changing *" !EV_RESULT type FPM_EVENT_RESULT *" !ET_MESSAGES type FPMGB_T_MESSAGES . *"------------------------------------------------------------------------*DATA:ls_account TYPE /mdg/_s_0g_pp_account.CONSTANTS:lc_default_account_table TYPE ktopl VALUE 'SY00'."设置科目默认值 by wilbur peng on 20210426IF me->core_object->mo_entity IS BOUND.me->core_object->mo_entity->get_properties(IMPORTINGes_attributes = ls_account).IF ls_account-coa IS INITIAL.me->core_object->mo_entity->set_property(EXPORTINGiv_attr_name = 'COA'iv_value = lc_default_account_table).ENDIF.IF ls_account-account IS INITIAL ANDls_account-coa IS not INITIAL andls_account-accgrpacc IS NOT INITIAL."科目组SELECT SINGLE FROM t077sFIELDS vonnr AS acc_low,bisnr AS acc_highwhere KTOPL eq @ls_account-coaand KTOKS eq @ls_account-accgrpaccINTO @DATA(ls_acc_range).SELECT MAX( /1md/0gaccount )FROM /1md/md______02mINTO @DATA(lv_acc_max)WHERE /1md/0gaccount GE @ls_acc_range-acc_lowAND /1md/0gaccount LE @ls_acc_range-acc_high.DATA(lv_acc_new) = lv_acc_max + 1.me->core_object->mo_entity->set_property(EXPORTINGiv_attr_name = 'ACCOUNT'iv_value = lv_acc_new).ENDIF.ENDIF.ENDMETHOD.
- 增强 get_data方法
me->core_object->ms_cust_data = corresponding #( me->core_object->ms_cust_data ).if me->core_object->ms_cust_data-active eq abap_true.assign component 'ZZBPNM' of structure cs_data to field-symbol(<fs_name>).if sy-subrc eq 0.me->core_object->ms_cust_data-zzbpnm = <fs_name>.endif.assign component 'ZZFRDM' of structure cs_data to field-symbol(<fs_zzfrdm>).if sy-subrc eq 0.<fs_zzfrdm> = me->core_object->ms_cust_data-zzfrdm.endif.assign component 'ZZCZJ' of structure cs_data to field-symbol(<fs_zzczj>).if sy-subrc eq 0.<fs_zzczj> = me->core_object->ms_cust_data-zzczj.endif.assign component 'ZZCBZ' of structure cs_data to field-symbol(<fs_zzcbz>).if sy-subrc eq 0.<fs_zzcbz> = me->core_object->ms_cust_data-zzcbz.endif.assign component 'FOUNDATIONDATE' of structure cs_data to field-symbol(<fs_fdate>).if sy-subrc eq 0.<fs_fdate> = me->core_object->ms_cust_data-foundationdate.endif."更新change logdata:lt_change_log type fpmgb_t_changelog,ls_change_log type fpmgb_s_changelog.clear ls_change_log.ls_change_log-line_index = 1.ls_change_log-name = 'ZZBPNM'.get reference of <fs_name> into ls_change_log-new_value.insert ls_change_log into table lt_change_log.clear ls_change_log.ls_change_log-line_index = 1.ls_change_log-name = 'ZZFRDM'.get reference of <fs_zzfrdm> into ls_change_log-new_value.insert ls_change_log into table lt_change_log.clear ls_change_log.ls_change_log-line_index = 1.ls_change_log-name = 'ZZCZJ'.get reference of <fs_zzczj> into ls_change_log-new_value.insert ls_change_log into table lt_change_log.clear ls_change_log.ls_change_log-line_index = 1.ls_change_log-name = 'ZZCBZ'.get reference of <fs_zzcbz> into ls_change_log-new_value.insert ls_change_log into table lt_change_log.clear ls_change_log.ls_change_log-line_index = 1.ls_change_log-name = 'FOUNDATIONDATE'.get reference of <fs_fdate> into ls_change_log-new_value.insert ls_change_log into table lt_change_log.me->core_object->flush( exporting it_changelog = lt_change_log ).endif.
- 增强底层类CL_FPM_BOL_BASE->CREATE_ROOT_ENTITY方法
(本例使用的是implicit enhancement, 但是增强类方法建议用Exit实现(pre, post, overwrite))
METHOD create_root_entity.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Class CL_FPM_BOL_BASE, Method CREATE_ROOT_ENTITY, Start A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1 ZIM_PRO_ORGANIZATION_NO. "active versionIF iv_object_name = 'ZPROPORG'. "Entity nameDATA:zlo_bol_core type ref to cl_crm_bol_core,zlo_entity_factory type ref to cl_crm_bol_entity_factory,zlt_param type crmt_name_value_pair_tab,l_num type c LENGTH 5.FIELD-SYMBOLS:<zls_param> like line of zlt_param.*----- root objects are created via entity factoryzlo_bol_core = cl_crm_bol_core=>get_instance( ).zlo_entity_factory = zlo_bol_core->get_entity_factory( iv_object_name ).zlt_param = zlo_entity_factory->get_parameter_table( ).LOOP AT zlt_param ASSIGNING <zls_param>.ASSIGN COMPONENT 'NAME' OF STRUCTURE <zls_param> TO FIELD-SYMBOL(<name>).ASSIGN COMPONENT 'VALUE' OF STRUCTURE <zls_param> TO FIELD-SYMBOL(<value>).IF <name> IS ASSIGNED AND <value> IS ASSIGNED.CASE <name>.WHEN 'ZPROPORG'.CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'EXPORTINGobject = 'ZW_GSCQBM'EXCEPTIONSforeign_lock = 1object_not_found = 2system_failure = 3OTHERS = 4.IF sy-subrc = 0.CALL FUNCTION 'NUMBER_GET_NEXT'EXPORTINGnr_range_nr = '02'object = 'ZW_GSCQBM'IMPORTINGnumber = l_numEXCEPTIONSinterval_not_found = 1number_range_not_intern = 2object_not_found = 3quantity_is_0 = 4quantity_is_not_1 = 5interval_overflow = 6buffer_overflow = 7OTHERS = 8.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'EXPORTINGobject = 'ZW_GSCQBM'EXCEPTIONSobject_not_found = 1OTHERS = 2.ENDIF.<value> = l_num.ENDIF.WHEN OTHERS.ENDCASE.ENDIF.ENDLOOP.ro_created_entity = zlo_entity_factory->create( zlt_param ).CHECK ro_created_entity IS BOUND.TRY.ro_created_entity->reread( ).CATCH cx_bol_exception.IF ro_created_entity->alive( ) = abap_false.CLEAR ro_created_entity.RETURN.ENDIF.ENDTRY.EXIT.
ENDIF.
ENDENHANCEMENT.
*$*$-End: (1)---------------------------------------------------------------------------------$*$*DATA:lo_bol_core TYPE REF TO cl_crm_bol_core,lo_entity_factory TYPE REF TO cl_crm_bol_entity_factory,lt_param TYPE crmt_name_value_pair_tab,lo_rtti TYPE REF TO cl_abap_typedescr.FIELD-SYMBOLS:<ls_dvalues> TYPE any,<lt_dvalues> TYPE ANY TABLE,<ls_param> LIKE LINE OF lt_param,<lv_value> TYPE simple,<lv_name> TYPE clike.*----- root objects are created via entity factorylo_bol_core = cl_crm_bol_core=>get_instance( ).lo_entity_factory = lo_bol_core->get_entity_factory( iv_object_name ).lt_param = lo_entity_factory->get_parameter_table( ).*----- get runtime type descriptorIF ir_default_values IS BOUND.lo_rtti = cl_abap_typedescr=>describe_by_data_ref( ir_default_values ).*----- which type cateogry?CASE lo_rtti->kind.*----- structureWHEN cl_abap_typedescr=>kind_struct.ASSIGN ir_default_values->* TO <ls_dvalues>.*----- tableWHEN cl_abap_typedescr=>kind_table.ASSIGN ir_default_values->* TO <lt_dvalues>.ENDCASE.ENDIF.*------ structure?IF <ls_dvalues> IS ASSIGNED.LOOP AT lt_param ASSIGNING <ls_param>.ASSIGN COMPONENT <ls_param>-name OF STRUCTURE <ls_dvalues> TO <lv_value>.IF sy-subrc = 0.<ls_param>-value = <lv_value>.ENDIF.ENDLOOP.*----- name-value table?ELSEIF <lt_dvalues> IS ASSIGNED.LOOP AT <lt_dvalues> ASSIGNING <ls_dvalues>.ASSIGN COMPONENT cv_comp_name OF STRUCTURE <ls_dvalues> TO <lv_name>.IF sy-subrc <> 0.EXIT.ENDIF.ASSIGN COMPONENT cv_comp_value OF STRUCTURE <ls_dvalues> TO <lv_value>.IF sy-subrc <> 0.EXIT.ENDIF.READ TABLE lt_paramWITH KEYname = <lv_name>ASSIGNING <ls_param>.CHECK sy-subrc = 0.<ls_param>-value = <lv_value>.ENDLOOP.ENDIF.*------ create from entity factoryro_created_entity = lo_entity_factory->create( lt_param ).CHECK ro_created_entity IS BOUND.TRY.ro_created_entity->reread( ).CATCH cx_bol_exception.IF ro_created_entity->alive( ) = abap_false.CLEAR ro_created_entity.RETURN.ENDIF.ENDTRY.ENDMETHOD.
MDG NWBC设置默认值相关推荐
- mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题
1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...
- Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4 为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift ...
- PowerDesigner中如何给字符串字段设置默认值 .
参考:http://www.cnblogs.com/navy235/archive/2011/10/18/2216443.html 在PowerDesigner12.5中,给varchar或nvarc ...
- Elasticsearch 设置默认值的三种方式
1.实战问题 在使用 Elasticsearch 过程中,不免还会有 Mysql 等关系型数据库的使用痕迹,以下两个都是实战开发问到的问题: Elasticsearch 新增字段,能在 Mapping ...
- mysql给字段设置默认值,以及mysql的严格模式
一.背景 在插入数据库时,报错#1364,后来才知道是字段在创建的时候,没有设置默认值的原因.关于默认值,我们都知道设置默认值为0或者null的时候,就算我们不插入该字段,数据库也会自动按照默认值填充 ...
- html5下拉列表默认值,element-ui中的select下拉列表设置默认值方法_简单_前端开发者...
element-ui中的select下拉列表如何设置默认值? 在element-ui的运用中,涉及到了select下拉列表.项目中需要将select的默认值给展示出来 那如何修改呢? 上element ...
- MySql折腾小记二:text/blog类型不允许设置默认值,不允许存在两个CURRENT_TIMESTAMP...
2019独角兽企业重金招聘Python工程师标准>>> 在 CYQ.Data 数据框架的反向工程中,遇到MySQL的问题又2个,记录下先. 1:对于时间的默认值,为:CURRENT_ ...
- 采购订单增强(根据公司代码、采购订单类型等相关订单信息给采购订单税码设置默认值)
根据公司代码.采购订单类型等相关订单信息给采购订单税码设置默认值: 使用BADI及方法: BADI : ME_PROCESS_PO_CUST Method: PROCESS_ITEM 在Method ...
- jqueryeasyui datebox 设置默认值
2019独角兽企业重金招聘Python工程师标准>>> jqueryeasyui datebox 设置默认值 记录坑点: 1.setValue 设置默认值,大家用的时候都说 ...
最新文章
- jsp 出现cannot be resolved to a type问题解决办法
- 2021宁夏英语高考成绩查询,2021宁夏高考成绩官方查询时间及入口
- Mybatis与Hibernate的详细对比
- 正则表达式中的量词(限定符)含义的准确理解
- js如何获取服务器端时间?
- 【转】温故之.NET 异步
- nginx作用_云服务器:详解Nginx启用proxy_buffer缓冲
- Vim 可视化模式入门
- 机器学习基础算法29-EM实践
- Python3——通用序列操作
- kali linux安装maven
- 使用FileZilla删除乱码名称文件
- Nature communications
- pycharm 运行celery_调试celery遇到的坑
- 【信号处理】基于Matlab实现男女音变声系统
- 基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
- tiup uninstall
- xmind 文件 打开后会在当前目录生成 configuration,p2和workspace目录,artifacts.xml文件 解决
- 如何通过mac微信版把文件传到手机上?
- 马氏距离(Mahalanobis Distance)介绍与实例