




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一,WD_THIS与WD_CONTEXT定义了controller之后,至少有两个attributes被预订以了。只有controller methods可以访问attributes。这两个标准的attributes是:l,WD_THISWD_THIS是指向本地controller interface的self-reference。这个attribute必须与ABAP的selfreference ME区分开。后者不能够应用到任何controller的源代码中。WD_THIS是指向当前controller的interface的reference(IF_),代表着生成的class的所有功能。它也可以用来访问web dynpro的标准功能比如验证。2,WD_CONTEXTWD_CONTEXT是指向controller context root node的reference,进而可以访问整个context。对controller context的访问以这个reference开始。二,WD_COMP_CONTROLLER如果其他的controller在properties tab中将component controller维护成used controller,额外的attributes便会被自动创建他便是:WD_COMP_CONTROLLER它是指向component controller的reference。通过这个reference,component controller的所有methods和public attributes都可以被访问(wd_comp_controller-)。对于所有其他的controllers,即使被声明为Used controllers,也不会有类似的reference被创建。不过这并不意味着用户定义的methods和public attributes不能被访问,不过reference首先要被evaluated。要声明指向used controller的reference必须使用下面的语句:DATA:lo_ctrl TYPE REF TO ig_.Lo_ctrl = wd_this-get_ctr().三,User Defined Attributes1,public在attributes tab,可以为controller定义额外的attributes。如果设置了public flag,这些attributes就可以被web dynpro component内的其他controllers访问。Attributes不能放于component interface。如果要在controller methods中访问public controller attributes,必须使用reference variable WD_THIS.访问同一个component下的其他controllers定义的public attributes与访问其他controllers的methods方式一样。2,privated对于出view controller之外的其他所有的controllers,attributes可以是privated的也可以是public的。四,如何读取,修改,添加和删除存储在controller context中的信息1,Accessing the context Nodes And Node elements at RuntimeController attributes可以为整个controller提供data objects。然而,不能够将UI elements properties绑定到这些attributes上。UI element properties只能绑定在controller context中定义的variables。如果数据需要在controllers间共享这种层级的数据存储是可取的。在runtime访问controller context需要相应的web dynpro methods的知识。下面的部分将要阐述如何读取,修改,添加和删除存储在controller context中的信息。(1)Accessing a context Node要访问context element或者context attribute,首先你需要一个相关context node的reference。关于访问context node的两点:对于每一个controller(),会生成一个名字为IF_的本地interface对于controller context的每一个Node ,在这个interface中会生成一个常量WDCTX_,它的value便是node name的大写。这个常量用来访问context node。Context root node可以通过标准属性WD_CONTEXT来访问。Context root node的child nodes可以通过方法get_child_node()来识别。这个方法返回一个node instance类型为IF_WD_CONTEXT_NODE的reference。Get_child_node()方法需要node的name,还可以有要访问的node所属的parent node的element的index,如果不提供这个index,就会缺省使用lead selection index。对于无关的nodes,index可以被忽略,因为context root node只有一个在lead selection中的element。访问的pendent node的特殊方式可以通过方法path_get_node(path=)。作为parameter,到desired node的完整path传给这个method。Path由node name和element indices组成(例如.)。如果忽略了element index ,sub node instance 由superordinate node在lead selection的element确定。示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).(2)Accessing a Node Element访问了context node,这个node在lead selection中的element的reference可以通过method get_element()得到。这个方法返回一个element的reference,类型为IF_WD_CONTEXT_ELEMENT。Index为n的element可以通过method get_element(index)来访问。Collection中element的数量可以通过method get_element_count()来得到。(3)获得context node和node elements的reference的方法总结:动作 方法通过名称访问子节点Context node 的referenceLo_nd_ = wd_context-get_child_node( name = wd_this-wdctx_ )获得首选元素Lead selection中element的referenceLo_el_ = lo_nd_-get_element( ).获得序号为N的元素Index为n的element的referenceLo_el_ = lo_nd_-get_element( index = n ).获得集合中的元素数目Collection中elements的数量N = lo_nd_-get_element_count( ).2,Reading and changing Attribute Values第一,读取属性值(Reading)Web dynpro framework提供了一系列的方法用来访问一个node element的attributes或者一个context node的所有elements的attributes。(1)Accessing Attributes of a Single Node Element一旦你获得了一个node element的reference,有两种方法可以获得这个element的attribute values:node element的任何attribute都可以通过方法get_attribute()来获得。Attribute的name必须作为参数传入,而attribute的value将会作为参数传出。示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lo_el_flights TYPE REF TO if_wd_context_element.DATA lv_connid TYPE wd_this-element_flights-connid.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_el_flights = lo_nd_flights-get_element( ).Lo_el_flights-get_attribute( EXPORTING Name = CONNID IMPORTING Value = lv_connid ).静态定义的attributes可以通过调用method get_static_attributes()来获得。一个structure将作为参数被传出。Target structure可以与node structure不同。这种情况是可能的是因为structure elements被单独得copy到target structure。DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lo_el_flights TYPE REF TO if_wd_context_element.DATA ls_flights TYPE wd_this-element_flights-connid.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_el_flights = lo_nd_flights-get_element( ).Lo_el_flights-get_static_attributes( IMPORTING Static_attributes = ls_flights).下面两点非常重要:A,对于一个controller context的每一个node ,structure type element_node在interface IF_中会被自动生成。Node的类型与element_node的类型一样。如果node没有类型,structure fields便是组成node element的attributes。这个constant可以用来定义一个变量,可以通过上面例子中的方法填充。B,另外,对于一个controller context的每一个node ,一个标准的table type elements_也会在interface IF_中自动生成。这个table的line type便是element_。这个constant可以用来定义一个internal table用来存放多个node elements的attributes。获得所有node elements的attributes的示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lt_flights TYPE wd_this-elements_flights.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_nd_flights-get_static_attributes_table( IMPORTING Table = lt_flights).通过method get_static_attributs_table(),所有elements的attributes都可以返回到internal table中。要想获得用户选择的多个行项目的数据,就需要调用方法get_selected_elements()。这个方法将所有选中的elements放到一个internal table中(type为WDR_CONTEXT_ELEMENT_SET)。这个internal table的每一行都是一个selected element的reference。为了选择一个context element,用户就需要在相应的table line上做标记,尽管lead selection的element都是dark orange的,相关的context element并不会自动被选择。因此,当调用method get_selected_elements()时,application必须指明lead selection的element是否被返回即使并没有显式选择它。这通过parameter INCLUDING_LEAD_SELECTION来确定。第二,Changing the attribute values of a node element一旦有了到一个node element的reference,你不仅可以使用相应的getter方法读取attribute values,你还可以通过相应的setter方法修改attribute values。方法set_attribute()可以用来修改node element的任何attribute value。可以通过set_static_attributes()修改静态定义的多个attributes。修改单个attribute value的示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lo_el_flights TYPE REF TO if_wd_context_element.DATA lv_connid TYPE wd_this-element_flights-connid.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_el_flights = lo_nd_flights-get_element().Lo_el_flights-set_attribute( EXPORTING Name = CONNID Value = 0405)修改element的多个属性的示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lo_el_flights TYPE REF TO if_wd_context_element.DATA ls_flights TYPE wd_this-element_flights.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_el_flights = lo_nd_flights-get_element().Ls_flights-carrid = AE.Ls_flights-connid = 0123.Lo_el_flights-set_static_attributes( EXPORTING Static_attributes = ls_flights ).第三,总结获得和修改一个controller 的node 的atrributs的代码总结如下:动作 方法 读取attribute 的valueDATA: lv_ TYPE wd_this-element_-.Lo_el_-get_attribute( EXPORTING Name = IMPORTING Value = lv_ ).读取多个静态attribute的valueDATA:ls_ TYPE wd_this-element_.Lo_el_-get_static_attributes( IMPORTING Static_attributes = ls_ ). 读取所有node elements的静态attributes的valueDATA: lt_node TYPE wd_this-elements_.Lo_nd_-get_static_attributes_table( IMPROTING Table = lt_ ). 修改单个attribute 的value DATA: lv_ TYPE wd_this-element_-.Lv_ = Lo_el_-set_attribute( EXPORITNG Name = ” Value = lv_ ).修改一个node element的多个attributesDATA: ls_ TYPE wd_this-element_.Ls_- = .Lo_el_-set_static_attributes(EXPORTING Static_attributes = ls_ ). 3,Adding new elements to a context node将新的element加入到context node需要分两步走,第一步是要创建可以添加到指定context node的element。定义了attributes value之后,新的element就可以被加入到context node中。这就像在internal table中插入一行一样。第一步是创建正确line type的work area的cell values。第二步是将work area插入到internal table。(1)Creating a new node element为了创建添加到指定context node的node element,首先要确定这个context node的reference。可以通过标准attribute context_node的方法get_child_node()来获得。示例代码如下:DATA:lo_nd_flights TYPE REF TO if_wd_context_node.Lo_nd_flihgts = wd_context-get_child_node( name = wd_this-wdctx_flights ).一旦得到这个reference,方法create_element()用来创建新的element。Static attributes的初始值可以通过参数static_attributes_values或者setter方法set_attribute或set_static_attributes()来设置。不过现在这个element还不是context node的一部分。示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lo_el_flights TYPE REF TO if_wd_context_element.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_el_flights = lo_nd_flights-create_element().Lo_el_flights-set_attribute( name = CARRID value = ZH ).Lo_el_flights-set_attribute( name = CONNID value = 0400).(2)Adding elements to a context node最后这个element就可以通过node的method bind_element()加入进来。这个method有两个参数:1, Element reference传给参数new_item2,参数set_intial_elements用来确定elemen是简单的添加到element collection中(value = abap_false)还是替换所有的在collection已经存在的elements(value = abap_true)示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA lo_el_flights TYPE REF TO if_wd_context_element.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Lo_el_flights = lo_nd_flights-create_element().Lo_el_flights-set_attribute( name = CARRID value = ZH ).Lo_el_flights-set_attribute( name = CONNID value = 0400).Lo_nd_flights-bind_element( New_item = lo_el_flights Set_intial_elements = abap_false)(3)Binding a structure to a context node在ABAP程序中,datasets是通过structures来实现的。然而,为了在UI上显示structure elements,structure content必须copy到一个context element。这意味着new element必须被定义,attribute values必须被设置并被绑定到相应的context node上。有更简便的方法将structure comtent copy到context node的new element上。不是使用bind_element()并传送element reference而是通过方法bind_structure()通过参数new_item来传送structure。对bind_structure()方法已经存在的可以被扩展或替代,通过参数set_intial_elements来控制。示例代码如下:DATA lo_nd_flights TYPE REF TO if_wd_context_node.DATA ls_flights TYPE wd_this-element_flights.t.Lo_nd_flights = wd_context-get_child_node( name = wd_this-wdctx_flights ).Ls_flights-carrid = AA.Ls_filgts-connid = 0017.Lo_nd_flights-bind_structure( New_item = ls_flights Set_intial_elements = abap_false)(4)Binding an internal table to a context node有相同结构的多个datasets在ABAP中是通过internal table来处理的。为了在UI中显示datasets,internal table的内容需要被copy到相应数目的context elements中。最好的方法是通过method bind_table()来实现。Internal table被传送给参数n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国共享经济平台合规经营与可持续发展研究
- 大型教学活动方案
- 聚氯乙烯纤维行业市场发展分析及投资前景研究报告2025-2028版
- 矿山车辆驾驶员聘用合同(含安全生产培训)
- 绿色节能型厂房租赁安全管理合同
- 成都住宅租赁合同附带智能家居升级服务
- 公园景观草皮设计与施工合同
- 旅游景区场地调研与旅游开发合同
- 大众车置换活动方案
- 垃圾慢跑活动方案
- 2025至2030年中国侧背光源行业投资前景及策略咨询报告
- 2025至2030年中国叉车油缸行业市场发展调研及投资前景展望报告
- 汽车美容质量管理制度
- 躁动患者约束带的使用及护理
- 云南省大理2025年八年级下学期语文期末模拟考试卷三套及答案
- 国家开放大学国开电大《统计与数据分析基础》形考任务1-4 参考答案
- 风电居间合同协议书
- 浙江开放大学2025年《社会保障学》形考任务4答案
- 教育数字化转型背景下的小学英语教学研究
- 酱料研发知识培训课件
- 2025核辐射突发事件放射性污染人员洗消流程及技术要求
评论
0/150
提交评论