FORM中获取光标所在的TAB页面
1. 在Form级触发器中添加触发WHEN-TAB-PAGE-CHANGED
2. 在此触发器中写如下代码:
DECLARE
canvas_id VARCHAR2 (30);
--标签页ID
BEGIN
canvas_id := GET_CANVAS_PROPERTY ('标签画布名', topmost_tab_page);
IF canvas_id = '标签页1'
THEN
GO_BLOCK ('块1');
END IF;
IF canvas_id = '标签页2'
THEN
GO_BLOCK ('块2');
END IF;
IF canvas_id = '标签页3'
THEN
GO_BLOCK ('块3');
END IF;
EXECUTE_QUERY;
END;
设置时间
DECLARE
timer_id Timer;
one_minute NUMBER (5) := 60000;
BEGIN
timer_id := CREATE_TIMER ('emp_timer', one_minute, REPEAT |NO_REPEAT);
END;
生成Editer框
DECLARE
ed_id Editor;
status BOOLEAN;
BEGIN
ed_id := FIND_EDITOR ('edit_name'); ---由'edit_name'导航器定义
IF NOT ID_NULL (ed_id)
THEN
SHOW_EDITOR (ed_id,
NULL,
:block_name.item_name,
status);
ELSE
MESSAGE ('Editor "Happy_Edit_Window" not found');
RAISE Form_Trigger_Failure;
END IF;
END;
动态产生一个'LOV'框
DECLARE
lv_id LOV;
status BOOLEAN;
BEGIN
lv_id := FIND_LOV ('lov_name');
---'lov_name' 由导航器定义
--
IF ID_NULL (lv_id)
THEN
--
lv_id := FIND_LOV ('lov_name1'); ---'lov_name1' 由导航器定义
--
END IF;
status := SHOW_LOV (lv_id, 10, 20);
END;
打开form上标准菜单
app_menu.set_prop('EDIT.SELECT_ALL', ENABLED, PROPERTY_ON);
app_menu.set_prop('EDIT.DESELECT_ALL', ENABLED, PROPERTY_ON);
在相应层次建立出发器即可;
FROM 中Item代码格式Format
A typical item handler looks like this:
PROCEDURE ITEM_NAME (event VARCHAR2)
IS
IF (event = ’WHEN?VALIDATE?ITEM’) THEN
?? VALIDATE the item
ELSIF (event = ’INIT’) THEN
?? initialize this dependent item
ELSIF (event in (’PRE?RECORD’, ’POST?QUERY’)) THEN
?? etc.
ELSE fnd_message.debug(’Invalid event passed to item_name: ’ ||
EVENT);
END IF;
END ITEM_NAME;
取关键性弹性域帐户描述的方法
declare
-- Boolean parameters are translated from/to integers:
-- 0/1/null <--> false/true/null
result boolean;
begin
-- Call the function
result := fnd_flex_keyval.validate_ccid(
appl_short_name => :appl_short_name,--SQLGL
key_flex_code => :key_flex_code,--GL#
structure_number => :structure_number,--50228
combination_id => :combination_id,--113773
displayable => :displayable,--ALL
data_set => :data_set,
vrule => :vrule,
security => :security, --IGNORE
get_columns => :get_columns,
resp_appl_id => :resp_appl_id, --101
resp_id => :resp_id,--50481
user_id => :user_id, --11193
select_comb_from_view => :select_comb_from_view);
DBMS_OUTPUT.put_line(fnd_flex_keyval.concatenated_descriptions);
-- Convert false/true/null to 0/1/null
end;
组织访问权限的控制语句(11i)
SELECT ict.ROWID row_id,
ict.organization_id,
ict.rate,
ict.base_type_code,
flv.MEANING,
ict.adjust_account_id,
ict.description,
ict.created_by,
ict.creation_date,
ict.last_updated_by,
ict.last_update_date,
ict.last_update_login,
ood.ORGANIZATION_NAME ORGANIZATION_NAME
FROM dpos_item_cost_rate ict,
org_organization_definitions ood,
org_access oa,
fnd_lookup_values_vl flv
WHERE ict.organization_id = ood.ORGANIZATION_ID
AND oa.organization_id = ood.ORGANIZATION_ID
AND oa.resp_application_id = fnd_profile.VALUE ('RESP_APPL_ID')
AND oa.responsibility_id = fnd_profile.VALUE ('RESP_ID')
--循环访问所有记录
DECLARE
cur_blk VARCHAR2(40) := :SYSTEM.Cursor_Block;
bk_id
BLOCK;
BEGIN
bk_id := FIND_BLOCK (cur_blk);
GO_BLOCK ('SHOPPEDAYOVERTB_V');
GO_RECORD (1);
LOOP
IF GET_BLOCK_PROPERTY (bk_id, Update_Allowed) = 'TRUE'
THEN
:SHOPPEDAYOVERTB_V.import_flag := 'N';
UPDATE SHOPPEDAYOVERTB
SET import_flag = 'N'
WHERE SHOPPEDAYOVERTB.ROWID = :SHOPPEDAYOVERTB_V.ROW_ID;
END IF;
EXIT WHEN (NAME_IN ('SYSTEM.LAST_RECORD') = 'TRUE');
Pre-form
DECLARE
l_default_org_id NUMBER;
l_default_ou_name VARCHAR2 (240);
l_ou_count NUMBER;
BEGIN ...mo_utils.get_default_ou (l_default_org_id, l_default_ou_name, l_ou_count);
ARAMETER.mo_default_org_id) := l_default_org_id;
:PARAMETER.mo_default_ou_name := l_default_ou_name;
:PARAMETER.mo_ou_count := l_ou_count;
...
END;
WHEN-Create-Record
IF :parameter.mo_default_org_id is NOT NULL and :block.org_id is NULL THEN
:block.org_id := :parameter.mo_default_org_id);
:block.operating_unit := :parameter.mo_default_ou_name;
END IF;
C.在各个触发器实现多OU的支持的代码
WHEN-Create-Record Trigger of Operating Unit Field Block
IF (:parameter.mo_default_org_id IS NOT NULL ) THEN
-- Defaulting org_id from profile option
:block.org_id := :parameter.mo_default_org_id;
:block.operating_unit := :parameter.mo_default_ou_name;
-- Set policy context
mo_global.set_policy_context('S',:block.org_id);
ELSE
mo_global.set_policy_context('M', NULL);
END IF;
IF :<your block name.org_id> is NOT NULL\
IF :<block name.org_id> <> NVL(:<parameter.old_org_id>,-99) THEN
-- Get the cache for current org
END IF;
ELSE
-- Refresh the cache
...
END IF;
WHEN-VALIDATE-Item Trigger of Operating Unit field
IF (:<your block name.org_id> IS NOT NULL ) THEN
IF :<block name.org_id> <> NVL(:<parameter.old_org_id>,-99) THEN
mo_global.set_policy_context('S', :block.org_id);
-- Get the cache for the current org
END IF;
ELSE -- :block.org_id is null
mo_global.set_policy_context('M', NULL);
-- Refresh the cache
END IF;
WHEN-New-Record-Instance Trigger of Operating Unit Field Block
IF (:<your block name.org_id> IS NOT NULL ) THEN
IF :<block name.org_id> <> NVL(:<parameter.old_org_id>,-99) THEN
mo_global.set_policy_context('S', :block.org_id);
-- Get the cache for the current org
END IF;
ELSE -- :block.org_id is null, so set the context to multiple
mo_global.set_policy_context('M', NULL);
-- Refresh the cache
END IF;
Pre-Insert Trigger of Operating Unit Field Block
USE this trigger if the form allows the USER to commit multiple records.
IF (:<your block name.org_id> IS NOT NULL ) THEN
IF :<block name.org_id> <> NVL(:<parameter.old_org_id>,-99) THEN
mo_global.set_policy_context('S', :block.org_id);
-- Get the cache for the current org
END IF;
ELSE -- :block.org_id is null, so set the context to multiple
mo_global.set_policy_context('M', NULL);
-- Refresh the cache
END IF;
Pre-Query Trigger of Operating Unit Field Block
BEGIN
IF :parameter.mo_ou_count = 1
THEN
mo_global.set_policy_context (‘S’, :parameter.mo_default_org_id);
ELSE
mo_global.set_policy_context ('M', NULL);
END IF;
-- Other Code
END;
Pre-Record Trigger of Operating Unit Field Block
USE this trigger if the form forces the USER to commit each record.
IF (:parameter.current_record is NOT NULL and
:parameter.current_record != :SYSTEM.trigger_record) THEN
IF (:SYSTEM.form_status in ('CHANGED','INSERT')) THEN
mo_global.set_policy_context('S', :parameter.old_org_id);
-- Get the cache for the current org
-- raise error message to the user to commit;
-- raise form_trigger_failure;
ELSE
-- No pending commits.
-- Reset the current record variable.
:parameter.current_record := '';
END IF;
ELSE
-- User has not navigated to another record.
-- Do not reset the current record variable.
NULL;
END IF;
Pre-Update Trigger
USE this trigger if the form allows the USER to commit multiple records commits that are in different operating units.
IF (:<your block name.org_id> IS NOT NULL ) THEN
IF :<block name.org_id> <> NVL(:<parameter.old_org_id>,-99) THEN
mo_global.set_policy_context('S', :block.org_id);
-- Get the cache for the current org
END IF;
END IF;