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
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
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
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;
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);
}