Acessar dados no SQL Server
Adicionar fonte de dados
Acesso direto:
Se você escolher a opção Iniciar com dados ao criar um aplicativo, a propriedade Itens da galeria terá uma fórmula do Power Fx com um nome da fonte de dados que aponta diretamente para a tabela do banco de dados.
Por exemplo, se você tiver uma tabela BOOKLENDING
, verá a seguinte fórmula:
Search([@'[dbo].[BOOKLENDING]'], SearchInput1.Text, author, author,book_name,category)
Exibições e procedimentos armazenados:
Um padrão profissional comum de acesso a dados é usar exibições e, em seguida, procedimentos armazenados para criar, atualizar e excluir em vez de permitir acesso direto. Se quiser usar modos de exibição ou procedimentos armazenados, altere a fórmula de exemplo. Da mesma forma, o formulário para o registro também não usa a abordagem direta interna da fórmula SubmitForm()
.
Gatilhos:
Um padrão de banco de dados é usar gatilhos em tabelas. Se uma tabela tiver um gatilho, você não poderá usar o padrão direto Submit()
para criar, atualizar e excluir.
Submit()
tem um conflito entre a manipulação de gatilhos SQL e o comportamento do Power Apps interno, que usa o mesmo parâmetro de saída.
No entanto, você pode acessar diretamente a tabela para fins de consulta, mas, para manipular Create
, Update
ou Delete
, deve chamar um procedimento armazenado.
[!OBSERVAÇÃO]
O conector do SQL Server, como todos os conectores que funcionam com dados relacionais, pressupõe que as tabelas tenham uma chave primária. Uma chave primária é essencial para localizar registros específicos a serem atualizados. Se uma tabela do SQL Server não tiver uma chave primária, os dados serão tratados como somente leitura. Se você tiver direitos de acesso e edição para a tabela SQL Server, adicione uma chave gerada automaticamente.
Usar uma exibição
Uma exibição é uma consulta salva que é exibida como uma única tabela de dados.
As exibições aparecem na lista de tabelas que você pode selecionar ao adicionar uma fonte de dados. As exibições oferecem suporte apenas a consultas – não a atualizações. Você deve usar um procedimento armazenado para atualizações.
Se você criar uma tabela com a opção Start with data
, obterá telas e fórmulas que exibem registros em uma galeria e formulário. Você pode ver fórmulas e funcionalidades para criação, edição e exclusão. No entanto, se você usar um modo de exibição, verá apenas uma tela de exibição para a galeria e o formulário.
Talvez você queira as telas geradas automaticamente de Start with data
para exibições.
Para essa opção gerada automaticamente:
- Escolha
Start with data
com uma tabela básica. - Exclua e substitua a fonte de dados da tabela.
Exemplo:
Por exemplo, se você tivesse uma tabela BOOKLENDINGVIEW
e a adicionasse como uma fonte de dados para Power Apps, a fórmula poderia ser tão simples quanto:
BOOKLENDINGVIEW
Você também pode substituir outras fórmulas de criação, atualização e exclusão por uma fonte de dados de exibição e chamadas de procedimento armazenado.
Usar procedimentos armazenados
Ao adicionar uma conexão SQL Server ao seu aplicativo, você pode adicionar procedimentos armazenados e chamá-los diretamente no Power Fx.
Observação
Esse recurso também funciona com conexões implícitas seguras.
Depois de selecionar um procedimento armazenado, um nó filho será exibido e você poderá designar o procedimento armazenado como Seguro para uso em galerias e tabelas.
Um procedimento armazenado será seguro se não tiver nenhuma ação executada que possa ser indesejada em determinados cenários. Por exemplo, se um procedimento armazenado coletou todas as contas de uma determinada cidade e enviou um email para elas. Talvez nem sempre você queira que os emails sejam enviados sempre que o procedimento armazenado for chamado. Portanto, o procedimento armazenado não deve ser marcado como seguro.
Marque um procedimento armazenado como seguro somente se:
Não houver efeitos colaterais em chamar esse procedimento sob demanda.
Você deve ser capaz de chamar o procedimento várias vezes ou sempre que o Power Apps atualiza o controle. Quando usado com uma propriedade Items de uma galeria ou tabela, o Power Apps chama o procedimento armazenado sempre que o sistema determinar que uma atualização é necessária. Não for possível controlar quando o procedimento armazenado é chamado.
Você retorna uma quantidade modesta de dados no procedimento armazenado.
As chamadas de ação, como procedimentos armazenados, não têm um limite quanto ao número de linhas recuperadas. Elas não são paginadas automaticamente em incrementos de 100 registros, como fontes de dados tabulares, como tabelas ou exibições.
Se o procedimento armazenado retornar muitos dados (muitos milhares de registros), seu aplicativo poderá ficar lento ou falhar. Por questões de desempenho, traga menos de 2.000 registros.
Se você verificar um procedimento armazenado como seguro, poderá atribuir o procedimento armazenado como uma propriedade Items nas galerias para que as tabelas sejam usadas em seu aplicativo.
Importante
O esquema dos valores de retorno do procedimento armazenado deve ser estático, para que os valores não sejam alterados de chamada para chamada. Por exemplo, se um procedimento armazenado retornar duas tabelas, ele sempre retornará duas tabelas. Você pode trabalhar com resultados tipados ou não tipados.
A estrutura dos resultados também precisa ser estática. Por exemplo, se o esquema dos resultados for dinâmico, os resultados não serão tipados, e você deverá fornecer um tipo para usá-los no Power Apps. Para obter mais informações, consulte Resultados não tipados.
Namespace SQL anexado ao nome do procedimento armazenado
O nome do namespace SQL Server, onde você armazena o procedimento, é anexado ao nome do procedimento armazenado. Por exemplo, todos os procedimentos armazenados no namespace do SQL Server 'DBO' têm 'dbo' no início do nome.
Por exemplo, quando você adiciona um procedimento armazenado, pode ver mais de uma fonte de dados em seu projeto.
Chamada de um procedimento armazenado
Para usar um procedimento armazenado no Power Apps, prefixe o nome do procedimento armazenado com o nome do conector associado a ele seguido do nome do procedimento armazenado, como Paruntimedb.dbonewlibrarybook
.
Observação
Quando o Power Apps traz o procedimento armazenado, ele concatena o namespace e o nome do procedimento para que dbo.newlibrarybook
se torne dbonewlibrarybook
.
Os argumentos são passados como um registro do Power Apps com pares de valores nomeados:
<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})
Dica
Lembre-se de converter valores, se necessário, à medida que os passa para o procedimento armazenado, já que você está lendo um valor de texto no Power Apps. Por exemplo, se você estiver atualizando um inteiro em SQL, deverá converter o texto no campo usando Value()
.
Aqui está um exemplo de como os procedimentos armazenados podem ficar ao atribuí-los a uma propriedade OnSelect
.
Variáveis e todos os procedimentos armazenados
Você pode acessar um procedimento armazenado para a propriedade Items de uma galeria depois de declará-la segura para a interface do usuário. Referencie o nome da fonte de dados e o nome do procedimento armazenado seguido de ResultSets
. Você pode acessar vários resultados fazendo referência ao conjunto de tabelas retornadas, como Tabela 1, Tabela 2 etc.
Por exemplo, um procedimento armazenado acessado pela tabela Paruntimedb
com o nome dbo.spo_show_all_library_books()
se parece com:
Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1
Esta consulta popula a galeria com registros. No entanto, os procedimentos armazenados são comportamentos de ação no modelo tabular.
Refresh()
só funciona com fontes de dados tabulares e não pode ser usado com procedimentos armazenados. Você deve atualizar a galeria quando um registro é criado, atualizado ou excluído.
Observação
Quando você usa um Submit()
em um formulário para uma fonte de dados tabular, ele efetivamente chama Refresh()
nos bastidores e atualiza a galeria.
Usar uma variável para popular e atualizar a galeria
Use uma variável na propriedade OnVisible
para a tela e defina o procedimento armazenado como a variável.
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
Você pode acabar definindo a propriedade Items
da galeria como o nome da variável.
SP_Books
Depois de criar, atualizar ou excluir um registro com uma chamada para o procedimento armazenado, defina a variável novamente para atualizar a galeria.
Paruntimedb.dbonewlibrarybook({
book_name: DataCardValue3_2.Text,
author: DataCardValue1_2.Text,
...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);
Usar o Power Automate para chamar procedimentos armazenados
O Power Automate lida melhor com ações assíncronas. Você pode chamar procedimentos armazenados como parte de uma série de chamadas em um processo empresarial.
Para chamar o Power Automate seguido de uma chamada para procedimentos armazenados, crie variáveis de entrada como parte do seu fluxo.
Em seguida, passe suas variáveis de entrada para a chamada do procedimento armazenado.
Adicione esse fluxo do Power Automate ao seu aplicativo e chame-o. Os argumentos opcionais são passados como um registro "{ ... }". O exemplo a seguir tem todos os argumentos opcionais.