Construtor de consultas FetchXML

<FetchXmlBuilder> edita uma consulta FetchXML sem que ninguém escreva FetchXML. Ela cobre as partes da linguagem que as pessoas realmente buscam — a tabela, as colunas que ela retorna, como as linhas são ordenadas e uma árvore de filtros de condições e grupos aninhados — e junta tabelas relacionadas, agrega e executa o que construiu.

Reagir apenas, por enquanto

Esse componente existe apenas na pilha React — ainda não existe equivalente ao Blazor. Um portal Blazor que precisa armazenar uma consulta FetchXML ainda pode fazê-lo; o que ele não possui é esse editor para construir uma.

Experimente

O componente real contra os metadados desse ambiente. Escolha uma tabela, adicione uma coluna ou condição, entre em uma tabela relacionada e observe o painel FetchXML acompanhar — depois pressione Executar para ver qual corresponde a consulta.

Exemplo de reação
React TypeScript

Não é a mesma coisa que FetchXMLBuilder

Esta página é sobre o componente. FetchXMLBuilder é a classe C# que compõe o mesmo XML em código, para um chamador do lado do servidor que constrói uma consulta manualmente. Eles produzem a mesma coisa e nenhum precisa do outro.

Metadados são obrigatórios, não são opcionais

Cada tabela, coluna e relacionamento é escolhido a partir do que o ambiente realmente tem. Isso é deliberado: um nome lógico digitado manualmente produz FetchXML que analisa perfeitamente e depois falha no Dataverse, que é o pior tipo de erro para alguém entregar. O usePowerPortalsProFetchXmlMetadata gancho conecta o construtor aos endpoints de metadados cacheados do framework, então os selecionadores compartilham tudo o que as grades na mesma página já buscaram.

As idas e voltas de consultas

O construtor analisa o FetchXML em um modelo de documento e o grava novamente. Qualquer coisa para a qual ele não tenha editor — um atributo de uma versão mais recente da plataforma, um elemento escrito por outra ferramenta — é executada sem ser tocada, em vez de ser descartada no carregamento, então abrir uma consulta no editor e salvá-la nunca custa silenciosamente parte dela.

O que isso significa para uma consulta salva

A formatação não é preservada. Indentação e citação de atributos são normalizadas na saída, então uma consulta re-salva pelo construtor é a mesma consulta e não o mesmo texto.

Fornecendo uma consulta

Existem três formas de entrar, e todas passam pelo mesmo leitor:

  • A value hélice. Forneça para onChange um componente controlado, ou use defaultValue e deixe o construtor ser dono do estado.
  • O painel FetchXML. Cole ou digite uma consulta e o editor se reconstrói a partir dela cerca de um segundo depois que você para de digitar.
  • Uma visualização salva. Comece a partir de uma visualização no cabeçalho Filtros que lista as visualizações da tabela e pega toda a consulta da que você escolheu. É uma cópia — nada é escrito de volta na visualização.

O que chegar é verificado primeiro. XML malformado é reportado com sua linha e coluna, assim como qualquer coisa que faça o editor mostrar algo diferente do que foi escrito — um operador ou tipo de link que ele não conhece, uma consulta que não nomeia nenhuma tabela. Esses são recusados imediatamente e a consulta já na tela é deixada como está. Todo o resto é reportado e ainda aplicado: um elemento ou atributo com erros ortográficos, duas tabelas compartilhando um alias, uma leitura de condição de um alias que nada declara.

Tabelas relacionadas

Uma junção é adicionada a partir do seletor de relacionamento, então as from colunas e to vêm da relação em vez da memória. O que uma junção pode então contribuir depende do seu tipo:

  • Retornando tiposinner, outer e matchfirstrowusingcrossapply — trazem as colunas da tabela relacionada de volta, para que suas colunas possam ser projetadas, ordenadas e comparadas.
  • Tipos de filtragemexists, in, any, not any e all — retornam a linha no máximo uma vez e nenhuma das colunas relacionadas. O editor elimina o alias quando você muda para um, então o nome fica livre para outra junção.
  • Não tem linha relacionada como um preset em vez de um tipo de link: o FetchXML não tem nenhum para ele, então o editor escreve a junção externa e o teste nulo na chave unida que a plataforma espera, mantendo os dois em sintonia.

Sobre "todos"

O all FetchXML não significa o que seu nome sugere — ele corresponde a linhas que têm linhas relacionadas das quais nenhuma satisfaz o filtro, e not all é documentado como equivalente a any. Cada tipo é rotulado pelo que faz, e não pelo nome, e uma ação Invert condições em um grupo de filtro expressa a leitura que as pessoas geralmente desejam.

Consultas agregadas

Ative o Agregado na seção Colunas e cada coluna diz o que contribui — um valor calculado entre as linhas, ou o que as agrupa. As funções oferecidas se restringem ao tipo da coluna, aliases se tornam necessários e preenchidos para você, uma coluna de data agrupada ganha uma parte de data, e a ordenação muda para os aliases, porque as linhas de uma consulta agregada são grupos e valores calculados sem colunas para ordenar.

allowAggregate={false} retira o switch, para um host que lê linhas em vez de totais — uma regra avaliada um registro de cada vez, um filtro salvo, em qualquer lugar onde uma única linha de valores calculados não seria uma resposta. Ela está ausente em vez de desativada, porque nenhuma alteração na consulta a traria de volta. A única exceção é uma consulta que agrega: ela mantém seus controles independentemente do prop configurado, então uma colada no painel FetchXML ainda pode ser editada de volta para uma consulta comum.

Montar parte dele

Cada seção pode ser desligada, e as seções são exportadas individualmente para um layout que precisa delas em outro lugar — monte <FetchXmlBuilderProvider> e posicione os FetchXml*Section componentes você mesmo. Omitir uma seção remove sua interface, nunca o FetchXML subjacente: as colunas de uma consulta sobrevivem intactas com columns: false.

Restrição das tabelas

allowedTables Reduz o seletor de tabelas aos nomes lógicos que você listou — para uma superfície que não tem motivo para consultar todo o ambiente, como um construtor de relatórios sobre o punhado de tabelas que um portal expõe. Omita-o e todas as tabelas são oferecidas. Ele restringe o que pode ser escolhido, não o que pode ser mostrado: uma consulta que já nomeia uma tabela fora da lista mantém essa tabela em vez de ser silenciosamente reescrita, e uma tabela relacionada ainda é nomeada pelo nome de exibição sempre que uma junção a menciona. As próprias joins não são restritas, porque seguem relações — uma propriedade da tabela já escolhida.

Executando a consulta

Fornece renderResults e o construtor cresce um painel de Resultados com um botão Executar, e decide quando ele pode ser pressionado. Exibir linhas consome um cliente de dados que o construtor deliberadamente não tem, então o resultado é seu — em um portal que geralmente significa o próprio <MainGrid> framework sobre a consulta que ele devolve. Deixe o prop desligado e o painel não está lá.

API