標籤:des style color width c 資料
- 目標
- 標識主片段,來裝扮表單
- 給表單添加資料來源,來定義表單顯示什麼資料
- 給表單添加控制項,來顯示資料
- 修改表單方法,來控制開啟和關閉時它的行為
- 決定在哪裡放代碼
- 運行時修改擷取的資料
- 介紹
本科提供綜合功能,使用表單來與終端使用者互動.
討論一下話題:
- 表單架構
- 擷取資料
- 在船體中放置代碼
- 先進的控制項
- 特殊表單
- 情境
系統開發人員,要建立一個新表單,它有多個資料來源連結在一起,一個欄位從另一個欄位計算而來,欄位沒有連結到資料來源,當表單開啟時,初始化欄位.同時,它也要調查其他類型的表單和表單控制項.
- 架構
一個表單提供使用者和資料庫的互動.它關注下面的動作:
應用和商務邏輯沒有融入表單,而是在底層的表和類上編程.
在AOT中,一個表單由五個組件構成:
本課詳細介紹三個主要節點:方法,資料來源和設計.
- 方法
系統產生方法,也就是系統方法,標準方法或對象方法,附加在表單上,用於控制啟動和關閉表單.這些時間按順序地被覆蓋,以初始化表單.預設地,系統方法不顯示.要覆蓋一個系統方法,在方法節點右鍵,選擇覆蓋方法,並選擇要覆蓋的方法.
另外,可以添加方法,並在表單的任何位置調用.這是好的實踐,在這裡添加方法,而不是在表單設計的對象深層寫大量代碼,這樣能使本地代碼更簡潔.
變數定義在類聲明中,可以在所有表單方法中訪問,用於持有表單控制項的狀態.
下面是CustTable表單的方法.表單系統方法task,run,init和close已經被覆蓋.所有其他方法已經被添加到Methods節點.
- 資料來源
資料來源定義表單和資料庫之間的介面.一個實體被添加為每個表.每個資料來源的屬性工作表明資料來源間的關係.每個資料來源也有系統方法,可以被覆蓋,用以控制顯示資料或操作事件.
資料來源包含表中的所有欄位.再次,所有欄位有屬性和系統方法可以被覆蓋.這些方法控制下列功能:
- 欄位指定導航(過濾,尋找,跳轉到主表)
- 驗證欄位
- 修改欄位
- 設計
表單定義的設計,是表單和使用者的介面,它控制布局和資料表現.設計由調用的控制群組件構成.一些控制項用於編輯和顯示資料,另一些用於控制表單的布局.
一個表單的一般設計如下
| Design |
|
|
|
|
| |
Tab |
|
|
|
| |
|
TabPage |
|
|
| |
|
|
Grid |
|
| |
|
|
|
Fields to be displayed on Grid |
| |
|
TabPage |
|
|
| |
|
|
Field Groups |
|
| |
|
|
|
Fields in Field Group |
設計上的所有控制項有屬性和方法,並且可以被覆蓋
在設計節點下,和設計節點一樣,這裡也有一個設計列表節點.
- 在表單中處理對象
在表單中編程時,你能引用對象個體,例如,資料來源或表單的控制項,使用kernel類,來構建他們,或重寫對象自己的方法.
表單中的所有方法都關聯到一個對象.該對象能使用this,從與它關聯的方法中訪問.注意this引用時關聯到所有你編程.
當從方法中引用的一個對象,沒有關聯對象,你需要使用對象處理.下面是對象和如何訪問他們
| Object |
Access from X++ |
| FormRun |
Element |
| FormDataSource |
<name of data source>_DS |
| Active record in data source |
<name of data source> |
| FormDataObject |
FormDataSource.Object(<fieldId>) |
| FormDesign |
FormRun.design() |
| Form…Control |
指派給控制項的名字,當AutoDeclaration設為Yes時.或element.control(Control::<name of control>) |
| Query |
<name of data source>_Q 或 FormDataSource.Query() |
| QueryRun |
<name of data source>_QR 或 FormDataSource.QueryRun() |
4 資料來源
資料來源中的表,能被使用者排序或過濾,這是AX的一個重要特性.
表單可以包含任何數量的資料來源,並且每個資料來源能通過定義表之間的關係,連結到表單上的其他資料來源.關係或Dynalinks也能在表單代碼中添加.
一個表單資料來源產生一個查詢,它能以系統中任何其他查詢一樣的方式被執行.
4.1 joins
要從一個表單的兩個表中顯示記錄,指定一個兩個表之間的串連.
在第二個表或被串連的表的JoinSource屬性上指定串連.在這裡填入主要資料源的名字.
你也可以指定join 或link類型.link類型在後面描述.
CustInvoiceJour表單使用串連.CustInvoiceTrans資料來源被串連到CustInvoiceJour資料來源,並且InventDim資料來源被串連到CustInvoiceTrans資料來源.
InventDim串連到CustinvoiceTrans,使用InnerJoin,因為資料被顯示在和CustInvoiceTrans記錄同一個fgrid裡.
4.2 引用資料來源
引用資料來源,是一個資料來源,被連結到父資料來源上.通過代理鍵關係-RecId關係.
要從資料來源中添加代理鍵欄位到表單設計,引用資料來源會自動被建立,
4.3 從X++修改
使用查詢對象來修改表單資料來源中的查詢。該查詢對象能使用<name of data source>_Q 或 FormDataSource.Query()來擷取。
要對查詢做永久修改,這個典型的實現,在FormDataSource.Init()中調用super()後。
在表單中過濾記錄,需喲遵循以下步驟:
- 在類聲明中,聲明相關的QueryBuildRange或QueryFilter對象。
- 在FormDataSource.Init中,執行個體化range對象。
- 在FormDataSource.ExecuteQuery中,在調用super()之前,指派範圍的實際值。
通過添加排序欄位,或添加一個索引給查詢的資料來源,來執行資料排序。作為一個替代,在資料來源的屬性上,制定一個索引。
使用一些彙總欄位綁定排序,會使得資料來源顯示表中的彙總資訊,而不是交易資訊。執行以下步驟,顯示每個產品id的庫存交易的合計數量。
- 在資料來源上,使用addGroupByField來按item id 分組。
- 添加Sum(Qty),作為SelectionField
4.4 要覆蓋的公用方法
4.4.1 FormDataSource.Init
該方法初始化資料來源,並被FormRun.Init的super()方法調用。當表單開啟時,該方法只被調用一次。
該方法的主要任務是執行個體化查詢,用於擷取資料。
要修改或替換表單自動建立的查詢,在該方法的super()方法後添加操作。
4.4.2 FormDataSource.InitValue
該方法用於使用預設值初始化一個新的記錄。該方法的super()調用底層表的initValue()方法。
如果你要修改系統範圍的,在該表上放代碼。
4.4.3 FormDataSource.Active
資料來源中的新記錄變成活動狀態時,調用該事件。該方法典型地覆蓋,來改變依賴目前記錄的內容的屬性,通常,該方法會:
修改資料來源的許可權
修改欄位的許可權
啟用/禁用按鈕
4.4.4 FormDataSource.LinkActive
每次主要資料元中的活動記錄變更時,被聯結的資料來源就調用該方法。當床底作為系統層開啟,聯結到被調用表單的主要資料源,該方法也會被調用。
4.4.5 FormDataSource.ValidateWrite
該方法驗證一個記錄的插入或更新。該方法的super()調用底層表上相應的方法。
如果你要辨別插入和刪除,在RecId欄位上做一個條件,如果它是update,它只有一個值。
4.4.6 FormDataSource.Write
該方法控制記錄的插入和刪除。該方法的super()調用底層表上相應的方法。
如果你有表單特殊任務要執行,在這裡添加。