Visão geral da remoção de dependências
Os componentes da solução geralmente dependem de outros componentes da solução. Você não pode excluir qualquer componente da solução que tenha dependências em qualquer outro componente da solução. As dependências são registros criados automaticamente pela estrutura de soluções para evitar que os componentes necessários sejam excluídos enquanto um ou mais componentes dependentes ainda incluem referências a eles. Um exemplo de dependência é o seguinte: considerando que um campo é necessário para um formulário funcionar, se você tentar executar uma ação que resulte na exclusão desse campo, o formulário deixará de funcionar.
Nota
Neste artigo, excluir significa que o componente foi completamente removido do sistema.
Neste artigo, vamos discutir como lidar com essas dependências e as estratégias que você pode usar para remover aquelas que não são mais necessárias.
Dependências de componentes gerenciados vs. não gerenciados
Primeiro, é importante entender que as dependências evitam apenas operações que excluirão um componente necessário. As ações que podem excluir um componente são diferentes, dependendo se ele é gerenciado ou não gerenciado.
Componentes não gerenciados
Estes componentes são representados por uma única camada na solução ativa. Qualquer operação Excluir nesse tipo de componente resulta na remoção completa dele.
Componentes gerenciados
A exclusão de componentes gerenciados depende de vários fatores: o número de camadas de solução, a posição relativa da camada que está sendo desinstalada e os fornecedores dos componentes. Por exemplo, quando um componente for excluído, considere os seguintes cenários e qual será o comportamento esperado ao desinstalar as várias camadas.
Cenários de exemplo
Os cenários de exemplo a seguir ilustram o que acontece com as camadas de solução quando as soluções são desinstaladas.
Cenário 1: Desinstalar uma única camada de solução
A desinstalação da Solução 1 causa a exclusão de um componente porque ela é a única camada dele.
Cenário 2: Desinstalar camadas de solução de fornecedores diferentes
- A desinstalação da Solução 2 não causa a exclusão de um componente. Somente essa camada será removida.
- A desinstalação da Solução 1 causa a exclusão de um componente porque a ação acontece na camada base. Na verdade, a Solução 1 não pode ser desinstalada nesse cenário, porque uma solução de um fornecedor diferente estende o componente.
Cenário 3: Desinstalar várias camadas de solução de fornecedores diferentes
- A desinstalação da Solução 3 não causa a exclusão de um componente. Somente essa camada será removida.
- A desinstalação da Solução 2 não causa a exclusão de um componente. Somente essa camada será removida.
- A desinstalação da Solução 1 não causa a exclusão de um componente, pois, neste caso, há outra solução do mesmo fornecedor (Fornecedor A = Fornecedor C). A plataforma remove a camada da Solução 1 e a substitui pela camada da Solução 3.
Cenário 4: Desinstalar camadas de solução em uma personalização não gerenciada
- A desinstalação da camada Ativa (não gerenciada) não causa a exclusão de um componente. Somente essa camada será removida. Observe que não é possível desinstalar a solução Ativa, mas você pode remover componentes usando o recurso Remover Personalização Ativa.
- A desinstalação da Solução 1 causa a exclusão de um componente. A ação acontece na camada base. Diferentemente do cenário 2, você pode desinstalar a Solução 1. A solução Ativa não é considerada uma extensão e ambas as camadas serão removidas.
Mostrar página de dependências
O comando Mostrar dependências lista as dependências da solução ou do componente da solução selecionado. Ela pode ser invocada:
- Selecionando Mostrar dependências na página da solução.
- Selecionando Avançado>Mostrar dependências em uma solução quando um componente da solução é selecionado.
- Tentando desinstalar uma solução, o que fará com que a plataforma detecte a existência de dependências.
Na página Dependências, você pode abrir, remover ou excluir o componente. Mais informações: Exibir dependências de um componente
Diagnosticando dependências
Vamos considerar o cenário a seguir. A organização abaixo tem duas soluções: Solução - Fluxo de Trabalho e Solução - Entidade Personalizada.
O proprietário da organização decidiu que não exigia mais a Solução - Entidade Personalizada, tentou excluí-la e a seguinte página foi exibida:
Sem entrar em detalhes, podemos concluir que a desinstalação da solução está tentando excluir uma entidade chamada Entidade Personalizada e três campos,Entidade Personalizada, Nome e Campo Numérico, e que todos os quatro componentes têm dependências.
Nota
A desinstalação da solução pode potencialmente excluir mais componentes, mas como eles não têm dependências, não aparecerão na lista.
A próxima etapa é verificar o link Camadas de Solução (coluna mais à direita) de cada dependência. Isso ajudará você a decidir o que fazer para remover a dependência.
A figura a seguir mostra detalhes da dependência entre a Entidade (Entidade Personalizada) e o Processo (Fluxo de Trabalho de Teste).
Com base nos dados exibidos, você pode ver que o componente dependente pertence a uma solução chamada SolutionWorkflow. Para remover essa dependência, podemos:
- Atualizar a definição do fluxo de trabalho em SolutionWorkflow removendo quaisquer referências à entidade ou seus subcomponentes. Em seguida, Atualizar ou Fazer upgrade da solução.
- Desinstalar a solução SolutionWorkflow.
- Remover o fluxo de trabalho de uma nova versão da solução SolutionWorkflow e Fazer upgrade.
Como qualquer componente dependente pode impedir a remoção da solução, recomendamos que você verifique todas as dependências e faça todas as alterações necessárias em uma única operação.
A figura a seguir mostra detalhes da dependência entre a Entidade (Entidade Personalizada) e um Aplicativo baseado em modelo (Meu Aplicativo).
Com base nos dados exibidos, você pode ver que o componente dependente pertence a uma solução chamada Ativa. Isso indica que a dependência foi criada importando uma solução não gerenciada ou através de uma personalização não gerenciada que foi executada por meio da interface de usuário ou API moderna.
Para remover essa dependência, você pode:
- Editar a definição do aplicativo baseado em modelo para remover qualquer referência à entidade ou seus subcomponentes. Como os aplicativos baseados em modelo oferecem suporte à publicação, você deve publicar suas alterações.
- Excluir o aplicativo baseado em modelo.
Nota
Desinstalar uma solução não gerenciada não é uma opção para remover essa dependência, porque as soluções não gerenciadas são apenas um meio de agrupar componentes.
Ações para remover uma dependência gerenciada
As dependências gerenciadas são aquelas em que o componente dependente é associado a uma solução gerenciada. Para resolver esse tipo de dependência, é necessário agir na solução em que o componente foi adicionado. Essa ação pode ser diferente dependendo do que você está tentando fazer.
Se você estiver tentando desinstalar uma solução
Siga as etapas a seguir:
- Na organização de destino, inspecione o link Camadas de Solução para encontrar a solução mais acima na lista do componente dependente.
- Na organização de origem, prepare uma nova versão dessa solução em que a solução não contenha o componente dependente ou tenha uma versão atualizada desse componente que não contenha referências ao componente necessário. Seu objetivo é remover qualquer referência aos componentes necessários na nova versão da solução.
- Exporte a nova versão da solução.
- Na organização de destino, é necessário Fazer upgrade dessa solução.
- Repita a desinstalação.
Se você estiver tentando atualizar uma solução
Neste caso, você deve confirmar que queria excluir o componente necessário (lembre-se de que as dependências são impostas apenas nos componentes que estão sendo excluídos).
Se você não queria excluir o componente, é possível corrigir a nova versão da solução adicionando-o de volta. Para isso, siga estas etapas:
- Na organização de destino, desinstale a solução preparada (a solução que termina em _Upgrade).
- Na organização de origem, adicione os componentes necessários de volta à solução.
- Exporte a nova versão.
- Repita o upgrade.
Se a exclusão for intencional, você deve remover a dependência. Siga as etapas descritas na seção anterior, "Se você estiver tentando desinstalar uma solução".
Camadas e dependências
Os componentes dependentes podem ser dispostos em camadas, portanto, talvez seja necessário alterar mais de uma solução para remover completamente uma dependência. A estrutura de dependências calcula apenas as dependências entre as camadas superiores dos componentes necessários e dependentes. Isso significa que você precisa trabalhar de cima para baixo nas soluções do componente dependente.
Considere o cenário a seguir:
Você tenta desinstalar a Solução - Entidade Personalizada e a operação é bloqueada por dependências.
Você começa a diagnosticar a dependência selecionando Camadas de Solução no atributo new_numberfield. Você vê a tela a seguir:
Como as dependências são criadas apenas entre as camadas superiores de cada componente, a primeira etapa é lidar com a dependência entre o atributo new_numberfield em SolutionCustomEntity e o fluxo de trabalho Fluxo de Trabalho de Test em SolutionWorkflow3.
Para remover a dependência, você decide desinstalar SolutionWorkflow3. Você faz isso, mas quando tenta desinstalar a solução mais uma vez, a mesma página de dependências é exibida:
No entanto, o atributo new_numberfield não está mais listado, mesmo se existisse em mais camadas.
Ações para remover uma dependência não gerenciada
Para remover dependências não gerenciadas, você precisa agir diretamente nos componentes, não nas soluções às quais eles pertencem. Por exemplo, se quiser remover as dependências entre um atributo e um formulário, você deve editá-lo no Editor de Formulários e remover o atributo do formulário. A dependência será removida depois que você selecionar Salvar e Publicar.
Observação
- O comando Mostrar dependências permite que você execute uma ação para exibir, remover a dependência, editar o componente ou excluir o componente. Mais informações: Exibir dependências de um componente
- Também é possível excluir o componente dependente. Essa ação exclui todas as dependências, junto com o componente.
Para exibir as dependências de um componente, na área Soluções abra a solução desejada, selecione as reticências verticais ao lado do componente e, depois escolha Avançado>Mostrar dependências.
A página de dependências tem duas partes distintas:
- Componentes dependentes: uma lista de componentes que dependem do campo selecionado. Em outras palavras, esses componentes terão este campo como seu componente necessário.
- Componentes necessários: uma lista de componentes que este campo requer para funcionar. Em outras palavras, esses componentes terão este campo como seu componente dependente.