Olá pessoal espero que estejam bem.
Estou com uma dúvida, lendo a documentação ainda não entendi com base em um objeto especifico como posso via API retornar todas as suas conexões e como remover seu relacionamento com um objeto pai por exemplo.
Olá pessoal espero que estejam bem.
Estou com uma dúvida, lendo a documentação ainda não entendi com base em um objeto especifico como posso via API retornar todas as suas conexões e como remover seu relacionamento com um objeto pai por exemplo.
André Vitor Oliveira on
Olá
O ponto principal é que, no ARIS, existem duas camadas diferentes:
O mesmo conceito se aplica às conexões:
Essa distinção costuma ser a principal causa de confusão ao tentar recuperar ou remover relacionamentos via API.
Obter todos os relacionamentos de um objeto
Se você possui um
ObjDefe deseja listar todas as conexões associadas a ele no repositório:var objDef = ...;var cxns = objDef.CxnList();for (var i = 0; i < cxns.length; i++) {var cxn = cxns[i];var sourceObj = cxn.SourceObjDef();var targetObj = cxn.TargetObjDef();Context.write(sourceObj.Name(g_nLoc) +" --> " +targetObj.Name(g_nLoc));}O método
CxnList()retorna as definições de conexão associadas ao objeto.Você também pode filtrar por direção:
var cxns = objDef.CxnList(Constants.EDGES_OUT);ou
var cxns = objDef.CxnList(Constants.EDGES_IN);dependendo se deseja conexões de saída ou de entrada.
Obter todos os objetos conectados
Uma abordagem comum é percorrer as conexões e identificar o objeto do outro lado do relacionamento:
var cxns = objDef.CxnList();for (var i = 0; i < cxns.length; i++) {var cxn = cxns[i];var connectedObj;if (cxn.SourceObjDef().GUID() == objDef.GUID())connectedObj = cxn.TargetObjDef();elseconnectedObj = cxn.SourceObjDef();Context.write(connectedObj.Name(g_nLoc));}Isso retorna todos os objetos ligados ao objeto selecionado por qualquer tipo de relacionamento.
Remover o relacionamento com um objeto pai
Se por "objeto pai" você quer dizer um objeto relacionado por um determinado tipo de conexão, primeiro encontre a conexão e depois exclua-a.
Exemplo:
var childObj = ...;var parentObj = ...;var cxns = childObj.CxnList();for (var i = 0; i < cxns.length; i++) {var cxn = cxns[i];if (cxn.SourceObjDef().GUID() == parentObj.GUID() &&cxn.TargetObjDef().GUID() == childObj.GUID()) {cxn.Delete(false);}}O método
Delete(false)remove a definição da conexão do repositório. Se essa conexão estiver sendo utilizada em vários modelos, todas as ocorrências associadas a ela também serão removidas. [ariscommunity.com]Remover a conexão apenas de um modelo específico
Se o objetivo for remover apenas a linha visual em um modelo, utilize a ocorrência da conexão (
CxnOcc):var cxnOccs = model.CxnOccList();for (var i = 0; i < cxnOccs.length; i++) {var cxnOcc = cxnOccs[i];cxnOcc.Remove();}ou:
var cxnOccs = objOcc.CxnOccList();for (var i = 0; i < cxnOccs.length; i++) {cxnOccs[i].Remove();}Nesse caso, apenas a ocorrência gráfica é removida do modelo. A relação continua existindo no repositório.
Veja: https://ariscommunity.com/users/vladob/2012-01-13-how-remove-occurence-and-connection
Diferença importante
Para resumir:
ObjDef.CxnList()Cxn.SourceObjDef()/Cxn.TargetObjDef()Cxn.Delete(false)CxnOcc.Remove()ObjOcc.Remove()Se você estiver trabalhando com a REST API do ARIS (e não com scripts/macros ARIS), a abordagem é diferente
BR
AO