SAP WebClient UI开发工具中attribute文件夹展开的实现原理分析
For project reason I need to figure out the logic how the field list is assembled when folder “Attributes” for a given context node is expanded in CRM WebClient UI workbench:
Debugging entry point is CL_BSP_WD_GUI_LIST_TREE~ON_EXPAND_NO_CHILDREN:
There are three kinds of fields which will appear under “Attributes” folder:
(1) direct attribute
get the public method list of context node class with naming convention that method name starts with GET_, and have one importing parameter ATTRIBUTE_PATH and one returning parameter VALUE.
And then extract the attribute name and stored it to internal table lt_direct_attribute.
Once the direct attribute of the current context node class has been extracted, there is a recursive call with the same extraction logic on the super class.
Since I am using UI component BT116H_SRVO, context node BTADMH to debug, the inheritance hierarchy from children to parent in this example is: CL_BT116H_S_DETAILS_CN00 -> CL_CRM_UIU_BTADMINH_CN -> CL_CRM_UIU_BT_EASYCNDENTRY_FCN -> CL_BSP_WD_CONTEXT_NODE -> CL_BSP_MODEL For example, there is a method GET_BILL_BLOCK_STATUS with the specified signature,
so BILL_BLOCK_STATUS is regarded as one direct attribute for this context node:
(2) implicit attribute Retrieved from method get_implicite_cnode_attr,
Attributes defined in DDIC structure CRMST_ADMINH_BTIL are regarded as implicit attribute.
This structure is bound to context node BTAdminH in Genil model editor.
(3) AET attribute ( Application Enhancement Tool )
In fact AET attribute could be regarded as a special kind of implicit attribute as it is physically appended to EEW structure just the same way as implicit attribute. AET fields are retrieved via method get_extension_cnode_attr:
Those fields are retrieved with API cl_axt_uif_access=>get_ext_attributes and marked with prefix EXT in UI component workbench:
You can use the following report to print out the attribute list of a given UI component’s context node:
REPORT zget_ui_context_node_attr.
PARAMETERS: comp TYPE string OBLIGATORY DEFAULT 'BT116H_SRVO',
cs TYPE string OBLIGATORY DEFAULT 'CL_BT116H_S_DETAILS_CN00'.
DATA(lo_model) = cl_bsp_wd_appl_model=>get_appl_model(
EXPORTING iv_bsp_appl = CONV #( comp )
iv_model_type = 'CL_BSP_WD_APPL_MODEL_DDIC' ).
DATA(lt_attr) = lo_model->get_context_node_attr( iv_context_node_class = CONV #( cs )
iv_mark_ext_attributes = 'X' ).
LOOP AT lt_attr ASSIGNING FIELD-SYMBOL(<attr>).
WRITE:/ <attr>.
ENDLOOP.
- Spring cache简单使用guava cache
- SpringMVC参数校验(针对`@RequestBody`返回`400`)
- Java8学习(3)- Lambda 表达式
- Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式
- java中byte, iso-8859-1, UTF-8,乱码的根源
- 如何启动一个本地静态服务器
- Hello ReactJS
- git合并历史提交
- 常用连续型分布介绍及R语言实现
- banner自动生成工具,ascii文字展示
- 快速排序
- 2016.07 第2周 群问题分享
- 游戏开发 - Math对象相关知识讲解
- 海量Web日志分析 用Hadoop提取KPI统计指标
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SocketFTP多线程处理
- 面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》
- Xray配合awvs漏洞扫描
- 无聊的MISC题解
- MISC-convert | 旋转跳跃
- MISC-多彩
- Web-高明的黑客
- CVE-2017-7529 Nginx整数溢出漏洞分析
- 【Vulnhub】pegasus
- 2019-11-20-app专项测试【Android电量】Battery Historian耗电分析
- CVE-2017-7529 Nginx整数溢出漏洞分析2
- Redis find hot key 牛X!
- Python加水印
- 自动化运维实践 | Ansible变量
- Python-SSH日志审计