Compreender origens de dados no PowerAppsUnderstand data sources in PowerApps

A maioria das aplicações do PowerApps utiliza informações externas armazenadas em serviços cloud designados por Origens de Dados.Most PowerApps apps use external information stored in cloud services called Data Sources. Um exemplo comum é uma tabela num ficheiro do Excel armazenado no OneDrive para Empresas.A common example is a table in an Excel file stored in OneDrive for Business. As aplicações acedem a estas origens de dados através de Ligações.Apps access these data sources by using Connections.

Este artigo descreve os diferentes tipos de origens de dados e como trabalhar com origens de dados de tabelas.This article discusses the different kinds of data sources, and how to work with table data sources.

É fácil criar uma aplicação que faça a leitura e escrita básicas numa origem de dados.It is easy to create an app that does basic reading and writing to a data source. Mas, por vezes, quer ter mais controlo sobre a forma como os dados entram e saem da sua aplicação.But sometimes you want more control over how data flows in and out of your app. Este artigo descreve como as funções Patch, DataSourceInfo, Validate e Errors oferecem mais controlo.This article describes how the Patch, DataSourceInfo, Validate, and Errors functions provide more control.

Variantes de origens de dadosKinds of data sources

As origens de dados podem ser ligadas a um serviço cloud ou podem ser locais em relação a uma aplicação.Data sources can be connected to a cloud service, or they can be local to an app.

Origens de dados ligadasConnected data sources

As origens de dados mais comuns são as tabelas, que pode utilizar para obter e armazenar informações.The most common data sources are tables, which you can use to retrieve and store information. Pode utilizar ligações a origens de dados para ler e escrever dados em livros do Microsoft Excel, listas do SharePoint, tabelas SQL e muitos outros formatos, que podem ser armazenados nos serviços cloud, como o OneDrive para Empresas, DropBox, SQL Server, etc.You can use connections to data sources to read and write data in Microsoft Excel workbooks, SharePoint lists, SQL tables, and many other formats, which can be stored in cloud services like OneDrive for Business, DropBox, SQL Server, etc.

As origens de dados para além de tabelas incluem e-mail, calendários, Twitter e notificações, mas este artigo não aborda estes outros tipos de origens de dados.Data sources other than tables include email, calendars, Twitter, and notifications, but this article doesn't discuss these other kinds of data sources.

Origens de dados locaisLocal data sources

Através dos controlos Galeria, Mostrar formulário e Editar formulário, é fácil criar uma aplicação que lê e escreve dados de uma origem de dados.Using the Gallery, Display form, and Edit form controls, it is easy to create an app that reads and writes data from a data source. Para começar, leia o artigo Compreender formulários de dados.To get started, read the article Understand data forms.

Quando pedir ao PowerApps para criar uma aplicação a partir de dados, estes controlos são utilizados.When you ask PowerApps to create an app from data, these controls are used. Nos bastidores, a aplicação utiliza uma tabela interna para armazenar e manipular os dados provenientes da origem de dados.Behind the scenes, the app uses an internal table to store and manipulate the data that comes from the data source.

Um tipo especial de origem de dados é a Coleção, que é local em relação à aplicação e não é apoiada por uma ligação a um serviço na cloud, pelo que as informações não podem ser partilhadas entre dispositivos para o mesmo utilizador ou entre utilizadores.A special kind of data source is the Collection, which is local to the app and not backed by a connection to a service in the cloud, so the information can not be shared across devices for the same user or between users. As coleções podem ser carregadas e guardadas localmente.Collections can be loaded and saved locally.

Variantes de tabelasKinds of tables

As tabelas que são internas em relação a uma aplicação do PowerApps são valores fixos, da mesma forma que um número ou uma cadeia é um valor.Tables that are internal to a PowerApps app are fixed values, just as a number or a string is a value. As tabelas internas não são armazenadas em nenhum lugar, existindo apenas na memória da sua aplicação.Internal tables aren't stored anywhere, they just exist in your app's memory. Não é possível modificar diretamente a estrutura e os dados de uma tabela.You can't directly modify the structure and data of a table. O que pode fazer em alternativa é criar uma nova tabela através de uma fórmula: essa fórmula é utilizada para fazer uma cópia modificada da tabela original.What you can do instead is to create a new table through a formula: you use that formula to make a modified copy of the original table.

As tabelas externas são armazenadas numa origem de dados para posterior obtenção e partilha.External tables are stored in a data source for later retrieval and sharing. O PowerApps fornece "ligações" para ler e escrever dados armazenados.PowerApps provides "connections" to read and write stored data. Numa ligação, pode aceder a várias tabelas de informações.Within a connection, you can access multiple tables of information. O utilizador seleciona as tabelas a utilizar na sua aplicação e cada uma delas tornar-se numa origem de dados separada.You'll select which tables to use in your app, and each will become a separate data source.

Para saber mais, a secção Trabalhar com tabelas explica em maior pormenor as tabelas internas, mas também é aplicável a tabelas externas que residem num serviço cloud.To learn more, Working with tables goes into more detail about internal tables, but it is also applicable to external tables residing in a cloud service.

Trabalhar com tabelasWorking with tables

Pode utilizar as origens de dados de tabelas da mesma forma que utiliza uma tabela interna do PowerApps.You can use table data sources the same way that you use an internal PowerApps table. Tal como uma tabela interna, cada origem de dados tem registos, colunas e propriedades que pode utilizar em fórmulas.Just like an internal table, each data source has records, columns, and properties that you can use in formulas. Além disso:In addition:

  • A origem de dados tem os mesmos nomes de colunas e tipos de dados que a tabela subjacente na ligação.The data source has the same column names and data types as the underlying table in the connection.

    Nota: para origens de dados do SharePoint e do Excel que contenham nomes de colunas com espaços, o PowerApps substitui-os por "_x0020_".Note: For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". Por exemplo, “Nome de coluna” no SharePoint ou Excel aparecerá como “Column_x0020_Name” no PowerApps, quando apresentado no esquema de dados ou utilizado uma fórmula.For example, "Column Name" in SharePoint or Excel will appear as "Column_x0020_Name" in PowerApps when displayed in the data layout or used in a formula.

  • A origem de dados é carregada automaticamente a partir do serviço quando a aplicação é carregada.The data source is loaded from the service automatically when the app is loaded. Pode forçar a atualização dos dados através da função Atualizar.You can force the data to refresh by using the Refresh function.
  • À medida que os utilizadores executam uma aplicação, podem criar, modificar e eliminar registos e enviar novamente por push essas alterações para a tabela subjacente no serviço.As users run an app, they can create, modify, and delete records and push those changes back to the underlying table in the service.
    • Os registos podem ser criados com as funções Patch e Collect.Records can be created with the Patch and Collect functions.
    • Os registos podem ser modificados com as funções Patch, Atualizar e UpdateIf.Records can be modified with the Patch, Update, and UpdateIf functions.
    • Os registos podem ser removidos com as funções Remover e RemoveIf.Records can be removed with the Remove and RemoveIf functions.
    • Quando trabalha com uma origem de dados, os erros estão disponíveis através da função Errors.Errors when working with a data source are available through the Errors function.
  • As funções DataSourceInfo, Predefinições e Validar fornecem informações sobre a origem de dados que pode utilizar para otimizar a experiência de utilizador.The DataSourceInfo, Defaults, and Validate functions provide information about the data source that you can use to optimize the user experience.

Criar origens de dadosCreating data sources

O PowerApps não pode ser utilizado para criar uma origem de dados ligada ou modificar a respetiva estrutura; a origem de dados já tem de existir num serviço algures.PowerApps can't be used to create a connected data source, or modify its structure; the data source must already exist in a service somewhere. Por exemplo, para criar uma tabela num livro do Excel armazenado no OneDrive, primeiro utiliza o Excel Online no OneDrive para criar um livro.For example, to create a table in an Excel workbook stored on OneDrive, you first use Excel Online on OneDrive to create a workbook. Em seguida, cria uma ligação para o mesmo a partir da sua aplicação.Next you create a connection to it from your app.

No entanto, as origens de dados de coleção podem ser criadas e modificadas dentro de uma aplicação, mas são apenas temporárias.However, collection data sources can be created and modified inside an app, but are only temporary.

Apresentar um ou mais registosDisplay one or more records

O diagrama acima mostra o fluxo de informações quando uma aplicação lê as informações de uma origem de dados: The diagram above shows the flow of information when an app reads the information in a data source:

  • As informações são armazenadas e partilhadas através de um serviço de armazenamento (neste caso, uma lista do SharePoint de um site do Office 365).The information is stored and shared through a storage service (in this case, a SharePoint list of an Office 365 site).
  • Uma ligação disponibiliza estas informações para a aplicação.A connection makes this information available to the app. A aplicação trata da autenticação do utilizador para aceder às informações.The connection takes care of authentication of the user to access the information.
  • Quando a aplicação é iniciada ou a função Atualizar é premida, as informações são retiradas da ligação para uma origem de dados na aplicação para utilização local.When the app is started or the Refresh function is pressed, information is drawn from the connection into a data source in the app for local use.
  • As fórmulas são utilizadas para ler as informações e expô-las em controlos que o utilizador pode ver.Formulas are used to read the information and expose it in controls that the user can see. Para visualizar os registos de uma origem de dados, pode utilizar uma galeria num ecrã e ligar a propriedade Items à origem de dados: Gallery.Items = DataSource.You can display the records of a data source by using a gallery on a screen and wiring the Items property to the data source: Gallery.Items = DataSource. Para ligar controlos na galeria à galeria, utilize a propriedade Default dos controlos.You wire controls within the gallery, to the gallery, using the controls' Default property.
  • A origem de dados também é uma tabela.The data source is also a table. Por isso, pode utilizar Filtrar, Ordenar, AddColumns e outras funções para refinar e aumentar a origem de dados antes de utilizá-la como um todo.So you can use Filter, Sort, AddColumns, and other functions to refine and augment the data source before using it as a whole. Também pode utilizar Pesquisar, Primeiro, Último e outras funções para trabalhar com registos individuais.You can also use the Lookup, First, Last, and other functions to work with individual records.

Modificar um registoModify a record

Na secção anterior, vimos como ler uma origem de dados.In the prededing section, you saw how to read a data source. Repare que as setas no diagrama acima são unidirecionais.Note that the arrows in the diagram above are one way. As alterações a uma origem de dados não são novamente enviadas por push através das mesmas fórmulas com as quais os dados foram obtidos.Changes to a data source aren't pushed back through the same formulas in which the data was retrieved. Em vez disso, são utilizadas novas fórmulas.Instead, new formulas are used. Muitas vezes, o ecrã utilizado para editar um registo é diferente do ecrã utilizado para procurar registos, sobretudo num dispositivo móvel.Often a different screen is used for editing a record than for browsing records, especially on a mobile device.

Tenha em atenção que, para modificar um registo existente de uma origem de dados, o registo tem de ter vindo originalmente da origem de dados.Note that, to modify an existing record of a data source, the record must have originally come from the data source. O registo pode ter percorrido uma galeria, uma variável de contexto e qualquer número de fórmulas, mas deve ser possível identificar a sua origem até à origem de dados.The record may have traveled through a gallery, a context variable, and any number of formulas, but its origin should be traceable back to the data source. Isto é importante porque as informações adicionais viajam com o registo que as identifica exclusivamente, garantindo que modifica o registo correto.This is important because additional information travels with the record that uniquely identifies it, ensuring that you modify the correct record.

O diagrama acima mostra o fluxo de informações para atualizar uma origem de dados: The diagram above shows the flow of information to update a data source:

  • Um controlo Editar formulário fornece um contentor para cartões de entrada, que são constituídos por controlos de introdução pelo utilizador, tais como um controlo de introdução de texto ou um controlo de deslize.An Edit form control provides a container for input cards, which are made up of user input controls such as a text-input control or a slider. As propriedades DataSource e Item são utilizadas para identificar o registo a editar.The DataSource and Item properties are used to identify the record to edit.
  • Cada cartão de entrada tem uma propriedade Default, que normalmente é definida para o campo do registo ThisItem do formulário.Each input card has a Default property, which is usually set to the field of the form's ThisItem record. Em seguida, os controlos no cartão de entrada recebem os respetivos valores de entrada de Default.The controls within the input card will then take their input values from Default. Normalmente, não é necessário modificar esta situação.Normally you do not need to modify this.
  • Cada cartão de entrada expõe uma propriedade Update.Each input card exposes an Update property. Esta propriedade mapeia a entrada do utilizador para um campo específico do registo para efetuar um write back para a origem de dados.This property maps the user's input to a specific field of the record for writing back to the data source. Normalmente, não é necessário modificar esta situação.Normally you do not need to modify this.
  • Um botão ou um controlo de imagem no ecrã permite ao utilizador guardar as alterações ao registo.A button or an image control on the screen enables the user to save changes to the record. A fórmula OnSelect do controlo chama a função SubmitForm para fazer este trabalho.The OnSelect formula of the control calls the SubmitForm function to do this work. SubmitForm lê todas as propriedades Update dos cartões e utiliza-as para efetuar um write back para a origem de dados.SubmitForm reads all the Update properties of the cards and uses this to write back to the data source.
  • Por vezes, ocorrerão problemas.Sometimes there will be issues. Uma ligação de rede pode estar inativa ou uma verificação de validação é executada pelo serviço da qual a aplicação não tem conhecimento.A network connection may be down, or a validation check is made by the service that the app didn't know about. As propriedades Error e ErrorKind do controlo de formulário disponibilizam estas informações, para que possa apresentá-las ao utilizador.The Error and ErrorKind properties of the form control makes this information available, so you can display it to the user.

Para ter um controlo mais otimizado sobre o processo, também pode utilizar a função Patch e Errors.For more fine grained control over the process, you can also use the Patch and Errors function. O controlo Editar formulário expõe uma propriedade Updates, para que o utilizador possa ler os valores dos campos no formulário.The Edit form control exposes an Updates property so that you can read the values of the fields within the form. Também pode utilizar esta propriedade para chamar um conector personalizado numa ligação, ignorando completamente as funções Patch e SubmitForm.You can also use this property to call a custom connector on a connection, completely bypassing the Patch and SubmitForm functions.

ValidaçãoValidation

Antes de fazer uma alteração a um registo, a aplicação deve fazer o possível por garantir que a alteração é aceitável.Before making a change to a record, the app should do what it can to make sure the change will be acceptable. Existem duas razões para tal:There are two reasons for this:

  • Comentários imediatos para o utilizador.Immediate feedback to the user. A melhor altura para corrigir um problema é exatamente quando acontece, quando ainda está fresco na mente do utilizador.The best time to fix a problem is right when it happens, when it is fresh in the user's mind. Literalmente, com cada toque ou batimento de tecla, pode aparecer texto a vermelho que identifica um problema na sua entrada.Literally with each touch or keystroke, red text can appear that identifies an issue with their entry.
  • Menos tráfego de rede e menor latência de utilizador.Less network traffic and less user latency. Mais problemas detetados na aplicação significa menos conversações pela rede para detetar e resolver problemas.More issues detected in the app means fewer conversations over the network to detect and resolve issues. Cada conversação demora tempo durante o qual o utilizador terá de aguardar antes de poder avançar.Each conversation takes time during which the user must wait before they can move on.

O PowerApps oferece duas ferramentas para validação:PowerApps offers two tools for validation:

  • A origem de dados pode fornecer informações sobre o que é e não é válido.The data source can provide information about what is and isn't valid. Por exemplo, os números podem ter valores mínimos e máximos e pode ser necessário uma ou mais entradas.For example, numbers can have minimum and maximum values, and one or more entries can be required. Pode aceder a estas informações com a função DataSourceInfo.You can access this information with the DataSourceInfo function.
  • A função Validar utiliza estas mesmas informações para verificar o valor de uma única coluna ou de um registo completo.The Validate function uses this same information to check the value of a single column or of an entire record.

Processamento de errosError handling

Excelente, validou o seu registo.Great, you've validated your record. Chegou a hora de atualizar esse registo com a função Patch!Time to update that record with Patch!

No entanto, infelizmente, ainda pode ocorrer um problema.But, alas, there may still be a problem. A rede está inativa, a validação no serviço falhou ou o utilizador não tem as permissões corretas, apenas para citar alguns dos possíveis erros com que a aplicação se pode deparar.The network is down, validation at the service failed, or the user doesn't have the right permissions, just to name a few of the possible errors your app may encounter. A aplicação tem de responder adequadamente a situações de erro, fornecendo comentários ao utilizador e uma forma de corrigir a situação.It needs to respond appropriately to error situations, providing feedback to the user and a means for them to make it right.

Quando ocorrem erros relacionados com uma origem de dados, a aplicação regista automaticamente a informação de erro e disponibiliza-a através da função Errors.When errors occur with a data source, your app automatically records the error information and makes it available through the Errors function. Os erros são associados aos registos que tiveram os problemas.Errors are associated with the records that had the problems. Se o problema for algo que o utilizador possa corrigir, tal como um problema de validação, o utilizador pode voltar a submeter o registo e os erros serão limpos.If the problem is something the user can fix, such as a validation problem, they can resubmit the record, and the errors will be cleared.

Se ocorrer um erro quando um registo for criado com a função Patch ou Collect, não existe qualquer registo ao qual associar erros.If an error occurs when a record is created with Patch or Collect, there is no record to associate any errors with. Neste caso, a função Patch devolverá em branco e poderá ser utilizado como o argumento do registo para Errors.In this case, blank will be returned by Patch and can be used as the record argument to Errors. Os erros de criação são limpos com a operação seguinte.Creation errors are cleared with the next operation.

A função Errors devolve uma tabela de informações de erro.The Errors function returns a table of error information. Estas informações podem incluir as informações de coluna, caso o erro possa ser atribuído a uma coluna específica.This information can include the column information, if the error can be attributed to a particular column. Utilize mensagens de erro ao nível da coluna em controlos de etiqueta que estão próximos do local onde a coluna se encontra no ecrã de edição.Use column-level error messages in label controls that are close to where the column is located on the edit screen. Utilize mensagens de erro ao nível do registo onde a Coluna na tabela de erros está em branco, numa localização próxima do botão Guardar para o registo completo.Use record-level error messages where the Column in the error table is blank, in a location close to the Save button for the entire record.

Trabalhar com origens de dados de grande dimensãoWorking with large data sources

Quando está a criar relatórios a partir de origens de dados de grande dimensão (talvez milhões de registos), quer minimizar o tráfego de rede.When you are creating reports from large data sources (perhaps millions of records), you want to minimize network traffic. Digamos que pretende apresentar um relatório sobre todos os Clientes que têm o StatusCode "Platinum" na cidade de Nova Iorque.Let's say you want to report on all Customers having a StatusCode of "Platinum" in New York City. E que a tabela de Clientes contém milhões de registos.And that your Customers table contains millions of records.

Não quer introduzir esses milhões de Clientes na sua aplicação e, em seguida, escolher aqueles que quer.You do not want to bring those millions of Customers into your app, and then choose the ones you want. O que quer é que essa escolha aconteça dentro do serviço cloud onde a tabela está armazenada e enviar apenas os registos que escolheu pela rede.What you want is to have that choosing happen inside the cloud service where your table is stored, and only send the chosen records over the network.

Muitas das funções, mas não todas, que pode utilizar para escolher registos podem ser delegadas, o que significa que são executadas dentro do serviço cloud.Many, but not all, functions that you can use to choose records can be delegated, which means that they are run inside the cloud service. Para saber como fazer isto, pode ler o artigo sobre a Delegação.You can learn how to do this by reading about Delegation.

ColeçõesCollections

As coleções são um tipo especial de origem de dados.Collections are a special kind of data source. São locais em relação à aplicação e não são apoiadas por uma ligação a um serviço na cloud, pelo que as informações não podem ser partilhadas entre dispositivos para o mesmo utilizador ou entre utilizadores.They're local to the app and not backed by a connection to a service in the cloud, so the information can not be shared across devices for the same user or between users. Funcionam como qualquer outra origem de dados, com algumas exceções:They operate like any other data source, with a few exceptions:

  • As coleções podem ser criadas dinamicamente com a função Collect.Collections can be created dynamically with the Collect function. Não precisam de ser estabelecidas com antecedência, tal como acontece com as origens de dados baseadas em ligação.They don't need to be established ahead of time, as connection-based data sources do.
  • As colunas de uma coleção podem ser modificadas em qualquer altura com a função Collect.The columns of a collection can be modified at any time using the Collect function.
  • As coleções permitem registos duplicados.Collections allow duplicate records. Pode existir mais de uma cópia do mesmo registo numa coleção.More than one copy of the same record can exist in a collection. As funções, como Remover, funcionarão na primeira correspondência que encontrarem, a menos que o argumento Tudo seja fornecido.Functions such as Remove will operate on the first match they find, unless the All argument is supplied.
  • Pode utilizar as funções SaveData e LoadData para guardar e recarregar uma cópia da coleção.You can use the SaveData and LoadData functions to save and reload a copy of the collection. As informações são armazenadas numa localização privada à qual outros utilizadores, aplicações ou dispositivos não podem aceder.The information is stored in a private location that other users, apps, or devices can't access.
  • Pode utilizar os controlos Exportar e Importar para guardar e recarregar uma cópia da coleção para um ficheiro com o qual o utilizador pode interagir.You can use the Export and Import controls to save and reload a copy of the collection to a file that the user can interact with.

Para obter mais informações sobre como trabalhar com uma coleção como uma origem de dados, veja criar e atualizar uma coleção.For more information on working with a collection as a data source, see create and update a collection.

As coleções são frequentemente utilizadas para armazenar o estado global para a aplicação.Collections are commonly used to hold global state for the app. Veja Trabalhar com variáveis para obter as opções disponíveis para gerir o estado.See working with variables for the options available for managing state.