Report 的每一列顯示可點擊的按鈕
在 IR 中於每一列顯示相對應的可點擊的連結,以執行某些動作,例如已付款。
Last updated
在 IR 中於每一列顯示相對應的可點擊的連結,以執行某些動作,例如已付款。
Last updated
功能需求:
Report 顯示訂單資料時,在每列增加「已付款」的按鈕可以點擊
Main ref: Apex Interactive Report: A link column with a clickable icon | Official Pythian®® Blog
在 Interactive Report 中,若要在每列的資料後面加上一個按鈕,可以透過「Link」型態欄位來達成
在 Link column 中在 Link Attribute 加入 data-*
屬性,存放 record 的 PK 值
設定一個 Dynamic Action, 當 click 時觸發。
此 Dynamic Action 會使用 JQuery 取得 Triggering Element 的 data-*
屬性,並將其值寫入到一個 Hidden Item 中
接著, 再執行 PL/SQL Code, 依 Hidden Item 的值來執行相對應的程式
接著, 再 refresh region 以更新頁面
使用 ORDERS
資料表,包含以下欄位:
Source > SQL Query:
"動作" 欄位的 <span>
的值可以到 Universal Theme 的 Button Builder 來設定.
Button Builder 的畫面如下:
"動作" 欄位的屬性設定:
Identification > Type: Link
Link
Target
Type: URL
URL: javascript:void(0)
Link Attributes: class="t-Button order-paid" data-id=#ORDER_ID#
注意: #ORDER_ID#
是欄位名稱; order-paid
是手動加入的 class 名稱, 用來在 Dynamic Action 中做為 selector 來使用
Security > Escape special characters: False
Enable Users To
取消勾選所有選項
這裡的 Item Name: P2_SELECTED_ID
點擊 "已付款" 按鈕,應該不會有任何反應
DA 的名稱:
Identification > Name: Update order status
DA 執行設定:
Execution
Event Scope: Dynamic
上述設定可讓 IR 在用 DA refresh 後, 點擊連結仍可繼續觸發 DA. 如果設定為 Static, 則 DA refresh IR 後,IR 上的連結就無法再觸發 DA。
Ref: https://forums.oracle.com/ords/apexds/post/dynamic-actions-not-firing-after-region-refresh-7146
DA 的觸發條件:
When
Event: Click
Selection Type: jQuery Selector
jQuery Selector: .order-paid
在這個設定下, 只有當點擊的元素有 .order-paid
這個 class 時, 才會觸發 DA。
data-id
屬性值並設定到 Hidden ItemAction 屬性的設定:
Identification
Name: Set selected order id item
Action: Set Value
Settings (來源值)
Set Type: JavaScript Expression
JavaScript Expression: this.triggeringElement.dataset.id
Affected Elements (要設定的目標變數)
Selection Type: Item(s)
Item(s): P2_SELECTED_ID
前述的設定中:
this.triggeringElement
代表被點擊的 DOM 元素
element.dataset
可取得元素的 data-*
屬性值
element.dataset.id
取得 data-id
的值
Action 屬性的設定:
Identification
Name: update_order_state_sql
Action: Execute PL/SQL Code
Settings
Language: PL/SQL
PL/SQL Code:
Item to Submit: P2_SELECTED_ID
前述的設定中:
若沒有設定 Item to Submit
, 則 PL/SQL 程式中的 :P2_SELECTED_ID
會是空值
Orders 表中的 ORDER_STATUS
欄位的值有設定 Check Constraint, 只能是: 'CANCELLED','COMPLETE','OPEN','PAID','REFUNDED','SHIPPED' 這幾個值
Action 屬性的設定:
Identification
Name: Refresh Order IR
Action: Refresh
Affected Elements:
Selection Type: Region
Region: Orders List (IR 的 Region Name)
點擊 "已付款" 按鈕,應該可以更新資料庫中的 ORDER_STATUS
欄位的值, 並且更新訂單的 IR.