The following tutorial describes how to output the following information from an EPC to an Excel sheet using a report:
First you need all selected models over which you want to iterate:
var aModels = ArisData.getSelectedModels();
Use the following method to determine the name of the current model:
var sModelName = oModel.Name(nLocale); // Name of current model
The 'ObjOccListFilter' method returns all object occurrences of the relevant model, in this case all functions.
var oFuncOccs = oModel.ObjOccListFilter(Constants.OT_FUNC);
Use the following expression to determine all incoming connections:
var aCxnOccs = oFuncOccs[j].Cxns(Constants.EDGES_IN);
In this case, only connections of the 'carries out' type are to be included in the evaluation, which means that the connection type must be checked:
if(aCxnOccs[k].CxnDef().TypeNum()==Constants.CT_EXEC_1 || aCxnOccs[k].CxnDef().TypeNum()==Constants.CT_EXEC_2)
If this query returns 'true', determine the relevant source object and check whether it is of type 'Person type':
var oSourceObjOcc = aCxnOccs[k].SourceObjOcc(); if (oSourceObjOcc.ObjDef().TypeNum() == Constants.OT_PERS_TYPE)
If the source object corresponds to this type, the following information is output:
oOutputFile.TableCell(sModelName, 20, getString("TEXT_1"), 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); var nSource = oSourceObjOcc.ObjDef().Name(nLocale); oOutputFile.TableCell(nSource, 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); var nCxn = aCxnOccs[k].CxnDef().ActiveType(); oOutputFile.TableCell(nCxn, 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); oOutputFile.TableCell(oFuncOcc.ObjDef().Name(nLocale), 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0);
The complete report with all iterations and the entire output looks as follows:
var oOutputFile = Context.createOutputObject(); // Output object var nLocale = Context.getSelectedLanguage(); // Selected database language var aModels = ArisData.getSelectedModels(); for (var i = 0; i < aModels.length; i++) { oOutputFile.BeginTable(100, Constants.C_BLACK, Constants.C_TRANSPARENT, Constants.FMT_LEFT, 0); oOutputFile.TableRow(); oOutputFile.TableCell("ModelName", 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_CENTER | Constants.FMT_VTOP, 0); oOutputFile.TableCell("Actor", 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_CENTER | Constants.FMT_VTOP, 0); oOutputFile.TableCell("Connection", 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_CENTER | Constants.FMT_VTOP, 0); oOutputFile.TableCell("Task", 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_CENTER | Constants.FMT_VTOP, 0); var oModel = aModels[i]; // Current model var sModelName = oModel.Name(nLocale); // Name of current model //functions var oFuncOccs = oModel.ObjOccListFilter(Constants.OT_FUNC); for (var j = 0; j < oFuncOccs.length; j++){ var oFuncOcc = oFuncOccs[j]; var aCxnOccs = oFuncOccs[j].Cxns(Constants.EDGES_IN); for(var k=0; k<aCxnOccs.length; k++){ if(aCxnOccs[k].CxnDef().TypeNum()==Constants.CT_EXEC_1 || aCxnOccs[k].CxnDef().TypeNum()==Constants.CT_EXEC_2){ // check type of source object var oSourceObjOcc = aCxnOccs[k].SourceObjOcc(); if (oSourceObjOcc.ObjDef().TypeNum() == Constants.OT_PERS_TYPE){ oOutputFile.TableRow(); oOutputFile.TableCell(sModelName, 20, getString("TEXT_1"), 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); var nSource = oSourceObjOcc.ObjDef().Name(nLocale); oOutputFile.TableCell(nSource, 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); var nCxn = aCxnOccs[k].CxnDef().ActiveType(); oOutputFile.TableCell(nCxn, 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); oOutputFile.TableCell(oFuncOcc.ObjDef().Name(nLocale), 20, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_BOLD | Constants.FMT_LEFT | Constants.FMT_VTOP, 0); } } } } oOutputFile.EndTable(sModelName, 100, "Arial", 10, Constants.C_BLACK, Constants.C_TRANSPARENT, 0, Constants.FMT_LEFT | Constants.FMT_VTOP, 0); } oOutputFile.WriteReport();
Let's see if any more wishes will come true...