OralceERP开发心得整理.doc_第1页
OralceERP开发心得整理.doc_第2页
OralceERP开发心得整理.doc_第3页
OralceERP开发心得整理.doc_第4页
OralceERP开发心得整理.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

理性的浪漫 转帖Oralce开发心得整理关键词: Oralce开发 以下是个人整理的一些问题,希望能够抛砖引玉,首先是Form - 实在对象如表格、Sequence、索引等建在本应用对应的用户表空间中,其他对象如视图、别名创建在Apps下,常见错误是新手把表建在APPS下,以后又来建别名,这个时候删除别名时会报对象不存在,而建别名的时候又报对象已存在 如果把脚本保存在文件里面,注意一个块比如一个创建视图的语句不要有空行,否则会出现如下情况:把语句拷贝到SQL Window能正常运行,用执行文件却报错 如果要执行execute_query,注意要go_block到适当的Block,但是go_block是个受限过程,并不一定都能成功 Master-detail关系 block both are database block each block has one item based on database displayed 在PL/SQL Develop中没有环境变量,所以如果要查询多组织的View,需要先执行设置环境变量函数 BEGIN fnd_client_info.set_org_context(83); END; GLOBAL变量对于所有form有效(可能是同一个应用,这个尚未验证),而不仅仅是你所开发的form 变量比如Global和Parameter的初始化应该在pre-form里面,在when-new-form-instance里面初始化不行,因为when-new-form-instance是在进入第一个导航块的第一个item之后才促发的 没有属性指名Block的记录数,不过可以通过GET_BLOCK_PROPERTY(QUERY_HITS) 取得查询到的记录数 hide_view并没有真正hide一个画布,只是放到最下层,所以如果上层的画布没有完全覆盖下层画布,下层的画布很可能用户还看得到;show_view则是把画布放在最上层 lov验证的时候是验证第一个可见的列,并且会把其他的返回值返回给各个Item,而不是仅仅验证而已 lov的查询一般是针对第一列,但是如果我们把%放在最前面,则可以查询所有列 用Execute_query执行查询的时候,会把Copy Value From Item里面的那个Item的值自动作为查询条件。当创建记录的时候也会直接用该值初始化,而且不改变记录的状态。在更新记录的时候不知道会不会Copy过来尚未验证。Get_Item_property的时候用ENFORCE_KEY属性,但不能Set。该属性在Master-detail设置的时候自动创建,删除的时候自动删除。如果不希望Copy Value From Item影响查询结果,可以在Pre-Query里面把Item的值设为null。 app_query.reset(block_name);如果第一次调用,会把当前的DEFAULT_WHERE,然后什么都不做,以后再来调用的时候则会把第一次设置的DEFAULT_WHERE用set_block_property(SAA_HEADERS,DEFAULT_WHERE,.)设置回来,具体请参考app_core库 When-create-record的时候给Item赋值不改变记录状态 Sequence,如果我们在Item的Initial Value里面赋值,那么假如用户Focus To新记录,又回到老记录,如此反复,Sequence会不断变大的 SQL Order BY的时候null值排在最后,这个一般不符合实际要求,可以这样解决ORDER BY nvl(Geography_Code,chr(0)解决 Trigger顺序1 pre-commit 块1的pre-insert,on-insert,post-insert 块2的pre-insert,on-insert,post-insert . post-forms-commit Trigger顺序2 when-list-changed在前,Validation item在后,因为Validation item是在要离开这个item的时候才促发的 Trigger顺序3 pre-form/when-create-record/pre-block/when-new-forms-instance/when-validate-record/on-insert/post-forms-此内容被huajhua于2005-03-02,21:18:06编辑过FORM开发心得整理(续) - 当定位到主块的一个记录,会促发子块的when-clear-record事件和when-create-record事件,问题是如果主块的是新记录(未保存),在子块的when-create-record里面取主块的任何东西,居然是主块的上一次获得焦点的记录的东西;连用取块的当前记录也是上一次获得焦点的记录 Trigger顺序4 post-changed在when-validate-item之前 所有的when-validate事件是当forms自己验证通过之后才促发的 禁用Clear功能可以通过在Form的key-clrblk里面调用app_exception.disabled,其实只是用Bell覆盖默认的执行 直接放在TAB Page上的Item,和放在堆叠画布上的Item在设计时是无法“所见即所得”,所以建议把所有的Item根据需要放在不同的堆叠画布上再堆到TAB Page上 FORM开发心得整理(续) - 伪列Rownum在排序之前就已经决定,如果想得到排序后的Rownum,应当在嵌套一个Select语句;另外Where语句中的rownum只能用或者或者= 在SQL中用Over的时候,如果整个语句没有Order by语句,最后的结果还是会排序的,规则是先按Over里面的Partition排序,在按Over里面的Order by排序。原因可能和分析函数的处理顺序有关(8ifunctions.pdf有详细介绍):先查询到数据(Join/Where/Group By/Having),再运算分析函数(先分区,然后排序,再算Slide Windows,最后计算),最后是Order By。另外,一个疑问:我测试到的一个结果Group By好像无法影响Partition,可是按照8ifunctions.pdf的说法,应该先执行Group By的,是不是因为Group By只是在第一阶段的处理时作用在集合函数上,之后进入第二阶段的处理就没用了。 -此内容被huajhua于2004-05-09,16:00:43编辑过FORM开发心得整理(续) - 实际执行的Where条件,是我们设置DEFAULT_WHERE,再加上通过赋过值的Item。注意APP_FIND.query_range已经重载过,我们调用的时候可以不区分query_number_range或者query_date_range;观察其代码,发现也是通过给Item赋值来影响查询的,只不过是赋值的时候,可能是加上 # between,# =或# = to_dat的错误,所以记得把字段长度加长,比如1000;总的来说,碰到From to的要小心长度。 FORM开发心得整理(续) - 当修改子类的时候,会自动更改很多属性,特别是Required,一定要注意 当对块进行刷新时,会修改很多Item的属性,别以为你设置过了,Oracle就会记住。我碰到的情况是Insert Allowed等被自动改掉了!即使我的子类设置为Text_Item_Display_Only 两个变量,如果都为Null,判断还是不相等,所以必须用 a1 is null and a2 is null。所以在On-lock里面的if条件,我们可以把所以不可以为空的字段都写成允许为空的形式。 一般来说,系统变量是很好用的。然而有时候并非如此,比如Current_Record,get_block_property(blockname,Current_Record)的结果并非总是一样的,后者更加保险!特别是刚打开Form的时候,在WHEN-NEW-RECORD-INSTANCE里面,前者是0,后者是1 FORM开发心得整理(续) - 表示一个单引号,表示两个单引号。应该是这样理解,一个单引号表示转义字符,首尾两个单引号里面的内容表示字符串。 重启Application cd $APPLCSF cd scripts cd PROD ./adstpall.sh apps/apps ./adstrtal.sh apps/apps Trigger顺序5 post-query,只有在界面可见的记录才会促发,记录从不可见变为可见时促发,促发过的记录不再促发; 保存的时候会引发Post Item/Record/Block事件,因为要Navigate到Form 数据库org_id初始值to_number(decode(substrb(userenv(CLIENT_INFO),1,1), ,null,substrb(userenv(CLIENT_INFO),1,10) 给非数据库Item赋值, new记录会变成insert(所以就不能F11了) query/changed记录不变 new块会变成query query/changed块不变 FORM开发心得整理(续) - 对On-lock的理解,由于先入为主的缘故,开始一直很苦恼,为什么If里面只用了一个Return,Form怎么知道要锁否?后来才知道On类型的数据库触发器是替换型的,On-lock也不例外,所以只要On-lock不Raise什么东西出来,Form就认为是锁成功了,至于实际的锁,我们有SelectFor Update来完成,至于If判断只是进行更加严格的判定。 对Find的理解,开始也很纳闷,为什么在Pre-query里面直接给Item赋值就可,不用自己拼语句,现在也逐渐发现里面大有文章。回想F11,这个时候的block其实是处于Enter-query状态,输入的东西Form会自动拼成Where语句(当然还要加上原来的default where,如果有Copy from item,也要加上),对于每个Item上输入的值,一般是用 = ,如果有,就解析为like,如果有#,则把后边的表达式(比如between,甚至是子查询)直接作为条件;而当form内部执行堆栈Navigate到Pre-query时,block也是处于Enter-query状态,道理和F11一样,我们只管按业务查询要求对Item赋值,剩下的就交给Form去处理了;需要注意的是当处于enter-query状态的block,是使用query length属性来限制输入的数据长度,而不是通常的maximum lengh,只不过query length默认是0,即等于maximum lengh,所以会出现当用app_find.query_range时长度不够的情况。 6iReport开发整理 - 向系统注册报表的时候,参数是无法根据顺序自动对应,需要我 们指定Token,即报表的参数名称;而对于Procudure是可以根据 位置自动对应的,即使定义的参数名称和Procedure参数名称不 一样。这个可以这样理解,Procudure的参数是明确的,参数有 多少个、顺序如何是由Procedure明确定义的;而对于报表来说 ,参数非常多,如果传了某个参数,就用该参数,否则Report用 本身的默认值,没有顺序和个数的强制要求;另外procedure有 且只有两个out put(return_code说明:0/success,1/warning ,2/error)参数,其他的in参数可以自动根据顺序对应 定义executable,相当于开发人员告诉系统管理员有这个功能可 以用,这个和定义form是一样的;注意report名字不用rtf后缀 ,procedure的格式为“包名.procedure”;上传到服务器的报表 后缀要小写,不然会报找不到文件 输出到log用fnd_file.put_line(fnd_file.log,msg),输出到 out put用fnd_file.put_line(fnd_file.output,msg) 定义Program的时候,日期值集要用fnd_standard_date;对应的 ,在Procedure和Report里面用Varchar2,然后自己转换,示例 代码如下l_end_date := trunc(to_date( p_end_date,YYYY/MM/DD HH24:MI:SS) + 1 - 1/(24 * 3600 );对于数据库中的日期字段,尤其是Transaction Date,不要用 trunc,这样会导致无法使用该日期的索引,一般是对参数进行 必要的处理,如上述的加1天减1秒 定义Table类型的值集的时候,有三个字段其中value和Id都为值 ,Id的优先级高于Value,但一般我们只定义Value 关联子集定义的语法为where field_name = $FLEX$. value_set_name;当然要求两个子集都在参数里面 注意父Field不要紧贴Child Group的循环框,否则该父Field会 显示在Child Group的循环框内部。我在字符模式下做Summary域 ,它紧靠Child Group的最下面边框,最后该Summary域就显示在 Child Group里面,覆盖Child Group的内容。如果出现错位情况 ,可以加一个框套住Father域 1 inch = 72 points;设计字符模式的报表,假如设置了width 为x,Character Mode Report Width为y,那么,x * 72 / y最 好为整数,这只是我个人的感觉。比如A4横向,x为11,y为132 ;Height的设置也需要符合这个要求。 为方便字符模式报表元素真正对齐到网格snap to grid,可以在 rulers中把grid spacing、number of snap points per grid spacing都设为1,这个很重要,可以省去我们无谓的对齐工作量 。不管怎么设,必须在开始设计layout之前设置;如果在设计 layout之后更改,会造成已经做好的Field没有对齐到网格。 报表里面好像没有环境变量,需要建一个用户参数 P_CONC_REQUEST_ID/Number/20,在Before Report触发器里加 SRW.USER_EXIT(FND SRWINIT);,在After Report触发器里加 SRW.USER_EXIT(FND SRWEXIT); Application开发整理 - Profile:一个Profile其实就是一个参数,在开发员职责里面定义,注意这个时候选择的Application仅仅是方便管理,对以后的使用没有限制;一个Profile的具体值需要在系统管理员职责里面定义,可以分别在四个层次上定义,即Site/Application/Responsibility/User,具体来说可以给任意一个Site或任意一个Application或任意一个Resp或任意一个User定义这个Profile的值,可以四个层次都定义,也可以定义某几个层次;对于一个Session来说,一个Profile到底取什么值是和上面的定义有关系的,即后面的覆盖前面的,如果它定义了的话。我们可以通过fnd_profile.value(Profile_Name)来取得当前会话的Profile值,对于库存组织mfg_organization_id,一些顾问可能没有去设置它,我们需要通过其他方式取得。 在用fnd_request.submit_request的时候,第五个参数用false,不要被参数名称误导;这个函数有105个参数,前面五个定义请求本身,后面100个是传递给请求的具体参数,都是Char类型,我们需要转换,默认值是chr(0),代表这个参数不用传递给调用的请求;在Package里面调用只需要传递需要的参数个数,因为它有默认值指示结束;在form里面则不行,要写满105个,而且我们参数结束之后要用一个chr(0)来表示结束 用submit_request的时候,其实最终还是向fnd_concurrent_request(另外我们定义的request是保存在fnd_concurrent_program里面的)里面插入一行数据,如果不提交的话,该请求是不会真正开始运行的,所以我们一般在submit_request之后来个Commit,否则的话如果使用wait_for_request的话会无限期等待下去;在Form里面需要注意的是,必须使块基于数据库,不然没得Commit。假如在一个请求内部使用了submit_request,特别注意的是需要检查Concurrent Manager的Process数至少为2,否则上述两个请求会处于死锁状态 数据库表中的Org_Id或者Organization_Id对初学者来说往往搞不清楚是哪个层次的组织,一般来说前者是OU,后者是库存组织,然而这也不一定,有一个简易的方法是,只要我们碰到Item,比如在订单中,那么一般是指库存组织 _all,基表,保存多组织数据,里面有一个Org_Id字段,一般不直接出现在我们的DML中 去掉_all的视图,根据用户环境过滤掉组织,相当于普通的基表,我们直接使用它,就当它是基表 _v,视图,给Form用 _kfv,启用关键性弹性域的时候动态生成的视图,包含Concact过的字段组合 _dfv,启用描述性弹性域的时候动态生成的视图,我们取弹性域子段的描述的时候,需要用用户出口函数。 _tl,基表,有language字段,us肯定有,其他的看安装 _vl,视图,根据环境设置过滤语种,所以做报表用_vl _s,序列号 _API,Package,保证向后兼容 _PKG,Package,Program _SV,Package,供Form调用 rowid,伪列,指明记录物理位置,文件号+块号等,具体的我也不清楚 rownum,伪列,指明符合条件的记录的记录号,需要注意的是这个记录号在Order By之前就已经决定,如果想用Order By之后的记录号,只能再套一层Select level,伪列,指明树状结构记录的层次,以下示例代码可作为Form Tree的数据源 select 1 state, level, CUSTOMER_NAME,null,CUSTOMER_ID from da_customers a start with PARENT_CUSTOMER_ID = -1 connect by prior CUSTOMER_ID = PARENT_CUSTOMER_ID who,五个记录创建及修改历史的字段,可以通过OA的Help/Record History菜单查看 文件系统File system的层次一般是$APPL_TOP/$MODULE_TOP such as $GL_TOP,$AU_TOP/Version/forms,reports,sql,./EN,ZHS,.五个层次,在URL中有一个语言参数,它的值是根据用户当前的NLS_LANG设置来的;假如指明是中文,那么Form Server会到ZHS下取文件,在任何其他语言对应的目录下找不到文件的话,系统都会到EN目录下取,假如还取不到,这个时候才报错。AU指Application Utility,我们编写的Form源文件一般放在$AU_TOP/Version/forms/LANG下,而PLL源文件一般放在$AU_TOP/Version/resource下,但编译的时候前者要放到对应应用的对应语言的目录下,而后者还是在源目录;对于Report,则直接放在对应应用的对应语言下,不需要编译 一个用户对应一个或多个responsibility,一个responsibility对应一个或多个menu,一个底层menu对应一个function,一个function对应一个form或者一个报表或者一个程序;一个responsibility对应一个请求组,一个请求组对应一个或多个报表和程序,这个应该放过来说,在定义报表的时候可以选择哪个请求组;一个responsibility对应一个Application,这个不要和该responsibility拥有的菜单混淆,菜单没有限制 Workflow开发整理 - 根据Server安装指南一般可以完成Workflow Server的配置。按我的经验,有几个地方需要注意 1、可以直接使用8i的http,不用安装IAS,根据Server安装指南配置httpd.conf的别名即可;http服务起不来的可能情况2、 httpd.conf语法错误,这个没什么好说的 之前的服务没有正常结束,一般重新启动计算机即可;或者杀掉java进程,如果有的话 新安装了Oracle其它产品,导致路径引用错误;我的解决办法是把新安装软件在环境变量Path中添加的路径移到最后 如果要看httpd为何无法启动,查看Log是没用的;应该先运行CMD,然后cd到需要的目录,输入apache.exe,这个时候就会有错误出现 2、Notification默认的配置是html email,这个时候易遇到Notification就报错,因为我们自己一般没有配置Mail服务器,所以需要在Global Workflow Preferences里面把Send me electronic mail notifications设置为Do not send me mail 3、开始我没有配好Business Event System,在执行Aprove等动作的时候老是No Data Found;后来我根据Error Stack找到wf_xml包,把里面的RemoveNotification的Raise语句注释掉就可以了。嘿嘿,反正我是自己研究工作流,无所谓了 4、我的系统是XP Home SP1,没有JVM,无法View Diagram;装了JDK,不太好用,卸掉装msjavx86.exe一切正常 刚接触Workflow Builder会碰到的几个疑问 如何连接各个Node:用右键而不是左键连 为何修改不了别人的文件:在Help菜单里面设置合适的Access Level 为何图标不起作用:在View菜单里面选择Develop Mode 如何使用Standard的Item:打开Standard或Demo文件,把Stantard这个Item Type抓过去 Notification根据什么发:必须在Process里面打开Notification的属性,Node标签里面有一个Performer,根据需要设置成我们预定义的某个Role类型的Attribute即可 Workflow Builder的PL/SQL函数有什么要求:拷个Demo的函数,照着写就可以了,怎么判断运行模式,怎么返回里面都有 其他问题其实Workflow Builder在保存或者我们选择Verify的时候都会提示,只要认真看都能解决 对各个Item的通俗理解 1、Item Type是个抽象的概念,为方便理解,可以看作是一个工作流的容器和标志 2、Attribute是全局变量,供整个Item Type里面的元素使用,可以作为Message的附加属性,Send给用户看或者存储用户的Response内容比如Note和Forward To;Attribute另一个常用的地方是作为Notification的Performer。当然我们的PL/SQL代码是离不开Attribute,几乎任何PL/SQL函数都需要通过取得Attribute变量-判断Attribute变量-设置Attribute变量,决定程序如何走,返回什么值 3、Message,就是一个消息,内容在Body里面定义,用&引用Message自己的Attribute;对我们程序有用的的是Message的Attribute,一般和上面的全局变量Attribute对应,Send类型的Attribute将取当时的全局变量Attribute的值发给用户看,Response类型Attribute将把用户输入的内容返回给全局变量Attribute供我们的程序作下一步判断使用 4、Lookup Types,基础字典列表,就像我们的部门字典表,销售方式字典表一样,不过它是静态的;根据需要设置,一般用来标志工作流各类Item的返回值,和我们的PL/SQL函数返回值一一对应 5、Function,就是Function,一个处理,一般对应一个PL/SQL函数并定义返回值为某个Lookup Type 6、Notification,发送一个消息,消息内容为定义的Message内容,消息的接收人是定义的Performer 7、Process,真正的流程,由Notification、Function、子Process组成,开始于一个Start Function,结束于一个或多个End Function,中间是Notification和Function组成的业务流程,在这个级别上可以把Notification、Function、子Process看成是一样的即activity,他们都有返回值,不同的结果走不同的流程,由此组成一个符合业务需要的图表 由Engine管理、不需要我们操心的东西 1、消息发送;我们只管定义,由于可以用HTML写Message的Body,可以定义得很漂亮 2、流程选择;我们只管按不同的返回结果画图,Engine会根据我们函数的返回值调用下一个activity 3、用户选择;我们可以修改wf_roles、wf_users、wf_user_roles这三个视图,使之包含我们业务系统的用户即可 开始以为Workflow Builder会根据我们的Hierachy定义自动执行,其实关于Hierachy的定义、执行的规则等等都需要我们自己编写代码实现,所以Workflow Builder本身其实还是很简单,主要还是靠我们的PL/SQL和分析设计能力 Discover开发整理 - Discover比较简单,会SQL和用过Excel的人都会搞;有麻烦的是安装和配置,我用的是4.1.37 安装的时候需要在Default Home,其他Home不行;如果实在不想装在Default Home,可以修改注册表的两个地方 如果先装6i,后装Discover,需要备份Bin目录下的UIW60.DLL,装完之后把UIW60.DLL拷贝回来;否则Form Builder起不来,需要重新安装或从别人那里拷贝UIW60.DLL 登录standard EUL用的是数据库用户;登录application EUL用的是Oracle OA用户,登录只后要选择职责,这样也就选择了OU,这个很关键,大部分业务视图都是需要过滤OU的,如果不以application 身分登录,意味着OA的VIEW我们要重写,改成基于基表,然后通过其他办法过滤OU,这个工作量太大 要以Application用户登录,需要在Tools-Option-Connection设置为Connect to application EUL或者Connect to both standard and application EUL,前者默认就以application身份登录,后者在登录的时候会出现一个Check Box让我们选择;Gareway User Id和Foundation Name不用填,系统默认用applsyspub和apps 4.1.37要以application身份登录,需要安装Patch,其实就一个登录验证文件fndpu115.dll(URL= /metalink/plsql/ml2_documents.showNOT?p_id=251932.1&p_showHeader=1&p_showHelp=1),拷贝到DISCVR4目录下;否则报的错误让你无法理解 在Admin里面,如果用登录的用户自己创建EUL,可能会报“不能给自己Grant或Revoke权限”,可以换成system用户登录,然后建给需要的用户即可 Business Area可以在Admin里面导入导出,这个对发布很重要;Workbook可以通过命令行导出,但我用下来速度很慢,只好一个个手工发布了 在Admin里面建好Business Area,一定记得在Tools-Security里面把Business Area授权给相应的职责,不然用Desktop登录之后什么都看不到,当然导Workbook也会报错 Workbook需要授权其他用户才可以看到;命令在File菜单里面。但是只有拥有Share权限的用户/职责才可以,这个需要在Admin里面设置 创建基于Application的EUL的时候,我习惯选择Public选项 Admin中的Folder可以Refresh,这样可以反映对应VIEW的修改,菜单在File下 注册Function的时候,Function Name需要大写,Packge Name也需要大写,不然它会报Invalid Function 有操作上的问题可以参考:Oracle Discoverer Online Manuals,包括Discoverer Installation & Upgrade Guide,Discoverer Administration Guide,Discoverer Plus User Guide,后者有中文版,两个小时可以看完 -此内容被huajhua于2004-08-05,18:45:37编辑过最近收到一些问我一些Form界面设置问题的邮件,以下是我刚学FORM时的一些整理,比较简单,希望有用 - Title、Prompt等单词第一个字母大写,其他小写,不用下划线,而字段名是有下划线的 Scroll Bar的宽度一般是 :.2 FORM First Navigation Data Block :设成我们做的block 最大 :7.8/5.0 左边距 :.1,对于Tabular的form其实就是Current Record Indicator的X Positon 右边距 :.144 Data Block Subclass Information :Block Previous Navigation Data Block :自己 Next Navigation Data Block :自己 Scroll Bar Cavas :Tabular格式的设置成内容画布 Scroll Bar Orientation :Tabular格式的设置成Vertical Data Block Items Subclass Information :只要用户看的到的都要设置,并且设置完之后不要去修改字体等属性, ROW_ID设成ROW_ID,FLAG设成CHECKBOX,Descriptive FlexField设成 TEXT_ITEM_DESC_FLEX,其他的基本都是设成TEXT_ITEM Justification :数字设成End,其他的设成Start,不要用Left和Right Maximum Length :对于ROW_ID默认好像是4,一定要改大一点,比如2000,否则Insert的 时候会抱错 Case Restriction :如果是Code字段,一般要求Upper Initial Value :Sequence字段用:sequence.SEQUENCENAME.NEXTVAL,日期字段如果需要 设置,可以用$DBDATE$,Check Box根据需要设置 Required :根据需要设置 Copy Value from Item :一般由Master-Detail自动设置,当Detail区查询或者创建新记录时自动 设置,而且不影响记录的Status Synchronize with Item :可以用来设置mirror item,这样可以在form的多个地方显示 Database Item :Current record indicator、DF、其他自己创建的Item一定要设成No, 并且把Column Name清空 Primary Key :主键需要设成Yes Update Allowed :Code字段一般设置成No List of Values :日期字段、DF设成ENABLE_LIST_LAMP,其他的用自己创建的相应LOV,该 LOV的属性设置成LOV Validate from List :日期字段、DF一般设成No,其他用到LOV的设成Yes Canvas :Current record indicator、df、flag设置到内容画布,其他的设置到堆 叠画布 X Positon :Current Record Indicator设成.1 Width Code :.9 Meaning :1.4 Description :1.5 Date :1.2 Time :.8 Date-time :1.7 Percentage :.7 DF :.2 Current Record Indicator :.1 Drill Down Indicator :.2 Prompt :DF字段可以用的中间可以用空格 Prompt Alignment :Start Prompt Alignment Offset :.055 Canvas Subclass Information :内容画布用CANVAS,堆叠画布用CANVAS_STACKED Viewport X Position :堆叠画布设成.2,内容画布设成0 Viewport Y Position :堆叠画布设成.1,内容画布设成0 Viewpot Width :堆叠画布的不要太宽,注意协调性,并且刚好容下滚动条,如果有 Viewpot Height :堆叠画布的注意刚好容下滚动条,如果有;Physical的Height设成和这个 一样 Window :设成我们的主窗口;注意,只有把两个画布的Window属性指定到同一个, 堆叠画布才会自动堆在内容画布上 Show Horizontal Scroll Bar :堆叠画布设成Yes Frame Subclass Informaiton :根据需要设置 LOV Subclass Informaiton :LOV Column Mapping Properties Return Item :一般Code需要设置;手电筒的不用设置 Display Width Code :.8 Meaning :1.5 Column :注意Code在前面,Meaning在后面 Width :3 Oracle 附件的使用 - Attachements Oracle的附件给我们提供了一个方便的功能,只要定义定义,不需要任何代码就可以实现附件功能,比弹性域还方便(当然功能没有弹性域强) 定义Attachements比较容易,遵循115devg中的Attachements章节即可完成。 fnd_attached_*系列的表保存我们在开发员职责里面的附件定义 fnd_documents_*系列的表保存最终用户的具体的附件业务数据,file类型的附件存储在fnd_lobs表中 fnd_documents_tl.media_id可以关联到fnd_lobs.file_id、fnd_documents_long_text.media_id、fnd_documents_shot_text.media_id取得相应的附件内容 定义过程如下 1、定义Entity实体,其实就是表,必须的 Table 输入表名即可 Entity ID 输入表名即可,如果在同一个标定义多个实体,可以用“表名_N”的形式,随便 Entity Name 输入一个比较友好的名字,这个名字要显示给用户看 Prompt 没什么用 Application 就是我们的应用;如果是定义在Oracle标准表上,最好也用我们自己的应用名,否则升级的时候会丢失 2、定义Document Categories,其实就是定义一个类别或者说一个标志,可以直接用系统的Miscellaneous这个类别,可选的 Category 输入任意一个名字即可 Default Datatype 随便选一个,最好选会应用这个Category最常用的类型,比如文件 Effective Date 默认,不填即可 Assinments按钮 这里不用管 3、定义Attachement Function,必须的 Type 一个Form可能关联几个Function(进一步关联几个菜单),如果附件在不同的Function下可能不同,比如Category不同(从而可以过滤附件,这就是所谓的安全性),这里选Function;如果附件不需要区分Function,这里就选Form Name Form或者Function的名字 User Name 自动出来 Session Context 我没用它 Enabled 打勾 4、点击Category按钮,为上面定义的Attachement Function选择刚才定义的Category,或者选择Miscellaneous,可以选择任意个,必须的 *Category的工作原理:Category本身仅仅是一个标志,就像我们部门字典表一样;一个Form(或者其Function)会关联到一个或多个Category(就是在这里定义);最终用户在把一个附件添加到这个Form上的一条记录上时,必定会指定属于某个Category,可选范围就是这里定义的;到这里Category还没有显示出什么作用,也就是如果仅仅一个地方会用到这个附件,Category就没什么用。如果同一个实体的附件会在其他Form上出现,就像115devg文档所说的,一个Product的附件可以在Order Line上被显示出来,假如用户上传了一个图片作为附件,并分配Category为xxxxx,如果Order Form的Category没有包含xxxxx,在Order Line上将看不到那个附件。按我的理解,就这样。 5、定义Attachement Function Block,定义我们Form上包含附件的数据块,每个块都可以定义,必须的 Block Name 输入块名,不要告诉我你不知道! Method 一般Base Entity选Allow Change,如果是引用的选Query Only Secured By 这个可以进一步限制安全性,可以不定;这里我不多说,如果不清楚再找我 6、定义Block-Entity关系,必须的 Entity 选择上面定义的实体,一行一个 Display Method 基础实体选择Main Window,引用实体选择Related Window Include in Indicator 基础实体打勾,引用实体不选;这个选项其实就是用来初始化工具栏上的图标,选不选都不影响功能 Indicator i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论