Cenário: duplicar uma linha

Concluído

Um dos requisitos comuns é permitir que um usuário copie ou clone uma linha da tabela ou um conjunto de linhas de tabela selecionadas. Por exemplo, em um aplicativo de Gerenciamento de Projetos, um usuário pode desejar copiar um projeto anterior para iniciar um novo projeto. A ideia é preservar a linha de projeto existente enquanto economiza tempo criando a nova linha de projeto.

Para isso, adicione um novo botão da barra de comandos à grade principal ou à barra de comandos do formulário principal. Você pode controlar a visibilidade do botão usando lógica simples, como mostrar o botão se uma linha na grade estiver selecionada. Você também poderá mostrar o botão se a linha de dados se qualificar usando a lógica do Power Fx. Por exemplo, você poderá permitir que o botão seja mostrado apenas se o projeto criado no valor da coluna tiver menos de um ano. Na lógica da ação, você cria a nova linha selecionando somente as colunas da linha de origem que deseja copiar. Você pode usar funções do Power Fx para aperfeiçoar a nova linha. Por exemplo, calcule uma nova data final do projeto com base na data atual.

No vídeo a seguir, veremos a implementação de um botão de barra de comandos para duplicar uma linha.

Observação

Você pode aumentar a resolução de vídeo selecionando os três pontos, Qualidade e selecionando uma taxa de bits mais alta.

Se você implementar o botão de barra de comandos por meio da grade principal ou de uma das outras exibições em que um usuário possa selecionar várias linhas, haverá algumas alterações. Primeiro, você não precisará verificar Self.Selected.State na fórmula de visibilidade porque somente as linhas existentes estarão disponíveis. Você poderá verificar e mostrar apenas o botão se pelo menos uma linha estiver selecionada usando a seguinte fórmula de visibilidade:

If(CountRows(Self.Selected.AllItems)>0,true,false)

Observe o uso de Self.Selected.AllItems, em vez de Self.Selected.Item, que você usará somente quando uma única linha puder ficar ativa. Self.Selected.AllItems é uma tabela dos registros selecionados no momento.

A lógica do Power Fx para copiar as linhas também é diferente, pois ela precisa usar a função ForAll para copiar todas as linhas da tabela.

ForAll(Self.Selected.AllItems,
  Patch(Projects,Defaults(Projects),
    {
      Name:Concatenate("Cloned ", ThisRecord.Name),
      Description:ThisRecord.Description,
      Budget:ThisRecord.Budget*1.10,
      'Start Date':DateAdd(Today(),1,Days),
      'End Date':DateAdd(Today(),30,Days)
    }
  )
)

Depois que a lógica do botão for executada, a grade será atualizada e mostrará os itens recém-criados se eles se qualificarem para os critérios de exibição. Diferentemente da cópia do registro único, navegar até a linha recém-criada não é prático. Você pode usar a função notify para exibir quantas linhas foram copiadas adicionando o seguinte após a função ForAll:

Notify("Copied " & CountRows(Self.Selected.AllItems) & " rows")

Garanta que não seja adicionado dentro de ForAll para evitar receber uma mensagem para cada linha copiada.

Além das duas opções que discutimos, uma opção mais avançada é usar uma Página Personalizada do Power Apps como uma caixa de diálogo. Quando você usa essa abordagem, o botão barra de comandos exibe uma Página Personalizada e passa a linha para copiar como um parâmetro para a página. A página pode interagir com o usuário e permitir uma experiência mais personalizada para a especificação dos valores que foram copiados. A página personalizada conterá a lógica para concluir a cópia. A imagem a seguir mostra um exemplo de uma página personalizada que permite que o usuário forneça o nome do novo projeto e indique se deseja copiar as atividades antigas do projeto:

O uso de uma barra de comandos para permitir que os usuários copiem linhas facilita a realização da cópia com eficiência pelos usuários. Usando a lógica do Power Fx, você pode implementar a lógica para determinar quando é permitido fazer uma cópia e quais dados devem ser copiados.