Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
[Artikel ini adalah dokumentasi prarilis dan dapat berubah.]
Power Pages API klien membantu pengembang memanipulasi komponen UI, mengelola formulir dan daftar, menangani autentikasi pengguna, dan berinteraksi dengan rekaman Dataverse secara terprogram. API klien tersedia saat halaman Anda dimuat dan dapat diakses melalui variabel global dengan nama yang Anda pilih.
Artikel ini menggunakan nama $pages variabel di seluruh contoh dan merekomendasikan Anda mengikuti konvensi penamaan ini untuk konsistensi.
Dengan API klien, Anda dapat:
$pages Dengan API klien, Anda dapat:
- Mengambil dan memodifikasi formulir dan kontrol formulir
- Perlihatkan atau sembunyikan elemen UI
- Membuat dan mengambil rekaman menggunakan API Web
- Mengelola autentikasi pengguna
- Bekerja dengan konten multibahasa
Important
- Ini adalah fitur pratinjau.
- Fitur pratinjau tidak dimaksudkan untuk digunakan dalam produksi dan fungsinya mungkin terbatas. Fitur-fitur ini tunduk pada ketentuan penggunaan tambahan, dan tersedia sebelum rilis resmi sehingga pelanggan dapat memperoleh akses awal dan memberikan umpan balik.
Inisialisasi API Klien
$pages API klien tidak segera diinisialisasi saat halaman dimuat.
Microsoft.Dynamic365.Portal.onPagesClientApiReady Gunakan fungsi untuk menetapkan objek API ke $pages variabel . Ada dua cara untuk menginisialisasi API klien:
Kesiapan API berbasis panggilan balik
Gunakan fungsi panggilan balik yang menetapkan objek API ke variabel yang Anda tentukan saat siap. Dua contoh menunjukkan cara:
Dengan menggunakan fungsi anonim:
Microsoft.Dynamic365.Portal.onPagesClientApiReady(($pages) => {
const forms = $pages.currentPage.forms.getAll();
console.log(`Found ${forms.length} forms on the page.`);
});
Dengan menggunakan fungsi bernama:
function start($pages){
const forms = $pages.currentPage.forms.getAll();
console.log(`Found ${forms.length} forms on the page.`);
}
Microsoft.Dynamic365.Portal.onPagesClientApiReady(start)
Kesiapan API berbasis promise/await
Menggunakan menunggu untuk menangani janji yang dikembalikan oleh Microsoft.Dynamic365.Portal.onPagesClientApiReady fungsi untuk alur asinkron yang lebih bersih.
let $pages = await Microsoft.Dynamic365.Portal.onPagesClientApiReady();
const forms = $pages.currentPage.forms.getAll();
console.log(`Found ${forms.length} forms on the page.`);
Kapan menggunakan setiap pendekatan
Tabel berikut ini menjelaskan kapan harus menggunakan setiap pendekatan.
| Approach | Kapan digunakan |
|---|---|
| Kesiapan API berbasis panggilan balik | Gunakan saat Anda perlu mendukung browser lama atau skrip warisan yang tidak mendukung async/await, atau ketika Anda ingin mendaftarkan beberapa handler yang berjalan saat API siap. Ideal untuk pola berbasis peristiwa. |
| Kesiapan API berbasis promise/await | Gunakan di lingkungan JavaScript modern yang mendukung async/await kode yang lebih bersih dan berurutan. Terbaik ketika logika Anda tergantung pada API yang siap sebelum melanjutkan eksekusi. |
Tip
Jika basis kode Anda sudah menggunakan async/await, lebih suka pendekatan berbasis Promise untuk konsistensi.
koleksi $pages.currentPage.forms
Koleksi $pages.currentPage.forms mencakup metode untuk bekerja dengan elemen formulir di halaman.
metode $pages.currentPage.forms
Gunakan metode ini untuk mencantumkan formulir dan mendapatkan instans formulir tertentu.
| Metode | Returns | Deskripsi |
|---|---|---|
getAll |
IForm[] |
Mengembalikan semua formulir yang ditambahkan ke halaman saat ini. |
getFormById(id: string) |
IForm |
Mengambil formulir dengan ID elemen HTML-nya. |
getFormByName(name: string) |
IForm |
Mengambil formulir berdasarkan namanya. |
contoh metode $pages.currentPage.forms
Contoh-contoh ini menunjukkan cara mendapatkan semua formulir dan mengambil formulir tertentu berdasarkan ID atau nama.
let forms = $pages.currentPage.forms.getAll();
let form1 = $pages.currentPage.forms.getFormById('form_#1');
let form2 = $pages.currentPage.forms.getFormByName('form_name')
Antarmuka IForm
Antarmuka IForm mewakili kontainer untuk kontrol dan tab.
Properti IForm
Properti berikut ini menjelaskan formulir dan kontrol dan tab yang terkandung.
| Property | Type | Deskripsi |
|---|---|---|
id |
string | ID formulir. |
name |
string | Nama formulir. |
controls |
Menguasai[] |
Semua kontrol pada formulir. |
tabs |
Tab[] |
Semua tab pada formulir. |
isMultiStep |
Boolean | True jika formulirnya multistep; jika tidak, salah. Lihat Formulir multistep. |
Metode IForm
Gunakan metode ini untuk mengkueri visibilitas formulir dan beralih apakah terlihat.
| Metode | Returns | Deskripsi |
|---|---|---|
getVisible |
boolean |
Mengembalikan true jika formulir terlihat; jika tidak, salah. |
setVisible(isVisible: boolean) |
void |
Mengatur visibilitas formulir. |
Contoh IForm
Contoh berikut mengambil formulir menurut ID dan mencatat visibilitas, jumlah kontrol, dan tabnya.
let form = $pages.currentPage.forms.getFormById('form_#1');
console.log(`Form id: ${form.id} has ${form.controls.length} controls.`);
if (form.getVisible()) {
console.log('Form is currently visible.');
}
let tabs = form.tabs;
console.log(`Form has ${tabs.length} tabs.`);
Formulir multilangkah
Bentuk multistep adalah kontainer yang menyimpan beberapa formulir dasar.
Properti formulir multistep
Properti berikut berlaku untuk kontainer formulir multistep dan menjelaskan apa yang tersedia dalam langkah yang saat ini aktif.
| Property | Type | Deskripsi |
|---|---|---|
id |
string | ID formulir multistep. |
controls |
Menguasai[] |
Semua kontrol dalam langkah saat ini. |
tabs |
Tab[] |
Semua tab dalam langkah saat ini. |
isMultiStep |
Boolean | True jika formulirnya multistep; jika tidak, salah. |
nextButton |
Elemen JQuery | Mewakili tombol berikutnya (objek kosong jika tidak ada). |
previousButton |
Elemen JQuery | Mewakili tombol sebelumnya (objek kosong jika tidak ada). |
Metode formulir multistep
Gunakan metode ini untuk memeriksa visibilitas dan berpindah di antara langkah-langkah dalam bentuk multistep.
| Nama | Returns | Deskripsi |
|---|---|---|
getVisible |
boolean |
Mengembalikan true jika formulir terlihat; jika tidak, salah. |
setVisible(isVisible: boolean) |
void |
Mengatur visibilitas formulir. |
isVisible |
boolean |
Properti yang menunjukkan apakah formulir harus ditampilkan (benar) atau tersembunyi (false). |
hasNextStep |
boolean |
Mengembalikan true jika ada langkah berikutnya; jika tidak, salah. |
hasPreviousStep |
boolean |
Mengembalikan true jika ada langkah sebelumnya; jika tidak, salah. |
goToNextStep |
void |
Menavigasi ke langkah berikutnya; mengirimkan formulir jika tidak ada langkah berikutnya. |
goToPreviousStep |
void |
Menavigasi ke langkah sebelumnya; melemparkan pengecualian jika tidak ada. |
Contoh formulir multistep
Contoh ini menunjukkan cara mengambil formulir multistep, memeriksanya, dan melanjutkan ke langkah berikutnya.
let $pages = await Microsoft.Dynamic365.Portal.onPagesClientApiReady();
let form = $pages.currentPage.forms.getFormById('multiform_#1');
console.log(`Form id: ${form.id} has ${form.controls.length} controls.`);
if (form.getVisible()) {
console.log('Form is currently visible.');
}
let tabs = form.tabs;
console.log(`Form has ${tabs.length} tabs.`);
form.goToNextStep();
Tab
berisi Tab satu atau beberapa bagian dalam formulir.
Properti tab Sections
Array bagian dalam tab.
Metode tab
Gunakan metode ini untuk memeriksa visibilitas tab, mengambil namanya, dan beralih apakah terlihat.
| Metode | Returns | Deskripsi |
|---|---|---|
getVisible |
boolean |
Mengembalikan true jika tab terlihat; jika tidak, salah. |
getName |
string |
Mengembalikan nama tab. |
setVisible(isVisible: boolean) |
void |
Mengatur visibilitas tab. |
Contoh tab
Contoh ini mengambil formulir, menghitung tabnya, dan mencatat nama tab pertama.
let form = $pages.currentPage.forms.getFormById('form_#1');
let tabs = form.tabs;
console.log(`Form has ${tabs.length} tabs.`);
console.log(`First tab is named: ${tabs[0].getName()}`);
Section
Bagian kontrol grup dalam tab.
Properti bagian Controls
Array kontrol di dalam bagian .
Metode bagian
Gunakan metode ini untuk membaca nama bagian dan mengontrol visibilitasnya.
| Metode | Returns | Deskripsi |
|---|---|---|
getVisible |
boolean |
Mengembalikan true jika bagian terlihat; jika tidak, salah. |
getName |
string |
Mengembalikan nama bagian. |
setVisible(isVisible: boolean) |
void |
Mengatur visibilitas bagian. |
Contoh bagian
Contoh ini mengambil bagian dari tab pertama formulir dan log detail dasar.
let form = $pages.currentPage.forms.getFormById('form_#1');
let sections = form.tabs[0].sections;
console.log(`Tab has ${sections.length} section(s).`);
console.log(`First section is named: ${sections[0].getName()}`);
Kontrol
Kontrol mewakili elemen formulir individual.
Metode kontrol
Gunakan metode ini untuk mengambil atau memperbarui nilai kontrol, visibilitas, dan status yang dinonaktifkan.
| Metode | Returns | Deskripsi |
|---|---|---|
getDisabled |
boolean |
Mengembalikan true jika kontrol dinonaktifkan. |
getVisible |
boolean |
Mengembalikan true jika kontrol terlihat. |
getName |
string |
Mengembalikan nama kontrol. |
getValue |
string | undefined |
Mengambil nilai saat ini. |
setDisabled(isDisabled: boolean) |
void |
Mengatur status dinonaktifkan. |
setVisible(isVisible: boolean) |
void |
Mengatur visibilitas. |
setValue(value: string) |
void |
Mengatur nilai baru untuk kontrol. |
Contoh kontrol
Contoh ini mengambil formulir, memeriksa visibilitas kontrol pertama, lalu menyembunyikannya.
let form = $pages.currentPage.forms.getFormById('form_#1');
let controls = form.controls;
if (controls.length > 0) {
if (controls[0].getVisible()) {
console.log(`Control ${controls[0].getName()} is visible.`);
}
controls[0].setVisible(false); // Hide the first control.
}
Kontrol yang didukung
Semua kontrol menerapkan metode kontrol standar. Beberapa kontrol menyediakan lebih banyak metode dan memiliki detail implementasi yang berbeda dari metode kontrol standar. Pelajari tentang metode lain dan perbedaan implementasi untuk berbagai jenis kontrol.
koleksi $pages.currentPage.lists
Kumpulan daftar menyediakan metode untuk bekerja dengan elemen daftar tradisional dan modern di halaman.
metode $pages.currentPage.lists
Gunakan metode ini untuk menghitung semua daftar di halaman dan mendapatkan daftar tertentu berdasarkan ID elemen HTML-nya.
| Metode | Returns | Deskripsi |
|---|---|---|
getAll |
IList[] |
Mengembalikan semua daftar pada halaman saat ini. |
getListById(id: string) |
IList | Mendapatkan daftar berdasarkan ID elemen HTML-nya. |
contoh $pages.currentPage.lists
Contoh-contoh ini menunjukkan cara menghitung semua daftar di halaman dan mendapatkan daftar tertentu berdasarkan ID elemen HTML-nya.
let lists = $pages.currentPage.lists.getAll();
let list = $pages.currentPage.lists.getListById('list_#1');
Antarmuka IList
Daftar mewakili komponen data tabular atau seperti kisi.
Properti IList
Properti ini mengidentifikasi daftar dan menunjukkan apakah ia menggunakan model penyajian modern.
| Property | Type | Deskripsi |
|---|---|---|
id |
string | Pengidentifikasi unik daftar. |
isModern |
Boolean | Nilai Boolean yang benar untuk daftar modern dan salah jika tidak. |
Metode IList
Gunakan metode ini untuk memeriksa visibilitas daftar, beralih apakah terlihat, dan mengakses elemen HTML yang mendasar.
| Metode | Returns | Deskripsi |
|---|---|---|
getVisible |
boolean |
Mengembalikan true jika daftar terlihat. |
setVisible(isVisible: boolean) |
void |
Mengatur visibilitas daftar. |
getHtmlElement |
HTMLElement |
Mengembalikan elemen HTML yang mendasar untuk daftar. |
Contoh IList
Contoh berikut mengambil daftar menurut ID dan mencatat status visibilitasnya.
let list = $pages.currentPage.lists.getListById('list_#1');
console.log(`List id: ${list.id}`);
if (list.getVisible()) {
console.log('List is currently visible.');
}
objek $pages.user
Objek $pages.user menyediakan metode untuk memasukkan atau mengeluarkan pengguna.
metode $pages.user
Metode ini tidak mengembalikan nilai apa pun.
| Metode | Deskripsi |
|---|---|
signIn |
Mengalihkan pengguna ke halaman masuk. |
signOut |
Keluar dari pengguna yang saat ini masuk. |
objek $pages.webAPI
Objek $pages.webAPI menyediakan metode untuk membuat dan mengambil rekaman dari sumber data.
metode createRecord
Membuat rekaman baru dalam tabel yang ditentukan.
Sintaks: $pages.webAPI.createRecord(entitySetName: string, data: object): Promise<object>
Mengembalikan: Janji yang diselesaikan ke rekaman atau hasil operasi yang dibuat.
parameter metode createRecord
Berikan tabel target dan objek data yang mewakili rekaman yang akan dibuat.
| Parameter | Type | Deskripsi |
|---|---|---|
entitySetName |
string | Nama kumpulan entitas. Pelajari tentang nama kumpulan entitas di Dataverse Web API |
data |
objek | Data rekaman yang akan dibuat. |
contoh metode createRecord
Contoh ini menunjukkan panggilan createRecord dengan nama kumpulan entitas dan objek data minimal.
$pages.webAPI.createRecord('contacts', {
firstName: 'User',
lastName: 'Test'
});
metode retrieveRecord
Mengambil rekaman dengan pengidentifikasi uniknya.
Sintaks: $pages.webAPI.retrieveRecord(entitySetName: string, id: string, options?: string): Promise<object>
Mengembalikan: Janji yang diselesaikan ke objek rekaman.
parameter metode retrieveRecord
Tentukan tabel, ID rekaman, dan opsi kueri OData $select opsional untuk membentuk respons.
| Parameter | Type | Deskripsi |
|---|---|---|
entitySetName |
string | Nama kumpulan entitas. Pelajari tentang nama kumpulan entitas di Dataverse Web API. |
id |
string | Pengidentifikasi unik rekaman. |
options |
string (opsional) | String kueri OData $select opsional untuk membatasi data yang dikembalikan. |
Note
options Meskipun parameter bersifat opsional, untuk performa terbaik selalu batasi jumlah nilai kolom yang dikembalikan dengan menggunakan $select opsi .
contoh metode retrieveRecord
Contoh ini mengambil satu rekaman menurut ID dan membatasi kolom yang dikembalikan dengan menggunakan opsi kueri OData $select .
let record = await $pages.webAPI.retrieveRecord('accounts', 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', '$select=name');
metode retrieveMultipleRecords
Mengambil beberapa rekaman berdasarkan opsi kueri yang disediakan.
Sintaks: $pages.webAPI.retrieveMultipleRecords(entitySetName: string, options?: string): Promise<object>
Mengembalikan: Janji yang diselesaikan ke array objek rekaman.
parameter metode retrieveMultipleRecords
Tentukan tabel dan kueri OData opsional untuk memfilter hasil dan membatasi kolom yang dikembalikan.
| Parameter | Type | Deskripsi |
|---|---|---|
entitySetName |
string | Nama kumpulan entitas. |
options |
string (opsional) | String opsi kueri OData untuk mengontrol data yang dikembalikan. Pelajari selengkapnya tentang opsi kueri OData yang didukung oleh Dataverse Web API |
Note
options Meskipun parameter bersifat opsional, untuk performa terbaik selalu batasi jumlah nilai kolom yang dikembalikan dengan menggunakan $select opsi .
contoh metode retrieveMultipleRecords
Contoh ini mengambil beberapa rekaman dan menggunakan OData $select dan $top untuk membatasi kolom dan jumlah baris yang dikembalikan.
let records = await $pages.webAPI.retrieveMultipleRecords('accounts','$select=name&$top=3');
$pages.languages
Objek menyediakan $pages.languages metode untuk mengambil daftar bahasa yang tersedia untuk situs web, mendapatkan bahasa yang saat ini aktif, dan mengatur bahasa aktif baru.
metode $pages.languages
Gunakan metode ini untuk membaca bahasa yang tersedia, memeriksa bahasa saat ini, dan mengubahnya untuk situs.
| Metode | Deskripsi | Returns |
|---|---|---|
getAll |
Mengambil daftar bahasa yang diaktifkan untuk situs web. | string[] |
getActive |
Mengambil bahasa yang saat ini aktif. | string |
setActive(language: string) |
Mengatur bahasa yang diberikan sebagai bahasa aktif. | void |
Note
setActive metode menyebabkan reload halaman.
contoh metode $pages.languages
Contoh-contoh ini menunjukkan cara mencantumkan semua bahasa, membaca bahasa aktif, dan mengatur bahasa aktif baru.
let allLanguages = $pages.languages.getAll();
let activeLanguage = $pages.languages.getActive();
$pages.languages.setActive('hi-IN');
$pages.agent
Objek $pages.agent menyediakan metode untuk membangun komunikasi antara situs dan agen Microsoft Copilot Studio yang tersedia untuk pengguna saat ini.
$pages.agent.SendActivity(
agentSchemaName: string,
inputActivity: object,
responseSubscriber: function,
errorSubscriber: function
);
| Nama Parameter | Type | Deskripsi |
|---|---|---|
agentSchemaName |
String | Nama skema bot tempat aktivitas dikirim. |
inputActivity |
Objek | Objek yang berisi teks atau peristiwa untuk dikirim ke bot. |
responseSubscriber |
fungsi | Fungsi panggilan balik yang berjalan saat agen mengirim respons. |
errorSubscriber |
fungsi | Fungsi panggilan balik yang menangani kesalahan. |
Jenis pengembalian: batal - Fungsi tidak mengembalikan apa pun.
Objek respons dari agen yang diterima dalam format berikut:
| Nama | Type | Deskripsi |
|---|---|---|
type |
String | Jenis aktivitas seperti pesan. |
text |
String | Opsional, pesan dari agen. |
textFormat |
String | Opsional, format teks pesan seperti markdown, polos, atau XML. |
Id |
String | ID yang secara unik mengidentifikasi aktivitas. |
From |
Objek | Menentukan pengirim aktivitas (termasuk id, nama (opsional), dan informasi peran). |
Conversation |
Objek | Berisi ID percakapan tempat aktivitas berada. |
InputHint |
String | Opsional, menunjukkan apakah bot menerima, mengharapkan, atau mengabaikan input pengguna. |
replyToId |
String | ID pesan balasan. |
Example
Metode panggilan balik
responseSubscriber Tentukan fungsi panggilan balik dan errorSubscriber untuk menangani respons dan kesalahan agen.
const responseSubscriber = (response) => {
// Replace with your response handling.
console.log('Agent response:', response);
};
const errorSubscriber = (error) => {
// Replace with your error handling.
console.error('Error:', error);
};
// Replace with your agent schema name.
const agentSchemaName = 'agent SchemaName';
Mengirim pesan ke agen
const inputActivity = {
text: 'Hello!', // Message to the agent.
};
$pages.agent.SendActivity(agentSchemaName, inputActivity, responseSubscriber,
ErrorSubscriber);
Memanggil peristiwa klien
const inputActivity = {
name: 'AgentEvent', // The name of the event to be invoked
value: {key1:'value1', key2:'value2'} // Open-ended value used to carry additional data or payloads necessary for specific agent operations or responses
};
$pages.agent.SendActivity(agentSchemaName, inputActivity, responseSubscriber,
ErrorSubscriber);
Pesan kesalahan
Berikut adalah kemungkinan pesan kesalahan yang dapat ditemui pengguna dan potensi penyebabnya.
| Jenis kesalahan | Sebab | Pesan kesalahan untuk pengguna |
|---|---|---|
| Validasi skema agen | Nama skema bot yang disediakan tidak valid atau pengguna tidak memiliki izin akses ke agen | Invalid bot schema name or access denied. Please check the bot schema name and try again. |
| Mengambil kesalahan token | Terjadi kesalahan saat mengambil token baris langsung | Something went wrong while fetching the token. Please try again. |
| Kesalahan aktivitas postingan (coba lagi) | Terjadi kesalahan saat memposting aktivitas dan percobaan ulang diperlukan. | Something went wrong while posting the activity: retry. |
| Kesalahan aktivitas postingan (waktu habis) | Waktu habis saat menunggu pesan keluar atau postActivity | Timed out while posting activity: Please retry. |
| Kesalahan aktivitas postingan (aktivitas tidak valid) | Aktivitas input tidak memiliki teks atau nama untuk memanggil peristiwa. | Invalid activity: At least one of text, name, or attachments must be provided. |
| Kesalahan aktivitas posting (ID pengguna tidak ditemukan atau token tidak ditemukan) | Token tidak ditemukan di penyimpanan sesi atau ID pengguna tidak ditemukan dalam token | Error retrieving user ID: {error message} |
| Memposting kesalahan aktivitas (umum) | Terjadi kesalahan yang tidak ditentukan saat memposting aktivitas | Something went wrong while posting the activity: Please try again. |
| Kesalahan koneksi saluran langsung | Terjadi kesalahan saat membuat koneksi baris langsung dengan bot. | Something went wrong while creating direct line connection: Please try again. |
| Kesalahan umum | Kesalahan tak terduga yang tidak termasuk dalam kategori di atas | An unexpected error occurred while sending activity: Please try again. |