当前位置:首页 > Oracle ERP FORM开发学习操作手册
图64
8. 最后,在步骤7中分配的数据项只要添加到画布上,就可以看到有LOV弹出式值列表的
按钮。
3.1.2为什么运行时值列表为空(如何初始化多组织环境)?
ERP通过多组织环境的方式进行权限的区分,因此在大多数基于视图的查询中都需要对多组织环境进行初始化才能看到相应权限的数据。初始化步骤如下:
1. 在触发器PRE-FORM中添加针对多组织的初始化代码,首先在begin的上面填写变量声
明:
DECLARE l_default_org_id NUMBER; l_default_ou_name VARCHAR2(240); l_ou_count NUMBER; l_no_access_flag VARCHAR2(10); 2. 在begin至end间添加如下代码。大多数情况下,下面的代码只需要修改第一行mo_global.init的参数为具体产品名即可。 --初始化多组织访问环境,参数为产品名,mo_global为Oracle提供的库函数 mo_global.init('CCM'); --将获得的多组织相关数据填写到变量中,mo_utils为Oracle提供的库函数 mo_utils.get_default_ou(l_default_org_id,l_default_ou_name,l_ou_count); --将变量值拷贝到参数对象中,以便各个触发器,LOV等地方可以读取,需要在‘参数’下面创建相应的参数对象 --大多数情况,初始化多组织访问环境后并不需要再特地使用这些变量,多组织效果是直接作用在session上 copy(l_default_org_id,'PARAMETER.mo_default_org_id'); copy(l_default_ou_name,'PARAMETER.mo_default_ou_name'); copy(l_ou_count,'PARAMETER.mo_ou_count'); IF l_default_org_id IS NOT NULL THEN --如果存在默认组织,则保存到old_org_id中 copy(l_default_org_id,'PARAMETER.old_org_id'); --设置为单组织访问方式,第一个参数'S'代表使用单组织访问方式,第二个参数代表具体使用的组织ID --mo_global为Oracle提供的库函数 mo_global.set_policy_context('S',l_default_org_id); ELSE --设置为多组织访问方式,第一个参数'M'代表使用多组织访问方式,当第一个参数为'M'时,第二个 --mo_global为Oracle提供的库函数 参数无意义 mo_global.set_policy_context('M',NULL); END IF; 通过步骤1和2,你的PRE_FORM看上去应当像这样:
图65
3. 在‘参数’中添加上面代码中使用到的PARAMETER对象,包括mo_default_org_id,
mo_default_ou_name, mo_ou_count, old_org_id。如图所示:
图66
这样,即可完成多组织的初始化,FORM中基于Oracle视图的查询语句将可以直接看到多组织的效果
3.1.3如何为一个日期型字段设置弹出日历的效果
1. 在项属性的“初始值”中填写 $$DBDATE$$ 。
注:该变量代表当前日期
2. 在项属性的“值列表”中选择 ENABLE_LIST_LAMP 。
注:该值列表为系统提供的特殊类型值列表,作用是给输入框添加一个LOV按钮,但不做任何其他事情,需要自己再实现相应功能
3. 在该项的触发器中添加KEY-LISTVAL触发器,填写代码: --calendar为template.fmb中都有的日历窗口 calendar.show; 上述步骤操作完后,应当与下图类似:
图67
3.1.4如何实现将一个输入框初始化为只读方式
将该项的“子类信息”设置成TEXT_ITEM_DISPLAY_ONLY即可,如图所示:
图68
3.1.4如何实现第二个输入框依照第一个输入框的选择变换为必输或者不必输的状态
第一个输入框假设为Headers. CREDIT_OVER_LOW_FLAG,“项类型”为“列表项” 第二个输入框假设为Headers. CREDIT_OVER_LOW_RATE,当第一个输入框值为‘N’的时候,第二个输入框变为不需要输入的状态,当第一个输入框值为‘Y’时,第二个输入框变为必填项状态。
依照上面的需求,首先:
1. 在第一个输入框Headers. CREDIT_OVER_LOW_FLAG项下添加触发器“WHEN-LIST-CHANGE” 2. 触发器中填写如下代码: --溢短装与比例读写属性修改,注意项前面要有个冒号 --app_item_property.set_property为Form提供的属性变更函数 IF : Headers.CREDIT_OVER_LOW_FLAG = 'N' THEN app_item_property.set_property('Headers_V.CREDIT_OVER_LOW_RATE',ENTERABLE,PROPERTY_FALSE); app_item_property.set_property('Headers.CREDIT_OVER_LOW_RATE',REQUIRED,PROPERTY_FALSE); : Headers.CREDIT_OVER_LOW_RATE := NULL; ELSIF : Headers.CREDIT_OVER_LOW_FLAG = 'Y' THEN --当第一个输入框值为Y的时候,设置第二个框的输入状态为可以输入,并且是必输项 app_item_property.set_property('Headers.CREDIT_OVER_LOW_RATE',ENTERABLE,PROPERTY_TRUE); app_item_property.set_property('Headers.CREDIT_OVER_LOW_RATE',REQUIRED,PROPERTY_TRUE); END IF; --当第一个输入框值为N的时候,设置第二个框的输入状态为不可输入,必选属性为FALSE
共分享92篇相关文档