Web Dynpro Window

   上两节的简单的应用程序例子只包含了一个view在一个web dynpro 部件(component)中。本文中开始将介绍一个包含通过导航链接的2个view的程序。本节和下节将介绍一个部件里面的两个views之间的通讯。

每个Web dynpro部件包含至少一个web dynpro 窗体(web dynpro window)。当web 程序嵌入到了窗体中,所有的views将被显示出来。窗体通过abap工作台的窗体编辑器(window editor)编辑。所需要的导航在窗体里面单独的views能够被创建起来。

Web Dynpro窗体包括了所有被显示的窗体的结构,也是通过接口view连接到Web Dynpro程序的。

Web Dynpro窗体的高级功能(Advanced Functions of Web Dynpro Windows)

Window Controller and Window Plugs

每个Web Dynpro窗体包含一个控制器,这个控制器包含context, methods,outbound plugs,inbound plugs。我们可以用插件建立交叉部件(cross-component)的导航。

在一个简单的程序中,导航的起始点是从启动一个View开始的。它是在设计的时候创建的。通过窗体树的context菜单已经在窗体编辑器创建。在一个比较复杂的程序中,用到的inbound plug的事件处理器方法能够动态的判断哪个view首先被显示出来。

Interface View

每个window会自动创建出一个带有独自名字的接口名字。它定义了windows的交叉部件接口。当接口标识设置后,Window的Inbound plugs和outbound plugs会被拷贝到对应的接口view.在window中,事件处理都自动实现了。接口view的插件(plugs)能够用来做交叉部件导航。Inbound plugs用来连接到Web Dynpro应用。

两个Views之间的交互(Navigation Between Two Views)

在一个window里面的views通过导航(navigation links)能够被互相连接。当用户调用了个Web Dynpro程序,在屏幕上首先出来的是起始view. 我们可以触发一个特殊的动作,例如点击按钮从而触发导航(navigation). 按顺序,现在在屏幕上出现的vIew消失,第二个view在屏幕上显示出来。

为了在两个views之间建立导航,必须为第一个view创建inbound plugs和另一个view创建outbound plug. Plug总是访问一个view和从一个view退出的连接点。

Outbound plugs和inbound plugs有不同的属性。

 

Outbound Plugs

Outbound plugs总是下一个导航的开始。他们可以在View controller的任何方法中被调用,如下:

WD_THIS->FIRE_MY_OUTBOUND_PLG().

WD_THIS属性总是View controller的接口IF_<MY_VIEW>的自引用。每次我们为这个view创建一个outbound plug. 方法FIRE_<MY_OUTBOUND_PLUG>_PLG将被加到这个接口。

提示:如果我们为View_1创建了out1,out2,out3三个outbound plugs,在接口IF_VIEW_1里面就会相应的创建出FIRE_OUT1_PLG, FIRE_OUT2_PLG,FIRE_OUT3_PLG三个方法对应创建。

注意:outbound plug属于view的controller,不会包含引起导向目标的信息。他要连接到的下一个view的inbound plug是通过在窗体布局中创建导航链接实现的。

传输参数(Passing Parameters)

通过调用方法FIRE_<MY_OUTBOUND>传输参数。通过在参数表的‘Outbound Plugs’页签输入。

下面的例子,参数Editable被添加到了方法体FIRE_<MY_OUTBOUND>_PLG中。参数类型WDY_BOOLEAN的取值为X(true)或者space(false),所以方法调用可以写成:

WD_THIS->FIRE_MY_OUTBOUND_PLG(EDITABLE = ‘X’ ).

或者

WD_THIS->FIRE_MY_OUTBOUND_PLG(EDITABLE = ‘X’ ).

 Inbound Plugs

Web Dynpro window的inbound plugs总是被先前创建的连接直接调用。这个先前创建的连接起源于outbound plug. 当一个inbound plug被调用时,和这个inbound plug唯一相关联的事件处理方法被调用,这个方法是在inbound plug创建起来的时候被view controller自动创建起来的。此方法在‘Methods’页签中。通常命名规则为HANDLEMY_INBOUND_PLUG:

帮助:当有一个inbound plug IN1,则有一个对应的事件处理方法HANDLEIN1被创建。

事件处理方法刚开始是空的,可以通过让程序员写入代码实现功能,从技术角度看,这个事件处理方法和其他的没有什么不同之处。

Evaluating Parameters

Inbound plug的事件处理方法可以从outbound plug的事件处理方法FIRE_<MY_OUTBOUND>_PLG中接受参数。同样名字的参数需要添加到inbound plug的事件处理方法上。

提示:如果参数EDITABLE通过outbound plug传输过来,参数editable必须添加到事件方法签名,分配给inbound plug读取。

这个参数就会被事件处理方法知晓,并且能够读取。

注意:inbound plug的事件处理器用来处理新的view的新增的信息。不是用来传输应用数据和调用应用逻辑。

Example for Navigation with Parameter Transfer

第一个view中, outbound plug在action的事件处理器中被调用,并且传输参数Editable = ‘X’. 则下一个通过navigation link被连接的view包含一个能够被编辑的元素,因为传输过来的Editable的值为’X’.

在第一个view的事件处理器中调用outbound plug OUT

在view的outbound plug ‘ out’被创建的同时, 类型为WDY_BOOLEAN的参数EDITABLE同时被创建。在运行时通过下面的方法传输参数EDITABLE的值。

WD_THIS->FIRE_OUT_PLG( EDITABLE = ‘X’ ).

在第二个view的Inbound  Plug  IN 的事件处理HANDLEIN 中使用参数

每个UI元素包含’enable’ 属性,这个参数能够把这个元素的功能设置为可用和关闭状态。在view设计的属性表中,这个元素的这个属性没有被选中,这个元素虽然仍会显示在屏幕中,但是输入,选择,做其他任何的用户交互是不可用的。因为这个元素的属性是不可用状态(新加的UI元素的这个属性默认设置是可用的)。程序员可以在运行时有两种选择去指定UI元素的这个行为:

l 在view设计器中,enabled 属性能够在设计的时候通过属性表设置中点击复选框静态的指定。当相应的view被调用时,UI 元素总是保持设计时的属性不变。

Enbaled属性也可以通过绑定到context节点上的包含的类型WDY_BOOLEAN的值上。这个值在运行时传输。所以这个UI元素对于所有的函数可用,或者只可以显示,取决于在程序中的指定。

下面的例子中,将演示第二种情况:

第二个view的context包含的节点除了应用数据外,还有一个节点用来为这个view的一个或者多个UI元素指定’enabled’属性值。此例中,节点名字叫做’STATUS’, 并且包含了一个类型为WDY_BOOLEAN的属性ENABLED.这个值的设置是通过第二个view事件处理方法 HANDLEIN来实现的。

Method HANDEIN.

Data: l_context_node type ref to if_wd_context_node.

L_context_noe = wd_context->get_child_node(‘STATUS’).

L_context_node->set_attribute( name = ‘ENABLE’ value = EDITABLE ).

Endmethod.

传过来的参数变量值用来指定context节点的属性, 接口的方法IF_WD_CONTEXT_NODE用在了事件处理方法中。这种情况下,SET_ATTRIBUTE方法被调用,属性’ENABLED’设置成值EDITABLE.

现在context节点的ENABLED属性被设置成’X’,这个值是通过先前的view的方法WD_THIS->FIRE_OUT_PLG(EDITABLE = ‘X’)传输过来的。

结果(Result)

如果属性’ENABLED’的属性值设置为’X’,含有enabled  属性并且绑定到了属性EANBLED 的UI 元素的所有功能都可以使用。当FIRE_OUT_PLG传输了参数 ’ ’,接下来的view的inbound plug的事件处理的属性ENABLED同样设置为值’ ’, UI元素的只是显示在屏幕上,他们的功能均不能够使用。

 

 

 

 

 

 

 

Web Dynpro Application

Window的另一个非常重要的工作就是建立view组结构和URL之间的关联,其中这个URL可以被用户调用。Window同时也是通过Web dynpro应用程序被用户调用的单位。通常,同一时间只有一个view显示在屏幕上。最简单的例子,Web Dynpro应用程序调用指定的view作为window里面起始的默认view。用户可以从第一个view导航进去下一个view。

Web Dynpro应用程序在ABAP工作台的对象列表中是个独立的对象。

Web Dynpro窗体和Web Dynpro应用程序之间的连接是建立在window的接口view上的.准确的说,一个interface view是自动分配给一个部件的每个window,默认的,这个接口view包含了个默认的plug.

我们可以通过abap工作台显示每个接口view.

接口view不仅仅连接应用程序和window,他们的plugs还有许多功能。作为component接口的一部分,他们同样也用来进行多个components之间的交流。

   接口view (interface view)

Web Dynpro for ABAP 之 Web Dynpro Window Web Dynpro Application相关推荐

  1. 3. Web Dynpro for ABAP: Web Dynpro Window Web Dynpro Program

    3. Web Dynpro for ABAP 之 Web Dynpro Window & Web Dynpro Program (下载PDF) 3. Web Dynpro for ABAP 之 ...

  2. 2. Web Dynpro for ABAP :Component Controller

      2. Web Dynpro for ABAP 之  Component CONTROLLER(含有图片的PDF下载)   每个web动态Component包含一个Component CONTROL ...

  3. 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

    程序员区别于其他岗位的一个优势是,我们可以充分利用自己掌握的编程语言,将平日一些琐碎的,重复的日常工作,通过代码来实现自动化,从而省下更多的时间来投入到技术含量更高的工作中,提高工作效率. 本文介绍一 ...

  4. PWA(Progressive Web App)入门系列:(五)Web Worker

    前言 在说Service Worker前有必要说一下Web Worker,因为Service Worker本身就属于Web Worker的延伸,大部分功能也是基于Web Worker进行的扩展. 背景 ...

  5. 移动开发中的 Web:WebView、WebKit、JSCore、Web 优化、热修复、跨平台、Native、Hybrid……...

    移动开发领域近年来已经逐渐告别了野蛮生长的时期,进入了相对成熟的时代.而一直以来 Native 和 Web 的争论从未停止,通过开发者孜孜不倦的努力,Web 的效率和 Native 的体验也一直在寻求 ...

  6. web前端开发最佳实践_学习前端Web开发的最佳方法

    web前端开发最佳实践 为什么要进行网站开发? (Why web development?) Web development is a field that is not going anywhere ...

  7. web接口响应时间标准_从零搭建Web应用(二)

    1 Java Web 本文将从最基础的HTTP协议开始讲起,介绍如何徒手搭建Web应用,内容如果比较多的话,后面会分成多篇逐步介绍. 2 皇冠上的明珠-Apache 不知道Apache的研发不是好的研 ...

  8. java osgi web开发_基于 OSGi 和 Spring 开发 Web 应用

    开发一个简单的OSGi Web应用实例 一个简单的Web应用 我们写一个简单的 Web 应用 compute.html :计算两个数字的和或乘积.如下图所示: 图1.一个简单例子 一个简单例子.bmp ...

  9. 响应式Web设计(一):响应式Web设计的背景

    2019独角兽企业重金招聘Python工程师标准>>> 不是专业前端,可2011年底至今大部分时间在做着一个前端开发工程师的事情,所以多少也有点总结,多少也有点"经验&qu ...

  10. Web前端饱和了?还能学Web前端吗?

    这几天在知乎上看到这么一个问题:"Web前端现在怎么这么多人?",题主在问题描述中不停的阐述着自己找工作时的艰辛和困难,抱怨投出的简历犹如石沉大海,连个泡都不冒,自己连面试通知都收 ...

最新文章

  1. XtraBackup
  2. 超实用 Linux下通过VNC安装Oracle
  3. java 语言中System.getProperty(user.dir)
  4. 弹性方法计算内力例题_弹性力学重要公式汇总,还不快来强记一波【含参考答案】...
  5. 【蓝桥杯Java_C组·从零开始卷】第一节、环境与变量类型运算符与类型分析
  6. 安装Openface,实现人脸比对
  7. 分享Silverlight/WPF/Windows Phone一周学习导读(06月13日-06月18日)
  8. mysql 中文字段名_MySQL全文索引怎么做?| 教程分享
  9. mac系统如何进入系统偏好设置_MacOS Big Sur 系统偏好设置无法解锁Bug解决
  10. 搭建xxpay支付平台
  11. 【20】java里的this和static
  12. vue 开发中element-ui库的switch开关绑定number类型数据不成功问题 解决方法
  13. 3月24 matlab函数polyfit(x,y,n)分析
  14. 【MyBatis基础】(09)- 逆向工程(代码自动生成)
  15. 利用win10自带的系统配置禁止开机启动项和程序
  16. 腾讯云微服务引擎 TSE 11月产品动态
  17. Linux java进程CPU占用过高解决方案
  18. Appy Couple:婚礼策划应用 用户个性化定制
  19. c++陈维兴第三版3.35_C++面向对象程序设计教程第3版—陈维兴,林小茶课后习题答案...
  20. dsp控制buck电路电流环推倒与pi调节器设计

热门文章

  1. 如何使用 Laravel Collections 类编写神级代码
  2. 给Linux添加新用户,新建用户,新建帐号
  3. 判断ShellExecute函数是否执行完一个程序的方法
  4. simplePagination API
  5. 在RAC中重建EM(转)
  6. 必须要用发展的眼光来看诺基亚和微软的合作
  7. 在命令窗口执行java文件时,提示找不到或无法加载主类
  8. 3720: Gty的妹子树
  9. Linux 查看进程和删除进程
  10. Java虚拟机1:什么是Java