好久沒寫了, 一來是都在寫 API, 也分享不出個什麼東西, 二來是一個忙完就接下一個, 慢慢就懶得寫了 (廢話的一段)


需求是這樣的, 因為公司的 Routing 沒有使用 Primary Routing, 都是利用 Alternate Routing Name 跟 Release Form 上的 Process Name 做連接, 但, Oralce 的成本計算又一定要用 Primary Routing 來做, 所以, 現階段要的是, 系統要知道哪一個 Alternate Routing 才是真正的 Primary Routing, 之後如果要把 Resource 自動轉過去 Primary Routing 或什麼自動的功能就有個依據.

所以第一個想法是, 開彈性欄位只作用在 Primary Routing 中, Alternate Routing 看不到這個彈性欄位. 所以我們要在 Context Field Values 中, 不把欄位開在 Global Data Elements, 而是新增一行: Primary 與 Alternate.

又, 我不希望這個值是由 User 來決定的, 所以我們可以加上 Reference Field 的功能. Reference Field 可以指定畫面中的欄位作為 Context Value 的預設值, 甚至不能修改, 太完美了....嗎?

 

Reference Field: 可以設定以下五種方式的變數

  1. :Block.Item
  2. :Parameter.Name
  3. :SYSTEM.Name
  4. :$PROFILES$.Name
  5. :$FLEX$.???
  • Displayed: 是否要顯示 Context Field Prompt 欄位
  • Synchronize with Reference Field: 是否允許使用者修改 Context Field 的值 (Checked 為不能改, Unchecked 為可以改)

 

問題是, Primary 跟 Alternate Routing 的區別只在於 ALTERNATE_ROUTING_DESIGNATOR 這個欄位, 空值為 Primary, 有值為 Alternate. 既然是空值, 又怎麼可能設定在 Context Field Value List 裡呢? 更不幸的, 不能在 Reference Field 中下 DECODE / NVL 等語法.

所以, 就換個方式囉. Value Set 是一個比較可以彈性設定的 LOV, 那我們產生一個新的 Value Set, 這個 Value Set 只負責轉譯 Primary or Alternate 這件事

 

Value Set Name: XX_ROUTING_TRANSLATE

Validation Type: Table

Table Application: Bills of Material

Table Name: BOM_OPERATIONAL_ROUTINGS

Value: DECODE(ALTERNATE_ROUTING_DESIGNATOR, NULL, 'Primary', 'Alternate')

ID: DECODE(ALTERNATE_ROUTING_DESIGNATOR, NULL, 'PRIMARY', 'ALTERNATE') => 一定要有設定, 不然會選不到

Where/Order By: WHERE ROUTING_SEQUENCE_ID = :B_OP_RTGS.ROUTING_SEQUENCE_ID

 

然後把這個 Value Set 設在 Context Field 中的 Value Set 欄位. Compile 後, 每一筆 Routing 的 Context 就只會有一個值, 我覺得這也就變向的達到需求, 至少使用者沒辦法亂選一個不正確的值

 

arrow
arrow
    全站熱搜

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