IBM Support

Displaying Related Cases in ICM 5.2

Technical Blog Post


Displaying Related Cases in ICM 5.2


A really long time ago, I described how you could use the Case List widget to display a list of "Related Cases"; cases that are somehow related to the case you are currently looking at.

This has been a pretty popular solution customization so I thought it was about time I updated it for ICM 5.2.x.




The use case here is that you want to display a list of related cases on a work details page that is used to process a task step for a particular case. You can easily modify the first bit if your Case List happens to be on another page (eg. payload.caseEditable.

  • Add a case list widget to your Work Details page
  • Use the wiring settings to disable the Select Case broadcast event. This ensures the case list does not interfere with other page widgets like the Case Infomation
  • Add a Script Adapter widget to the hidden page area
  • Enter the following script in the Script Adapter
  • Wire the inbound event of the Script adapter from the Page Container's "send Work Item" event
  • We use a broadcast event in our script so no need to wire the outbound event
var solution = this.solution;
var params = {};
var self = this;

/* This is good practice. Makes reusing scripts much easier */
var prefix = solution.prefix;

params.ObjectStore = solution.getTargetOS().id;

var custID = payload.workItemEditable.propertiesCollection[prefix+"_CustomerID"].value;
console.log ("Customer ID: ",custID);

var caseObj = payload.workItemEditable.icmWorkItem.caseObject;

/* The following call ensures that the case data is loaded before we go try and get the case ID */

caseObj.retrieveCachedAttributes(function(caseObject) {
    var caseID = caseObject.caseIdentifier;
    console.log ("Case ID: ",caseID);

    /* Find all of these */
    var criterion1 = new ecm.model.SearchCriterion({"id": prefix+"_CustomerID", "name" : "Customer ID", "selectedOperator": "STARTSWITH", "defaultOperator": "STARTSWITH", "dataType": "xs:string"});
    criterion1.value = custID ;
    criterion1.defaultValue = custID ;
    criterion1.setValues( [custID]);

    /* But omit this one */
    var criterion2 = new ecm.model.SearchCriterion({"id": "cmAcmCaseIdentifier", "name" : "Title", "anded": true, "selectedOperator": "NOTEQUAL", "defaultOperator": "NOTEQUAL", "dataType": "xs:string"});
    criterion2.value = caseID;
    criterion2.defaultValue = caseID;
    criterion2.setValues( [caseID]);

    params.criterions = [criterion1, criterion2];
    params.CaseType = ""; /* all case types */
    params.solution = solution;

    var searchPayload = new icm.util.SearchPayload();

    searchPayload.getSearchPayload(function(payload) {
        self.onBroadcastEvent("icm.SearchCases", payload);

[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSCTJ4","label":"Case Manager"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":""}]