解決EBS FORM 無法匯出主從關係(Master Detail)資料到EXCEL。
以下是關於解決EBS標準匯出功能無法匯出主從關係資料的方法。
解決思路:
1. 在form上增加一個匯出按鈕,或者在工具列註冊一個功能表項目。
2. 用製作一個報表,或者模仿系統標準的匯出功能。然後用上面的按鈕或者功能表項目直接調用。
這裡主要介紹模仿系統標準匯出功能。
步驟:
1. 直接修改form級trigger EXPORT,把預設的 app_standard.event('EXPORT')注釋掉。把下面的代碼複製進去。
- /*匯出主從結構的COST GROUP 資料。*/
- DECLARE
- --以上五個變數照搬即可
- URL VARCHAR2(2000);
- DB_FILE NUMBER;
- WEB_SERVER_PREFIX VARCHAR2(255);
- RES BOOLEAN;
- MIME_TYPE VARCHAR2(255);
-
- L_ORGANZIATION_ID NUMBER;
- --定義一個包含主從關係資料的CURSOR
- CURSOR CSR(V_ORGANIZATION_ID IN NUMBER) IS
- SELECT CST.COST_GROUP_CODE,
- CST.COST_GROUP_DESCRIPTION,
- CST.COST_GROUP_DISABLE_DATE,
- CAP.CAPABILITY,
- EQP.EQP_CAP_DESC DESCRIPTION,
- CAP.ACTIVE
- FROM CUX2_CST_COST_GROUP_ALL CST,
- CUX2_CST_COST_GROUP_EQPS_ALL CAP,
- CUX2_BOM_EQP_CAP_TYPE EQP
- WHERE CAP.COST_GROUP_ID(+) = CST.COST_GROUP_ID
- AND EQP.EQP_CAP_CODE(+) = CAP.CAPABILITY
- AND EQP.ORGANIZATION_ID(+) = CAP.ORGANIZATION_ID
- AND CAP.ORGANIZATION_ID(+) = CST.ORGANIZATION_ID
- AND CST.ORGANIZATION_ID = V_ORGANIZATION_ID
- ORDER BY CST.ORGANIZATION_ID, CST.COST_GROUP_CODE, CAP.CAPABILITY;
- BEGIN
- --擷取Organzition_id
- L_ORGANZIATION_ID := FND_PROFILE.VALUE('MFG_ORGANIZATION_ID');
- --更改滑鼠式樣:漏鬥滑鼠(忙狀態)
- SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'BUSY');
- --顯示進度條視窗,並設定進度為0
- APP_WINDOW.PROGRESS(0);
- --建立資料包,並設定檔案頭類型。
- DB_FILE := FND_GFM.FILE_CREATE(CONTENT_TYPE => 'text/html',
- PROGRAM_NAME => 'export');
- /*系統標準的匯出功能匯出的只能是當前聚焦的BLOCK中已顯示item資料。
- 當客制的FORM含有主從關係的兩個BLOCK則系統標準的匯出則不能匯出主從資料。
- 研究系統標準匯出後的文字格式設定如下:
- Cost Group Code Cost Group Description Cost Group Disable Date
- test-1 a test cost group code 2011-09-09
- test-2 another codst group code 2011-10-10
- .......
- ...
- ..
-
- 第一行為標題頭,中間較長距離的空白為 tab 符,也就是 chr(9),
- 接下來的資料行,資料列之間的分隔字元也是 tab.
- 摸清規律,模仿匯出資料就很容易了。
- */
- --輸出題頭行 注:chr(9) 為 tab鍵
- FND_GFM.FILE_WRITE_LINE(DB_FILE,
- 'Cost Group Code' || CHR(9) ||
- 'Cost Group Description' || CHR(9) ||
- 'Cost Group Disable Date' || CHR(9) ||
- 'Capability' || CHR(9) || 'Description' || CHR(9) ||
- 'Active');
- --迴圈資料行
- FOR R IN CSR(L_ORGANZIATION_ID) LOOP
- FND_GFM.FILE_WRITE_LINE(DB_FILE,
- R.COST_GROUP_CODE || CHR(9) ||
- R.COST_GROUP_DESCRIPTION || CHR(9) ||
- TO_CHAR(R.COST_GROUP_DISABLE_DATE,
- 'YYYY-MM-DD HH24:MI:SS') || CHR(9) ||
- R.CAPABILITY || CHR(9) || R.DESCRIPTION ||
- CHR(9) || R.ACTIVE);
- END LOOP;
- --關閉資料包
- DB_FILE := FND_GFM.FILE_CLOSE(DB_FILE);
- --將資料包提交給用戶端
- URL := FND_GFM.CONSTRUCT_DOWNLOAD_URL(WEB_SERVER_PREFIX, DB_FILE, TRUE);
- --DBMS_OUTPUT.PUT_LINE(URL);
- --開啟URL地址下載
- FND_UTILITIES.OPEN_URL(URL);
- --更改滑鼠式樣:預設指標(常規狀態)
- SET_APPLICATION_PROPERTY(CURSOR_STYLE, 'DEFAULT');
- APP_WINDOW.PROGRESS(1); --顯示進度條視窗,並設定進度為1(100%)
- END;
效果:
至於這種辦法與 跑請求的 方法相比。個人感覺這種辦法比較快。只是個人看法。。。。。
OK ,就這樣。