Adding CrossTrack Links to drill-through reports

Follow this procedure to add a CrossTrack link to a drill-through report.

Procedure

  1. Create a new list report.
  2. From the Insertable Objects pane, drag the following data items into the list (what is loaded in your system will be different from what you see here):
    • DEFAULT|[DEFAULT_REL]|GRC_OBJECTS|SOXBUSENTITY_FOLDER| 
           [SOXBUSENTITY_GPC]|[PEN_NAME00]
    • DEFAULT|[DEFAULT_REL]|GRC_OBJECTS|[SOXCONTROL]|[CN_NAME00]
    • DEFAULT|[DEFAULT_REL]|GRC_OBJECTS|[SOXCONTROL]|[CN_DESCRIPTION]
    • DEFAULT|[DEFAULT_REL][DEFAULT_REL]|GRC_OBJECTS|[SOXCONTROL] 
           ENUMERATION_FIELDS|OPERATING_EFFECTIVENES(ENUMERATION)|
             [CN_OPERATING_EFFECTIVENES]
    • DEFAULT|[DEFAULT_REL]|GRC_OBJECTS|[SOXCONTROL] ENUMERATION_FIELDS|
          OPERATING_EFFECTIVENES(ENUMERATION)| [CN_OPERATING_EFFECTIVENES_ID]
  3. Cut the CN_OPERATING_EFFECTIVENES_ID field from the list.
  4. Add the following JavaScript to the report:

    Drag an HTML Item to the beginning of the report.

    Double-click the HTML Item and enter the following code:

    <script language="javascript">
    
    function _fixUpLinkTarget() {
            var crossTrackLinks = document.querySelectorAll('a[href^="javascript:crosstrack("]');
            for (var i = 0; i < crossTrackLinks.length; i++) {
                crossTrackLinks[i].target = "";
            }
    }
    _fixUpLinkTarget();
    
    var _crosstrackTargetWindow;
    function _discoverCrosstrackTargetWindow()
    {
        if(!_crosstrackTargetWindow || typeof(_crosstrackTargetWindow)=='undefined')
        {
            var win;
            if(!window.opener || typeof(window.opener)=='undefined')
            {
                win = window.parent;
            }
            else if(!window.opener.opener || typeof(window.opener.opener)=='undefined')
            {
                if(!window.opener.parent || typeof(window.opener.parent)=='undefined')
                {
                    win = window.opener;
                }
                else
                {
                    win = window.opener.parent;
                }
            }
            else
            {
                win = window.opener.opener;
            }
            _crosstrackTargetWindow = win;
        }
    }
    _discoverCrosstrackTargetWindow();
    function _crosstrack(url, targetWin)
    {
        if(!targetWin || typeof(targetWin)=='undefined')
        {
            if(!window.opener || typeof(window.opener)=='undefined')
            {
                targetWin = window.parent;
            }
            else if(!window.opener.opener || typeof(window.opener.opener)=='undefined')
            {
                if(!window.opener.parent || typeof(window.opener.parent)=='undefined')
                {
                    targetWin = window.opener;
                }
                else
                {
                    targetWin = window.opener.parent;
                }
            }
            else
            {
                targetWin = window.opener.opener;
            }
        }
        try {
    	targetWin.location.href=url;
    	targetWin.focus();
         } catch(err)
         {
    	 window.open(url);
         }
    }
    
    function openResourceInNewUI(url) {
        var resourceName;
        var resourceId = url.substring(url.indexOf("fileId=") + 7, url.length);
        var targetOrigin = url.substring(0, url.indexOf("view.resource.do") - 1);
        var resourceNameSpans = document.querySelectorAll('a[href^="javascript:crosstrack(\'' + url + '"] span');
        if (resourceNameSpans && resourceNameSpans.length > 0) {
            resourceName = resourceNameSpans[0].innerText.trim();
        }
        _crosstrackTargetWindow.top.postMessage(
            {
                "resourceId": resourceId,
                "resourceName": resourceName
            },
            targetOrigin
        );
    }
    
    function crosstrack(url) {
        if (document.cookie.indexOf("op-last-accessed-ui=task-focused") > 0 && url.indexOf("view.resource.do") > 0) {
            openResourceInNewUI(url);
        } else {
            _crosstrack(url, _crosstrackTargetWindow);
        }
    }
    </script>
  5. Go to the Query Explorer and add the following filters to the query:
    • [DEFAULT_REL].[SOXBUSENTITY_GPC].[GEN_ENTITY_ID] = ?Entity ID?
    • [CN_OPERATING_EFFECTIVENES_ID] = ?Operating Effectiveness ID?
    • [DEFAULT_REL].[SOXBUSENTITY_GPC].[GEN_REPORTING_PERIOD_ID] = -1
  6. Validate the report.
  7. Save the report with the name Drill Through Child.

Results

When a user clicks the CrossTrack link in the report, the detail page for that object opens. The browser determines window behavior:
  • In Microsoft browsers, the detail page opens in the application window from which the report was launched.
  • In Chrome, the detail page opens in a new application window or tab.