一、20181217-20181226笔记
二、相关服务
1、
事务码:SICF
默认SERVICE,执行。
Service:
default_host/sap/option/*
default_host/sap/public/bc/*
default_host/sap/bc/wdvd
default_host/sap/bc/webdynpro/*
2、
在应用WEBDYNPRO之前,首先要将你的APPLICATION SERVER中的FQDN配置好,也就是说您的WS必须是
Full Qualified Domain Name,如:hostname.companyname.com这种形式,任何以IP地址或者机器名称为命名
的URL地址都不能正常访问WEBDYNPRO,因此在开始开发WEBDYNPRO之前,首先我们要和BASIS确认服务器是
Full Qualified Domain Name即FQDN。
三、界面、元素介绍
1.ELEMENTS:
Context上下文的参数
添加元素
添加单个元素
按上下文添加
展示文本
删除
按钮
可折叠块
文本输入框)
说明文本)
表控制
VIEW_CONTAINER_UIELEMENT 视图组建控制器(一般用来放ALV、SELECT_OPTIONS或其他组建)
2.APPLICATION STRUC
3.架构说明
一般的程序框架如图:
1)组建控制器是定义的全局的组建,与视图相似,组建控制器是一个程序对外的部分,是整个程序最开始执行的环节 ,也是控制多个视图间数据交互的纽带,一般考虑到程序的扩展性会优先使用组件控制器,然后关联各视图。
2)组建接口是用来引入一些外部组建接口的。引入的组建接口可添加到相应的视图窗口中使用
3)视图是一个DYNPRO程序显示的部分,可有多个视图,视图见可跳转,每个视图中需要显示的字段结构表等信息需要单独定义在该视图的节点中(CONTEXT)注意:组建控制器中也可以添加节点,作为全局节点属性,如果将它与某视图中的节点进行MAPPING,则可以再视图结束后,程序没结束的时候保存节点属性。一般界面跳转如此做
4)窗口与视图相似,只是每个程序每次显示只能有一个单独的窗口,可定义多个窗口,窗口间跳转,与视图跳转相似,都是在Inbound Plugs(入站)和Outbound Plugs(出站)里做对应的绑定。
5)应用程序,单独的执行程序。
4.普通样例展示
5.样例布局展示
6.布局说明
一般是以TRAY为折叠区域划分设计屏幕,(此处为两个,1是查询条件,2是查询结果)
在某个区域中,可用GROUP来分组。(看个人习惯)
区域的Layout一般选择MatrixLayout (MatrixHeadData 行开头紧接着 HEAD,没有新的HEAD,会一直往后排。新的HEAD,另起一行)
常用属性:
是否灰显,EDITABLE
只显示
这个是值建议,就像淘宝输入 手机 会有手机壳,手机膜。。。
绑定的VALUE
可见
占的宽度,或者比例 一般200,250,150,TRAY 一般95%之类
事件,每种ELEMENT对应事件不同,有field的输入,按钮的事件。。。
单元格格式
字段占列数,比如文本框,我们可以设置占5格等(前提是容器TRAY,CONTAINER的COL设置的够)
格式
以上是些常用的属性。
7.视图的整体介绍
Properties:VIEW的属性,一般引入一些控件,alv,select-option等
Layout:视图布局,显示的样式,字段排版
Inbound Plugs:转入的连接(内向链接),一般视图跳转需要带些参数什么的,需要在这里定义plugs和参数相关信息
Outbound Plugs:转出的连接(外向链接),对Inbound对应,传出的连接和参数
Context:节点。视图使用的表,结构,全部放在这里。一般0-1/1-1/0-n三种。前两种相当于工作区,结构,后一种是内表。1-1时需要勾选Initialization Lead Selection
Attributes:视图属性,可在本视图的各方法中使用
Action一般是对应ELEMENT对应的EVENT产生的
Methods:方法
四、SELECT_OPTIONS
1、引入组件
WDR_SELECT_OPTIONS
2、组件加入视图
3、在layout中添加按钮和ViewContainerUIElement
只写ID即可
在视图的Attributes页签中,添加组件对象
初始化代码:
.
DATA:IF_WD_COMPONENT_USAGE,
IWCI_WDR_SELECT_OPTIONS,
.
WD_THIS->WD_CPUSE_SELECT_OPTION
LO_CP_USAGE->HAS_ACTIVE_COMPONENT.
->CREATE_COMPONENT
ENDIF.
"选择屏幕的引用
WD_THIS->WD_CPIFC_SELECT_OPTION
"修改SELECT_OPTIONS
->LO_SELECT_OP->INIT_SELECTION_SCREEN
"设置全局信息
->GD_HANDLE->SET_GLOBAL_OPTIONS(
ABAP_FALSE
ABAP_FALSE
ABAP_TRUE
).
ADD_SELECT_OPTIONS.
WD_THIS->GD_HANDLE->CREATE_RANGE_TABLE
EXPORTING
&1
LT_RANGE"RANGE_TABLE
WD_THIS->GD_HANDLE->ADD_SELECTION_FIELD
EXPORTING
"ID
"描述
LT_RANGE"RANGE_TABLE
必输
.
END-OF-DEFINITION.
订单号'.
订单行项目'.
endmethod.
查询按钮(SEARCH事件)代码:
.
"字段搜索条件
if_wd_context_node.
if_wd_context_element.
wd_this->element_search.
"
if_wd_context_node.
wd_this->Elements_item.
条件
DATA:.
FIELD-SYMBOLS:,
.
*
*
*
*
"得到字段搜索条件的填入值
wd_context->get_child_nodewd_this->).
lo_nd_search->get_element
.
ENDIF.
->get_static_attributes(
IMPORTING
).
"获取TABLE内容
wd_context->get_child_nodewd_this->).
SELECT
LIPS
lt_item
ls_search-VBELN
ls_search-POSNR.
"
GET_RANGE.
WD_THIS->GD_HANDLE->GET_RANGE_TABLE_OF_SEL_FIELD)."此处ID对应上面INIT中的ID
RT_RANGE->&2.
END-OF-DEFINITION.
<FS_VBELN>.
<FS_POSNR>.
"获取TABLE内容
SELECT
LIPS
lt_item
<FS_VBELN>
<FS_POSNR>.
"绑定table传入网页
"将以获取查询信息的内表lt_item绑到NODE中
->bind_table).
"重要,默认是ABAP_TRUE,表示表格每次传值都会刷新ALV框体,
"如果为ABAP_FALSE,则表示每次查询的内容都会往框体里追加
endmethod.
清空按钮(CLEAR事件)代码:
.
"字段搜索条件
if_wd_context_node.
if_wd_context_element.
wd_this->element_search.
"设置字段搜索条件的填入值
wd_context->get_child_nodewd_this->).
lo_nd_search->get_element
.
ENDIF.
ls_search.
->SET_static_attributes
endmethod.
4、嵌入SELECT OPTIONS视图
5、效果:
五、ALV组件的使用
1、引入组件
SALV_WD_TABLE
2、视图引入组件中集成的ALV对象
视图method页签中新建方法
在WDDOMODIFYVIEW里加上 ME->INIT_ALV.
或(WD_THIS->INIT_ALV)
不然不调用方法
将INIT_ALV方法加入到WDDOMODIFYVIEW
INIT_ALV添加初始化代码:
.
DATAIF_WD_COMPONENT_USAGE."①重要的下面要用
DATAIWCI_SALV_WD_TABLE"②重要的下面要用
DATACL_SALV_WD_CONFIG_TABLE."③重要的下面要用
DATAIF_SALV_WD_TABLE_SETTINGS.
DATAIF_SALV_WD_COLUMN_SETTINGS,
CL_SALV_WD_COLUMN,
SALV_WD_T_COLUMN_REF,
SALV_WD_S_COLUMN_REF,
CL_SALV_WD_COLUMN_HEADER.
DATAcl_salv_wd_function_std,
salv_wd_t_function_std_ref,
salv_wd_s_function_std_ref.
"实例LAV组件
WD_THIS->WD_CPUSE_ALV"①
LR_SALV_WD_TABLE_USAGE->HAS_ACTIVE_COMPONENT.
->CREATE_COMPONENT
ENDIF.
"获取参考模型
WD_THIS->WD_CPIFC_ALV"②
"给参数
LR_SALV_WD_TABLE->GET_MODEL"③
"设置ui元素
.
LR_COLUMN_SETTINGS->GET_COLUMNS
设置是否可以输入
.
->SET_READ_ONLY).
"设置ALV按钮
->IF_SALV_WD_FUNCTION_SETTINGS~SET_ENABLED).
->IF_SALV_WD_FUNCTION_SETTINGS~SET_VISIBLECL_WD_TOOLBAR=>E_VISIBLE-).
LR_CONFIG->IF_SALV_WD_FUNCTION_SETTINGS~GET_FUNCTIONS_STD"
LS_FUNCTION.
LS_FUNCTION-R_FUNCTION.
LS_FUNCTION-ID.
'SALV_WD_INPUT_DELETE'.
"隐藏按钮
->set_visiblecl_wd_uielement=>e_visible-).
ENDCASE.
ENDLOOP.
"设置ALV按钮排除
可显示行设置
->IF_SALV_WD_TABLE_SETTINGS~SET_VISIBLE_ROW_COUNT).
"选择模式(黄条)
->IF_SALV_WD_TABLE_SETTINGS~SET_SELECTION_MODECL_WD_TABLE=>E_SELECTION_MODE-).
获得单独字段
LS_COLUMN.
LS_COLUMN-R_COLUMN.
LS_COLUMN-ID.
'ERNAM'.
"
DATACL_SALV_WD_UIE_INPUT_FIELD.
EXPORTING
'ERNAM'."此ID要与COLUMN对应,或者用GET_COLUMNS,然后循环处理列属性
->SET_CELL_EDITOR).
隐藏字段
ENDCASE.
ENDLOOP.
"用宏来设置字段
SET_COLUMN.
LR_COLUMN_SETTINGS->GET_COLUMN).
->DELETE_HEADER
LR_COLUMN->CREATE_HEADER
->SET_TEXT).
-R_COLUMN->SET_POSITION).
"是否显示的字段
->SET_VISIBLE).
END-OF-DEFINITION.
"用宏来隐藏字段
SET_COLUMN_NONE.
LR_COLUMN_SETTINGS->GET_COLUMN).
"排除不显示的字段
->SET_VISIBLE).
END-OF-DEFINITION.
'LGORT'.
'CHARG'.
'LICHN'.
'KDMAT'.
'PRODH'.
'LFIMG'.
'MEINS'.
'VRKME'.
'UMVKZ'.
'UMVKN'.
'NTGEW'.
'BRGEW'.
'GEWEI'.
'VOLUM'.
'VOLEH'.
'VKGRP'.
'SPART'.
设置可见行
设置行选择
设置ALV宽度
设置编辑模式
设置不可编辑模式
设置ALV整体不可编辑
设置滚动条
可处理的
设置空表时显示的文本
使列宽可自动调节
不展示空表
ENDMETHOD.
讲节点参数传入ALV组件
用向导‘魔法棒’添加代码
删减无用代码:
3、控制器中创建组件、全局节点(之前在视图中创建,现在ALV需要绑定数据)
创建组件
可按结构或按下图
可复制MAIN中已创建的
4、在ALV组件中绑定数据到ALV
绑定成功后,DATA变成双向箭头
在视图中,绑定ITEM节点到COMPONENTCONTROLLER的节点,同上
(注,如果ALV数据只在单个VIEW里使用可以在VIEW中,将ITEM节点绑定到ALV的DATA节点)
5、ALV控制器创建,并在窗口中添加
为了程序效果,这里会将原有的TABLE保留,并将ALV放到TABLE下面
在LAYOUT中创建ViewContainerUIElement容器,放在TABLE后面
激活测试
六、字段,表等visiable,enable,read_only控制
今天主要讲一下布局控制:(visiable,enable,read_only)
visiable:可见性,控制字段,组件,分组等是否现实在界面上。一般按条件来控制隐藏的可以在CONTEXT NODE里定义个属性,类型WDY_BOOLEAN
然后再根据条件赋值X:可见空:不可见(visiable使用的较少)
enable:功能性,控制字段,组件,分组等是否功能有效,字段灰色显示。一般用在全局的属性上,例如保存后,全局灰显。定义同上
read_only:最常见属性,控制字段是否可编辑。可控制字段,分组,表等等。。。一般的显示状态和编辑状态切换通过此属性来控制
(相对于displayOnly,displayAsText之类的基本不用,read_only却常用)
(行可编辑,单元格可编辑,可在ITEM中加入READ_ONLY字段,控制对应字段的可编辑,然后在赋值时根据情况来给值)