Ler em inglês

Compartilhar via


Manutenção de um ALM íntegro de formulário do aplicativo baseado em modelo

Este artigo fornece informações sobre os vários cenários sobre como implementar e praticar um ALM (Gerenciamento do ciclo de vida) do aplicativo para personalizar formulários nas soluções de aplicativo baseado em modelo.

As seções a seguir descrevem como a mesclagem de formulários funciona e como manter as personalizações. Os cenários de desenvolvimento básicos com recomendações a fim de manter um ALM bem-sucedido para um formulário de aplicativo baseado em modelo são abordados em detalhes em cada seção a seguir. Cada cenário inclui etapas a serem seguidas que podem ajudar a implementar um processo de ALM adequado durante a atualização da solução ou do aplicativo baseado em modelo.

Criação e manutenção de um novo formulário usando várias soluções gerenciadas

Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.

  1. Crie um novo formulário chamado FormA no ambiente de desenvolvimento e realize personalizações no formulário.
  2. Crie uma nova solução (chamada Solução A no diagrama abaixo) no ambiente de desenvolvimento, que será uma solução não gerenciada, e adicione o novo formulário. Exporte a solução como gerenciada. Esta etapa exporta um FormXml completo para o formulário.
  3. No ambiente de teste, importe a solução gerenciada da etapa 2, que cria FormA no ambiente de teste. No diagrama abaixo, FormA é criado no ambiente de teste, e a interface do usuário do formulário mostra Field1 e Field2 adicionados pela Solução A ao formulário.
  4. Ao personalizar ainda mais o formulário criado na etapa 1 por meio de um novo ambiente de desenvolvimento (origem), importe a Solução A gerenciada criada na etapa 2, certifique-se de que a instância de desenvolvimento utilizada tenha FormA em um estado gerenciado. Conforme mostrado no diagrama abaixo, a Solução A gerenciada é importada no ambiente de desenvolvimento, e o formulário é personalizado criando-se personalizações ativas. Dessa forma, FormA pode acabar sendo adicionado a uma nova solução não gerenciada (Solução B no diagrama) e exportado como uma solução gerenciada pelo ambiente de desenvolvimento. Esta etapa exporta um FormXml diferencial (comparado) para o formulário.
  5. No ambiente de teste, importe a solução gerenciada (Solução B) da etapa 4. Conforme mostrado no diagrama abaixo, Solução B está adicionando um novo Field3 a FormA e removendo Field2, que foi adicionado pela Solução A. A interface do usuário do formulário no ambiente de teste agora mostra Field3 e Field1 no formulário, mas não Field2 após a mesclagem.

Cenário 1 do diagrama de ALM.

Exemplo não íntegro para este cenário

Conforme visto no diagrama abaixo, não é uma prática de ALM íntegra criar várias soluções gerenciadas com base no ambiente de desenvolvimento no qual a solução base (Solução A) esteja em um estado não gerenciado. Isso acontece porque, quando você cria outra solução não gerenciada (Solução B) para o formulário não gerenciado, o FormXml é exportado como um FormXml completo, e não um FormXml comparado, conforme mostrado no cenário válido acima. Posteriormente, alterações como a remoção de uma coluna não terão efeito.

Exemplo de um ALM de formulário não íntegro para este cenário.

Criação de um novo formulário e realização de personalizações usando patches e atualizações

Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.

  1. Crie um novo formulário chamado FormA no ambiente de desenvolvimento e realize personalizações no formulário.

  2. Crie uma solução (Solução A no diagrama abaixo), que será uma solução não gerenciada, e adicione o novo formulário. Exporte a solução como gerenciada. Esta etapa exporta um FormXml completo para o formulário.

  3. No ambiente de teste, importe a solução gerenciada da etapa 2, o que cria o formulário no ambiente de teste. No diagrama abaixo, FormA é criado no ambiente de teste, e a interface do usuário do formulário mostra Field1 e Field2 adicionados pela Solução A ao formulário.

  4. Ao personalizar ainda mais o formulário criado na Etapa 1 usando patches, use o mesmo ambiente onde a Solução A está em um estado não gerenciado e crie um patch para a solução, além de personalizar o formulário. Em seguida, exporte o patch como uma solução gerenciada. Esta etapa exporta um formXml completo para o formulário.

  5. No ambiente de teste, importe a solução gerenciada de patch da etapa 4. Conforme mostrado no diagrama abaixo, o patch da Solução A está adicionando um novo Field3 a FormA e removendo Field2, que foi adicionado pela Solução A.

    Observação

    Os patches com formXml completo são sempre comparados à camada base da qual o patch foi criado e ignoram quaisquer patches intermediários entre a base e o patch atual. Como resultado, Field2 é removido uma vez que ele existe na camada base Solution A e a remoção é detectada. Por outro lado, Field3 é adicionado por essa solução de patch e não pode ser removido por patches subsequentes. Assim, os campos adicionados por meio de soluções de patch são de natureza aditiva.

  6. Ao personalizar ainda mais o formulário criado na Etapa 1 usando atualizações, use o mesmo ambiente onde a Solução A está em um estado não gerenciado e clone a Solução A para criar a solução de atualização e personalizar o formulário. Em seguida, exporte a atualização Solução A como uma solução gerenciada. Esta etapa exporta um FormXml completo para o formulário.

  7. No ambiente de teste, importe a atualização da Solução A gerenciada da etapa 6. Conforme mostrado no diagrama abaixo, a atualização da Solução A está adicionando um novo Field4 a FormA e removendo Field2, que foi adicionado pela Solução A. A interface do usuário do formulário no ambiente de teste agora mostra Field1, Field3 e Field4 no formulário, mas Field2 será removido depois da mesclagem pela importação.

Cenário 2 do diagrama de ALM.

Personalização e manutenção de um formulário gerenciado existente usando várias soluções gerenciadas

Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.

  1. Edite um formulário gerenciado existente, chamado FormB neste exemplo, no ambiente de desenvolvimento e realize personalizações no formulário. Solução A é a solução gerenciada já instalada para o formulário no ambiente de desenvolvimento.
  2. Crie uma nova solução (Solução B no diagrama abaixo), que é uma solução não gerenciada, e adicione FormB. Exporte a solução como gerenciada. Esta etapa exporta um FormXml diferencial (comparado) para o formulário.
  3. No ambiente de teste, importe a solução gerenciada da etapa 2, o que cria uma segunda camada de solução para o formulário. No diagrama abaixo, FormB obtém as alterações mescladas da Solução A e da Solução B no ambiente de teste, e a interface do usuário do formulário mostra Field1 e Field3 no formulário, mas não Field2, que foi removido pela Solução B.
  4. Ao personalizar ainda mais o formulário personalizado na etapa 1 por meio de novas soluções gerenciadas, utilize um novo ambiente de desenvolvimento com FormB em um estado gerenciado. Conforme mostrado no diagrama abaixo, as soluções gerenciadas Solução A e Solução B são importadas no novo ambiente de desenvolvimento. FormB é personalizado criando-se personalizações ativas, que podem acabar sendo adicionadas a uma nova solução (Solução C no diagrama) e exportadas como um solução gerenciada.
  5. No ambiente de teste, importe a solução gerenciada Solução C da etapa 4. Conforme mostrado no diagrama abaixo, a Solução C está adicionando um novo Field4 a FormB e removendo Field3, que foi adicionado pela Solução B. A interface do usuário do formulário no ambiente de teste agora mostra Field1 e Field4 no formulário, mas não Field2 e Field3.

Cenário 3 do diagrama de ALM.

Exemplo não íntegro para este cenário

Conforme mostrado no diagrama abaixo, não é uma prática de ALM íntegra criar várias soluções gerenciadas com base no ambiente de desenvolvimento que contenha outra solução não gerenciada criada para o mesmo formulário. A Solução B está em um estado não gerenciado. Quando você cria outra solução não gerenciada (Solução C) para FormB, o FormXml é exportado como um FormXml comparado, conforme mostrado na etapa 4 do cenário acima. Porém, FormB também contém alterações da Solução B, que serão substituídas pelas novas alterações.

Por exemplo, conforme visto no diagrama abaixo, Field3 é adicionado a FormB na Solução B. Porém, agora, quando você criar uma nova Solução C nesse ambiente, com a Solução B em estado não gerenciado e remover Field3, Field3 também será removido do ambiente de desenvolvimento. Field3 não será rastreado no FormXml comparado quando a solução for exportada, porque a alteração de adição e remoção dessa coluna foi feita na mesma camada ativa. Isso significa que, quando a Solução C gerenciada for importada no ambiente de teste, o formulário continuará renderizando o Field3 porque o FormXml comparado jamais o registra como removido (como o que foi removido na etapa 5 no cenário de ALM de formulário íntegro acima). A realização das personalizações de formulário dessa maneira deixará o ambiente de desenvolvimento inconsistente com o ambiente de teste.

Outro exemplo de um ALM de formulário não íntegro para este cenário.

Personalização e manutenção de um formulário gerenciado existente usando patches e atualizações

Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.

  1. Personalize um formulário gerenciado existente, chamado FormB neste exemplo, no ambiente de desenvolvimento e realize personalizações no formulário. Solução A é a solução gerenciada já instalada para o formulário no ambiente de desenvolvimento.

  2. Crie uma solução (Solução B), que será uma solução não gerenciada, e adicione FormB. Exporte a solução como gerenciada. Esta etapa exporta um FormXml comparado para o formulário.

  3. No ambiente de teste, importe a Solução B gerenciada da etapa 2, o que cria uma segunda camada de solução para o formulário. No diagrama abaixo, FormB obtém as alterações mescladas da Solução A e da Solução B no ambiente de teste. Além disso, a interface do usuário de FormB mostra Field1 e Field3 no formulário, mas não no Field2, que foi removido pela Solução B.

  4. Ao personalizar ainda mais o formulário que personalizou na Etapa 1 usando uma solução de patch, você pode usar o mesmo ambiente de desenvolvimento da etapa 1, na qual a Solução B existe em um estado não gerenciado. Conforme mostrado no diagrama abaixo, a Solução A está em um estado gerenciado, e a Solução B está em um estado não gerenciado. O formulário é ainda mais personalizado, e você cria um patch para a Solução B adicionando o formulário a essa solução e a exportando como uma solução de patch gerenciada. Esta etapa exporta um FormXml comparado.

  5. No ambiente de teste, importe o patch gerenciado Solução B da etapa 4. Conforme mostrado no diagrama abaixo, o Patch da Solução B está adicionando um novo Field4 a FormB e removendo Field3, que foi adicionado pela Solução B.

    Observação

    Os patches são aditivos por natureza e não conseguem remover componentes, como colunas, do formulário. Dessa forma, Field3 não será removido do formulário. A interface do usuário do formulário no ambiente de teste agora mostra Field1, Field3 e Field4 no formulário, mas não Field2.

  6. Ao personalizar ainda mais o formulário criado na Etapa 1 usando atualizações, use o mesmo ambiente onde a Solução B está em um estado não gerenciado e clone a Solução B para criar a solução de atualização e personalizar FormB. Exporte a atualização como uma solução gerenciada. Esta etapa exporta um FormXml comparado para o formulário.

  7. No ambiente de teste, importe a solução de atualização Solução B gerenciada da etapa 6. Conforme mostrado no diagrama abaixo, a Atualização da Solução B está adicionando um novo Field5 a FormB e removendo Field3, que foi adicionado pela Solução B. A interface do usuário do formulário no ambiente de teste agora mostra Field1, Field4 e Field5 no formulário, mas Field2 e Field3 estão removidos.

Edite um formulário gerenciado existente usando um diagrama de patches e atualizações.

Manutenção de soluções não gerenciadas e personalizações para um novo formulário em vários ambientes de desenvolvimento

Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.

  1. Em Ambiente de Desenvolvimento 1, crie um novo FormA e realize personalizações no formulário.
  2. Crie uma solução (Solução A no diagrama abaixo), que será uma solução não gerenciada, e adicione o novo formulário. Exporte a solução como não gerenciada. Esta etapa exporta um FormXml completo para o formulário.
  3. Em Ambiente de Desenvolvimento 2, importe a solução não gerenciada da etapa 2, que cria o formulário em Ambiente de Desenvolvimento 2. No diagrama abaixo, FormA é criado, e a interface do usuário do formulário mostra Field1 e Field2 adicionados pela Solução A ao formulário.
  4. Você personaliza ainda mais o formulário em Ambiente de Desenvolvimento 2 fazendo personalizações ativas no ambiente, como a adição de uma nova coluna chamada Field3. FormA agora mostra Field1, Field2 e Field3.
  5. No Ambiente de Desenvolvimento 1, você personaliza ainda mais o formulário adicionando Field4. A interface do usuário do formulário no Ambiente de Desenvolvimento 1 agora mostra Field1, Field2 e Field4.
  6. Exporte a Solução A não gerenciada com as alterações feitas na etapa 5. Esta etapa exporta um FormXml completo para o formulário.
  7. Em Ambiente de Desenvolvimento 2, importe a Atualização da Solução A não gerenciada da etapa 6. Como a solução que você está importando contém o FormXml completo para FormA, ela substitui a personalização ativa feita em Ambiente de Desenvolvimento 1. Assim, o formulário agora mostra apenas Field1, Field2 e Field4, mas não Field3, que foi a personalização ativa adicional feita em Ambiente de Desenvolvimento 1. Esse comportamento ocorre com qualquer importação de solução não gerenciada que tenha o FormXml completo para o formulário.

Soluções não gerenciadas em vários ambientes.

Manutenção de soluções não gerenciadas e personalizações para um formulário existente em vários ambientes de desenvolvimento

Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.

  1. Em Ambiente de Desenvolvimento 1, personalize um formulário existente, chamado FormB neste exemplo. Em seguida, realize personalizações no formulário.
  2. Crie uma solução (Solução B no diagrama abaixo), que será uma solução não gerenciada, e adicione FormB. Exporte a solução como não gerenciada. Esta etapa exporta um FormXml comparado para o formulário.
  3. Em Ambiente de Desenvolvimento 2, importe a solução não gerenciada da etapa 2, o que cria uma segunda camada de solução para o formulário. A interface do usuário FormB mostrará Field1, Field2 e Field3 depois da mesclagem do formulário.
  4. Você personaliza ainda mais o formulário em Ambiente de Desenvolvimento 2 fazendo personalizações ativas no ambiente, como a adição de uma nova coluna chamada Field4. FormB agora mostra Field1, Field2, Field3 e Field4.
  5. Em Ambiente de Desenvolvimento 1, você personaliza ainda mais o formulário adicionando uma coluna chamada Field5. A interface do usuário do formulário no Ambiente de Desenvolvimento 1 agora mostra Field3 e Field5.
  6. Exporte a Solução B não gerenciada com as alterações feitas na etapa 5. Esta etapa exporta um FormXml comparado para o formulário.
  7. Em Ambiente de Desenvolvimento 2, importe a Atualização da Solução B não gerenciada da etapa 6. Como a solução que você está importando contém o FormXml comparado para FormB, ela vai mesclar a personalização ativa feita em Ambiente de Desenvolvimento 1. Assim, o formulário agora mostra Field1, Field2, Field3, Field4 e Field5. Esse comportamento ocorre para qualquer importação de solução não gerenciada que tenha o FormXml comparado para o formulário.
  8. Caso a mesclagem do formulário na etapa 7 não seja a desejada, mesmo que você esteja importando um FormXml comparado com a solução não gerenciada e queira ser capaz de substituir as personalizações ativas feitas em Ambiente de Desenvolvimento 2, remova a camada ativa para FormB. Mais informações: Remova uma camada não gerenciada.
  9. Exporte a Solução B não gerenciada com as alterações feitas na etapa 5. Esta etapa exporta um FormXml comparado para o formulário.
  10. Em Ambiente de Desenvolvimento 2, importe a Atualização da Solução B não gerenciada da etapa 9. Como não há camada ativa para o formulário em Ambiente de Desenvolvimento 2, (consulte a etapa 8), todas as alterações feitas na Solução B não gerenciada são importadas, mesmo que você esteja importando o FormXml comparado para FormB. Assim, o formulário agora só mostra Field1, Field2, Field3 e Field5. Esse comportamento ocorre para qualquer importação de solução não gerenciada que tenha o FormXml comparado para o formulário. Esse é o mesmo resultado da etapa 7 no cenário Manutenção de soluções não gerenciadas e personalizações para um formulário existente em vários ambientes de desenvolvimento.

Diagrama do gerenciamento do ciclo de vida do aplicativo do formulário do Cenário 6.

XML do formulário completo e diferencial

Cada pacote de solução exportado inclui um arquivo customizations.xml. Sempre que um formulário é incluído em uma solução, a definição de formulário relacionada está dentro das seções FormXml do arquivo customizations.xml. FormXml pode ser completo ou diferencial (comparado).

FormXml completo

O FormXml que você obtém ao exportar uma solução para um formulário em um estado não gerenciado é chamado de FormXml completo. Completo significa que ele contém a definição do formulário inteiro. Quando você criar e exportar um novo formulário, o formulário sempre será um FormXml completo porque o formulário no ambiente do qual está exportando está em um estado não gerenciado e também está em um estado de criação. Se você exportar mais alguma solução desse mesmo ambiente, ela também incluirá um FormXml completo. Como o atributo solutionaction indica um FormXml diferente, o FormXml completo no arquivo customization.xml na solução que você exportou não conterá nenhum atributo solutionaction.

FormXml diferencial (comparado)

O FormXml que você obtém ao exportar uma solução para um formulário em um estado gerenciado é chamado de FormXml diferencial ou comparado. Comparado significa que o FormXml só contém as alterações feitas nas personalizações ativas nesse ambiente, e não a definição do formulário inteiro. Quando você personalizar e exportar um formulário gerenciado existente, o formulário sempre será um FormXml comparado porque só conterá as alterações ativas feitas nele. O FormXml comparado no arquivo customization.xml na solução exportada conterá atributos solutionaction que definem quais são as alterações, como Adicionado, Removido, Modificado.

O FormXml comparado garante que a solução só vai expressar as alterações das quais o aplicativo precisa e será menos afetada por alterações feitas em outras camadas. O FormXml comparado também deixa a solução menos pesada e ajuda a importar mais rapidamente.

Consulte também

Recomendações para um ALM de formulário íntegro