Escrito por

Artigo Evandro Wendt · Abr. 13 3m read

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:

 https://docs.intersystems.com/iris20251/csp/docbook/DocBook.UI.Page.cls?KEY=GUPE_upgrade#GUPE_upgrade_buildcube