Oracle HRMS APIs do not include an API for Fast Formula. Instead, you can load Fast Formula using a PL/SQL script. For example, the following script loads a Fast Formula in the Business Group specified by the parameter passed in. You also need to obtain the User ID of your FND_USER and pass this in as a second parameter, or use the ID 0 for the SYSADMIN user.
SET VERIFY OFF
SET FEEDBACK OFF
WHENEVER OSERROR EXIT FAILURE ROLLBACK
WHENEVER SQLERROR EXIT FAILURE ROLLBACK
DECLARE
--
-- Local constants and variables
--
e_no_bg_id EXCEPTION;
e_bg_not_exists EXCEPTION;
e_ff_type_not_found EXCEPTION;
l_BG_ID CONSTANT NUMBER := to_number('&1');
l_USER_ID CONSTANT NUMBER := to_number('&2');
l_FF_NAME CONSTANT VARCHAR2(80) := '<Formula Name>';
l_FF_DESC CONSTANT VARCHAR2(240) := '<Formula Description>';
l_FF_TYPE CONSTANT VARCHAR2(30) := '<Formula Type>'; --eg, Applaud Assignment
l_START CONSTANT DATE := to_date('0001-01-01','YYYY-MM-DD');
l_END CONSTANT DATE := xxas_util_pkg.eot;
l_formula_text LONG;
l_formula_type_id NUMBER;
l_ff_id NUMBER;
l_bg_exists VARCHAR2(1);
--
-- Gets the FF Id
--
CURSOR csr_ff_id IS
SELECT ff.formula_id
FROM ff_formulas_f ff
WHERE ff.business_group_id = l_BG_ID
AND ff.formula_name = l_FF_NAME;
--
-- Tests if the Business Group already exists
--
CURSOR csr_bg_exists IS
SELECT 'Y'
FROM per_business_groups_perf bg
WHERE bg.business_group_id = l_BG_ID;
--
-- Gets the Formula Type Id
--
CURSOR csr_ff_type IS
SELECT fft.formula_type_id
FROM ff_formula_types fft
WHERE fft.formula_type_name = l_FF_TYPE;
BEGIN
--
-- Check that the Business Group Id was passed in
--
IF l_BG_ID IS NULL THEN
RAISE e_no_bg_id;
END IF;
--
-- Check the Business Group exists
--
OPEN csr_bg_exists;
FETCH csr_bg_exists INTO l_bg_exists;
CLOSE csr_bg_exists;
IF l_bg_exists IS NULL THEN
RAISE e_bg_not_exists;
END IF;
--
-- Fetch the Fast Formula Id
--
OPEN csr_ff_id;
FETCH csr_ff_id INTO l_ff_id;
CLOSE csr_ff_id;
--
-- Get the Formula Type; error if it cannot be found
--
OPEN csr_ff_type;
FETCH csr_ff_type INTO l_formula_type_id;
CLOSE csr_ff_type;
IF l_formula_type_id IS NULL THEN
RAISE e_ff_type_not_found;
END IF;
--
-- Set the Formula Text
--
l_formula_text := q'[
Default for Some_Input is 'Unknown'
Inputs are Some_Input
/* Your formula text */
Return Some_Output
]';
BEGIN
IF l_ff_id IS NULL THEN
--
-- Create the Fast Formula
--
INSERT INTO ff_formulas_f
(formula_id
,effective_start_date
,effective_end_date
,business_group_id
,formula_type_id
,formula_name
,description
,formula_text)
VALUES
(ff_formulas_s.nextval
,l_START
,l_END
,l_BG_ID
,l_formula_type_id
,l_FF_NAME
,l_FF_DESC
,l_formula_text);
ELSE
--
-- Update the existing Fast Formula text
-- (if it has multiple date-track versions the text of
-- all versions is updated).
--
UPDATE ff_formulas_f
SET formula_text = l_formula_text
,description = l_FF_DESC
WHERE formula_id = l_ff_id;
END IF;
COMMIT;
EXCEPTION
WHEN others THEN
ROLLBACK;
RAISE;
END;
--
-- Compile the Fast Formula
--
xxas_util_pkg.compile_ff
(p_user_id => l_USER_ID
,p_ff_type => l_FF_TYPE
,p_ff_name => l_FF_NAME);
EXCEPTION
WHEN e_no_bg_id THEN
RAISE no_data_found;
WHEN e_bg_not_exists THEN
RAISE no_data_found;
WHEN e_ff_type_not_found THEN
RAISE no_data_found;
END;
/
COMMIT;
EXIT;