顯示具有 ORACLE FORM 標籤的文章。 顯示所有文章
顯示具有 ORACLE FORM 標籤的文章。 顯示所有文章

2015年2月3日 星期二

Upload CSV file Insert to Table [ Data Type = Blob ]

哈哈哈哈, 終於找到在Oracle ERP 裡面上傳檔案的方案


我討厭 SQL Loader...因為這樣子使用者要知道格式, 再將檔案放到特定的位置
而且有問題, 還要看得懂Log檔

實在是太麻煩了

參考網址: http://lyhpcha.blogspot.tw/2012/06/oracle-erp.html

寫到讀取上傳檔案的方法 ( Data Type = Blob)

declare
     tempdata        varchar2(32767);
     li_pos             INTEGER  := 0;
     li_old_pos       INTEGER  := 0;
begin

loop
    tempdata :='';
    --chr(10)換行符號,li_pos為符合的字串長度,
    -- (li_old_pos +1)開始位置,1為符合chr(10)的第一筆資料
    --存在Blob欄位的資料是連續的raw字元
    --下列SQL會取出文字檔一行的資料,因為每一行是以斷行chr(10)做為分行
    select dbms_lob.instr(file_data, utl_raw.cast_to_raw(chr(10)),li_old_pos+1,1)
      into li_pos      --取出的資料格式是raw類型,不是一般的文字格式。
      from fnd_lobs
     where file_id = P04_FILE_ID;  --指定File_id
                  
 exit when li_pos = 0 ;  -- no more data            
      
    begin
    --取出指定字串,(li_pos - li_old_pos-1) 字串長度,(li_old_pos +1) 開始的位置                 
    select utl_raw.cast_to_varchar2(
              dbms_lob.substr(file_data, (li_pos - li_old_pos-1), li_old_pos +1))
      into  tempdata
      from  fnd_lobs
     where file_id = P04_FILE_ID;  --指定File_id
     end;
     
     -- 讀取出來的資料動態組成我要的內容       
     V01_SQL := 'begin insert into table_name(Col01, Col02) values(''' || replace(replace(replace(tempdata, chr(13), ''), ',', ''','), chr(10), '); end;';
      
      -- 若有問題, 可以在 log file 看到insert 語法
      fnd_file.put_line(fnd_file.log,V01_SQL);

      -- 執行動態組合的語法
      execute immediate V01_SQL;
           
      li_old_pos := li_pos;  -- pos of a file
  end loop;

Form - Button - When-button-pressed

FUNCTION UPLOAD_CSV_FILE RETURN NUMBER IS
  ACCESS_ID     NUMBER;
  L_SERVER_URL  VARCHAR2 (255);
  L_URL         VARCHAR2 (255);
  FLE_GFM_ID    NUMBER;
  BUTTON_CHOICE NUMBER;
BEGIN
-- Get process ID
ACCESS_ID := FND_GFM.AUTHORIZE (NULL);

-- Get web server address
FND_PROFILE.GET ('APPS_WEB_AGENT', L_SERVER_URL);

-- Call web page - web 顯示: Package: FND_FILE_UPLOAD

L_URL := RTRIM (L_SERVER_URL, '/')|| '/fnd_file_upload.displayGFMform?access_id='
                                  || TO_CHAR(ACCESS_ID)
                                  || CHR(38)
                                  || 'l_server_url='
                                  || L_SERVER_URL;

IF (L_URL IS NULL) THEN
  RAISE FORM_TRIGGER_FAILURE;
END IF;

 FND_MESSAGE.DEBUG('web: '||L_URL);

-- Open web page
FND_UTILITIES.OPEN_URL(L_URL);

-- This action is waiting for user select file, and check upload
--設定提示視窗,用來決定是否完成上傳的動作
FND_MESSAGE.SET_NAME('FND', 'ATCHMT-FILE-UPLOAD-COMPLETE');

BUTTON_CHOICE := FND_MESSAGE.QUESTION (BUTTON1 => 'YES'
, BUTTON2 => NULL
, BUTTON3 => 'NO'
, DEFAULT_BTN => 1
, CANCEL_BTN => 3
, ICON => 'question'
);

-- Get file ID
FLE_GFM_ID := FND_GFM.GET_FILE_ID (ACCESS_ID);

IF FLE_GFM_ID IS NOT NULL AND FLE_GFM_ID > 0 THEN
  IF BUTTON_CHOICE = 1 THEN
     RETURN FLE_GFM_ID; -- File is selected and upload
  ELSE
     RETURN 0; -- File is selected but not upload
  END IF;

ELSE
  RETURN -1; -- File is not selected
END IF;

END YL_OPEN_FILE;

[ Package] FND_FILE_UPLOAD.DisplayGFMForm 這裡就是生成 Upload File 的 Web

原本ERP的網址, 會長成以下的樣子
http://erpap.xxxxx.com:8001/pls/TEST/fnd_file_upload.displayGFMform?access_id=7088649330&l_server_url=http://erpap.xxxxx.com:8001/pls/TEST



2015年1月28日 星期三

FRM-47023: no SUCH PARAMETER NAMED G_QUERY_FIND exists in form FORM_Name



在客製 FORM 或是由Standard Form 利用Zoom 的方式呼叫 另一個Form 時
若是發生  "FRM-47023: no SUCH PARAMETER NAMED G_QUERY_FIND exists in form FORM_Name"



由於已經成功的用Zoom的方式, 呼叫另一個FORM, 但呼叫另一個FORM的時候, 發現出現上面的訊息, 非常的火大而且不甘心, 強烈的懷疑,可能是一開始或是後來有修改的人, 動到了Reference !! 所以......直接砍掉重練, 將一個正常可以呼叫而且確定Reference正常的form 拿來做Template, 然後重新搬 Window / Canvas / Radio Group / LOV / Program Unit / Form-Level - Trigger / Block 檢查內容後, 重新 Compile 證明, 我的懷疑沒有錯, 真的是這樣子




2014年10月6日 星期一

[ FORM ] 新增TOOLBAR

Document: Oracle Applications Developer’s Guide
File Name: 115devg.pdf

結果呈現


Form-Level: PRE-FORM

-- Toolbar
app_special.instantiate('SPECIAL1','&Book Order','bkord');


FORM-level: PRE-BLOCK
-- tool bar
app_special.enable('SPECIAL1',PROPERTY_ON);


BLOCK-level: user-named trigger





2014年8月27日 星期三

[ Oracle ERP FORM ] 客製FORM 顯示會計科目節段 show Accounting Flexfield in FORM

因為Oracle ERP 這領域太少人願意分享資源, 知識, 與技術
也看到有少部份的人在努力, 我也在他們的Blog 上面得到許多, 
我也僅能以自己測試寫出來的東西, 一點一滴的累積起來與分享, 
希望能讓有心學習的人, 得到一點點的幫助

--=============================================================================
-- Propose: Show Accounting Flexfield in Custom-Form
--=============================================================================
-- Reference Form: Inventory \ Setup \ Organizations \ Subinvetories
-- Form Name: INVSDSUB.fmb
--=============================================================================
-- Program Units (1) :  flexfield_defn
-- Program Units (2) : INVSDSUB_PKG.When_New_Form_Instance
--                Form-Level - Trigger - WHEN-NEW-FORM-INSTANCE
                   INVSDSUB_PKG.When_New_Form_Instance;
--=============================================================================

摸擬操作





Program Unit




Setting Item




Using Custom Form

Save Accounting ID



2014年8月26日 星期二

[ Oracle ERP FORM ] 於FORM 顯示日曆 Calendar


呈現結果:於ERP 的FORM上面可以從視窗中點選Calendar 


Step 1: Property Palette

1) Data Type :必須為 Datetime
2) Format Mask :若不設定則自動抓取預設格式
3) List of Values:ENABLED_LIST_LAMP
4) Validate form List :No



Step 2: Add KEY-LISTVAL Trigger 

Trigger 內容: calendar.show;



2014年7月9日 星期三

執行 Concurrent 後, 於客製的Form 的Output

Item Type: Push Button
Item Trigger: WHEN-BUTTON-PRESSED

1) Libraries : FNDCONC
2) Program Unit: editor_pkg.report(req_id number, save_output_flag varchar2);
            

可以從IE內的瀏覽器的網址,看得出來是呼叫的結果, 直接呈現HTML的Output



DECLARE
  ln_num             NUMBER;
  lb_submit          BOOLEAN;
   
  V_ERROR            VARCHAR2(30);
  V_RECEIPT_SEQ      NUMBER := 0;
   
  -- get concurrent status
  lb_wait                    BOOLEAN;
  ls_phase                   VARCHAR2(15);
  ls_status                  VARCHAR2(15);
  ls_dev_phase               VARCHAR2(80);
  ls_dev_status              VARCHAR2(80);
  ls_messge                  VARCHAR2(255);
BEGIN

  ln_num := FND_REQUEST.SUBMIT_REQUEST
           ( 'PO','YLPOM001_BATCH', '', '',FALSE,
               '', --1
           '',  --2
           '',  --3
           '',  --4
           '',  --5
           '',  --6
           '',  --7
           '',  --8
           '',  --9
           '',  --10
           '',  --11
           '',  --12
           '',  --13
           '',  --14
           'Y',  --15
           '',  --16
           CHR(0),  -- 從FORM叫REQUEST , 最後一個參數要放CHR(0)
           '','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','',
           '','','','','','','','','','');
  IF ln_num = 0 THEN
     FND_MESSAGE.RETRIEVE;
     FND_MESSAGE.ERROR;
  ELSE
    lb_submit := APP_FORM.QUIETCOMMIT;
                                
    FND_MESSAGE.DEBUG(' >> 預覽報表 << '|| CHR(10)|| 
                     'Request ID:' || TO_CHAR(ln_num));
                                
--2:每2秒檢查一次Request,10800:表示總共等10800秒,共180分鐘,超過180分鐘上一個Request若還未成功,則會出現Error

    lb_wait := Fnd_Concurrent.wait_for_request
          (ln_num
           ,2,10800,ls_phase,ls_status,ls_dev_phase,ls_dev_status,ls_messge);
             
    IF SUBSTR(UPPER(ls_dev_phase),1,8) = 'COMPLETE' 
       AND 
       SUBSTR(UPPER(ls_dev_status),1,6) = 'NORMAL' THEN
       ------------------------------------------------------------------------
                 -- Libraries: FNDCONC
                 -- procedure report(req_id number, save_output_flag varchar2);
       ------------------------------------------------------------------------
       editor_pkg.report(ln_num, 'Y');
     END IF;
              
 END IF;

END;

2014年4月15日 星期二

[ Oracle FORM ] 安裝後沒有 HELP 可以用


事件:Oracle Developer 安裝後,HELP 沒有



原因:Windows 搞鬼

作業系統:windows 7

依您的作業系統下載
http://support.microsoft.com/kb/917607/zh-tw





參考來源:http://lyhpcha.blogspot.tw/2014/03/forms-6i-win7win8-help.html

下載檔案,會是系統更新。。。。安裝結束後,檢查FORM & REPORT 都可以瀏覽

2014年4月7日 星期一

Oracle Developer 6 - dynamic groupby on form

ORACLE FORM 的查詢更加彈性
 
1. 畫面上即可達成GROUP BY , 由使用者自己選擇要加總的欄位
    you can use a SQL statement that consist of the dynamic group by statement
 
2. 所以數字欄位皆可成為條件, 不論是大於小於的運算元也可以使用
    Even though the where condition, you can combine the operator   
 
3. 排序條件也由使用者自行設定
   meanwhile, use can choose the order by all columns
 

 
一個欄位的GROUP BY
 


 
多個欄位的GROUP BY & ORDER BY


條件由使用者自行決定 


HAVING 的條件也可以由你自行定義