EBS开发流程

来源:互联网 发布:大学生就业难 知乎 编辑:程序博客网 时间:2024/04/27 19:12

1      相关软件的安装

1.1   Form Builder

安装路径:\\sie-file-svr\01_公司级共享资源\06_工具软件\06开发工具\6i

 

在安装的过程中,可以一路默认值下去。

需要注意的时候,在安装时,会不停的自动打开很多文件夹和命令提示符的窗口,不要手工去关闭这些窗口,安装程序会自动关闭,知道提示你安装成功(这时可以手工关闭余留下来的没有被关闭的窗口)

 

注册表修改

<1>NLS_LANG

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

搜索NLS_LANG,出现NLS_LANGZHS16GBK或者NLS_LANGZHS16CGB231280的地方请全部修改成

NLS_LANG=AMERICAN_AMERICA.UTF8

<2>FORMS60_PATH变量

在后面加上TEMPLATE/APSTAND.FMB所在的路径(F:\WORK\FORM)和PLL文件所在的路径(F:\WORK\PLL)

1.2    Patch

安装路径:\\hi4-sv11\Oracle\Software\patch\p3095277_9204_WINNT\Disk1

安装这个Patch的原因(来自MetaLink)

The information in this article applies to:

                        Oracle Server - Enterprise Edition - Version: 9.2.0.1 to
                        Oracle Provider for OLE DB - Version: 9.2.0.1
                        Microsoft Windows 2000
                        Microsoft Windows XP
                        Microsoft Windows (32-bit)
             Symptoms

                        Using the Oracle Provider for OLEDB 9.2.0.1.0 with web applications, the data retrieved and sent to the webpage is good for the first 100                                  rows.
                        After the First 100 rows, th data is displayed as garbage or ????.
                        The OLEDB registry default fetchsize has been changed from the default of 100.

             Cause

                        This is a known BUG in the OCI API Layer. The BUG number is 2549186.

             Fix

                            Apply the 9.2.0.4.0 Patch 2 Client/Database patchset on the client machine.
                            The Patch number is 3160576 for the Microsoft Windows (32-bit) platform

安装这个补丁就是要修正Oracle100 RecordsBUG

打补丁时请参看文档:

\\hi4-sv11\Oracle\Software\patch\p3095277_9204_WINNT\

 p3095277_9204_WINNT Setup.doc

 

1.3   WSFTPPro

安装路径:\\sie-file-svr\06_技术顾问部\04技术参考资料\工具软件\WS-ftp7.5Pro

作用:就是方便上传你写好的FormServer或者从Server上下载Form或者其他的文件

主机:10.89.48.198

用户名:devap/ dev2ap/ dev3ap/ dev4ap

密码:devap/ dev2ap/ dev3ap/ dev4ap

 

Form文件所在目录:/disk/DEV/devappl/au/11.5.0/forms/US

Pll文件所在目录:/disk/DEV/devappl/au/11.5.0/resource(包括Custom.pll)

Fmx文件所在目录:/disk/DEV/devappl/bqe/11.5.0/forms/US

 

2       注册Form

AP上面你才可以看到你所写的Form的真正效果,所以我们还需要把Form挂到Application环境。

2.1    注册Form

Application Developer……> Application……>Form

Form:你编译生成的 XXX.fmx文件的文件名(不带后缀)

              User Form Name:可以是你任意输入的,并且将在下一步注册Function时用到。

2.2    注册Function

Application Developer……> Application……>Function

下图中,

Description TabPage

      FunctionUser Function NameDescription逗可以随意输入

      User Function Name在下一步注册Menu时会用到。

Form TabPage

      Form就是上一步注册Form时你输入的User Form Name了。

2.3    增加Menu

Application Developer……> Application……>Menu

Prompt可以随便填写,Function就是你上一步注册的User Function Name

一个Menu可以包含很多的子菜单(SubMenu)

下图就是目前DEV3上面PO Module的所有菜单,

可以看到包含很多的SubMenu和直接的Function(也就是直接的菜单项)

 

找某个模组的菜单名称可以到:

System Administrator……>Security……>Responsibility……>Define

 

如下图,选择或者输入你想查找的Responsibility的名称,查找后

红色框内的 Menu就是你需要的菜单了。

比如下图查找的Reponsibility是:Order Management (Administrator), BQP

得到的MenuONT_SUPER_USER

然后我们再到Application Developer下面的Menu处搜索ONT_SUPER_USER,就可以得到你需要的菜单或者子菜单

 

到此,你已经在可以AP上去看你的Form的运行结果了。

修改fmb文件后,不需要重新注册,只需要重新编译,即可看到修改后的效果。

 

3       Form开发入门

3.1    Form的基本对象

3.1.1   基本对象图示

如下图,就是一个标准Form(TEMPLATE.fmb)所拥有的所有的对象

 

3.1.2   基本对象说明

                            FORM:    可以有多个Window

                            Window:              只能有一个CANVAS,但是还可以包括其他的类型的CANVAS

比如CANVAS_STACKED,这种Canvas类型将在后面的章节中讲到。

Canvas:    Canvas is a surface where visual objects,such as graphics and items,are arranged.

Block没有直接的对应关系,而是直接和Item对应。

                                                       一个Canvas上面可以有来自不同的Block的多个Item.

                                                       是我们对Item进行位置调整的平台。

                            Block:    Logical owner of items,items in one block are logically related

                                                        There are two main tupes of blocks:data block and control block

                     Item:                   Form中最基本的组织元素,我们设计的最小单元

 

Parameter相当于全局变量,其作用是传递参数,Oracle标准的Form也有单独建一个Block(多个Item)来传递参数的例子。

Record Group:主要应用是可以提供给LOVlist item,ftree作为数据源

A record group is internal Form Builder data structure that has a column/row 

framework similar to a database table

      LOV:                     List Of Value,会直接对应到Text Item上面,点击后会弹出给用户选择数据。

      Attached Libraries:存放的是Oracle标准的一些PLL文件。

      Property Classes:Oracle标准的一些属性类,我们在建立WindowCanvasData Block等都会选择一个属性类以继承一些属性和方法

 

在我们的开发过程中,经常用到的有FORM TriggerWindowCanvasData Block(Item)LOV(List of Value)Record GroupParameters。其中WindowCanvasData BlockItem是四个最基本的Object,缺一不可。

 

3.2    利用TEMPLATE.fmb模板来开发Form

Oracle已经为我们提供了一个Form的开发模板,(/disk/DEV/devappl/au/11.5.0/forms/US/TEMPLATE.fmb

我们的开发实际要基本这个模板,这个模板里面已经存在了我们将会用到的Oracle标准的对象,我们需要做的,就是这这个模板的基础上面,添加我们自己的对象。

 

 

 

3.2.1   下载、打开TEMPLATE.fmb

然后选择另存为,比如这里的XXPOM100N.FMB

Form Name必须符合Form的命名规范

\\hi4-sv11\Oracle\BenQ-Oracle\Doc\Coding_Rule\Customization-Rule-V12

6-3. File naming

     

 

      同时修改下图中的红色方框内的名字,达到保持一致的目的。

修改TEMPLATEXXPOM100N

 

 

3.2.2   删除自带的样本对象

 

这几个Object,是TEMPLATE.FMB自带的对象,需要全部删除的。

注:不删除不会有大的影响,当时会给后期的修改维护带来不便,请删除之.

可以删除的Objects

 

 

 

 

3.2.3   增加新的Window

      如图,修改

Name,

SubClass Information

Title

                            属性

Primary Canvas属性必须在增加Canvas后再设置

 

 


SubClass Information属性设置:

 

 

 

 

 

3.2.4   增加Canvas

              为了便于识别,我们建议把WindowCanvas采取同样的命名。

      如图,需要修改

Name,

SubClass Information

Window

                            属性

SubClass Information属性设置:

 

增加完Canvas之后,别忘了回去设置Window属性的Primary Canvas

 

 

 

3.2.5   增加Data Block

如下图:

              <1>、选择Data Blocks

              <2>、选择Create

                            选择之后,会弹出一个New Data Block的对话框

              <3>、选择Build a new data block manually

<3>、选择Build a new data block manually

<2>、选择Create

<1>、选择Data Blocks

 

目前我们一般都是用手工建立一个新的Data Block,用Data Block Wizard的情况会在后面有讲解。

 

然后需要修改Block的一些基本属性:

其中,我们必须设置SubClass Information,其他的一些属性设置会在后面的章节讲到。

3.2.6   修改Trigger

这两个Trigger一定要修改,否则你的Form不能正常的运行和关闭。

<1>Form Level Trigger:PRE-FORM

修改Form的基本信息,便于后期维护

一定要修改成自己的Block NameQUERY_TEST

<2>Program Units:APP_CUSTOM(Package Body)

if (wnd = 'QUERY_TEST') then

    app_window.close_first_window;

3.2.7   修改Form的属性

做了上面一系列的设置后,需要完成最后一个设置,修改Form的属性。

 

 

 

 

 

 

 

 

 

 

 

 

 

到这里,我们Form的一些基本设置都完成了。该Form可以上传,编译,

但是在编译的时候会有如下的警告信息:No Items on block QUERY_TEST

编译还是能够正常生成FMX文件。

不过Item是我们设计的最小单元,我们的一切数据操作都是对Item进行的,因此一个没有ItemForm是没有实际意义的。

 

 

 

 

 

按照我们前面讲的注册Form之后,点击你的Menu,会弹出如下信息,并且不会把你的Form Show出来:

3.2.8   增加Item

<1>、增加一个Item

<1>、选择 Items

<2>、点击 Create

<2>、修改Item的属性

好了,到此,一个基本的Form已经完成。

可以正常编译,运行,但是这个Form是一个没有任何实际意义的对象。

我们开发Form的过程,就是按照这个大致流程,后续的过程,就是自己在这个Form里面增加WindowCanvasBlockItemTrigger等。

 

3.2.9   Canvas上进行UI调整

我们都是在Canvas上面对Item进行位置的调整,达到使整个Form看起来美观整齐的目的。

 

 

 

 

 

右键单击一个Item,在弹出的菜单中选择Layout Editer就能打开这个Item所在的Canvas

 

右键单击一个Canvas,在弹出的菜单中选择Layout Editer或者双击Canvas的图标,都能打开这个Canvas

Canvas排版界面:

View:运行时所看到的实际大小

Canvas:所有Item必须在其上面

注意:在Canvas上面看到的Item,必须全部都在这个Canvas的范围里面,否则,在编译时会出现错误:

超出Canvas的范围

编译时的错误提示

 

 

4       Form 常用对象设计

4.1    日历Calendar的使用

这是在TEMPLATE.fmb里面内置的对象,可以看到,Form里面包含Calendar WindowCalendar CanvasCalendar Data Block以及一些TriggerAttached Libraries等。

4.1.1   设置ItemLOV属性

注意:请务必选择No

              如果需要日期验证,请把ItemData Type属性设置为Date

请注意:这个地方的Validate from list请务必选择No,否则会出现你选择了日期之后弹出一个LOV让你对输入的日期验证,只要你设置Data TypeDate,会自动验证你输入的字符是不是一个合法的日期格式

               

             

4.1.2   增加Item Trigger KEY-LISTVAL

一定要写,大小写不敏感

这样你就可以在你的Form上面看到,光标落入该Item后,就可以弹出一个(下左图)

4.1.3   设置Calendar.Show的参数

calendar.show是可以带参数的,缺省值就是当前天(可以打开Attached Libraries->APPDAYPK->Calendar)。

其参数就是该日历的缺省Date

例如:calendar.show(to_date('2004-12-25','YYYY-MM-DD'));

那么弹出来的就是上面右图的样式

 

4.2    LOV(List of Value)设计

LOV一般都是和Item联系在一起,是方便Item取值,验证数据的一种方法.

Calendar就是Oracle内置的一个LOV

4.2.1   设置Record Group

<3>、在弹出的对话框中选择Based on zhe query below并且输入你的SQL语句

<2>、选择Create

<1>、选择Record Groups

 

如果在此之前你没有用File>Connect来连接到某个DataBase,就会弹出如下的对话框:

设置完成后修改该对象的Name(VENDOR_NO)

 

4.2.2   增加LOV

<3>、选择Build a new LOV manually

<1>、选择LOVS

<2>、选择Create

 

4.2.3   设置LOV的属性

点击 OK 之后修改LOV的几个属性:

Name:

Title:

Record Group:             选择你建立的Record Group

Filter Before Display:  Yes:必须输入条件才能有记录出来(%来匹配)
  No :如果没有条件则显示所有记录。

Automatic Display:       Yes:等价于: <when-new-item-instance>事件

                                               就是你光标一进这个Item,就会弹出LOV

Automatic Refresh:      是否每次执行记录组查询
                                               
就如动态填充下拉列表数据项是,将填充代码写到<when-new-form-instance>       <when-new-item-instance>中一样,主要体现在该在多次调出LOV的时间间隔里,

对记录组相应的表作了修改后是否刷新了记录组查询数据。

Automatic Select:        当只有唯一一条记录是直接接收返回值,而无须弹出LOV让用户做毫无选择的选择。

Automatic Skip:                         Yes:关闭LOV后光标跳到下一个Item

                                                No:关闭LOV后光标仍然停留在本Item上面

 

当然,最重要的是Column Mapping Properties,点击More

 

 

4.2.4   设置ItemList of Values属性

 

Validate from List:Item是可以手工输入值的,

这个属性就是设置是不是验证你输入的值是否存在于这个LOV里面

 

4.3    增加Choose ORG功能

有些Form,在第一次进入的时候需要你选择一个ORG

比如:PO Module->Receiving->Receipts

实现这个功能需要如下的几个步骤:

4.3.1   增加Parameter

Parameter里面增加如下几个参数:(前后顺序无所谓)

      CHART_OF_ACCOUNTS_ID(Number)

ORG_NAME(Char)

ORG_CODE(Char)

ORG_ID(Number)

 

4.3.2   修改Trigger

FORM LevelTrigger里面增加一句:FND_ORG.CHOOSE_ORG;

这样就可以在你的Form第一次打开之前,会让你选择一个ORG

当然,Choose ORG也可以加载在某一个Block上,那么我们只是需要在Block LevelPRE-BLOCK Trigger里面加上FND_ORG.CHOOSE_ORG;就可以了。

4.3.3   显示ORGWindow Title上面

选择了一个ORGOracle会把你选择的ORGORG_CODE显示在WindowTitle上面

需要修改下面的Trigger:(视你把Choose ORG加在FORM上还是BLOCK上)

WHEN-NEW-FORM-INSTANCE或者WHEN-NEW-BLOCK-INSTANCE上增加:

APP_WINDOW.SET_TITLE('RESULT',:PARAMETER.ORG_CODE);

Window Name

这样,你的Form或者Block生成之后会有下面的效果:

会在你的Title属性里面设置的字符串后面加上你现在设置的,而不是覆盖你原来的.

 

4.4    List Item

4.4.1   在属性里面设置List Item选项

这种方式值List Item的选择都是在添加List Item时在属性设置时就全部增加进去的。

 

需要设置下面的几个属性:

      Name

      Item Type

      SubClass Properties

      Initial Value: 缺省选项

 

 

 

 

 

还有就是设置选项了:

              点击 Elemets In List:

              会弹出如下的对话框

页面显示

执行出来的效果:

 

4.4.2   在代码中增加List Item选项

这种List Item其实就是我们在某个Trigger里面用代码来增加其选项.

 比如在Blcok LevelWHEN-NEW-BLOCK-INSTANCE里面增加:

Index1开始,而不是0

 

ADD_LIST_ELEMENTForm内置的函数,可以在帮助里面查看其参数含义

 

 

4.4.3   Record Group的记录作为选项

这种情况的选项一般都是从DataBase中读取出来:

group_id:=POPULATE_GROUP('VENDOR_RG');

               POPULATE_LIST('QUERY_TEST.LIST_RECORD_GROUP','VENDOR_RG');

              POPULATE_GROUPPOPULATE_LIST都是Oracle Form内置函数

Block.ListItem
Record Group Name

 

4.5    Text Item

最常用的Text Item按照不同的SubClass Information又分为下面的几种情况

4.5.1   TEXT_ITEM

可编辑的Text_Item

这种Text_Item重要的有下面几个属性:

Enabled:

Justification:        Text_Item里面的文本对齐方式

Multi-Line:                         是否是多行文本框

Automatic Skip:  

Yes时,key in 的长度大于Maxinum length时,会自动跳到到下一个Item

Keyboard Navigable:

              No:Tab键时光标不会落入这个Item,只有当点击这个Item才会让之获得焦点

Data Type:

               注意区分的是Date(仅仅年月日)DateTime(年月日时分秒)

Maximun Length:

Initial Value:       初始值

                            $$dbdate$$:当前天

$$dbdatetime$$:当前时间

Required:

                            Yes时,底色会变成黄色

Format Mask:掩码,Format显示样式,比如:9,900,123,123.12

一般对于金额,我们会填写这个栏位

Oracle Standard Format Mask: FM999G999G999G999G999G999G999G990D00PR

List of Values:

Validate from List:

Visible:

Canvas:

Prompt:

 

 

4.5.2   TEXT_ITEM_DISPLAY_ONLY

不可编辑

 

这种Text_Item的属性设置和普通的Text_Item基本上一样。

 

4.6    Display Item

看名字就知道,这种Item只能用来显示数据。

这种Item没有以下的属性:

              Enabled

              Keyboard Navigable

              Automatic Skip

              Multi-Line

Required

,而且我们一般都不会把这些Item放到Canvas上面,它也不能接受光标获得焦点

通常是用来放一些隐藏起来的ID之类的栏位的值。

 

 

 

 

 

 

 

 

 

 

 

 

4.7    Check Box

Check Box有下面几个重要的属性:

Checked and Unchecked check box values

must be distinct

 

 

 

当然,还包括CanvasPrompt等属性。

 

Check Box比较常用的事件是:WHEN-CHECKBOX-CHANGED

 

4.8    Button

&ClearLabel前面加&可以产生Button快捷

 

Button比较常用的事件是:WHEN-BUTTON-PRESSED

 

 

 

 

 

 

 

 

 

 

到此,你已经可以掌握Form的基本开发的技巧了,也就能够开发一些简单的Form了。

Oracle Form更深一层的开发技巧需要在我们的实际的开发过程中去讨论、归纳、总结。

在下一份文档中,我会继续总结我们在日常开发过程中总结出来的一些基本技巧或者方法。

 

中文技术网站:

              ITPUB论坛:http://www.itpub.net/index.php

              Oracle Developer论坛:http://61.144.28.248/dev/index.jsp