值集定义总结最近看到有些同事在定义值集的时候,对某些设置还有些疑惑,在此我就针对个人现阶段理解的程度来总结下,不知能不能对大家有所帮助,有不对的地方还望指点。一.从属值集的定义1.弹性域中的从属值集的定义在这里我们以资产模块的资产类别键弹性域为例,假如类别分为大类、小类。小类的列表内容将依据大类变化。即大类为小类的父集。我们首先建立2个值集,第一个值集命名为:UC_FAC_MAIN,注意选择验证类型为独立,创建结果如图1-1所示,图1-1第二个值集命名为:UC_FAC_MINO,在这里注意和第一个值集创建的区别了(注意:红色方框所标注的内容)。我们选择验证类型为从属,此时右边的编辑按钮可用,点击后进行设置,主要有2项设置:独立值集的设置(简单说就是为此值集选择父集)、从属默认值得设置(防止当用户没有在值集录入界面为对应的父集录入子集时,系统将默认带出在此设置的值)。设置结果如图1-2所示:图1-2当定义完2个值集后,我们导航到菜单:应用-验证-值,下为其录入列表值,首先为大类录入值,这很简单就是普通的录入。结果如图1-3所示:图1-3接着为小类录入值,他的录入有点特别,我们可以把焦点停在表单上部分的独立值项上,运用键盘的上下箭头,来为不同的独立值(即父值)录入不同的对应子集,每一个初始的独立值带出来的是我们上面设置的系统默认值(即:不分明细)结果如图1-4、1-5所示,每一个值都有可以由用户设置启用或失效,对于层次结构、限定词主要在会计的科目中及一些汇总中用到。图1-4图1-52.普通项中的从属值集的定义(一般用于报表参数)在这里我们假如有个报表,需要2个参数(为了举例方便,取了这2个参数,可能不符合实际。)帐套名称(cux_sob_id)、供应商名称(cux_vendor_id)并且第二个参数依据第一个参数来弹出列表值(即当选完帐套参数后,供应商值集列表中显示本帐套下的所有未失效的供应商)。这里我们还是定义2个值集,定义过程和上面例子的一样,只是在这里我们选择验证类型为表。此时点击右边的编辑按钮进行设置,这里主要是设置用户所需要的显示字段、传值字段、以及定义值集范围即(WHERE条件、排序等)。第一个参数他不附属与其他值集所以很简单,选择完表名、所需字段后保存即可,如图1-6、1-7所示:图1-6图1-7接下来我创建第二个值集(cux_vendor_id)因为他要附属于第一个参数(cux_sob_id)所以我们在出处/排序依据处进行添加条件:set_of_books_id=nvl(:$FLEX$.cux_sob_id,set_of_books_id)或者set_of_books_id=nvl(:$FLEX$.cux_sob_id:NULL,set_of_books_id)这样两个值集就关联起来了。我们仔细看上面的2个语句,差别在于第二个语句多了一个(:NULL),他的作用是当用户不选择他的父参数时,可以先选择他自己,反之,如果没有:NULL则用户必须选择完其父参数(本例为帐套名称)才能选择自己(本例为供应商名称)。设置结果如图1-8、1-9所示图1-8图1-9运行报表时的效果如图1-10、1-11所示:图1-10图1-11图中商业信息已屏蔽。二.报表参数中调用键弹性域的定义1.报表中调用间弹性域的定义有时候我们的报表可能要调用系统的键弹性域作为值集给用户来选择(如会计科目、资产类别等),这里我们以我在项目上做的一个报表(UC_资产明细)为例,说明在报表参数中运用键弹性域。我们知道一个键弹性域可以有多个结构,所以在调用一个键弹性域时除了要指明(APPL_SHORT_NAME、CODE)还要明确指出自己所需的那个结构,因此我们在定义并发程序时就应当额外创建一个隐藏的参数(P_CAT_SEG_NUM)来传递这个结构标识.而参数的值集我们在本例中为:CUX_ASSET_CAT_STRUCT_NUM,他的具体值我们可以从资产的系统控制表(fa_system_controls)中得到。SQL语句为:selectcategory_flex_structurefromfa_system_controls具体设置结果如图2-1、2-2所示图2-1图2-2接下来我们为真正显示在界面的参数(资产类别P_CAT_SEG)定义值集。定义过程和前面所讲的都基本相同,主要区别在于此值集的验证类型我们设置为特定,然后点右边的编辑按钮进行定义,需要注意的我已经用带色彩的框标记出来了,设置结果如图2-3、2-4所示。具体语法参数的含义大家可以参考附录。图2-3图2-4三.描述性弹性域上下文的应用(键弹性域与描述性弹性域互动关系定义)1.描述性弹性域上下文的应用在系统中描述性弹性域的显示结构是可以根据一个上下文字段来变化的,这样的设计会使应用层很灵活,进而在很多时候不用改动程序的基础上满足客户需求。我是在资产工作台的新建资产表单上进行的测试,当我们选择完资产类别后,紧随其后的描述性弹性域就根据前面所选择的资产类别而弹出不同的结构。下面我们来看下具体的定义过程:(本例我们用键弹性域返回的值作为上下文关系)我们首先在Form中定义键弹性域,和描述性弹性域。代码如下:从代码中可知在资产新增表单中,键弹性域的显示项为:ATTRIBUTE_CATEGORY_CODE,所以我们在系统中定义此描述性弹性域时,设置其参考段为ATTRIBUTE_CATEGORY_CODE如图3-1所示:图3-1接下来定义此弹性域的全局数据元(GlobalDataElements),个人认为它就类似于一个键弹性域中的某一组合结构,在这里我们定义他由4个项组合(资产类别、网络属性、工程期别、使用状态)。顾名思义(全局嘛)它的特点就是不管上下文内容是什么,这4个项都会显示。在本例中的表现就是,不管用户选择何种资产类别,此描述性弹性域都会显示这4个项。具体结果如图3-2、3-3图3-2图3-3接下来我们就开始定义具体上下文内容所对应的弹性域结构,本例只列举了2个例子(测试1、测试2)以作说明。我们想要达到的目的是:当用户选择的资产类别为“管理用固定资产.电子计算机系统”时,描述性弹性域就增加一个说明项测试1当用户选择的资产类别为“长期待摊费用.其他”时,描述性弹性域就增加一个说明项测试2具体定义如图3-4、3-5所示:图3-4图3-5这时我们可以在界面测试下我们所定义的结果了,如图3-6、3-7所示图3-6图3-7注意以上定义都是在定义描述性弹性域表单中未选中上下文显示复选框的情况下。下面我们看看当选中显示复选框时(如图3-8)的结果和注意事项:当用户选择了显示复选框后,在引用弹性域的界面中点击弹性域项后,不管上下文段值是什么,他都会显示一个你在上图中定义的提示(附加信息),如果有多个上下文段他会有一个列表让用户选择,如果只有一个上下文段则直接显示在他的下面,结果如图3-8、3-9所示图3-8图3-9这样就相当于强制使用了上下文关系,不管前面的键弹性域的资产类别选择了什么,描述性弹性域都会按客户强制的来存储。(这也只是一个测试,实际中不会这样用得吧)。现在来我们看看这样做后台表中怎么来存储的,他和其他正常录入的有什么不同。蓝色为正常录入的结果,红色为强制的结果。附录(SpecialValidationValueSets)SpecialValidationEventsYourspecialvalideventsinclude:EditValidateLoadInsert/UpdateQueryEdit/EditListValThelastfoureventsarepresentinOracleApplicationforcompatiblitywithfutureversion,andyoushouldnotusethem.SpecialvalidationEditEvent:Befiredwhenyouruser’scursorentersthesegmentinadataentrymode.YouusuallyusePOPIDforyoureditevent.SpecialValidationLoadEvent:Befiredafteraquerytopopulateyoursegment.YouusuallyuseLOADIDforyourloadevent.SpecialValidationValidateEvent:Befiredaftertheuser’scursorleavesthesegmentorclosethepop-upwindow,orwheneveradefaultvalueiscopiedintosegmentorreportparameter.YouusuallyuseVALIDforyourvalidateevent.Attention:YoumusthaveaValidateevent.SyntaxforSpecialValidationSyntax:#FND{POPID|LOADID|VALID}CODE=“flexfieldcode”APPL_SHORT_NAME=“application_short_name”VALIDATE=“{FULL|PARTIAL|NONE|QUERY}”SEG=“block.concatenatedvaluesfieldname”[BLOCK=“block_name”][FIELD=“field_name”][DERIVED=“:block.field\nSegmentqualifer”][READ_ONLY=“{Y|N}”][DINSERT=“{Y|N}”][WINDOW=“{Y|N}”][ID=“block.uniqueIDfield”][REQUIRED=“{Y|N}”][DISPLAY=“{ALL|flexfieldqualifier|segmentnumber}”][UPDATE=“{ALL|flexfieldqualifier|segmentnumber}”][INSERT=“{ALL|flexfieldqualifier|segmentnumber}”][DATA_FIELD=“concatenatedhiddenIdsfield”][DESC=“block.concatenateddescriptionfieldname”][TITLE=“windowtitle”][VDATE=“date”][NAVIGATE=“{Y|N}”][AUTOPICK=“{Y|N}”][NUM=“:structuredefiningfield”][COPY=“:block.field\n{ALL|flexfieldqualifier}”][VRULE=“flexfieldqualifier\nsegmentqualifier\n{I[nclude]|E[xclude]}\nAPPL=shortname;NAME=MessageDictionarymessagename\nvalidationvalue1\n…”][VALATT=“:block.field\nflexfieldqualifier\nsegmentqualifier”][USEDBFLDS=“{Y|N}”][COLUMN=“{column1(n)|column1alias(n)},…”][WHERE=“whereclause”][SET=“setnumber”][ALLOWEDNULL=“{Y|N}”][QUERY_SECURITY=“{Y|N}”][QBE_IN=“{Y|N}”][LONGLIST=“{Y|N}”][NO_COMBMSG=“MESG_NAME”]ParameterForSpecialValidationCODE:TheflexfieldcodeyouspecifywhenyousetupthisflexfieldusingtheRegisterKeyFlexfieldform.APPL_SHORT_NAME:Theapplicationsho