APIs do cliente Power Pages (versão prévia)

[Este artigo é uma documentação de pré-lançamento e está sujeito a alterações.]

Power Pages APIs de cliente ajudam os desenvolvedores a manipular componentes de interface do usuário, gerenciar formulários e listas, manipular a autenticação do usuário e interagir com registros do Dataverse programaticamente. A API do cliente fica disponível quando sua página é carregada e pode ser acessada por meio de uma variável global com um nome que você escolher.

Este artigo usa o nome $pages da variável em todos os exemplos e recomenda que você siga esta convenção de nomenclatura para consistência.

Com as APIs do cliente, você pode:

Com a $pages API do cliente, você pode:

  • Recuperar e modificar formulários e controles de formulário
  • Mostrar ou ocultar elementos da interface do usuário
  • Criar e recuperar registros usando a API Web
  • Gerenciar a autenticação do usuário
  • Trabalhar com conteúdo multilíngue

Important

  • Esta é uma funcionalidade de pré-visualização.
  • Os recursos em versão preliminar não se destinam ao uso em produção e podem ter funcionalidade restrita. Esses recursos estão sujeitos a termos de uso complementares e estão disponíveis antes do lançamento oficial, de maneira que os clientes possam obter acesso antecipado e fazer comentários.

Inicialização da API do cliente

A $pages API do cliente não é inicializada imediatamente quando a página é carregada. Use a Microsoft.Dynamic365.Portal.onPagesClientApiReady função para atribuir o objeto de API à $pages variável. Existem duas maneiras de inicializar a API do cliente:

Preparação da API baseada em retorno de chamada

Use uma função de retorno de chamada que atribua o objeto de API a uma variável que você definir quando estiver pronta. Dois exemplos mostram como:

Usando uma função anônima:

Microsoft.Dynamic365.Portal.onPagesClientApiReady(($pages) => {
    const forms = $pages.currentPage.forms.getAll();
    console.log(`Found ${forms.length} forms on the page.`);
});

Usando uma função nomeada:

function start($pages){
    const forms = $pages.currentPage.forms.getAll();
    console.log(`Found ${forms.length} forms on the page.`);
}

Microsoft.Dynamic365.Portal.onPagesClientApiReady(start)

Preparação da API baseada em promessa/espera

Usa await para lidar com a promessa retornada pela Microsoft.Dynamic365.Portal.onPagesClientApiReady função para um fluxo assíncrono mais limpo.

let $pages = await Microsoft.Dynamic365.Portal.onPagesClientApiReady();
const forms = $pages.currentPage.forms.getAll();
console.log(`Found ${forms.length} forms on the page.`);

Quando usar cada abordagem

A tabela a seguir descreve quando usar cada abordagem.

Abordagem Quando usar
Preparação da API baseada em retorno de chamada Use quando precisar dar suporte a navegadores mais antigos ou scripts herdados que não dão suporte async/awaitou quando desejar registrar vários manipuladores executados quando a API estiver pronta. Ideal para padrões controlados por eventos.
Preparação da API baseada em promessa/espera Use em ambientes JavaScript modernos que dão suporte async/await a código sequencial e mais limpo. Melhor quando sua lógica depende da API estar pronta antes de continuar a execução.

Tip

Se a base de código já usar async/await, prefira a abordagem baseada em Promessa para consistência.

Coleção $pages.currentPage.forms

A $pages.currentPage.forms coleção inclui métodos para trabalhar com elementos de formulário na página.

Métodos $pages.currentPage.forms

Use esses métodos para listar formulários e obter instâncias de formulário específicas.

Método Devoluções Description
getAll IForm[] Retorna todos os formulários adicionados à página atual.
getFormById(id: string) IForm Recupera um formulário por sua ID de elemento HTML.
getFormByName(name: string) IForm Recupera um formulário pelo nome.

Exemplos do método $pages.currentPage.forms

Esses exemplos mostram como obter todos os formulários e recuperar formulários específicos por ID ou nome.

let forms = $pages.currentPage.forms.getAll();
let form1 = $pages.currentPage.forms.getFormById('form_#1');
let form2 = $pages.currentPage.forms.getFormByName('form_name')

Interface IForm

A IForm interface representa um contêiner para controles e guias.

Propriedades IForm

As propriedades a seguir descrevem o formulário e seus controles e guias contidos.

Propriedade Tipo Description
id cadeia A ID do formulário.
name cadeia O nome do formulário.
controls Controle[] Todos os controles no formulário.
tabs Guia[] Todas as guias no formulário.
isMultiStep booleano True se o formulário for multissessão; caso contrário, false. Consulte o formulário multissessão.

Métodos IForm

Use esses métodos para consultar a visibilidade de um formulário e alternar se ele está visível.

Método Devoluções Description
getVisible boolean Retorna true se o formulário estiver visível; caso contrário, false.
setVisible(isVisible: boolean) void Define a visibilidade do formulário.

Exemplo de IForm

O exemplo a seguir recupera um formulário por ID e registra sua visibilidade, número de controles e guias.

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.`);

Formulário de várias etapas

Um formulário de várias etapas é um contêiner que contém vários formulários básicos.

Propriedades do formulário de várias etapas

As propriedades a seguir se aplicam ao contêiner de formulário de várias etapas e descrevem o que está disponível na etapa ativa atualmente.

Propriedade Tipo Description
id cadeia A ID do formulário de várias etapas.
controls Controle[] Todos os controles na etapa atual.
tabs Guia[] Todas as guias na etapa atual.
isMultiStep booleano True se o formulário for multissessão; caso contrário, false.
nextButton Elemento JQuery Representa o próximo botão (objeto vazio, se ausente).
previousButton Elemento JQuery Representa o botão anterior (objeto vazio, se ausente).

Métodos de formulário de várias etapas

Use esses métodos para verificar a visibilidade e mover-se entre as etapas em um formulário de várias etapas.

Name Devoluções Description
getVisible boolean Retorna true se o formulário estiver visível; caso contrário, false.
setVisible(isVisible: boolean) void Define a visibilidade do formulário.
isVisible boolean Propriedade que indica se o formulário deve ser mostrado (true) ou oculto (false).
hasNextStep boolean Retornará true se houver uma próxima etapa; caso contrário, false.
hasPreviousStep boolean Retorna true se houver uma etapa anterior; caso contrário, false.
goToNextStep void Navega para a próxima etapa; enviará o formulário se nenhuma próxima etapa existir.
goToPreviousStep void Navega até a etapa anterior; gerará uma exceção se nenhum existir.

Exemplo de formulário de várias etapas

Este exemplo mostra como recuperar um formulário de várias etapas, inspecioná-lo e avançar para a próxima etapa.

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

Um Tab contém uma ou mais seções em um formulário.

Propriedade Tab Sections

Uma matriz de seções dentro da guia.

Métodos tab

Use esses métodos para verificar a visibilidade de uma guia, recuperar seu nome e alternar se ela está visível.

Método Devoluções Description
getVisible boolean Retornará true se a guia estiver visível; caso contrário, false.
getName string Retorna o nome da guia.
setVisible(isVisible: boolean) void Define a visibilidade da guia.

Exemplo de guia

Este exemplo recupera um formulário, enumera suas guias e registra o nome da primeira guia.

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()}`);  

Seção

Controles de grupo de seções em uma guia.

Propriedade Section Controls

Uma matriz de controles dentro da seção.

Métodos de seção

Use esses métodos para ler o nome de uma seção e controlar sua visibilidade.

Método Devoluções Description
getVisible boolean Retorna true se a seção estiver visível; caso contrário, false.
getName string Retorna o nome da seção.
setVisible(isVisible: boolean) void Define a visibilidade da seção.

Exemplo de seção

Este exemplo recupera seções da primeira guia de um formulário e registra detalhes básicos.

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()}`);

Control

Os controles representam elementos de formulário individuais.

Métodos de controle

Use esses métodos para recuperar ou atualizar o valor, a visibilidade e o estado desabilitado de um controle.

Método Devoluções Description
getDisabled boolean Retornará true se o controle estiver desabilitado.
getVisible boolean Retornará true se o controle estiver visível.
getName string Retorna o nome do controle.
getValue string | undefined Recupera o valor atual.
setDisabled(isDisabled: boolean) void Define o estado desabilitado.
setVisible(isVisible: boolean) void Define a visibilidade.
setValue(value: string) void Define um novo valor para o controle.

Exemplo de controle

Este exemplo busca um formulário, verifica a visibilidade do primeiro controle e o oculta.

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.  
}

Controles com suporte

Todos os controles implementam os métodos de controle padrão. Alguns controles fornecem mais métodos e têm detalhes de implementação diferentes dos métodos de controle padrão. Saiba mais sobre outros métodos e diferenças de implementação para diferentes tipos de controles.

coleção $pages.currentPage.lists

A coleção de listas fornece métodos para trabalhar com elementos de lista tradicionais e modernos na página.

Métodos $pages.currentPage.lists

Use esses métodos para enumerar todas as listas na página e obter uma lista específica pela ID do elemento HTML.

Método Devoluções Description
getAll Ilist[] Retorna todas as listas na página atual.
getListById(id: string) IList Obtém uma lista por sua ID de elemento HTML.

exemplos de $pages.currentPage.lists

Esses exemplos mostram como enumerar todas as listas na página e obter uma lista específica por sua ID de elemento HTML.

let lists = $pages.currentPage.lists.getAll();
let list = $pages.currentPage.lists.getListById('list_#1');

Interface IList

Uma lista representa um componente de dados tabular ou semelhante à grade.

Propriedades de IList

Essas propriedades identificam a lista e indicam se ela usa o modelo de renderização moderno.

Propriedade Tipo Description
id cadeia O identificador exclusivo da lista.
isModern booleano Um valor booliano que é verdadeiro para listas modernas e false caso contrário.

Métodos IList

Use esses métodos para verificar a visibilidade da lista, alternar se ela está visível e acessar o elemento HTML subjacente.

Método Devoluções Description
getVisible boolean Retornará true se a lista estiver visível.
setVisible(isVisible: boolean) void Define a visibilidade da lista.
getHtmlElement HTMLElement Retorna o elemento HTML subjacente para a lista.

Exemplo de IList

O exemplo a seguir recupera uma lista por ID e registra seu status de visibilidade.

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

objeto $pages.user

O $pages.user objeto fornece métodos para conectar ou sair o usuário.

métodos $pages.user

Esses métodos não retornam nenhum valor.

Método Description
signIn Redireciona o usuário para a página de entrada.
signOut Desconscreve o usuário conectado no momento.

objeto $pages.webAPI

O $pages.webAPI objeto fornece métodos para criar e recuperar registros de uma fonte de dados.

Método createRecord

Cria um novo registro na tabela especificada.

Sintaxe: $pages.webAPI.createRecord(entitySetName: string, data: object): Promise<object>
Retorna: uma promessa que é resolvida para o registro criado ou o resultado da operação.

Parâmetros do método createRecord

Forneça a tabela de destino e o objeto de dados que representa o registro a ser criado.

Parâmetro Tipo Description
entitySetName cadeia O nome do conjunto de entidades. Saiba mais sobre o nome do conjunto de entidades na API Web do Dataverse
data objeto Os dados de registro a serem criados.

exemplo do método createRecord

Este exemplo demonstra a chamada createRecord com um nome de conjunto de entidades e um objeto de dados mínimo.

$pages.webAPI.createRecord('contacts', {  
firstName: 'User',
lastName: 'Test'  
});

Método retrieveRecord

Recupera um registro por seu identificador exclusivo.

Sintaxe: $pages.webAPI.retrieveRecord(entitySetName: string, id: string, options?: string): Promise<object>
Retorna: uma promessa que é resolvida para o objeto de registro.

Parâmetros do método retrieveRecord

Especifique a tabela, a ID do registro e as opções opcionais de consulta OData $select para moldar a resposta.

Parâmetro Tipo Description
entitySetName cadeia O nome do conjunto de entidades. Saiba mais sobre o nome do conjunto de entidades na API Web do Dataverse.
id cadeia O identificador exclusivo do registro.
options cadeia de caracteres (opcional) Uma cadeia de caracteres de consulta OData $select opcional para limitar os dados retornados.

Note

Embora o options parâmetro seja opcional, para melhor desempenho, sempre limite o número de valores de coluna retornados usando a opção$select.

Exemplo do método retrieveRecord

Este exemplo recupera um único registro por ID e limita as colunas retornadas usando uma opção de consulta OData $select .

let record = await $pages.webAPI.retrieveRecord('accounts', 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',  '$select=name');

Método retrieveMultipleRecords

Recupera vários registros com base nas opções de consulta fornecidas.

Sintaxe: $pages.webAPI.retrieveMultipleRecords(entitySetName: string, options?: string): Promise<object>
Retorna: uma promessa que é resolvida para uma matriz de objetos de registro.

Parâmetros do método retrieveMultipleRecords

Especifique a tabela e a consulta OData opcional para filtrar os resultados e limitar as colunas retornadas.

Parâmetro Tipo Description
entitySetName cadeia O nome do conjunto de entidades.
options cadeia de caracteres (opcional) Uma cadeia de caracteres de opções de consulta OData para controlar os dados retornados. Saiba mais sobre as opções de consulta OData compatíveis com a API Web do Dataverse

Note

Embora o options parâmetro seja opcional, para melhor desempenho, sempre limite o número de valores de coluna retornados usando a opção$select.

Exemplo do método retrieveMultipleRecords

Este exemplo recupera vários registros e usa OData $select e $top para limitar a contagem de colunas e linhas retornadas.

let records = await $pages.webAPI.retrieveMultipleRecords('accounts','$select=name&$top=3');

$pages.languages

O $pages.languages objeto fornece métodos para recuperar a lista de idiomas disponíveis para o site, obter o idioma ativo no momento e definir um novo idioma ativo.

métodos $pages.languages

Use esses métodos para ler os idiomas disponíveis, verificar o idioma atual e alterá-lo para o site.

Método Description Devoluções
getAll Recupera a lista de idiomas habilitados para o site. string[]
getActive Recupera o idioma ativo no momento. string
setActive(language: string) Define o idioma especificado como o idioma ativo. void

Note

setActive o método causa um recarregamento de página.

Exemplos do método $pages.languages

Esses exemplos mostram como listar todos os idiomas, ler o idioma ativo e definir um novo idioma ativo.

let allLanguages = $pages.languages.getAll();
let activeLanguage = $pages.languages.getActive();
$pages.languages.setActive('hi-IN');

$pages.agent

O objeto $pages.agent fornece métodos para estabelecer a comunicação entre o site e o agente Microsoft Copilot Studio disponível para o usuário atual.

$pages.agent.SendActivity(
    agentSchemaName: string,
    inputActivity: object,
    responseSubscriber: function,
    errorSubscriber: function
);
Nome do parâmetro Tipo Description
agentSchemaName String Nome do esquema do bot para o qual a atividade é enviada.
inputActivity Object Objeto que contém o texto ou evento a ser enviado para o bot.
responseSubscriber função Função de retorno de chamada que é executada quando o agente envia uma resposta.
errorSubscriber função Função de retorno de chamada que manipula erros.

Tipo de retorno: nulo – a função não retorna nada.

Objeto de resposta do agente recebido no seguinte formato:

Name Tipo Description
type String Tipo da atividade, como mensagem.
text String Opcional, mensagem do agente.
textFormat String Opcional, formato do texto da mensagem, como markdown, simples ou XML.
Id String ID que identifica exclusivamente a atividade.
From Object Especifica o remetente da atividade (inclui id, nome (opcional) e informações de função).
Conversation Object Contém a ID da conversa à qual a atividade pertence.
InputHint String Opcional, indica se o bot está aceitando, esperando ou ignorando a entrada do usuário.
replyToId String ID da mensagem de resposta.

Example

Método de retorno de chamada

Defina as responseSubscriber funções de retorno de chamada e errorSubscriber para lidar com respostas e erros do agente.

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';  

Enviar mensagem ao agente

const inputActivity = {
    text: 'Hello!', // Message to the agent.
    };

$pages.agent.SendActivity(agentSchemaName, inputActivity, responseSubscriber, 
  ErrorSubscriber);

Invocar evento do cliente

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);

Mensagens de erro

Aqui estão possíveis mensagens de erro que os usuários podem encontrar e suas possíveis causas.

Tipo de erro Causa Mensagem de erro para o usuário
Validação de esquema do agente Nome de esquema de bot inválido fornecido ou o usuário não tem permissões de acesso para o agente Invalid bot schema name or access denied. Please check the bot schema name and try again.
Buscar erro de token Erro ao buscar o token de linha direta Something went wrong while fetching the token. Please try again.
Erro de atividade de postagem (repetição) Ocorreu um erro ao postar a atividade e uma repetição é necessária. Something went wrong while posting the activity: retry.
Erro de atividade de postagem (tempo limite) Tempo limite durante a espera por mensagem de saída ou postActivity Timed out while posting activity: Please retry.
Erro de atividade de postagem (atividade inválida) A atividade de entrada não tem texto ou nome para invocar o evento. Invalid activity: At least one of text, name, or attachments must be provided.
Erro de atividade de postagem (ID do usuário não encontrada ou token não encontrado) O token não é encontrado no armazenamento de sessão ou a ID do usuário não é encontrada no token Error retrieving user ID: {error message}
Erro de atividade de postagem (geral) Erro não especificado ao postar a atividade Something went wrong while posting the activity: Please try again.
Erro de conexão de linha direta Erro ao criar uma conexão de linha direta com o bot. Something went wrong while creating direct line connection: Please try again.
Erro geral Um erro inesperado que não se enquadra nas categorias acima An unexpected error occurred while sending activity: Please try again.