Profile picture for user stephane.roux

Hello dear,

I use report script to generate xls file with specific information about application type objects. Now I would like to retrieve the url of the fact sheet that match those objects. Is it possible ? :)

Thank you for any ideas or feedback !

Stéphane

by Kay Fischbach
Posted on Mon, 09/13/2021 - 13:03

I'm generating Connect links to models (basically the same thing as creating links to object fact sheets) and overall I'd say it is possible, although it may not be as pretty as you may would want it to be. It involves perparing some data in advance, since you can't directly retrieve the data with a report (or at least I wouldn't recommend it/have not found a nice way to do it).

What you need for the data preparation:

  • a modern internet browser (any up to date Firefox or Chromium/Chrome will do)
  • The ARIS priviledge that allows you to manage/edit configuration sets. (no worries, you're not changing anything)

How to get the data you have to prepare in advance:

  1. Open ARIS Connect -> Administration -> manage configuration sets -> hover the cursor over the active configuration -> click the button that allows you to edit the configuration
  2. Open the network tab of your browser dev tools. How to do this differs a little bit from browser to browser, but you can usually just right click anywhere on the page -> inspect element (this will open the dev tools somewhere) and in the dev tools there should be a network (monitor) tab.
  3. Once you have the network (monitor) tab open click on the "Items" tab of your Aris Connect modification set configuration.
  4. In the network (monitor) tab it should log and show you 4 GET requests. You're not interested in the ones for objects, models or symbols (usually the first three), but the 4th one for getItems is the one you need. Click on it to show its details and view the logged response data. Should be json data - just copy the entire response to your clipboard.
  5. In ARIS Architect -> Administration -> Evaluations -> Common files -> create a new file, I called mine connectElementsConfig.json -> and paste the response data from your clipboard into that file.

I also put the javascript code that builds Connect links into the Common files like this:

  1. In the Common files create another file - I call mine commonConnectLinkProvider.js
  2. Paste the following code into that .js file
var connectLinkProvider = new ConnectLinkProvider();

function ConnectLinkProvider() {
    this.objectTypeNumToFactsheetHashMap = new Packages.java.util.HashMap();
    this.modelTypeNumToFactsheetHashMap = new Packages.java.util.HashMap();
    
    hashMapFiller(this.objectTypeNumToFactsheetHashMap, this.modelTypeNumToFactsheetHashMap);
    function hashMapFiller(objectTypeNumToFactsheetHashMap, modelTypeNumToFactsheetHashMap) {
        var configFileByteArray = Context.getFile("connectElementsConfig.json", Constants.LOCATION_COMMON_FILES);
    
        var objectMapper = new Packages.com.fasterxml.jackson.databind.ObjectMapper();
        
        var jsonRootNode = objectMapper.readTree(configFileByteArray);
        
        var elementsIterator = jsonRootNode.get("itemInfoBeans").elements();
        
        while(elementsIterator.hasNext()) {
            var newElement = elementsIterator.next();
            
            var elementIdentifier = newElement.get("itemName").asText();
            
            var typeNumbersIterator = newElement.get("typeNums").elements();
            
            var nodeType = newElement.get("nodeType").asText();
            
            while (typeNumbersIterator.hasNext()) {
                var newTypeNumber = parseInt(typeNumbersIterator.next().asText());
                
                if(nodeType == "Object") {
                    objectTypeNumToFactsheetHashMap.put(newTypeNumber, elementIdentifier);
                } else if(nodeType == "Model") {
                    modelTypeNumToFactsheetHashMap.put(newTypeNumber, elementIdentifier);
                } else if(nodeType != "Connection" && nodeType != "Group") {
                    throw new Packages.java.lang.IllegalStateException("ConnectLinkProvider: Node type \"" + nodeType + "\" not recognized");
                }
            }
        }
    }
    
    this.getConnectLink = function(someItem) {
        var protocol = "https://";

        var domain = ArisData.ActiveFilter().ServerName();
        
        var tennantName = ArisData.getTenantName();
        
        var item = "item";
        
        var elementIdentifier = "c.";
        
        switch(someItem.KindNum()) {
            case Constants.CID_OBJDEF:
                elementIdentifier += this.objectTypeNumToFactsheetHashMap.get(someItem.TypeNum());
                break;
            case Constants.CID_MODEL:
                elementIdentifier += this.modelTypeNumToFactsheetHashMap.get(someItem.TypeNum());
        }
        
        if(elementIdentifier == "c.") {
            elementIdentifier += "default";
        }
        
        var db = someItem.Database().Name(Context.getSelectedLanguage());
        
        var guid = someItem.GUID();
        
        var dotMinus1 = ".-1";
        
        var fullURL = protocol + domain +  "/#" + tennantName + "/" + item + "/" + elementIdentifier + "." + db  + "." + guid + dotMinus1;
        
        return fullURL;
    }
}

It does use the Jackson Databind library, which is a standard library included in any modern ARIS installation. Feel free to read and understand the provided code, it doesn't do anything other than assembling connect link strings.

How to use it:

  1. Open the configuration of the report in which you actually want to get connect links -> General section -> "Advanced" button -> tick the connectElementsConfig.json and commonConnectLinkProvider.js files. Ticking the .json file doesn't do much except include it should you ever export the report. Ticking the .js file will tell ARIS to run the code found inside the .js file before running your actual report.
  2. Close the report configuration with the OK buttons.
  3. When you want to generate a connect link inside your actual report, you can call
connectLinkProvider.getConnectLink(yourObjectOrModelGoesHere);

where yourObjectOrModelGoesHere is a variable that points towards an ARIS Model or Object.

It'll return a String -> that's your connect link.

0
by Stéphane Roux Author
Posted on Tue, 09/14/2021 - 10:38

Thanks a lot, very powerful and finally easy to put in place !

Just for information, an example of network data capture and code

[...]

         for(var j in objects)
        {
            var odef = objects[j].ObjDef();
            if (odef.TypeNum() == APPLICATON_TYPE)
            {              
                output.TableRow();
                output.TableCell(odef.Attribute(Constants.AT_NAME,locale).getValue(),1,1,"Arial",10,Constants.C_BLACK,Constants.C_WHITE,0,Constants.FMT_LEFT,0);
                output.TableCell(connectLinkProvider.getConnectLink(odef),1,1,"Arial",10,Constants.C_BLACK,Constants.C_WHITE,0,Constants.FMT_LEFT,0);
            }     
        }
[...]

 

0
by Pontus Gagge
Posted on Thu, 08/25/2022 - 10:43

This works well. I'm not sure if you actually need the item names and the whole json configuration: the somewhat different solution proposed in How to create ARIS Connect link via scripting with an empty FactSheet name but compressed GUID's also seems to work for me. However, it's good to have fallback options if future Connect versions should change its URL interpretation, or, perhaps, if you have a more complex Connect configuration with multiple Item names for the same object types?
 
http[s]://<servername>/#<tenant>/item/c.<factSheet>.<DBName>.<GUID>.<Version>

 

0

Featured achievement

Rookie
Say hello to the ARIS Community! Personalize your community experience by following forums or tags, liking a post or uploading a profile picture.
Recent Unlocks

Leaderboard

|
icon-arrow-down icon-arrow-cerulean-left icon-arrow-cerulean-right icon-arrow-down icon-arrow-left icon-arrow-right icon-arrow icon-back icon-close icon-comments icon-correct-answer icon-tick icon-download icon-facebook icon-flag icon-google-plus icon-hamburger icon-in icon-info icon-instagram icon-login-true icon-login icon-mail-notification icon-mail icon-mortarboard icon-newsletter icon-notification icon-pinterest icon-plus icon-rss icon-search icon-share icon-shield icon-snapchat icon-star icon-tutorials icon-twitter icon-universities icon-videos icon-views icon-whatsapp icon-xing icon-youtube icon-jobs icon-heart icon-heart2 aris-express bpm-glossary help-intro help-design Process_Mining_Icon help-publishing help-administration help-dashboarding help-archive help-risk icon-knowledge icon-question icon-events icon-message icon-more icon-pencil forum-icon icon-lock