abap--全局类信息读取的过程分析

这篇博客详细介绍了如何使用ABAP读取全局类的各种信息,包括属性、方法、事件、类型、继承关系、接口实现等。通过调用一系列的ABAP函数模块,如SEO_CLASS_TYPEINFO_GET、SEO_ATTRIBUTE_READ_ALL等,从数据库中获取并处理类的定义和描述。同时,文章还涵盖了处理继承和接口实现的步骤,以及过滤不可见元素的过程。

一、读取该类的所有信息
   call function 'SEO_CLASS_TYPEINFO_GET'
      * - get attributes
          call function 'SEO_ATTRIBUTE_READ_ALL'
             * get all attribute originals from db(seocompo/seoo_cmptype_attribute)
             * fetch attribute definitions(seocompodf)
             * fetch texts(seocompotx)
                * care of attributes without description in modification language
                * if not found logon language,return DE language
          *extract aliases from attributes
      *-Get  Method
          call function 'SEO_METHOD_READ_ALL'
             * get all method originals from db(seocompo/seoo_cmptype_method)
             * fetch method definitions(seocompodf)
             * fetch texts(seocompotx)
                * care of method without description in modification language
                * if not found logon language,return DE language
          *extract aliases from methods
      *- Get Events
          call function 'SEO_EVENT_READ_ALL'
             * get all attribute originals from db(seocompo/seoo_cmptype_event)
             * fetch event definitions(seocompodf)
             * fetch texts(seocompotx)
                * care of event without description in modification language
                * if not found logon language,return DE language
          *extract aliases from event
      *- Get Events
          call function 'SEO_EVENT_READ_ALL'
             * get all attribute originals from db(seocompo/seoo_cmptype_event)
             * fetch event definitions(seocompodf)
             * fetch texts(seocompotx)
                * care of event without description in modification language
                * if not found logon language,return DE language
          *extract aliases from event
=================================================
      *- Get event and method's subcomponents
=================================================
      *- Get Types
          call function 'SEO_TYPE_READ_ALL'
             * get all type originals from db(seocompo/seoo_cmptype_type)
             * fetch type definitions(seocompodf)
             * fetch texts(seocompotx)
                * care of event without description in modification language
                * if not found logon language,return DE language
      *- Get parent class
          call function 'SEO_INHERITANC_READ'
             * get inheritance(iseometarel/seor_reltype_inheritance)
             * fetch redefinitions(seoredef)
      *- Get interface implementations
          call function 'SEO_IMPLEMENTG_READ_ALL'
             * get implementings(iseometarel/seor_reltype_implementing)
             * fetch implementing detail(seoredef)
      *- Get typegroup usages
          call function 'SEO_TYPEPUSAGE_READ_ALL'
             * get typegroup usages(seotypepls/seot_tputype_typepusage 0)
      *- Get class deferreds
          call function 'SEO_CLSDEFERRD_READ_ALL'
             * get implementings(seotypepls/seot_tputype_classdeferred 1)
      *- Get interface deferreds
          call function 'SEO_INTDEFERRD_READ_ALL'
             * get implementings(seotypepls/seot_tputype_interfacedeferred 2)
=================================================
      * explore inheritance if requested
              'SEO_CLASS_TYPEINFO_GET'
      * explore interfaces if requested
             call function 'SEO_INTERFACE_TYPEINFO_GET'
=================================================

二、读取该类的所有父类(abap是单类继承)的信息,并添加到相关数据内表
   call method explore_relations
   *Get Superclass and all implement interfaces's attribute(attribute,Method,event,types,implement.alias....)
        * inherited components
         call function 'SEO_CLASS_RESOLVE_INHERITANCE'
              call function 'SEO_CLASS_INHERITANCE_PATH_GET'
              loop
×取父类的所有信息
                  call function 'SEO_CLASS_TYPEINFO_GET'
×删除私有不可见的属性
                 delete atts where exposure = seoc_exposure_private.
                 delete mets where exposure = seoc_exposure_private.
                 delete mets where cmpname = seok_mtdname_constructor.
                 delete mets where cmpname = seok_mtdname_class_constructor.
                 delete mets where cmpname = seok_mtdname_destructor.
                 delete eves where exposure = seoc_exposure_private.
                 delete typs where exposure = seoc_exposure_private.
                 delete alis where exposure = seoc_exposure_private.
×将可见的属性添加合并到类信息内表
                 insert lines of:
                         atts into attributes    index 1,
                         mets into methods       index 1,
                         eves into events        index 1,
                         typs into types         index 1,
                         imps into implementings index 1,
                         alis into aliases       index 1.
              endloop.

三、读取该类所有实现类的信息,并添加到相关数据内表
        * implemented interfaces
         call function 'SEO_CLASS_RESOLVE_IMPLEMENTGS'
×取所有的实现接口
             call function 'SEO_CLASS_TYPEINFO_GET'
                  exporting
                     clskey        = clskey
                     version       = version
                     state         = state
                  importing
                     implementings = implems.
×循环提取所有的实现接口的信息
              loop implems.
                 call function 'SEO_INTERFACE_TYPEINFO_GET'
×将可见的属性添加合并到类信息内表
                 insert lines of:
                        atts into attributes index 1,
                        mets into methods    index 1,
                        eves into events     index 1,
                        alis into aliases    index 1,
                        pars into parameters index 1,
                        excs into exceps index 1.
              endloop. 

相关函数和数据表信息参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/12/07/1922844.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值