Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
[Este tópico faz parte da documentação de pré-lançamento e está sujeito a alterações.]
Neste tutorial, você criará um componente de código que usa eventos personalizados e o testará usando aplicativos baseados em tela e modelos. Saiba mais sobre a visualização de eventos personalizados.
Goal
As etapas neste tutorial orientam você a criar um componente de código com dois botões que geram eventos diferentes para o aplicativo de hospedagem que pode reagir. Você definirá dois eventos: customEvent1 e customEvent2. Em seguida, o componente de código expõe dois botões que fazem com que esses eventos ocorram.
Aplicativo de Tela
O aplicativo de tela usa expressões do Power Fx nesses eventos para alternar as propriedades visíveis e de modo de exibição de um controle:
Aplicativo baseado em modelo
O aplicativo controlado por modelo usa o JavaScript do lado do cliente para mostrar um alerta quando os respectivos eventos ocorrem.
Pré-requisitos
Você já deve saber como:
- Criar e construir um componente de código
- Empacotar um componente de código
- Adicionar componentes de código a um aplicativo controlado por modelos
- Adicionar componentes a um aplicativo de tela
Criar um novo controle
Crie um novo componente usando este comando:
pac pcf init -n EventSample -ns SampleNamespace -t field -fw react -npmEditar o manifesto para adicionar os novos eventos
<property name="sampleProperty"
display-name-key="Property_Display_Key"
description-key="Property_Desc_Key"
of-type="SingleLine.Text"
usage="bound"
required="true" />
<resources>
<code path="index.ts"
order="1"/>
<platform-library name="React"
version="16.8.6" />
<platform-library name="Fluent"
version="8.29.0" />
<css path="css/SampleEventPCF.css" order="1" />
<resx path="strings/SampleEventPCF.1033.resx" version="1.0.0" />
</resources>
Definir eventos
EventSample\HelloWorld.tsx No arquivo de controle, defina dois eventos na interface e associe os eventos a dois botões diferentes. Atualize também a importação para incluir DefaultButton, conforme mostram as alterações a seguir.
import * as React from 'react';
import { Label } from '@fluentui/react';
export interface IHelloWorldProps {
name?: string;
}
export class HelloWorld extends React.Component<IHelloWorldProps> {
public render(): React.ReactNode {
return (
<Label>
{this.props.name}
</Label>
)
}
}
Modificar updateview método
Em EventSample\Index.ts, modifique o método updateView para adicionar manipuladores para os dois eventos de botão. Esses manipuladores adicionam os dois eventos definidos no manifesto aos eventos no contexto passado para o controle.
public updateView(context: ComponentFramework.Context<IInputs>): React.ReactElement {
const props: IHelloWorldProps = { name: 'Hello, World!' };
return React.createElement(
HelloWorld, props
);
}
Compilar e empacotar
Como de costume, você precisa concluir estas etapas para usar este controle:
- Criar e compilar o componente de código
- Empacote o componente de código
- Implante o componente de código.
Usar em um aplicativo de tela
Para usar esse controle em um aplicativo de tela, você precisa:
Adicione um novo controle. Este exemplo usa um controle de texto.
Adicione duas variáveis globais ao aplicativo:
isVisibleecanEdit.Defina
canEditna propriedadeDisplayModedo controle de texto.Defina
isVisiblena propriedadeVisibledo controle de texto.Defina ações personalizadas no novo controle personalizado para atualizar as
isVisiblevariáveis ecanEditquando os botões forem clicados.Event Expressão do Power FX customEvent1 If(isVisible, Set (isVisible, false), Set (isVisible, true))customEvent2 If(canEdit = DisplayMode.Edit, Set(canEdit, DisplayMode.Disabled), Set (canEdit, DisplayMode.Edit))
Testar o aplicativo de tela
Pressione Evento de gatilho 1.
Esperado: o controle de texto alterna entre visível e oculto
Pressione Trigger event 2.
Esperado: o controle de texto alterna entre editável e somente leitura.
Usar em um aplicativo baseado em modelo
Note
Estas etapas referem-se às instruções descritas em Passo a passo: escrever seu primeiro script de cliente.
Crie um novo recurso Web JavaScript para ser executado no
onLoadevento de um formulário. Esse script associa dois manipuladores de eventos aos novos eventos dos controles ao carregar o formulário./* eslint-disable */ "use strict"; var MyScriptsNameSpace = window.MyScriptsNameSpace || {}; (function () { const controlName1 = "cr116_personid"; this.onLoad = function (executionContext) { const formContext = executionContext.getFormContext(); const sampleControl1 = formContext.getControl(controlName1); sampleControl1.addEventHandler("customEvent1", this.onSampleControl1CustomEvent1); sampleControl1.addEventHandler("customEvent2", this.onSampleControl1CustomEvent2); }; this.onSampleControl1CustomEvent1 = function (params) { alert(`SampleControl1 Custom Event 1`); }.bind(this); this.onSampleControl1CustomEvent2 = function (params) { alert(`SampleControl1 Custom Event 2`); }.bind(this); }).call(MyScriptsNameSpace);Conclua as seguintes etapas como você normalmente faz:
Configure o evento On Load , conforme mostrado na imagem a seguir:
Teste seu aplicativo.
Quando você vai até o formulário e pressiona Acionar evento 1, um alerta é exibido
SampleControl1 Custom Event 1. Quando você pressiona Acionar evento 2, um alertaSampleControl1 Custom Event 2é exibido.
Passando conteúdo em eventos
Conforme descrito na definição de um evento para aplicativos controlados por modelos, você pode passar conteúdo em eventos em aplicativos controlados por modelos. Você pode modificar este exemplo da maneira a seguir para ver como isso funciona.
Enviar carga útil com o evento
Altere o EventSample\index.ts para que os eventos passem o payload da mensagem e, no segundo evento, também passem uma função de callback que altera uma variável interna
public updateView(context: ComponentFramework.Context<IInputs>): React.ReactElement {
const props: IHelloWorldProps = {
onCustomEvent1: ()=> {
context.events.customEvent1()
},
onCustomEvent2: () => {
context.events.customEvent2()
}
};
return React.createElement(
HelloWorld, props
);
}
Then:
Adicione outro campo ao formulário usado antes e defina-o para usar o novo componente.
Usar o conteúdo no manipulador de eventos
Atualize a onLoad função para definir os manipuladores de eventos nos controles personalizados para reagir a eventos de ambos os controles e também para usar os parâmetros que estão sendo passados
/* eslint-disable */
"use strict";
var MyScriptsNameSpace = window.MyScriptsNameSpace || {};
(function () {
const controlName1 = "cr116_personid";
this.onLoad = function (executionContext) {
const formContext = executionContext.getFormContext();
const sampleControl1 = formContext.getControl(controlName1);
sampleControl1.addEventHandler("customEvent1", this.onSampleControl1CustomEvent1);
sampleControl1.addEventHandler("customEvent2", this.onSampleControl1CustomEvent2);
};
this.onSampleControl1CustomEvent1 = function (params) {
alert(`SampleControl1 Custom Event 1`);
}.bind(this);
this.onSampleControl1CustomEvent2 = function (params) {
alert(`SampleControl1 Custom Event 2`);
}.bind(this);
}).call(MyScriptsNameSpace);
Testar o aplicativo controlado por modelos
Navegue até o formulário.
Pressione Trigger event 1 no primeiro campo.
Esperado: uma janela pop-up exibe SampleControl1 Custom Event 1: Olá do evento 1 no primeiro campo.
Pressione Trigger event 2 no campo primeiro.
Esperado: um pop-up exibe SampleControl1 Custom Event 2: Olá do evento 2 no primeiro campo, seguido de um alerta do primeiro controle informando A ação padrão do Evento 2 NÃO foi impedida
Pressione Trigger event 1 no campo second.
Esperado: um pop-up exibe o Evento Personalizado SampleControl2 1: Olá do evento 1 no segundo campo.
Pressione Evento de acionamento 2 no segundo campo.
Esperado: um pop-up exibe SampleControl2 Custom Event 2: Olá do evento 2 no segundo campo, seguido de um alerta do segundo controle que diz A ação padrão do Evento 2 foi impedida