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.
Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.
- Crie um novo formulário chamado FormA no ambiente de desenvolvimento e realize personalizações no formulário.
- 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.
- 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.
- 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.
- 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.
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.
Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.
Crie um novo formulário chamado FormA no ambiente de desenvolvimento e realize personalizações no formulário.
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.
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.
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.
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.
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.
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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
Siga estas etapas para implementar um ALM de formulários íntegro para este cenário.
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.
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.
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.
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.
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.
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.
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.
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.
- Em Ambiente de Desenvolvimento 1, crie um novo FormA e realize personalizações no formulário.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
- Em Ambiente de Desenvolvimento 1, personalize um formulário existente, chamado FormB neste exemplo. Em seguida, realize personalizações no formulário.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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).
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
.
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.