不知道从什么时候开始,习惯用BOL MODEL来做一些东西的了。某个项目开始正式接触标准主数据的时候,开始了用MAINTAIN BAPI和BUPA的一些FM。然后在一段时间内是以此类的FM来开发的。BP相关的东西还好,标准的FM就那几个FG,感觉不是很难,而且BP相关的表也不是很多,做起来也很容易上手。后来某个机会学习了UI的东西,接触到了BOL这玩意。。。说实话,当时感觉吊炸天了啊,完全不用记多少FM是要找找RELATIONSHIP就好了。。。而且,常用的也不是很多,所以搞起来也还好。搞这个,简单的话呢是不用记太多东西的但下面几个必须要知道:
LV_HEADER_GUID = LNODE_BTADMINH->GET_PROPERTY_AS_STRING( 'GUID' )."获取实体的属性值的
LBTHEADERPARTNERSET ?= LNODE_BTADMINH->GET_RELATED_ENTITY( 'BTHeaderPartnerSet' )."根据名称找关联实体
LVALUE_NODE_ST_H ?= LBTPARTNERALL->GET_FIRST( ). 1..N关系中必须要有的循环等同于LOOP
LVALUE_NODE_ST_H ?= LBTPARTNERALL->GET_NEXT( ). 1..N关系中必须要有的循环等同于ENDLOOP
current->set_property( EXPORTING iv_attr_name = 'STATUS' iv_value = ‘E0007’ )."给实体的属性塞值
至于怎么开始怎么结束完全根据自己的程序功能来决定。
BOL MODEL简例)
ENTITY NAME ENTITY Attribute
oneorder (model)
btorder (root)
btadminh BTOrderHeader
btitems BTHeaderItemsExt
BTAdminI BTOrderItemAll
BTProductI BTItemProductExt unit
BTSchedlinI BTItemSchedlinExt
BTSchedlinI BTSchedlinFirst quantity
BTStatusI BTItemStatusSet
BTStatus BTStatusICurrent
ENTITY从上到下依次是REL来着。。。。简单的一个例子。
下面是一段获取国家的代码仅供参考,分析上面的东西:
IF LNODE_BTADMINH IS BOUND.
LBTHEADERPARTNERSET ?= LNODE_BTADMINH->GET_RELATED_ENTITY( 'BTHeaderPartnerSet' ).
IF LBTHEADERPARTNERSET IS BOUND.
LBTPARTNERALL ?= LBTHEADERPARTNERSET->GET_RELATED_ENTITIES( IV_RELATION_NAME = 'BTPartnerAll' ).
IF LBTPARTNERALL IS BOUND.
LVALUE_NODE_ST_H ?= LBTPARTNERALL->GET_FIRST( ).
CLEAR LV_PARTNER_FCT.
WHILE LVALUE_NODE_ST_H IS BOUND.
LV_PARTNER_FCT = LVALUE_NODE_ST_H->GET_PROPERTY_AS_STRING( 'PARTNER_FCT' ).
IF LV_PARTNER_FCT = 'ZCUTM'.
EXIT.
ENDIF.
LVALUE_NODE_ST_H ?= LBTPARTNERALL->GET_NEXT( ).
ENDWHILE.
IF LV_PARTNER_FCT = 'ZCUTM' AND LVALUE_NODE_ST_H IS BOUND.
LBTPARTNERADDRESS_H ?= LVALUE_NODE_ST_H->GET_RELATED_ENTITY( 'BTPartnerAddress' ).
CLEAR LWA_ADRC.
IF LBTPARTNERADDRESS_H IS BOUND.
LWA_ADRC-COUNTRY = LBTPARTNERADDRESS_H->GET_PROPERTY_AS_STRING( 'COUNTRY' ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.