利用fnd_flex_keyvalパッケージは、キーフレックスフィールドの組合せ記述フィールドを簡単に取得できます.
Oracle Formsの顧客化開発では、Form上で重要なフレックスフィールド(以下「キーフレックスフィールド」と略す)が提供されている場合)機能がサポートされている場合、FND_を利用することができます.KEY_FLEX.DEFINE関数は、すべての初期化作業を簡単に完了します.キーフレックスフィールドの組合せ記述フィールドの表示の初期化も含む:FND_KEY_FLEX.DEFINE呼び出し時にDESCRIPTIONパラメータを指定すればよい.しかし、この説明の組合せフィールドを表示したい場合があります.それだけです.完全なキーフレックスドメイン機能を提供する必要はありません.では、この記述の組合せフィールドを得るには、どのような迅速で効果的な方法がありますか?次のfnd_を試してみてくださいflex_keyvalバッグの中の方法かな~
例:在庫品目を取得する品目カテゴリ・セットのカテゴリの組合せ「説明」フィールド
必要な方法: fnd_flex_keyval.validate_segs() fnd_flex_keyval.concatenated_descriptions()
fnd_flex_keyval.validate_segsのパラメータは多く、品目カテゴリの組合せフィールドを取得するには、次のように5つのパラメータしか必要ありません.
[html] view plain copy print ?
パラメータの説明:
-operationのオプション値は次のとおりです. FIND_COMBINATION-指定された組合せフィールドは、システム内で既に定義されている である必要があります. CREATE_COMBINATION-コンビネーションフィールドが存在しない場合、このコンビネーション がシステムに作成されます. CREATE_COMB_NO_AT-機能とCREATE_COMBINATIONと同じですが、前者が相対的に独立したサブトランザクションautonomous transaction を使用するわけではありません. CHECK_COMBINATION-特定の組合せフィールドが正当かどうかを確認するだけで、検査結果にかかわらず、新しい組合せ は作成されません. DEFAULT_COMBINATION-デフォルトの最小組み合わせを返します(このパラメータ値は私もよく分かりませんが、ほほほ) CHECK_SEGMENTS-それぞれ検証フィールド(これもボケ~) - appl_short_nameアプリケーション略称、例えば在庫モジュール対応アプリケーション略称INV
- key_flex_Codeキーフレックスドメインコードは、MCAT、GL#などのキーフレックスドメイン定義インタフェースで見つけることができます.
- structure_numberキーフレックスフィールドの下にある構造NUMを指定し、キーフレックスフィールド定義インタフェースで見つけることができ、対応するフィールドはID_FLEX_NUM
- concat_segmentsは、組合せ記述フィールドの対応する「値」組合せフィールドを取得します.たとえば、A.000.MISC
検証フィールドの初期化に成功すると、記述組合せフィールドはfnd_を呼び出すことができる.flex_keyval.concatenated_descriptions()が手に入れました.
完全なコードは次のとおりです.
[html] view plain copy print ?
例:在庫品目を取得する品目カテゴリ・セットのカテゴリの組合せ「説明」フィールド
必要な方法:
fnd_flex_keyval.validate_segsのパラメータは多く、品目カテゴリの組合せフィールドを取得するには、次のように5つのパラメータしか必要ありません.
[html] view plain copy print ?
fnd_flex_keyval.validate_segs(
operation => <OPERATIONS>
, appl_short_name => <Application Short Name>
, key_flex_code => <Key Flex Code>
, structure_number => <ID_FLEX_NUM>
, concat_segments => <CONCATENATED_SEGMENTS>
);
パラメータの説明:
-operationのオプション値は次のとおりです.
- key_flex_Codeキーフレックスドメインコードは、MCAT、GL#などのキーフレックスドメイン定義インタフェースで見つけることができます.
- structure_numberキーフレックスフィールドの下にある構造NUMを指定し、キーフレックスフィールド定義インタフェースで見つけることができ、対応するフィールドはID_FLEX_NUM
- concat_segmentsは、組合せ記述フィールドの対応する「値」組合せフィールドを取得します.たとえば、A.000.MISC
検証フィールドの初期化に成功すると、記述組合せフィールドはfnd_を呼び出すことができる.flex_keyval.concatenated_descriptions()が手に入れました.
完全なコードは次のとおりです.
[html] view plain copy print ?
FUNCTION get_concat_descriptions(p_concat_segs IN VARCHAR2) RETURN VARCHAR2
IS
BEGIN
IF fnd_flex_keyval.validate_segs(
operation => 'FIND_COMBINATION' --
, appl_short_name => 'INV' --
, key_flex_code => 'MCAT' --
, structure_number => 101 --
, concat_segments => p_concat_segs) THEN
RETURN (fnd_flex_keyval.concatenated_descriptions());
ELSE
RETURN '';
END IF;
END;
の を するには、 の に います.
[html] view plain copy print ? --Get Stock Locators(MTLL)
--SELECT cux_flex_pkg.get_mtll_flexfields(p_locator_id => 3950, p_organization_id => 7890, p_return => 'S') locator_name FROM dual;
FUNCTION get_mtll_flexfields(p_locator_id NUMBER,
p_organization_id NUMBER,
p_return VARCHAR2 DEFAULT 'S') RETURN VARCHAR2 IS
l_concatenated_descriptions VARCHAR2(2000);
l_success BOOLEAN;
l_concatenated_segments VARCHAR2(2000);
c_structure_number NUMBER;
c_key_flex_code VARCHAR2(20);
c_appl_short_name VARCHAR2(20);
l_application_id NUMBER;
-- Keeps track of the current delimiter
l_delim VARCHAR2(1) := '';
l_error_message VARCHAR2(1000);
BEGIN
--
--Bug: Value &VALUE for the flexfield segment Subinventory does not exist in the value set @VALUE_SET.
-- PROFILE, ,
--SELECT FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') FROM DUAL;
--fnd_global.apps_initialize(resp_appl_id => 401, resp_id => 65780, user_id => 1013436);
IF FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') IS NULL THEN
fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id);
END IF;
c_key_flex_code := 'MTLL';
c_appl_short_name := 'INV';
c_structure_number := 101;
SELECT application_id
INTO l_application_id
FROM fnd_application_vl a
WHERE a.application_short_name = c_appl_short_name;
-- Get the delimiter
l_delim := fnd_flex_apis.get_segment_delimiter(x_application_id => l_application_id, x_id_flex_code => c_key_flex_code, x_id_flex_num => c_structure_number);
-- DATA_SET , : INVENTORY_LOCATION_ID
--SELECT set_defining_column_name,unique_id_column_name,application_table_name FROM fnd_id_flexs WHERE id_flex_code IN ('MTLL', 'MSTK');
l_success := fnd_flex_keyval.validate_ccid(appl_short_name => c_appl_short_name,
key_flex_code => c_key_flex_code,
structure_number => c_structure_number,
data_set => to_char(p_organization_id), -- Requied
combination_id => p_locator_id);
dbms_output.put_line('l_success = ' || to_char(sys.diutil.bool_to_int(l_success)));
l_error_message := fnd_flex_keyval.error_message;
IF l_success THEN
l_concatenated_descriptions := fnd_flex_keyval.concatenated_descriptions;
--dbms_output.put_line('Concatenated Descriptions : ' || l_concatenated_descriptions);
l_concatenated_segments := fnd_flex_keyval.concatenated_values;
--dbms_output.put_line('Concatenated Segments : ' || l_concatenated_segments);
ELSE
l_concatenated_segments := NULL;
l_concatenated_descriptions := NULL;
fnd_message.set_name('FND', 'FLEX-SSV EXCEPTION');
fnd_message.set_token('MSG', l_error_message);
dbms_output.put_line(fnd_message.get);
RAISE app_exceptions.application_exception;
END IF;
IF p_return = 'S' THEN
RETURN(l_concatenated_segments);
ELSIF p_return = 'D' THEN
RETURN(l_concatenated_descriptions);
ELSE
RETURN(l_concatenated_segments);
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
app_exception.raise_exception;
END get_mtll_flexfields;
の せと の せと :
[html] view plain copy print ? FUNCTION get_mstk_flexfields(p_item_id NUMBER,
p_organization_id NUMBER,
p_return VARCHAR2 DEFAULT 'S') RETURN VARCHAR2 IS
l_concatenated_descriptions VARCHAR2(2000);
l_success BOOLEAN;
l_concatenated_segments VARCHAR2(2000);
c_structure_number NUMBER;
c_key_flex_code VARCHAR2(20);
c_appl_short_name VARCHAR2(20);
l_application_id NUMBER;
-- Keeps track of the current delimiter
l_delim VARCHAR2(1) := '';
l_error_message VARCHAR2(1000);
BEGIN
--
-- PROFILE, ,
--SELECT FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') FROM DUAL;
--fnd_global.apps_initialize(resp_appl_id => 401, resp_id => 65780, user_id => 1013436);
IF FND_PROFILE.VALUE_WNPS('MFG_ORGANIZATION_ID') IS NULL THEN
fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id);
END IF;
c_key_flex_code := 'MSTK';
c_appl_short_name := 'INV';
c_structure_number := 101;
SELECT application_id
INTO l_application_id
FROM fnd_application_vl a
WHERE a.application_short_name = c_appl_short_name;
-- Get the delimiter
l_delim := fnd_flex_apis.get_segment_delimiter(x_application_id => l_application_id, x_id_flex_code => c_key_flex_code, x_id_flex_num => c_structure_number);
-- DATA_SET , : INVENTORY_LOCATION_ID
--SELECT set_defining_column_name,unique_id_column_name,application_table_name FROM fnd_id_flexs WHERE id_flex_code IN ('MTLL', 'MSTK');
l_success := fnd_flex_keyval.validate_ccid(appl_short_name => c_appl_short_name,
key_flex_code => c_key_flex_code,
structure_number => c_structure_number,
data_set => to_char(p_organization_id), -- Requied
combination_id => p_item_id);
dbms_output.put_line('l_success = ' || to_char(sys.diutil.bool_to_int(l_success)));
l_error_message := fnd_flex_keyval.error_message;
IF l_success THEN
l_concatenated_descriptions := fnd_flex_keyval.concatenated_descriptions;
--dbms_output.put_line('Concatenated Descriptions : ' || l_concatenated_descriptions);
l_concatenated_segments := fnd_flex_keyval.concatenated_values;
--dbms_output.put_line('Concatenated Segments : ' || l_concatenated_segments);
ELSE
l_concatenated_segments := NULL;
l_concatenated_descriptions := NULL;
fnd_message.set_name('FND', 'FLEX-SSV EXCEPTION');
fnd_message.set_token('MSG', l_error_message);
dbms_output.put_line(fnd_message.get);
RAISE app_exceptions.application_exception;
END IF;
IF p_return = 'S' THEN
RETURN(l_concatenated_segments);
ELSIF p_return = 'D' THEN
RETURN(l_concatenated_descriptions);
ELSE
RETURN(l_concatenated_segments);
END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
app_exception.raise_exception;
END get_mstk_flexfields;