目前分類:Form Personalize (10)

瀏覽方式: 標題列表 簡短摘要

一般在查詢模式下最常用的就是輸入特定資料來查詢, 好比說, 直接輸入訂單號碼, 不然就是用 % 來做 Like 查詢. 不過其實還有一些隱藏功能可以讓你的查詢更有彈性喔~

1. 此欄位資料為空值 (#IS NULL)
2. 此欄位資料不為空值 (#IS NOT NULL)
3. 此欄位資料大於某個數字 (#>XXXX)
4. 此欄位資料介於某兩個值之間 (#BETWEEN A and B)
5. IN 查詢 (#IN (A, B))

Aloz 發表在 痞客邦 留言(0) 人氣()

在標準的 Sales Order Line 畫面中, Tools > Scheduling 是可以正常使用的, 但是, 一樣的 Sales Order Line 在 Order Organizer 中, 卻怎樣都不能使用, 很怪阿~

Order Organizer Cannot Use Scheduling  

Metalink 有一篇是教怎麼外掛 View Resveration (View only), 拿來改一下就可以變成我們要的了 

Aloz 發表在 痞客邦 留言(0) 人氣()

當需要使用 Personalize 控制 Datetime 欄位值的時候, 必須要將值轉成 CHAR 型態 (TO_CHAR), 如果直接使用 DATE 型態 (TO_DATE), 就算給的資料有時間, 寫入時仍然只有日期, 然後時間部份都會呈現 00:00:00

Aloz 發表在 痞客邦 留言(0) 人氣()

User希望可以寫一個客製Form, 然後用個按鈕就可以Submit Report

1. 一般報表

:result := fnd_request.submit_request(application    varchar2 --模組
                                      ,program        varchar2 --應用程式簡稱
                                      ,description    varchar2 --請求說明(非必填)
                                      ,start_time    varchar2 --RUN 時間(非必填)
                                      ,sub_request    boolean     --立刻提交請求 (FALSE)
                                      ,argument1    varchar2 --參數1
                                      ,argument2    varchar2 --參數2
                                      ,argument3    varchar2 --參數3
                                      ,argument4    varchar2 --參數4
                                      ,argument5    varchar2 --參數5
                                      .......
                                      ,argument100    varchar2);

2. PDF報表

除了使用fnd_request.submit_request來Submit Report之外,

在前面還需要增加一行:

XML_LAYOUT := FND_REQUEST.ADD_LAYOUT(application    varchar2 --模組
                                    ,program        varchar2 --應用程式簡稱
                                    ,file language    varchar2 --語言縮寫(ISO Value): 'en'
                                    ,file territory    varchar2 --語系縮寫(ISO Value): 'US'
                                    ,output format    varchar2 --輸出格式: 'PDF');

 

3. 最後, 還需要加一段 DO_KEY('COMMIT_FORM'); 喔~~

Aloz 發表在 痞客邦 留言(9) 人氣()

注意 : 不是每個 Form 都可以修改 Default Where, 特別是有 Query Form 的, 它的 Where 組成是寫在按下 Button 時動態產生,  那 Personalize 寫的會被蓋掉而沒有產生效果

- Example Form : Receipt (RCVRCERC)
Type : Property
Object Type : Block
Target Object : RCV_TRANSACTION
Property Name : DEFAULT_WHERE
Value : NVL(RCV_ENTER_RECEIPTS_V.Outside_operation_flag,'N') = 'N'

Aloz 發表在 痞客邦 留言(0) 人氣()

注意1 : 需確認標準 Form 所設定的 LOV Name 是什麼, 一般來說, 開 Form 起來看是最準的
注意2 : SQL 也最好是基於標準的 LOV SQL 下去改, 出錯的機率比較低
注意3 : 只能變動 LOV 的資料, 不能變動欄位順序或增減欄位

Example : Change Order Type LOV

Seq : 1
Type : Builtin
Builtin : Create Record Group from Query
Argument :
SELECT   A.ORDER_TYPE_ID
,        A.NAME
,        A.DESCRIPTION
    FROM OE_ORDER_TYPES_V A
   WHERE TRUNC ( SYSDATE ) BETWEEN TRUNC ( A.START_DATE_ACTIVE ) AND NVL ( TRUNC ( A.END_DATE_ACTIVE ), TRUNC ( SYSDATE ))
     AND A.ORDER_CATEGORY_CODE IN ( 'RETURN', 'MIXED' )

ORDER BY A.NAME

Group Name : U_ORDER_TYPE

Seq : 2
Type : Property
Object Type : LOV
Target Object : ORDER_TYPE
Property Name : GROUP_NAME
Value : U_ORDER_TYPE

Aloz 發表在 痞客邦 留言(1) 人氣()

- 設定 Menu
1. Condition:
Trigger Event : SPECIAL43 (數字自行選擇)

Actions:
Type : Builtin
Builtin Type : Launch a Function
Function Code : XXX (寫在 Application 註冊的Function Code)
Function Name : YYY (寫在 Application 註冊的Function Name)
Parameters : =' DELIVERY_ID = ' || ${item.dlvy.delivery_id.value} || ' ORGANIZATION_ID = ' || ${item.dlvy.organization_id.value} (寫該 Function 必須的參數值)

2. Condition:
Trigger Event : WHEN-NEW-FORM-INSTANCE

Actions:
Type : Menu
Menu Entry : SPECIAL43
Menu Label : ZZZ (在 Form 的選單呈現的字串)
Render line before menu : No (勾選的話, 這個 Menu 前面會有分隔線)
Enabled in Block(s) : DLVY

Aloz 發表在 痞客邦 留言(0) 人氣()

- Error Message (Example Form : WSHFSTRX)
Type : Message
Message Type : Error
Message Value : ='Delivery# ' || ${item.dlvy.name.value}
* 可使用SQL字串相加的方式, 把 Form 上的變數傳進 Message 中, 讓 Message 的效果更好
* 若使用 Error Message, 順序在此之後的 Actions 不會被執行到, 要特別小心

Actual Example
- Delivery Group
因為標準的 Delivery Group Rule 只會考慮 Ship Information, 所以我們用了以下操作方式來做控制 :
1. 後端 Pick / Ship 人員只能看到 Firm 的 Delivery
2. 寫 Function 做其他條件的 Group
3. 在 OM User 要做 Firm 時做檢查

Condition :
Trigger Event : WHEN-NEW-RECORD-INSTANCE
Trigger Object : DLVY
Condition : :DLVY.STATUS_CODE='OP' AND :DLVY.PLANNED_FLAG='N' AND U_OM_COUNT_DELIVERY_DETAILS(:DLVY.NAME) > 1

Actions :
Seq : 1
Type : Property
Object Type : Item
Target Object : DLVY_BUTTONS.GO
Property Name : DISPLAYED (APPLICATIONS COVER)
Value : False

Seq : 2
Type : Message
Message Type : Error
Message Value : ='Delivery# ' || ${item.dlvy.name.value} || ' 不能被 Firm, 原因...........'

當然還有另外一段是做反向控制, 這在寫 Personalize 的時候也是一定要考慮到的, 也可以說是寫"還原動作"

Aloz 發表在 痞客邦 留言(0) 人氣()

如前一篇所說, Actions 是整個 Personalize 的精華, 能夠做的事很多又雜, 目前用到的應該不到一半吧

也因為功能太多, 不知道該怎麼整理起, 所以改用範例做為主題, 只寫出 Actions 的部份, 這樣應該會比較清楚.........吧

- 欄位失效 (Example Form : OEXOEORD)
Type : Property
Object Type : Line
Target Object : LINE.ORDERED_QUANTITY
Property Name : ENABLED (APPLICATIONS COVER)
Value : FALSE

- 欄位不允許修改
(Example Form : OEXOEORD)
Type : Property
Object Type : Line
Target Object : LINE.ORDERED_QUANTITY
Property Name : UPDATE_ALLOWED
Value : FALSE

- 欄位不可見 (Example Form : OEXOEORD)
Type : Property
Object Type : Line
Target Object : LINE.ORDERED_QUANTITY
Property Name : DISPLAYED (APPLICATIONS COVER)
Value : FALSE

- 欄位變必填 (Example Form : OEXOEORD)
Type : Property
Object Type : Line
Target Object : LINE.ORDERED_QUANTITY
Property Name : REQUIRED (APPLICATIONS COVER)
Value : TRUE

- 修改欄位 Prompt (Example Form : OEXOEORD) => 部份 Form 可用 Folder 達成
Type : Property
Object Type : Line
Target Object : LINE.ORDERED_QUANTITY
Property Name : PROMPT_TEXT
Value : Qty

- Block 不可 Update (Example Form : OEXOEORD)
Type : Property
Object Type : Block
Target Object : ORDER
Property Name : UPDATE_ALLOWED
Value : FALSE

Aloz 發表在 痞客邦 留言(0) 人氣()

在很多時候, Oracle 標準 Form 很難滿足我們的需要, 最常遇到的就是權限控制, 好比說 Receipt, 在同一個畫面可以收 PO, 也可以收 RMA, 如果對公司而言, 這兩種收料是分屬於不同的單位, 那一定要對標準 Receipt 畫面做客製.

當然, 你也可以客製 Oracle Form, 但是客製標準畫面還是最後的選擇, 這時候 Personalize 就是我們的好朋友

- 如何進入 Personalize 的編輯畫面
1. 開啟需要寫 Personalize 的 Form
2. 點選視窗上方的 Help > Diagnostics > Custom Code > Personalize
3. 輸入 Apps 的密碼

- 畫面解釋
*最上方
1. Function Name
2. Form Name
3. Debug Mode :
    Off : 關閉 Debug Mode
    Step-by-Step : 當所寫的 Custom Code 有問題, 可使用此模式偵錯
    Show Debug Messages : 沒用過........

* 中間
1. Seq : 序號, 執行順序
2. Description : 寫給自己看的
3. Level :
    Function : 只有在此 Function Name 生效
    Form : 只是要這個 Form, 就算掛成不同的 Function 也會生效
4. Enabled : 生效與否

* 下方
1. Condition & Actions : 重點, 後面再說明
2. Context : 可設定要在什麼情況下生效
    Industry / Site / Responsibility  / User

- Condition
1. Trigger Event : 觸發的事件, 當什麼情況發生時, 會啟動該 Custom Code, 需配合下方的 Trigger Object
    WHEN-NEW-FORM-INSTANCE : 當 Form 開啟時, 無需指定 Trigger Object
    WHEN-NEW-BLOCK-INSTANCE : 當進入 Trigger Object 指定的 Block 時觸發
    WHEN-NEW-RECORD-INSTANCE : 當進入 Trigger Object 指定的 Record 時觸發
    WHEN-NEW-ITEM-INSTANCE : 當進入 Trigger Object 指定的 Item 時觸發
    WHEN-VALIDATE-RECORD : 當 Trigger Object 指定的 Block 存檔時觸發
    MENU1~15 : 進階應用
    SPECIAL1~45 : 進階應用

    * 雖然在畫面上 Oracle 有註明 : You can enter additional event name. 但是也不是說加就加, 目前只有試出 WHEN-BUTTON-PRESSED, 而且限制很多, 所以, 可能看看就好......

2. Trigger Object : 觸發的物件, 可直接用 LOV 挑選

3. Condition : 當 Event 與 Object 觸發到時, 還可以在 Condition 多做判斷, 內容只需填寫 SQL 語法 WHERE 之後的部份. 如果需要用到畫面的欄位, 可使用下方的 Insert Item Value (只能選 Value) 或 Insert 'Get' Expression (可選擇多種的屬性). Condition 裡也可套用 SQL Function, 例如 :

Z_OM_PKG.ZOMR001_OQC_PASS(:DLVY.NAME)=1 AND Z_OM_PKG.ZOMR001_TRACKINGINFO_PASS(:DLVY.NAME)=1

4. Processing Mode : Not in Enter-Query Mode / Only in Enter-Query Mode / Both

5. Context : 設定只在哪些 Level 下生效. Level 有 : Industry / Site / Responsibility / User

- Actions
精華就在此, 開另外一篇寫好了

Aloz 發表在 痞客邦 留言(11) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼