Webdynpro ABAP 简单剖析

众所周知,WEBDYNPRO是今天来SAP主推的一个面向WEB的MVC编程框架,接触过J2EE的朋友都不会对MVC这种设计模式陌生,WEBDYNPRO ABAP的基本设计思路和很多著名的面向互联网的MVC框架很相似(比如STRUCTS)

SAPNETWEAVER 平台上也有WEBDYNPRO的一些标准应用,譬如PI RWB上面的ALERT CONFIGRATION功能,理解WEBDYNPRO的工作原理,有助于技术顾问在实施项目的时候很好的处理一些相关的异常问题。

前提:在应用WEBDYNPRO之前,首先要将你的APPLICATION SERVER中的FQDN配置好,也就是说您的WS必须是Full Qualified Domain Name,如:hostname.companyname.com这种形式,任何以IP地址或者机器名称为命名的

URL地址都不能正常访问WEBDYNPRO,因此在开始开发WEBDYNPRO之前,首先我们要和BASIS确认服务器是Full Qualified Domain Name即FQDN。

下面就一个简单的例子解剖一下WEBDYNPRO的变成架构和思维模式:

WEBDYNPRO的主要组成部分在下图都已经标出:

 

1 Views: 相当于我们的一个个页面,传统意义上的V(MVC),每个VIEW里面有一个CONTROLLER,CONTROLLER里面有上下文(用来存储相当于我们认为的在每个VIEW范围内的局部变量),EVENT HANDLER,还有属于VIEW的一些HOOK MATHOD等。

 

2 Controller:传统意义上的C(MVC),存储上下文数据节点,METHOD,EVENT,有关页面跳转的OUTBOUND PLUG和INBOUND PLUG等等都存在其中,Component Controller是COMPONENT范围内一个全局的CONTROLLER,所有的VIEW中的Controller

可以和Component Controller进行数据映射,从而达到VIEW之间共享传递数据的功能。

 

3 Windows 相当于VIEWS以及VIEWS之间导航的预定义的集合(STRUCTS也有基本上同样的设计),VIEW之间依靠定义INBOUND PLUG和 OUTBOUND PLUG的NAVIGATION LINK的激发实现导航,我们可以通过OUT_BOUND plug传递参数或者通过VIEW

controller和Component Controller之间的上下文映射实现VIEW之间的数据共享。

 

4 Component Interface: WEBDYNPRO 实现组件复用的基础,WEBDYNPRO应用程序时可以实现组件嵌套的,比如我们开发了一个COMPONENT可以被另一个COMPOPENT使用,WEBDYNPRO的ALV就是个典型的例子。

而Component Interface(包括INTERFACE VIEWS和INTERFACECONTROLLER )是组件暴露出来供给其他组件使用调用。

WEBDYNPRO的开发步骤(简单描述):

1 首先在SE80创建WEBDYNPRO应用

 

2 创建VIEW

 

3 给VIEWS上面拖拽控件:

 

4 创建VIEW的CONTEXT,CONTEXT须和VIEWS上的某些控件的特定属性绑定,这样当我们改变了CONTEXT的某个节点的数据,那么相应控件的值也会跟着改变,比如这个我们创建了CONTEXT的一个节点下的NAME字段用于存放和绑定INPUT BOX里面的VALUE属性。

 

5 建立CONPONENT CONTROLLER中的CONTEXT节点并且和VIEW CONTEXT相应节点映射,这样就相当于把全局变量和局部变量相关联

 

6 建立VIEWS之间的导航,我们需要分别在不同的VIEWS里面插入相应的OUTBOUND 和INBOUND PLUG,并最终在WINDOWS里面建立他们的NAVIGATION LINK。

 

7 我们已经将SOURCE VIEW的CONTROLLER CONTEXT和COMPONENT CONTROLLER 的CONTEXT绑定,按照第五步的方法,将Target VIEW的CONTROLLER CONTEXT和COMPONENT CONTROLLER 的CONTEXT绑定

8 最后在某些事件如 CLICK BUTTON中激发PLUG方法实现页面导航:

 

 

9最后创建WEBDYNPROAPPLICATION,激活所有相关程序并测试运行:

 

运行结果简单地实现了页面导航和VIEWS之间传递值的功能:

posted @ 2017-03-07 13:04  前端客  阅读(1221)  评论(0编辑  收藏  举报