說明 :
Oracle ERP Server之字元集與Client的字元集不符,導至Export產出之excel於Client開啟時,中文部分會呈現亂碼
解法 :
設定 FND: NATIVE CLIENT ENCODING 個人的Profile 為Client的字元集
例 : Client的字元集為繁體中文 ZHT16BIG5 , 設定如下
1. 這是個初學農友的農友日誌~ 2. Oracle ERP 分享 3. Oracle DBA 心得 4. Android 開發心得 5. MoJo寵物手作粉絲成員 6. 程式客製及外包專案接案
2014年2月26日 星期三
2013年10月6日 星期日
Oracle ERP R12. WF_NOTIFICATION.SEND (通知訊息功能)
Sample Code :
PROCEDURE SEND_WF_NOTIFICATION(I_TO IN VARCHAR2,
I_SUBJECT IN VARCHAR2,
I_TEXT IN VARCHAR2)
IS
/*
I_TO : Oracle EBS帳號
I_SUBJECT : 要顯示在Worklist的主旨
I_TEXT : 內容
*/
V_NOTIFICATION_ID NUMBER;
--
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
V_NOTIFICATION_ID := WF_NOTIFICATION.SEND(ROLE => I_TO,
MSG_TYPE => 'CS_MSGS',
MSG_NAME => 'FYI_MESSAGE',
PRIORITY => 1);
WF_NOTIFICATION.SETATTRTEXT(NID => V_NOTIFICATION_ID,
ANAME => 'OBJECT_TYPE',
AVALUE => I_SUBJECT);
WF_NOTIFICATION.SETATTRTEXT(NID => V_NOTIFICATION_ID,
ANAME => 'MESSAGE_TEXT',
AVALUE => I_TEXT); --MESSAGE BODY
COMMIT;
END;
PROCEDURE SEND_WF_NOTIFICATION(I_TO IN VARCHAR2,
I_SUBJECT IN VARCHAR2,
I_TEXT IN VARCHAR2)
IS
/*
I_TO : Oracle EBS帳號
I_SUBJECT : 要顯示在Worklist的主旨
I_TEXT : 內容
*/
V_NOTIFICATION_ID NUMBER;
--
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
V_NOTIFICATION_ID := WF_NOTIFICATION.SEND(ROLE => I_TO,
MSG_TYPE => 'CS_MSGS',
MSG_NAME => 'FYI_MESSAGE',
PRIORITY => 1);
WF_NOTIFICATION.SETATTRTEXT(NID => V_NOTIFICATION_ID,
ANAME => 'OBJECT_TYPE',
AVALUE => I_SUBJECT);
WF_NOTIFICATION.SETATTRTEXT(NID => V_NOTIFICATION_ID,
ANAME => 'MESSAGE_TEXT',
AVALUE => I_TEXT); --MESSAGE BODY
COMMIT;
END;
2013年3月25日 星期一
Oracle ERP R12. 使用者忘記密碼 如何自行變更密碼
分享同事提供的自行變更密碼做法:
1. 在登入畫面下方,點選”Login
Assistance”
2. 輸入帳號,點選"Forgot Password" , 系統就會發送密碼重設的mail至該帳號上所定義的mail
3. 待收到mail後,點選mail內"Reset your password"的超連結,即可進入密碼重設的畫面.
2013年3月12日 星期二
Oracle ERP R12. 如何使用API (FND_USER_PKG)建立帳號. How to use FND_USER_PKG.CREATEUSER ?
以下是使用FND_USER_PKG.CREATEUSER 建立使用者的範例程式碼
Sample code :
FND_USER_PKG.CREATEUSER(X_USER_NAME => :USER_NAME , --USER ACCOUNT
X_OWNER => 'SEED',
X_UNENCRYPTED_PASSWORD => 'ABC234', --Default password
X_EMPLOYEE_ID => :EMPLOYEE_ID, --Mapping to employee id
X_EMAIL_ADDRESS => :EMAIL_ADDRESS); --user email
PS :
X_UNENCRYPTED_PASSWORD 需注意是否有啟用密碼的複雜度檢查,若有則必需符合其複雜度檢查規定
Oracle ERP R12. - 如何快速複製使用者權限 , How to grant privileges from one user to another user ?
以下Sample是當有新人時,可以快速複制user a 的權限至user b的作法 ~
My Sample code : (Package)
/*PACKAGE HEADER*/
CREATE OR REPLACE PACKAGE XX_FND_USER_RESP_PKG
IS
PROCEDURE XX_FND_COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER,
I_MODE IN NUMBER DEFAULT 0);
--
PROCEDURE COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER);
--
PROCEDURE DISABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER);
--
PROCEDURE ENABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER);
--
PROCEDURE DISABLE_USER_ALL_RESP(I_USER_ID IN NUMBER);
END XX_FND_USER_RESP_PKG;
/*PACKAGE BODY*/
CREATE OR REPLACE PACKAGE BODY XX_FND_USER_RESP_PKG
IS
PROCEDURE XX_FND_COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER,
I_MODE IN NUMBER DEFAULT 0)
IS
/*
When Who What
===============================
20130313 WenShen Created for 複製某人權限至另一人
說明 :
1. I_MODE : 權限複製規則
0 : 只新增短少的權限,但不將即有卻失效的權限予以復權
1 : 新增短少的權限,且將即有卻失效的權限予以復權(且不影其它即有的權限)
2 : 完整複製,將原有權限全數失效後再執行I_MODE 2
*/
BEGIN
--
IF I_MODE = 0 THEN --只新增短少的權限,但不將即有卻失效的權限予以復權
--新增短少的權限
COPY_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
ELSIF I_MODE = 1 THEN --新增短少的權限,且將即有卻失效的權限予以復權
--Step 1. 新增短少的權限
COPY_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
--Step 2. 依來源USER權限設定將目標USER的權限的予以復權
ENABLE_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
ELSIF I_MODE = 2 THEN --完整複製,將原有權限全數失效後再執行I_MODE 2
--Step 1. 將所有權限予以停權
DISABLE_USER_ALL_RESP(I_TO_USER_ID);
--Step 2. 新增短少的權限
COPY_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
--Step 3. 依來源USER權限設定將目標USER的權限的予以復權
ENABLE_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
ELSE
NULL;
END IF;
END;
--
PROCEDURE COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
AND (FR.END_DATE IS NULL OR FR.END_DATE >= SYSDATE)
WHERE (FUR.END_DATE IS NULL OR FUR.END_DATE >= SYSDATE)
AND NOT EXISTS (SELECT 'X'
FROM FND_USER_RESP_GROUPS_DIRECT FUR2
WHERE FUR2.USER_ID = I_TO_USER_ID
AND FUR2.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID) --已存在不重覆轉
AND FUR.USER_ID = I_FROM_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--CALL API
BEGIN
FND_USER_RESP_GROUPS_API.INSERT_ASSIGNMENT(USER_ID => I_TO_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => TRUNC(SYSDATE),
END_DATE => NULL,
DESCRIPTION => NULL);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
--
PROCEDURE DISABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
T_END_DATE DATE;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY,FUR2.START_DATE
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
JOIN FND_USER_RESP_GROUPS_DIRECT FUR2
ON FUR2.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
AND FUR2.USER_ID = I_TO_USER_ID
WHERE FUR.END_DATE < SYSDATE --已失效的部分
AND FUR.USER_ID = I_FROM_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--
IF C1.START_DATE IS NOT NULL THEN
IF C1.START_DATE > SYSDATE THEN
T_END_DATE := C1.START_DATE;
ELSE
T_END_DATE := SYSDATE;
END IF;
END IF;
--
BEGIN
FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT(USER_ID => I_TO_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => C1.START_DATE,
END_DATE => T_END_DATE,
DESCRIPTION => NULL);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
--
PROCEDURE ENABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY,FUR2.START_DATE
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
JOIN FND_USER_RESP_GROUPS_DIRECT FUR2
ON FUR2.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
AND FUR2.USER_ID = I_TO_USER_ID
WHERE (FUR.END_DATE IS NULL OR FUR.END_DATE >= SYSDATE)
AND FUR.USER_ID = I_FROM_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--
BEGIN
FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT(USER_ID => I_TO_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => C1.START_DATE,
END_DATE => NULL,
DESCRIPTION => NULL);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
--
PROCEDURE DISABLE_USER_ALL_RESP(I_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
T_END_DATE DATE;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY,FUR.START_DATE
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
WHERE (FUR.END_DATE IS NULL OR FUR.END_DATE >= SYSDATE)
AND FUR.USER_ID = I_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--
IF C1.START_DATE IS NOT NULL THEN
IF C1.START_DATE > SYSDATE THEN
T_END_DATE := C1.START_DATE;
ELSE
T_END_DATE := SYSDATE;
END IF;
END IF;
--
BEGIN
FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT(USER_ID => I_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => C1.START_DATE,
END_DATE => T_END_DATE,
DESCRIPTION => NULL);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
END XX_FND_USER_RESP_PKG;
My Sample code : (Package)
/*PACKAGE HEADER*/
CREATE OR REPLACE PACKAGE XX_FND_USER_RESP_PKG
IS
PROCEDURE XX_FND_COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER,
I_MODE IN NUMBER DEFAULT 0);
--
PROCEDURE COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER);
--
PROCEDURE DISABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER);
--
PROCEDURE ENABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER);
--
PROCEDURE DISABLE_USER_ALL_RESP(I_USER_ID IN NUMBER);
END XX_FND_USER_RESP_PKG;
/*PACKAGE BODY*/
CREATE OR REPLACE PACKAGE BODY XX_FND_USER_RESP_PKG
IS
PROCEDURE XX_FND_COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER,
I_MODE IN NUMBER DEFAULT 0)
IS
/*
When Who What
===============================
20130313 WenShen Created for 複製某人權限至另一人
說明 :
1. I_MODE : 權限複製規則
0 : 只新增短少的權限,但不將即有卻失效的權限予以復權
1 : 新增短少的權限,且將即有卻失效的權限予以復權(且不影其它即有的權限)
2 : 完整複製,將原有權限全數失效後再執行I_MODE 2
*/
BEGIN
--
IF I_MODE = 0 THEN --只新增短少的權限,但不將即有卻失效的權限予以復權
--新增短少的權限
COPY_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
ELSIF I_MODE = 1 THEN --新增短少的權限,且將即有卻失效的權限予以復權
--Step 1. 新增短少的權限
COPY_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
--Step 2. 依來源USER權限設定將目標USER的權限的予以復權
ENABLE_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
ELSIF I_MODE = 2 THEN --完整複製,將原有權限全數失效後再執行I_MODE 2
--Step 1. 將所有權限予以停權
DISABLE_USER_ALL_RESP(I_TO_USER_ID);
--Step 2. 新增短少的權限
COPY_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
--Step 3. 依來源USER權限設定將目標USER的權限的予以復權
ENABLE_USER_RESP(I_FROM_USER_ID,
I_TO_USER_ID);
ELSE
NULL;
END IF;
END;
--
PROCEDURE COPY_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
AND (FR.END_DATE IS NULL OR FR.END_DATE >= SYSDATE)
WHERE (FUR.END_DATE IS NULL OR FUR.END_DATE >= SYSDATE)
AND NOT EXISTS (SELECT 'X'
FROM FND_USER_RESP_GROUPS_DIRECT FUR2
WHERE FUR2.USER_ID = I_TO_USER_ID
AND FUR2.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID) --已存在不重覆轉
AND FUR.USER_ID = I_FROM_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--CALL API
BEGIN
FND_USER_RESP_GROUPS_API.INSERT_ASSIGNMENT(USER_ID => I_TO_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => TRUNC(SYSDATE),
END_DATE => NULL,
DESCRIPTION => NULL);
COMMIT;
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
--
PROCEDURE DISABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
T_END_DATE DATE;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY,FUR2.START_DATE
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
JOIN FND_USER_RESP_GROUPS_DIRECT FUR2
ON FUR2.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
AND FUR2.USER_ID = I_TO_USER_ID
WHERE FUR.END_DATE < SYSDATE --已失效的部分
AND FUR.USER_ID = I_FROM_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--
IF C1.START_DATE IS NOT NULL THEN
IF C1.START_DATE > SYSDATE THEN
T_END_DATE := C1.START_DATE;
ELSE
T_END_DATE := SYSDATE;
END IF;
END IF;
--
BEGIN
FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT(USER_ID => I_TO_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => C1.START_DATE,
END_DATE => T_END_DATE,
DESCRIPTION => NULL);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
--
PROCEDURE ENABLE_USER_RESP(I_FROM_USER_ID IN NUMBER,
I_TO_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY,FUR2.START_DATE
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
JOIN FND_USER_RESP_GROUPS_DIRECT FUR2
ON FUR2.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
AND FUR2.USER_ID = I_TO_USER_ID
WHERE (FUR.END_DATE IS NULL OR FUR.END_DATE >= SYSDATE)
AND FUR.USER_ID = I_FROM_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--
BEGIN
FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT(USER_ID => I_TO_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => C1.START_DATE,
END_DATE => NULL,
DESCRIPTION => NULL);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
--
PROCEDURE DISABLE_USER_ALL_RESP(I_USER_ID IN NUMBER)
IS
T_AP_ID NUMBER;
T_RESP_ID NUMBER;
T_END_DATE DATE;
--來源者權限表
CURSOR C_F_RESP
IS
SELECT FR.RESPONSIBILITY_KEY,FUR.START_DATE
FROM FND_USER_RESP_GROUPS_DIRECT FUR
JOIN FND_RESPONSIBILITY FR
ON FR.RESPONSIBILITY_ID = FUR.RESPONSIBILITY_ID
WHERE (FUR.END_DATE IS NULL OR FUR.END_DATE >= SYSDATE)
AND FUR.USER_ID = I_USER_ID; --來源對象
BEGIN
FOR C1 IN C_F_RESP LOOP
--取得RESP資訊
SELECT FR.RESPONSIBILITY_ID,
FR.APPLICATION_ID
INTO T_RESP_ID,
T_AP_ID
FROM FND_RESPONSIBILITY FR
WHERE FR.RESPONSIBILITY_KEY = C1.RESPONSIBILITY_KEY;
--
IF C1.START_DATE IS NOT NULL THEN
IF C1.START_DATE > SYSDATE THEN
T_END_DATE := C1.START_DATE;
ELSE
T_END_DATE := SYSDATE;
END IF;
END IF;
--
BEGIN
FND_USER_RESP_GROUPS_API.UPDATE_ASSIGNMENT(USER_ID => I_USER_ID,
RESPONSIBILITY_ID => T_RESP_ID,
RESPONSIBILITY_APPLICATION_ID => T_AP_ID,
SECURITY_GROUP_ID => 0,
START_DATE => C1.START_DATE,
END_DATE => T_END_DATE,
DESCRIPTION => NULL);
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
END XX_FND_USER_RESP_PKG;
/*使用說明 :*/
begin
XX_fnd_user_resp_pkg.hpx_fnd_copy_user_resp(i_from_user_id
=> :i_from_user_id, ç A使用者USER ID
i_to_user_id
=> :i_to_user_id, ç B使用者USER ID
i_mode
=> :i_mode); ç 複製規則,如下說明
end;
I_MODE
: 權限複製規則
0 : 只新增使用者B短少的權限,但不將即有卻失效的權限予以復權
1 : 新增使用者B短少的權限,且將即有但失效的權限予以復權(且不影使用者B較使用者A多的權限)
2 : 完整複製,將使用者B原有權限全數失效後再執行I_MODE 2
訂閱:
文章 (Atom)
