ARIS Community - We Love BPM

How can i obtain only the "checked relationships" of an object?

Ana CSequeira's picture
by Ana Sequeira in Professional ARIS posted on 2016-12-07

Hello, I need some code that will only get me the "checked" relationships, like you can see in this image below:

Because I only need the relationships that you can see in the graphic as well.

this case:

process interface named : Gerir Ordens de Trabalho

Events connected :

Pedido de Serviço Efetuado

Ordem de trabalho Resolvida

 

 

I tried:

   var eventTypes = [Constants.OT_EVT];

 var events =  proInterface[i].getConnectedObjs(eventTypes); (this gives me all the relationships that are events)

and i only want the ones who are really connected in the EPC.

 

I tried too:       var inOut = Constants.EDGES_OUT; (and Constants.EDGES_INOUT, Constants.EDGES_IN ...and the other constants but none gives the outcome i need)
                    var events =  proInterface[i].getConnectedObjs(eventTypes, inOut);

In this situation: i loose events that are connected or it stays the same 

 

4143 Views
0 Likes
7 Comments
Sorry there are no tags
There are no attachments
Ana Sequeira posted on 2016-12-07

does the check mark in the relationship type (in the picture) refers to occurrences?? 

an object with no occurrences has no checkmark? is that the case?

Rodrigo Faco posted on 2016-12-07

Hello Ana,

Permita-me responder em português :)

Os relacionamentos que estão "checados", são os relacionamentos que possuem ocorrencia no modelo que esta aberto.

No Script, você vai precisar primeiro obter o modelo em questão e transforma-lo num objeto, algo como:

 

var aModelos = new Array(); //Representa os modelos em execuçao.

//RECUPERA DIRETORIOS SELECIONADOS, PODENDO SER MAIS DE UM QUANDO A SELAÇÃO OCORRER NA ABA MODELS DO EXPLORER E REMOVENDO OBJETOS DUPLICADOS.
diretorios = ArisData.Unique(ArisData.getSelectedGroups());
for(var d in diretorios){
    //AGRUPA TODOS OS MODELOS EXISTENTES
    aModelos = aModelos.concat(diretorios[d].ModelList(true, [EPC_COLUNA, EPC_LINHA]));
}

 

em seguida, você pode usar a função abaixo para obter os objetos relacionados a interface:

 

/********************************************************************************************
  FUNÇAO:       BuscaEventosAssocInterface()
  DESCRICAO:    Função recursiva que obtem os eventos associados a interface, mesmo
                se houver operadores lógicos conectados entre interface e eventos  
  PARAMETROS DE ENTRADA: - oInterface - definição do objeto Interface
                         - nIndicador (Constants.EDGES_IN / Constants.EDGES_OUT) - Indica se
                                      são eventos anteriores ou posteriores a inteface  
                SAÍDA: aEventos - Array de eventos identificados
*********************************************************************************************/
function BuscaEventosAssocInterfaceByDef(oInterfaceDef, nIndicador, modelo ){
    var aEventos = new Array();    
    var Occ = oInterfaceDef.OccListInModel(modelo);
    
    for(var e in Occ){
        var aControle = Occ[e].getConnectedObjOccs([EVENTO, OPERADOR_LOGICO_E, OPERADOR_LOGICO_OU_EXCLUSIVO, OPERADOR_LOGICO_OU], nIndicador);
       
        for (var e in aControle) {
        
             //SE FOR OPERADOR LOGICO - obter eventos conectados a operadores lógicos (se houver)   
               if ( (aControle[e].getSymbol() == OPERADOR_LOGICO_E) || (aControle[e].getSymbol() == OPERADOR_LOGICO_OU ) || (aControle[e].getSymbol() == OPERADOR_LOGICO_OU_EXCLUSIVO)){
                  aEventos = aEventos.concat(BuscaEventosAssocInterface( aControle[e] , nIndicador));// <-- Recursividade  
             //SE NAO FOR OPERADOR LOGICO - obter eventos diretamente conectados     
             }else{
                 aEventos = aEventos.concat(aControle[e]) ;                 
             }
        }
    }
        
    return aEventos;
}

OBS: EPC_COLUNA,EPC_LINHA , EVENTO, OPERADOR_LOGICO_E, OPERADOR_LOGICO_OU_EXCLUSIVO, OPERADOR_LOGICO_OU são constantes:

var EPC_COLUNA              = Constants.MT_EEPC_COLUMN;
var EPC_LINHA               = Constants.MT_EEPC_ROW;
var OPERADOR_LOGICO_E = Constants.ST_OPR_AND_1;
var OPERADOR_LOGICO_OU_EXCLUSIVO = Constants.ST_OPR_XOR_1;
var OPERADOR_LOGICO_OU = Constants.ST_OPR_OR_1;
var EVENTO = Constants.ST_EV;

Segue um exemplo de chamadas da função:

    var aObjConectadosIn = BuscaEventosAssocInterfaceByDef(oDef[j], Constants.EDGES_IN, aModelos);

ou

 
    var aObjConectadosOut = BuscaEventosAssocInterfaceByDef(oDef[j], Constants.EDGES_OUT, aModelos);

 

Acho que estes trechos de código pode ajuda-la... qualquer duvida pode entrar em contato comigo: rdfaco@gmail.com

Ana Sequeira posted on 2016-12-07

Muito Obrigado :)

Vou então tentar aplicar essa solução .

Ana Sequeira posted on 2016-12-08

Estou a  utilizar essa função e estou a ter como saida um array de Aris Objects e como isso acontece nao consigo fazer 

.Name(linguagemSelecionada).

Como preciso de escrever o nome destes eventos para excel preciso do nome dos eventos, o que posso fazer?

(Consultei a classe Aris Object no Aris help e não parece ter um metodo para nome)

Normalmente uso Name(language) em objetos do tipo ObjDef

Rodrigo Faco posted on 2016-12-08

Olá Ana!

O retorno da função que lhe passei é um array de ocorrencias de objetos, assim o método Name() , não vai funcionar. Você pode utilizar o método getObjDefName(idioma) , veja o exemplo:

                 var sObjConectadosIn = "";
                 var aObjConectadosIn = BuscaEventosAssocInterfaceByDef(oDef[j], Constants.EDGES_IN, aModelos);                  for (var y in aObjConectadosIn) {
                     sObjConectadosIn += aObjConectadosIn[y].getObjDefName(idioma) + "\n\n";  
                 }       
           

Ao final do codigo, a veriavel sObjConectadosIn saira com os nomes dos eventos em uma string;

Ana Sequeira posted on 2016-12-09

Muito Obrigada :)

Funcionou sim.

Ana Sequeira posted on 2016-12-12

Como posso ir buscar o nome dos eventos além da xor rule?

Noto que quando tenho eventos ligados por uma rule, apenas me aparece o nome da rule-

Tenho:

function BuscaEventosAssocInterfaceByDef(oInterfaceDef, nIndicador, modelo) {
    var aEventos = new Array();
    var Occ = oInterfaceDef.OccListInModel(modelo); //ocurrencias da interface

    for (var e in Occ) {
        var aControle = Occ[e].getConnectedObjOccs([Constants.ST_EV, Constants.ST_OPR_AND_1, Constants.ST_OPR_XOR_1, Constants.ST_OPR_OR_1, Constants.ST_EV], nIndicador);

        for (var e in aControle) {

            //SE FOR OPERADOR LOGICO - obter eventos conectados a operadores lógicos (se houver)   
            if ((aControle[e].getSymbol() == OPERADOR_LOGICO_E) || (aControle[e].getSymbol() == OPERADOR_LOGICO_OU) || (aControle[e].getSymbol() == OPERADOR_LOGICO_OU_EXCLUSIVO)) {
                aEventos = aEventos.add(BuscaEventosAssocInterface(aControle[e], nIndicador)); // <-- Recursividade  
                //SE NAO FOR OPERADOR LOGICO - obter eventos diretamente conectados     
            } else {
                aEventos = aEventos.concat(aControle[e]);
            }
        }
    }
    return aEventos;
}

 

e chamo assim: 

 var sObjConectadosIn = "";
                    var aObjConectadosIn = BuscaEventosAssocInterfaceByDef(proInterface[i], Constants.EDGES_INOUT, oModelList[k]);
                    for (var y in aObjConectadosIn) {
                        for (var y in aObjConectadosIn) {
                            sObjConectadosIn += aObjConectadosIn[y].getObjDefName(selectedLanguage) + "\n\n";
                        }
                    }
                   
                    dummyOutput.TableRow();
                    dummyOutput.TableCell("", 20, "Arial", 10, Constants.C_BLACK, Constants.C_WHITE, 0, Constants.FMT_CENTER, 0);
                    dummyOutput.TableCell("", 20, "Arial", 10, Constants.C_BLACK, Constants.C_WHITE, 0, Constants.FMT_CENTER, 0);
                    dummyOutput.TableCell("", 20, "Arial", 10, Constants.C_BLACK, Constants.C_WHITE, 0, Constants.FMT_CENTER, 0);
                    dummyOutput.TableCell( sObjConectadosIn, 20, "Arial", 10, Constants.C_BLACK, convRGB(230, 0, 172), 0, Constants.FMT_CENTER, 0);
                    }