BPM技术文档(doc 54页)
使用指南2BPM与WEB Dynpro总结目录目录21基本步骤41.1创建BPM41.2创建WEB UI41.3建立process与web ui的关系41.3.1指定关联41.3.2指定TASK的interface51.3.3指定process中的各activity的数据mapping,即在各个activity中可流转的数据61.4Deploy process61.5访问62技术架构73结构73.1View的layout113.2Composite UI Element153.3字段属性174MESSAGE175动态设置VALUE-HELP196动态编程,即动态设置CONTEXT207外部MODEL数据278JA312: ADVANCED WEBDYNPRO FOR JAVA288.1设置弹出式窗口298.1.1OVS318.2消息处理328.3高级CONTEXT328.4动态UI338.5Model interface338.6Structing application338.6.1dependencity338.6.2structing408.7附录429实用东西449.1查看日志449.2ABAP层次的WEB SERVICE449.3Task层次的某些属性可在Human activity中覆盖449.4Process的web service459.5调用web service459.5.1WSDL 文档结构469.5.2WSDL 端口469.5.3WSDL 消息479.5.4WSDL types479.5.5WSDL Bindings479.5.6总结4710实用类、接口4910.1Class WDValueServices4911连接外部数据库4912账号权限5112.1Portal上UWL的权限5112.2管理员权限5113常用URL5113.1流程管理51http:/192.168.0.233:50000/ProcessManagement/index.jsp5113.2流程监控5114问题5215总结521 基本步骤1.1 创建BPM在NWDS中,创建一个BPM流程实例。在此步骤中,只设置流程图(在pool中,创建多个lane,在每个lane中设置流程活动,如activity、event、gatway等),在流程图中的每个human activity中,需要用到task,在该task中,指向web dynpro for java开发的WEB UI。在activity中,可指定该步骤的用户,但此处指定的用户可被该process种的task的role取代。1.2 创建WEB UI 在该步骤中,创建process中人机交互的页面,此部主要就是web dynpro for java的开发,创建好后,需要每个component add to public part中,以便在process中可用1.3 建立process与web ui的关系此步在development infrastructure中完成,即将上述两步创建的process 与 web ui关联起来,以便在process的task中可指定web ui的interface(即要用到第二步中add to public part的组件)、在process的owner中指定该步的执行者及流程中多个activity的数据mapping (包括input mapping 、output mapping等)1.3.1 指定关联1.3.2 指定TASK的interface在task的编辑器中,可指定task对应的UI interface,此处interface即需要用到1.2中add to public part中的component.在此处指定component后,即可在process的数据类型中可找到该component种定义的context中的数据,如下图所示:注意:在此处指定task的UI interface时,必须在WEB UI的Component的Interface controller中指定一个Complete event,否则无法指定。 同理,在interface controller中也要指定context,否则无法在process中mapping1.3.3 指定process中的各activity的数据mapping,即在各个activity中可流转的数据此步完成后,即可l 在process中加入数据对象l 可在process的activity中作数据mapping操作(否则,在input mapping中无的TaskInput中无UIRequest,在output mapping的TaskOutput中无UIResponse)如此,即可在context与activity中的input/output做数据mapping。在portal上的UWL中,将可以显示任务列表,此处的任务列表显示的内容可以定制并可用参数,在TASK的user text中定义,如下图所示:此处的参数也从绑定的userinterface(compontent)中而来,若不绑定,则无可选的context数据(在UIRequest或UIResponse节点中)。即context(从绑定的compontent中取到)数据与activity的taskInput中的UIRequest绑定;与taskOutput中的UIResponse绑定。通过这种方式来实现UI与process的数据绑定及流转。1.4 Deploy process1.5 访问http:/192.168.0.233:50000/index.html 的san链接中,通过Configuration Management-àprocesses and tasks-àprocess reposity来启动在1.4中deploy的流程2 技术架构DC关系:3 结构对于每个VIEW,分别对应有两个interface,假设view的名称为MMM,则接口名分别为IPrivateMMMView和IPublicMMMView,前者用于VIEW的对内数据操作,后者用于对外的数据交换,在VIEW中定义的ACTION在前者中定义,在private的view中,1. context中所选的每个node都对应有两个静态内部类,分别为INodeNmaeNode、INodeNameElement,在这两个内部类中分别定义node的操作、属性等东西。通过提供的这些方法来操作VIEW中的数据,如查找按钮等。2. view中定义的method、action也在此接口中定义3.每个view均实现java.io.Serializable类,有个IPrivateMMMView类型的变量wdThis, public PurchaseRequestView(IPrivatePurchaseRequestView wdThis) this.wdThis = wdThis; this.wdContext = wdThis.wdGetContext(); this.wdControllerAPI = wdThis.wdGetAPI(); this.wdComponentAPI = wdThis.wdGetAPI().getComponent(); 对于每个web dynpro for java的组件,均有controller、view、window,其中controller对应有接口IPublic组件名、IPrivate组件名的接口,其中IPrivate extends IPublic,在IPublic中,有两个内部类,分别为IContextNode继承自DataNode表示节点,IContextElement继承自DataNodeElement表示元素,在对应的Controller的JAVA文件中,有一个私有成员wdThis变量类型为IPrivate的,故通过这个变量即可实现对Context的访问. 其中wdContext变量类型为上述IPublic中的内部类IcontextNode,通过该变量实现对Context的访问; 此外,另两个变量wdComponentAPI/wdControllerAPI的类型均为IWDCompontent,通过这两个变量可实现对message、尽量不要使用Custom Controller,只有在优化、简单化开发时才考虑使用wdDoPostProcessing() 在复杂的应用中,用于校验来自多个组件的数据wdDoBeforeNavigation 在不同的controller中共享数据External-mapping在设置internal mapping时,需要将cardinality设为1.n,否则在界面上不能输入。若view的context为从control映射过来,则需在controller的context中设置cardinality,在view中不能设置。目前还不支持structure字段context属性的更名。注意在VIEW中的BUTTON中,不要直接在VIEW中写代码更改屏幕中元素的值,而是应该在controller中更改值,方法是在controll中定义method,然后在view的layout的outline中,选中button,右键在出来的菜单中选择apply templete,在此定义action并在后续步骤中选择controll中定义的方法。 当然也可在view中action中写代码,但这种方法应该是违反了mvc的原理,即在view中直接更改了元素的值,理论上view应该只用于显示数据,而不应该操作数据。即在controll中定义方法,然后在view中通过wdThis.wdGetStartCompController()去调用controll中的数据,如下例所示:其中中即为Compontent的名称。 public void onActionInitialValue(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent ) /$begin Action Button(-750211490) wdThis.wdGetStartCompController().initPersonInfo();/$end 3.1 View的layout3.2 Composite UI Element3.3 字段属性在controller的context中,可将字段属性的calculated属性设为tr