FORM开发笔记

摘要:
system.message_ Level='25'系统变量赋值操作:变量名称,变量描述,system.block _ Status包含当前块的状态:system.current_ Item包含当前字段的名称。system.current_值包含在system.current _项变量表示项的值。system.cursor_Item包含当前光标所在块和项目的名称。

1,

界面对行循环后在回到循环前的行

v_current_record number:=Get_Block_Property('block名称', Current_Record); --返回当前行号

go_record(v_current_record); --回到以前的当前行

2,Form中的系统变量,它存在于一个Form的整个运行时期的会话之中,变量包含了有关Form相关属性的字节信息。有些变量标明了当前状态,还有些变量包含了告诉Oracle如何进行相关操作的设定信息。当系统变量在表达式中出现时,system前要加上分号,表示为:system,多个变量之间用逗号分隔开,:system后面以圆点(.)连接变量名,例如:system.message_level = '25'这样的系统变量赋值操作。

Oracle Form系统变量中文总结如下:
变量名
变量描述
system.block_status
包含了当前块的状态,可有三个值:CHANGED,表明块中至少有一个记录被修改过;NEW,表明块中仅有未被修改过的记录;QUERY,表明块处于查询模式中。
system.coordination_operation
被用于块的同步过程,它与变量system.master_block合用。在块同步的过程中,变量system.master_block包含了主块的名字,变量system.coordination_operation包含了使触发器on_clear_details启动的主块中所发生的事件名称。
system.current_block
决定输入点的位置,当它出现在块、记录、项中时,它的值是块名。当pre_,post_form类触发器启动时,它的值为空(null)。
system.current_datetime
包含当前操作系统的日期和时间的字符值,默认格式为DD_MON_YYYY  HH24:MI:SS。
system.current_form
包含当前form的名称。
system.current_item
包含当前域的名字,当光标从一项移动到另一项时,这个值为空。
system.current_value
包含由system.current_item变量代表的项的值。
system.cursor_block
包含当前光标所停留的块的名字。
system.cursor_item
包含当前光标所停留的块和项的名字。
system.cursor_record
包含当前光标所停留的记录的名字。
system.cursor_value
包含当前光标所停留的项的数值。
system.custom_item_event
包含由VBX控制所引起的事件的名字。
system.custom_item_event_parameters
为VBX控制保持附加事件。
system.date_threshold
包含数据库数据重复查询临界值。此变量与$$DBDATE$$、$$DBDATETIME$$、$$DBTIMES$$变量一同使用,来控制form使用RDBMS同步数据库数据的频繁程度。数值的格式是:mi:ss(分:秒)。
system.effective_date
设置有效的数据库数据,数据格式为:DD_MON_YYYY.HH24:MI:SS。
system.event_window
包含最后一个由窗口事件触发器带来的操作所影响的窗口的名字。
system.form_status
包含含有光标的form的状态。其值可为以下一个或多个:CHANGED,NEW,QUERY。
system.last_query
在当前进程中包含用来添加一个form块的select语句。
system.last_record
包含一个在记录块集中表示当前记录是否是最后记录的布尔值。
system.master_block
与system.coordinations_operation变量一同使用,来决定由触发器on_clear_details启动的操作类型。
system.message_level
控制错误信息的显示,oracle错误信息被分配在0到25之间,间隔为5。小于这个值的错误信息将不被显示,这个值要由单引号括起。
system.mode
决定form是否处于normal、enter_query、query进程模式。
system.mouse_button_pressed
包含了点击鼠标的次数。左键值为1,从左键到右键值增长为1.
system.mouse_button_shift_state
标明了在点击鼠标时的按键。数值为:shift、control、alt。
system.mouse_canvas
包含了鼠标输入点所在的画布的名字。
system.mouse_form
包含了鼠标输入点所在的form的名字。
system.mouse_item
包含了鼠标输入点所在的item的名字。
system.mouse_record
包含了鼠标输入点所在位置的记录的个数。
system.mouse_record_offset
包含了鼠标输入点所在位置的可见记录的个数。
system.mouse_x_pos
包含了鼠标所在位置的x坐标位置。
system.mouse_y_pos 包含了鼠标所在位置的y坐标位置。
system.record_status
包含了鼠标所在位置的记录状态,其值为CHANGED、INSERT、NEW和QUERY。
system.suppress_working 包含一个在form执行时禁止显示working...信息的布尔值。True将防止显示;False反之。
system.trigger_block
包含了在当前触发器启动时鼠标所在块的名字。
system.trigger_item
包含了在当前触发器启动时鼠标所在块和项的名字。
system.trigger_record
包含了Form正在处理的记录个数。

界面 工具 菜单下挂 form

在 WHEN-NEW-FORM-INSTANCE 的触发器中写:

APP_SPECIAL.INSTANTIATE('SPECIAL11','批量导入');
APP_SPECIAL.INSTANTIATE('SPECIAL12','手工关闭', 'xxhanlj', TRUE, 'LINE');--
APP_SPECIAL.INSTANTIATE('SPECIAL13','零件表导入', 'xxhanljdr', TRUE, 'LINE');

然后在form的触发器中创建SPECIAL13触发器,并在其中写逻辑

FORM表单的查询方法:

1、使用:parameter.G_query_find参数;

IF (NAME_IN('PO_HEADERS.PO_HEADER_ID') IS NOT NULL) THEN 
   :parameter.G_query_find := 'TRUE'; 
   app_find.find('CUX_PO_HEADERS_ADD_MESSAGE'); 
   :parameter.G_query_find := 'FALSE'; 
ELSE 
   FND_MESSAGE.DEBUG('请先保存订单头'); 
END IF;

在CUX_PO_HEADERS_ADD_MESSAGE的PRE-BLOCK中处理 
  copy(name_in('PO_HEADERS.PO_HEADER_ID'),'CUX_PO_HEADERS_ADD_MESSAGE.PO_HEADER_ID');

在CUX_PO_HEADERS_ADD_MESSAGE的pre_query里加

app_query.reset('块名'); 

app_query.append('PO_HEADERS',' SEGMENT1 like '||chr(39)||:PARAMETER.PO_NUM||'%'||chr(39) );

2、使用Default_where属性处理 
declare 
  lv_default varchar2(2000); 
begin 
  lv_default:='.....'; 
  go_block('CUX_PO_HEADERS_ADD_MESSAGE'); 
  set_block_property('CUX_PO_HEADERS_ADD_MESSAGE',DEFAULT_WHERE,lv_default); 
  execute_query; 
end;

 一段程序:

--------------------------------------------------------------------------------------------

-- Create override record group if not exist else clear record group
procedure initialize_override_group is
rg_name VARCHAR2(40) := 'OVERRIDE_FIELDS';
rg_id RecordGroup;
gc_id GroupColumn;

BEGIN
rg_id := FIND_GROUP( rg_name );
if id_null(rg_id) then
rg_id := create_group(rg_name);
gc_id := add_group_column(rg_id, 'ROW_ID', CHAR_COLUMN, 20);
gc_id := add_group_column(rg_id, 'FIELD_NAME', CHAR_COLUMN, 20);
gc_id := add_group_column(rg_id, 'FIELD_VALUE', CHAR_COLUMN, 80);
gc_id := add_group_column(rg_id, 'FIELD_VALUE_CODE', CHAR_COLUMN, 30);
gc_id := add_group_column(rg_id, 'LIMITING_VALUE', CHAR_COLUMN, 30);
gc_id := add_group_column(rg_id, 'REQUIRED_FLAG', CHAR_COLUMN, 1);
--Project Classifications changes
--Ansari
gc_id := add_group_column(rg_id, 'SELECT_FLAG', CHAR_COLUMN, 1);
gc_id := add_group_column(rg_id, 'code_percent', NUMBER_COLUMN);
--Project Classifications changes
--Ansari
else
delete_group_row(rg_id, ALL_ROWS);
end if;
END initialize_override_group;

rg_id RecordGroup;
rg_col1 GroupColumn;
rg_col2 GroupColumn;
rg_col3 GroupColumn;
rg_col4 GroupColumn;

rg_id := find_group('OVERRIDE_FIELDS');
row_count := get_group_row_count(rg_id);

rg_col1 := find_column('OVERRIDE_FIELDS.FIELD_NAME');
rg_col2 := find_column('OVERRIDE_FIELDS.FIELD_VALUE');
rg_col3 := find_column('OVERRIDE_FIELDS.FIELD_VALUE_CODE');
rg_col4 := find_column('OVERRIDE_FIELDS.LIMITING_VALUE');

for i in 1..row_count LOOP

if (Get_Group_Char_Cell( rg_col1, i) = 'KEY_MEMBER' and
Get_Group_Char_Cell( rg_col2, i) is not null ) then

x_field_value_id := to_number(Get_Group_Char_Cell( rg_col3, i));
x_limiting_value := Get_Group_Char_Cell( rg_col4, i);

---------------------------------------------------------------------------------------------------

form中打印报表:

先调用请求:

v_Bool := Fnd_Request.Add_Layout(Template_Appl_Name => 'CUX'
,Template_Code => 'CUXQA' || l_Program_Code-- || 'PRINT'
,Template_Language => 'zh'
,Template_Territory => 'CN'
--,Output_Format => 'PDF'
,Output_Format => p_print_type);

v_Req_Id_1 := Fnd_Request.Submit_Request('CUX'
,'CUXQA' || l_Program_Code-- || 'PRINT'
,NULL
,NULL
,FALSE
,:Cux_Qa_Report_Headers.Header_Id
,v_Work_Num
,l_Report_Date);

COMMIT;

等待请求结果:

f_Bool := Fnd_Concurrent.Wait_For_Request(v_Req_Id_1
,1
,0
,l_Phase
,l_Status
,l_Dev_Phase
,l_Dev_Status
,l_Message);

显示结果:

 Editor_Pkg.Report(Req_Id, 'Y'); -- 报表输出 要在附加数据库和PL/DQL程序库中加入FNDCONC.pll文件

------------------------------------------------------------------------------------------------

form总调用package,网页结果

v_command := fnd_profile.VALUE ('APPS_WEB_AGENT');
v_command := v_command || '/Cinv_Print_Doc.Print_Issueord1?p_Organization_Id=' || :ORDER_HEADER.ORGANIZATION_ID;
v_command := v_command || '&p_Doc_Id=' || :ORDER_HEADER.HEADER_ID;
v_command := v_command || '&p_Doc_type=' || :ORDER_HEADER.DOC_TYPE_NAME;
--v_command := v_command || '&p_doc_num_from=' || :ORDER_HEADER.DOC_NUMBER;
--v_command := v_command || '&p_Doc_Num_To =' || :ORDER_HEADER.DOC_NUMBER;
v_command := v_command || '&p_Date_From=' || NULL;
v_command := v_command || '&p_Date_To=' || NULL;
v_command := v_command || '&p_Create_By=' || :ORDER_HEADER.CREATED_BY;
v_command := v_command || '&p_Print_Person=' || V_PRN_PERSON;
web.show_document (v_command, '_blank');

-------------------------

form中加提示消息

FND_MESSAGE.SET_STRING('请重新查询记录');
FND_MESSAGE.HINT;

-----------------------------

Dependencies item(相依性Item)的编程
语法:

--建立相依字段的属性
APP_FIELD.SET_DEPENDENT_FIELD(EVENT,:block.master_item = CONDITION,‘block.dependent_item’);

注意:设定一次即可一直使用Dependencies属性。

--清除相依字段的数据

app_field.clear_dependent_fields('HEADER.REQUESTER_NAME', 'HEADER.REQUESTER_ID');

---建立Required Field

APP_FIELD.SET_REQUIRED_FIELD
用途:Conditionally Mandatory items—use APP_FIELD.SET_REQUIRED_FIELD to
require certain items only if a certain condition is met.

--APP_FIELD.SET_REQUIRED_FIELD(EVENT,(CONDITION),’block.item’);

具体步骤:

1,  Pre-record的时候,最好要将所有的Dependent field初始化。有的删除,一定需要的可以建立。

2,  建立的Procedure最好要系统化,子程序化。使得相互之间可以调用。例子:见R11i test form的:dependent item sql sample.sql

3,  通常在以下的trigger中调用Dependencies控制逻辑:

PRE-RECORD,when-create-record,
when-validate-item,when-checkbox-changed, when-radio-changed,when-list-changed和‘INIT’事件。

PRE-RECORD和INIT是在操作数据前初始化这些逻辑,而其他是在item发生变化后验证这些逻辑,满足条件则进行后续的动作。

需要注意的是,设置了Dependent的关系的Item,在其主变化时候,相依的Item会自动清空。但是仅仅会清空相依的那一个字段。

如果相依的字段,还有自己相依的字段(比如Show值,但是存ID,或者Show值,另外还有描述等信息),如果想一起清空,要用:app_field.clear_dependent_fields

--------------

Eg:

APP_FIELD.SET_DEPENDENT_FIELD(EVENT,

:block.master_item = CONDITION,

’block.dependent_item’);

APP_FIELD.SET_DEPENDENT_FIELD(EVENT,

((:block.master_item1 IS NOT NULL) AND

(:block.master_item2 IS NOT NULL)),

’block.dependent_item’);

APP_FIELD.SET_EXCLUSIVE_FIELD(EVENT,

’block.item1’,

’block.item2’,

’block.item3’);

APP_FIELD.SET_INCLUSIVE_FIELD(EVENT,

’block.item1’,

’block.item2’);

APP_FIELD.SET_REQUIRED_FIELD(EVENT,

(CONDITION),

’block.item’);

 ------------------------

免责声明:文章转载自《FORM开发笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql查询特定时间段内的数据JAVA启动参数整理[转]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数据分析--降维--LDA和PCA

一、因子分析   因子分析是将具有错综复杂关系的变量(或样本)综合为少数几个因子,以再现原始变量和因子之间的相互关系,探讨多个能够直接测量,并且具有一定相关性的实测指标是如何受少数几个内在的独立因子所支配,并且在条件许可时借此尝试对变量进行分类。   因子分析的基本思想   根据变量间相关性的大小把变量分组,使得同组内的变量之间的相关性(共性)较高,并用一...

谈lisp

The Lisp Curse /Lisp魔咒 http://winestockwebdesign.com/Essays/Lisp_Curse.html 英文出处 http://www.soimort.org/posts/124/ 中文翻译的出处 谷幽 The power of Lisp is its own worst enemy. Here's a th...

dbus-python的API及示例

目录 1. Data types 2. Connecting to the Bus 3. Making method calls (同步调用) 3.1. Proxy objects 3.2. Interfaces and methods 4. Making asynchronous calls(异步调用) 4.1. Setting up an...

SPSS超详细操作:分层回归(hierarchical multiple regression)

SPSS超详细操作:分层回归(hierarchical multiple regression) 1、问题与数据 最大携氧能力(maximal aerobic capacity, VO2max)是评价人体健康的关键指标,但因测量方法复杂,不易实现。某研究者拟通过一些方便、易得的指标建立受试者最大携氧能力的预测模型。 目前,该研究者已知受试者的年龄和性别与...

大数据之Shell编程(一) Shell变量

1.Shell中的变量 Shell中的变量分为系统变量和用户变量,可以通过set命令查看有哪些变量可以使用系统变量比如:$HOME$PWD$SHELL$USER等等 2.变量的定义 变量=值 (例如STR=abc) 注意:=两边不能含有空格 变量一般使用大写,当然不是硬性规定 双引号和单引号区别:双引号仅仅将空格等脱意,而单引号会将所有的特殊字符脱意 &g...

JDK10

1 局部变量类型推断 1.1 JDK10之前定义变量存在的问题 很多人抱怨Java是一种强类型,需要引入大量的样板代码。很明显类型声明往往被认为不是必要的。 JDK10之前的Java代码总中,声明一个变量是非常繁琐的: package com.sunxiaping; import org.junit.Test; import java.util.Ar...