Causa e solução do erro <SLMSPAN> ao eliminar uma global
Rubrica de FAQ da InterSystems
Se você tentar eliminar uma global que está mapeada no nível de subscrito a partir do nó raiz, você receberá um erro e ela não será excluída. Isso ocorre porque o comando kill para globais mapeadas no nível de subscrito não pode ser usado atravessando mapeamentos.
// Suppose subscript-mapped globals exist in different databases, as shown below:^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B
// Trying to kill from the top level will result in a <SLMSPAN> error.
NAMESPACE>Kill^TEST
<SLMSPAN> <- This error is output.Para excluir apenas a global no namespace (banco de dados) atual, use o seguinte:
NAMESPACE>Kill ^["^^."]TESTGlobais mapeadas no nível de subscrito devem ser movidas para o banco de dados e eliminadas diretamente.
Para alternar para o banco de dados, use o seguinte:
zn"^^c:\intersystems\iris\mgr\user"
or
set$namespace="^^c:\intersystems\iris\mgr\user"Ao importar globais com $System.OBJ.Load, o comportamento padrão é eliminar as globais antes de importá-las.
Como resultado, se as globais de destino estiverem mapeadas no nível de subscrito, ocorre um erro <SLMSPAN>. Nesse caso, especifique o parâmetro /mergeglobal como segundo argumento de $System.OBJ.Load, conforme abaixo, para evitar a eliminação prévia:
Set sc = $System.OBJ.Load(path," /mergeglobal",.errors)
[Referências]
Mapped globals cannot be exported.
How do I compile mapped classes and routines?