Mudanças na Atualização de Cubos Dependentes no IRIS BI
A partir do InterSystems IRIS 2025.1, a forma como os cubos dependentes são tratados em construções (builds) e sincronizações de cubos foi alterada.
Essa mudança pode exigir a modificação de métodos personalizados de construção/sincronização. Se você estiver usando o Gerenciador de Cubos (Cube Manager), essas alterações já foram consideradas e tratadas, o que significa que nenhuma ação é necessária.
Antes dessa mudança, era necessário que os cubos fossem construídos e sincronizados na ordem correta, levando em conta quaisquer relacionamentos ou dependências entre eles. Com essa alteração, os cubos dependentes são atualizados automaticamente conforme necessário ao utilizar as APIs %BuildCube ou %SynchronizeCube.
O sintoma negativo que você pode notar, caso possua um método de construção (build) personalizado, é que seus cubos dependentes podem ser construídos várias vezes. Isso não deve causar erros, mas pode significar que suas construções demorem consideravelmente mais, dependendo de quantos cubos dependentes você possui.
A maior consideração ao modificar seus métodos personalizados de construção/sincronização é que o primeiro parâmetro de %BuildCube e %SynchronizeCube agora aceita uma lista de nomes de cubos. As dependências nesta lista serão resolvidas para que não sejam construídas múltiplas vezes.
Exemplo usando a lógica antiga:
do ##class(%DeepSee.Utils).%BuildCube("relatedcubes/cities")
do ##class(%DeepSee.Utils).%BuildCube("relatedcubes/doctors")
do ##class(%DeepSee.Utils).%BuildCube("relatedcubes/patients")
do ##class(%DeepSee.Utils).%BuildCube("relatedcubes/cityrainfall")
do ##class(%DeepSee.Utils).%BuildCube("relatedcubes/allergies")
Chamar as construções de cubos desta forma disparará construções dependentes múltiplas vezes. Isso resulta na execução das seguintes construções de cubos:
Building cube [RELATEDCUBES/CITIES]
Building cube [RELATEDCUBES/CITYRAINFALL]
Building cube [RELATEDCUBES/DOCTORS]
Building cube [RELATEDCUBES/PATIENTS]
Building cube [RELATEDCUBES/ALLERGIES]
Building cube [RELATEDCUBES/DOCTORS]
Building cube [RELATEDCUBES/PATIENTS]
Building cube [RELATEDCUBES/ALLERGIES]
Building cube [RELATEDCUBES/PATIENTS]
Building cube [RELATEDCUBES/ALLERGIES]
Building cube [RELATEDCUBES/CITYRAINFALL]
Building cube [RELATEDCUBES/ALLERGIES]
Exemplo usando a lógica atualizada:
do ##class(%DeepSee.Utils).%BuildCube($LB("relatedcubes/cities","relatedcubes/doctors","relatedcubes/patients","relatedcubes/cityrainfall","relatedcubes/allergies"))
Isso simplesmente construirá os cubos em uma ordem que respeita as dependências:
Building cube [RELATEDCUBES/CITIES]
Building cube [RELATEDCUBES/CITYRAINFALL]
Building cube [RELATEDCUBES/DOCTORS]
Building cube [RELATEDCUBES/PATIENTS]
Building cube [RELATEDCUBES/ALLERGIES]
A página de "Upgrade Considerations" da documentação faz referência a esta mudança de compatibilidade: