用戶端 API 清單

使用 Power Pages 用戶端 API 清單來存取並自訂傳統與現代清單。 本參考說明如何處理列、欄位、儲存格、可見性及清單事件。

$pages.currentPage.lists

清單集合提供了方法,讓它能在頁面上處理傳統與現代的清單元素。

$pages.currentPage.lists 方法

利用這些方法枚舉頁面上的所有清單,並依據其 HTML 元素 ID 取得特定清單。

方法 Returns Description
getAll 伊利斯主義者[] 回傳當前頁面上的所有清單。
getListById(id: string) 伊利斯主義者 會依照 HTML 元素 ID 取得清單。

$pages.currentPage.list 範例

這些範例展示了如何枚舉頁面上所有的清單,並依據其 HTML 元素 ID 取得特定清單。

Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
    let lists = $pages.currentPage.lists.getAll();
    let list = $pages.currentPage.lists.getListById('list_#1');
});

IList 介面

列表代表表格狀或網格狀的資料元件。

IList 性質

這些屬性能識別該清單,並指示是否使用現代渲染模型。

Property 類型 Description
id 字串 名單的唯一識別碼。
isModern 布爾 一個布林值,對現代清單成立,否則為假。
rows IRow[] 清單目前公布的列。 每次讀取這個屬性時,它會回傳最新的資料,因此請在事件處理程序 loaded 中讀取,確保資料可用。
columns 我也在[] 清單目前視圖中的欄位。

Note

rows和columns屬性、getColumnonoff方法及其回傳的一切僅支援於現代列表,其中isModern為真。 在傳統的清單中,它們可以安全呼叫但什麼都不做:rows回columns傳空陣列、getColumn回傳未定義陣列,且onoff什麼都不做。 在存取名單資料或使用loaded事件前,先確認isModern一下,這在傳統名單中是不會發生的。

IList 方法

使用這些方法檢查清單可見性、切換是否可見、存取底層 HTML 元素,並處理欄位和事件。

方法 Returns Description
getVisible boolean 如果清單可見,則會回傳 true。
setVisible(isVisible: boolean) void 這會決定名單的能見度。
getHtmlElement HTMLElement 回傳清單底層的 HTML 元素。
getColumn(logicalName: string) 我也在 | undefined 回傳具有指定邏輯(結構)名稱的欄位。 當欄位不匹配時,回傳未定義。
on(event: string, handler: function) void 訂閱一個處理程式到一個清單事件。 請參見 列表活動。 同一個處理器多次訂閱同一事件不會有影響。
off(event: string, handler: function) void 取消訂閱已註冊於 on的 的處理者。 傳遞你傳給 on的同一個函式參考。 不同的參考不會取消主控。

IList 範例

以下範例依 ID 檢索清單,記錄其可見狀態,並在網格載入時讀取其資料。

Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
    let list = $pages.currentPage.lists.getListById('list_#1');
    console.log(`List id: ${list.id}`);
    if (list.getVisible()) {
        console.log('List is currently visible.');
    }

    // Modern list data is available only after the grid loads, so read it in a `loaded` handler.
    if (list.isModern) {
        list.on('loaded', () => {
            console.log(`List has ${list.rows.length} rows and ${list.columns.length} columns.`);
        });
    }
});

IRow 介面

介面 IRow 代表現代清單中的單一列。 從物業或列表事件有效載荷取得一列list.rows。

以 開 get 頭的方法會回傳網格所發布的資料。 其他方法則設定列的呈現方式,例如樣式、類別名稱和可見性。 格子在渲染該列時會套用這些設定。 隱藏一列只會改變該列的呈現方式;底層資料沒有被改變。

IRow 方法

利用這些方法讀取資料列,並改變該列的呈現方式。

方法 Returns Description
getId string 回傳該列的 Dataverse 記錄 ID 以 GUID 字串。
getValue(logicalName: string) string | number | boolean | Date | null 回傳具有指定邏輯(結構)名稱欄位的原始字串、數字、布林值、有效日期或數值選項值。 當欄位不在該列中或其原始值為不被支援的複雜值(包括查找形狀的物件)時,會回傳 null。 當原始複數值無法取得時使用 getDisplayValue 。
getDisplayValue(logicalName: string) string 回傳該欄位的值,該欄位格式化為當前地點。 當該欄位不在該列時,會回傳一個空字串。
getPrivileges object | undefined 回傳伺服器評估記錄的權限:canRead、 canAppendcanWritecanDeletecanAppendTo和 。 當伺服器未提供時,會回傳未定義。 利用這些數值來改變資料的呈現方式,而非強制執行安全。
getState object | undefined 回傳 stateCode 記錄的 和 statusCode 值。 當伺服器未提供時,會回傳未定義。
setStyle(style: object) void 將內嵌 CSS 樣式合併到該列。 每個呼叫都會加上已設定的樣式。
setClassName(className: string) void 將列的 CSS 類別名稱替換成你指定的空格分隔類別名稱。
addClassName(className: string) void 在該列中新增一個或多個空格分隔的 CSS 類別名稱。
removeClassName(className: string) void 移除一個或多個空格分隔的 CSS 類別名稱。
setVisible(visible: boolean) void 顯示或隱藏這排。 此方法僅改變該列的呈現方式。
getCell(logicalName: string) 艾賽爾 回傳一個用來改變該列某一格格顯示方式的handle。

IRow 範例

此範例會標示已取消的紀錄並隱藏非活躍紀錄。

Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
    const list = $pages.currentPage.lists.getListById('list_#1');

    list.on('loaded', () => {
        list.rows.forEach((row) => {
            // Highlight canceled records where statuscode is 6.
            if (row.getValue('statuscode') === 6) {
                row.setStyle({ backgroundColor: '#fde7e9', color: '#a80000' });
            }
            // Hide inactive records where statecode is 1.
            if (row.getValue('statecode') === 1) {
                row.setVisible(false);
            }
        });
    });
});

IColumn 介面

介面 IColumn 代表現代清單中的單一欄位。 從屬性或list.getColumn方法取得欄位list.columns。 你可以分別設定標題、可見性和提示。

方法會 get 回傳原始資料,而不是你設定的值。 例如,即使你呼叫 ,也會getDisplayName回傳已設定的顯示名稱,就像row.getDisplayValue回傳伺服器格式化的值一樣cell.setDisplayText。setHeader 這種行為讓你的程式碼可以安全執行多次,因為 loaded 每次清單擷取、排序、篩選或分頁資料時,處理器都會重新執行。 例如,每次 column.setHeader(column.getDisplayName() + ' *') 都產生相同的結果,而不是再加一個星號。 讀取來源值,然後推導出你設定的值。

IColumn 方法

使用這些方法讀取欄位名稱並改變欄位的外觀。

方法 Returns Description
getLogicalName string 回傳欄位的邏輯(結構)名稱。
getDisplayName string 回傳欄位已設定的顯示名稱。 setHeader 但不會改變這個數值。
setHeader(header: string) void 覆蓋欄位標頭的文字。
setVisible(visible: boolean) void 顯示或隱藏整欄。
setTooltip(tooltip: string) void 設定欄位標題的工具提示。 當有人將滑鼠移到標頭上時,提示就會出現,螢幕閱讀器會用它作為標頭的可存取名稱。

IColumn 範例

此範例設定欄位的標頭文字與工具提示。

Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
    const list = $pages.currentPage.lists.getListById('list_#1');

    list.on('loaded', () => {
        const column = list.getColumn('name');
        if (column) {
            column.setHeader('Account name');
            column.setTooltip('The primary name of the account');
        }
    });
});

ICell 介面

介面 ICell 代表單一儲存格,即列與欄的交集。 從這個 row.getCell 方法取得一個細胞。 儲存格設計上是唯寫的。 要讀取儲存格的值,請使用getValue包含該儲存格的列的 or getDisplayValue 方法。

ICell 方法

利用這些方法來更改儲存格的文字和樣式。

方法 Returns Description
setDisplayText(text: string) void 取代儲存格中出現的文字。 用這種方法顯示友善文字而非代碼、遮蔽數值或顯示徽章。
setStyle(style: object) void 將內嵌 CSS 樣式合併到儲存格。 每個呼叫都會加上已設定的樣式。

ICell 範例

此範例會改變每一列儲存格的文字與樣式。

Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
    const list = $pages.currentPage.lists.getListById('list_#1');

    list.on('loaded', () => {
        list.rows.forEach((row) => {
            const cell = row.getCell('statuscode');
            cell.setDisplayText('Active');
            cell.setStyle({ fontWeight: 'bold', backgroundColor: '#fff4ce' });
        });
    });
});

列出事件

現代清單會提出你用該 list.on 方法訂閱的事件,並用該 list.off 方法取消訂閱。 因為這些事件提供 列 物件,也是閱讀或樣式資料的推薦地點。 這些數據會在事件發生後 loaded 提供。

Event 當它發生時 有效負載
loaded 在列表擷取並發布其列資料之後。 每次清單刷新或頁面資料時,此事件都會再次發生。 { rows: IRow[] }
rowclick 有人選了一排。 { row: IRow, event: MouseEvent }
cellclick 有人選擇了一個牢房。 當 cellclick 處理器被註冊時, rowclick 該選擇不會發生該事件。 { row: IRow, columnName: string, event: MouseEvent }

Important

若同時rowclick註冊 和 cellclick 處理器,選擇儲存格只會呼叫處理器。cellclick rowclick操作者不會被召喚來做相同的選擇。

列表事件範例

此範例涵蓋 與rowclickcellclick事件。

Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
    const list = $pages.currentPage.lists.getListById('list_#1');

    const onRowClick = (e) => {
        console.log('Selected row:', e.row.getId());
        e.row.setStyle({ outline: '2px solid #0078d4' });
    };

    list.on('rowclick', onRowClick);

    list.on('cellclick', (e) => {
        console.log('Selected cell:', e.row.getId(), 'column:', e.columnName);
        e.row.getCell(e.columnName).setStyle({ backgroundColor: '#e5f1fb' });
    });

    // Define a cleanup function, and call it when your code no longer needs
    // the events. Pass the same handler reference that you passed to the on method.
    const stopListening = () => {
        list.off('rowclick', onRowClick);
    };
});

要取消訂閱,請將與你傳on給方法相同的函式參考off。 不同的參考不會取消主控。