1

最近、Cognos 10スタイルを編集するためのグローバルスタイルシートはどこにあるかを尋ねました(ここ)。

私たちのチームといくつか話し合った後、Cognosがレポートビューアページとダッシュボードウィジェットホルダーを構築するために使用するCGIまたはベースインポートファイルを見つけたいと思います。

これを実行する理由は、すべてのカスタムスタイルとJavaScriptを1つの場所に含めることができるようにするためです。Cognosをアップグレードするとき/アップグレードする場合、レポートで1つの障害点を確認できます。これにより、複数のスタイルシート(およびjavascript)を再編集する必要があるという問題が解決されます。

私は通常、CGI-BINではなくASP.NETに精通しています。Cognosページのスタイルと基本的なインポートが行われるマスターページに似たものはありますか?理想的には、このファイルを編集することで、カスタマイズを続行できます。

これはできますか?それとも私たちは正気ではないのですか?アップグレードに関するリスクは理解していますが、リスクは問題ありません(バージョンの変更によってこの手法が複製されない方法の良い例を誰かが提供できない限り)。

4

3 に答える 3

1

私のような従来のWeb開発のバックグラウンドを持つBIプロフェッショナルは、グローバルCSSファイルに変更を加えたり、より多くのJSを導入したりすることに何の不安もないことはかなり一般的だと思います。

レポートでJSを実行する方法を説明しました。グローバルライブラリにjQueryを追加したいのですが、まだ十分なサポートを提供していません。私はCSSの部分を手伝うことができます。

8.4.1では、レポートビューアによって参照されるCSSファイルが大量にあります。私があなたなら、デフォルトのスタイルでサンプルレポートをレンダリングし、Firebugなどを使用して呼び出されているCSSファイルをトレースします。server/cognos8/schemas/GlobalReportStyles.cssいくつかの助けを借りて、それが一般的に参照されていることがわかりますserver/cognos8/skins/corporate/viewer/QSRVCommon.css-インポートされた他のファイルもそこにあります。

COGNOSgrep -R '<link rel=\"stylesheet\" type=\"text/css\" href=\"../schemas/GlobalReportStyles.css\">ディレクトリで、ファイルが呼び出されている場所を確認し、そのファイルを直接編集するか、独自のJSへのリンクを作成できると思います。個人的には、既存のスタイルシートをバックアップして、既存のスタイルシートを変更するだけです。

JSについても同様のことができると思います。テンプレート内で(grepを使用して)呼び出されている場所を見つけ、作成するファイルへの新しい参照を作成するだけです。私の場合、jQueryをすべてのレポートにロードできる場合は、バク転を行います。

于 2011-03-07T16:42:33.850 に答える
1

これは1歳だと気づきました。:-(申し訳ありませんが、ここで初めてです。誰かがまだトピックに興味を持っている場合に備えて、そのままにしておきます。

いくつかのレベルでのカスタマイズに関するドキュメントは次のとおりです。Cognos

システムファイルを変更する代わりに使用しました。特定のCSSオーバーライドを含むHTMLオブジェクト、および/またはカスタムスタイルシートへのリンクを含む共有コンポーネント「レポート」があります。次に、ツールボックスの「レイアウトコンポーネントリファレンス」を使用して、これを各レポートに追加します。グローバルな変更が必要な場合は、コンポーネントレポートまたはカスタムスタイルシートの1つの項目を変更するだけです。これは私たちにとって非常にうまく機能します。

于 2012-04-17T18:47:52.130 に答える
0

私はこの質問に対する以前の両方の回答に賛成票を投じました。誰かが何か活動をするまで、私はこの質問をちょっと忘れていたことを認めます。

最終的には、上記の手法を組み合わせて実行しました。提案されたように、グローバルスタイルシートを見つけることができました。私がやったことは、そのスタイルシートにあったすべてのスタイルをコピーして、* _SystemSytles.css*という接尾辞が付いた新しいシートを作成することでした。2番目のシートを作成し、* _Custom.css*という接尾辞を付けました。次に、元のシートに2つのインポートを配置しました。最初にシステムスタイルをインポートし、次にカスタムスタイルをインポートしました。

特定のレポートでは、独自のスタイル(およびJavaScript)をもたらすカスタムオブジェクトがドロップされます。これは、2番目の質問と同様の手法を利用しています。

ただし、Cognosサイト全体で一般的に使用するJavaScriptをインポートするために私がしなければならなかったことは困難でした。

コアのwebcontentフォルダーに、jQueryとカスタムJavaScriptファイルを含むjsフォルダーを作成しました。次に、一連のJavaScriptファイルに、次のようなコードを含めました。

/************************
JQUERY UTIL INCLUDE
************************/

function loadjscssfile(filename, filetype, id) {
    if (filetype == "js") { //if filename is a external JavaScript file
        var fileref = document.createElement('script')
        fileref.setAttribute("type", "text/javascript")
        fileref.setAttribute("src", filename)
        if (id)
            fileref.setAttribute("OurCompanyNameAsAnID", id)
    }
    else if (filetype == "css") { //if filename is an external CSS file
        var fileref = document.createElement("link")
        fileref.setAttribute("rel", "stylesheet")
        fileref.setAttribute("type", "text/css")
        fileref.setAttribute("href", filename)
    }
    if (typeof fileref != "undefined") {
        var headTag = document.head || document.getElementsByTagName('head')[0];

        headTag.appendChild(fileref);
    }
}

function _PortalLoadJS() {
    if (!window._PortalScriptsLoaded) {
        var pathParams = [];
        var path = location.href;
        (function () {
            var e,
            r = /([^/]+)[/]?/g,
            p = path;

            while (e = r.exec(p)) {
                pathParams.push(e[1]);
            }

        })();

        var baseURL = location.protocol + '//';

        for(var i = 1; i < pathParams.length; i++) {
            if(pathParams[i] == 'cgi-bin')
                break;

            baseURL += pathParams[i] + '/';
        }

        loadjscssfile(baseURL + "js/jquery-1.6.1.min.js", "js");
        loadjscssfile(baseURL + "js/Custom.js?pageType=COGNOS_CONNECTION", "js", "SumTotalUtil");
        window._PortalScriptsLoaded = true;
    }
}

if(!window.$CustomGlobal) {
    window.$CustomGlobal= function(func) {

        if (!window.$A) {

            if (!window.__CustomExecStack) {
                window.__CustomExecStack= new Array();
            }

            window.__CustomExecStack.push(func);
        }
        else
            $A._executeCustomItem(func);
    }
}

try {


    // Catch cases where $(document).ready() is called after the
    // browser event has already occurred.
    if (document.readyState === "complete") {
        // Handle it asynchronously to allow scripts the opportunity to delay ready
        setTimeout(_PortalLoadJS, 10);
    }

    // Mozilla, Opera and webkit nightlies currently support this event
    if (document.addEventListener) {
        // Use the handy event callback
        document.addEventListener("DOMContentLoaded", function() { _PortalLoadJS(); }, false);

        // A fallback to window.onload, that will always work
        window.addEventListener("load", _PortalLoadJS, false);

        // If IE event model is used
    } else if (document.attachEvent) {
        // ensure firing before onload,
        // maybe late but safe also for iframes
    document.attachEvent("onreadystatechange", function() { _PortalLoadJS(); });

        // A fallback to window.onload, that will always work
    window.attachEvent("onload", _PortalLoadJS);
    }
}
catch (ex) { }

$ Aアイテムは、Custom.jsファイルがロードされたときに作成するアイテムです。

このコードを含めたファイルのリストは次のとおりです(JavaScriptの最後にあります)。

  • webcontent \ icd \ bux \ js \ bux \ bux.core.js
  • webcontent \ ps \ portal \ js \ cc.js
  • webcontent \ rv \ CCognosViewer.js
  • webcontent \ rv \ GUtil.js
  • webcontent \ rv \ viewer.standalone.core.js

これらのファイルは、Cognos Connection、レポートビューア、およびダッシュボード領域をカバーする必要があります。これ以上見つかった場合はお知らせください。このリストを更新できます。

Custom.jsファイルにリンクするとき、Custom.jsファイルが取得する外部リソースにクエリ文字列を配置します:pageType=COGNOS_CONNECTION。これにより、Cognos Connection、レポートビューア、またはダッシュボードの特定のロードコードを実行できます。

$Aオブジェクトを初期化するCustom.jsクラスのコードは次のとおりです。

function _CustomUtilInit() {
    try {
        if (!window.$j) {
            window.setTimeout(_CustomUtilInit, 1);
            return;
        }

        var jScriptTags = $j('SCRIPT[' + Analytics.SCRIPT_ATTR_NAME + '= ' + Analytics.SCRIPT_ATTR_VALUE + ']');

        jScriptTags.each( function(i, scriptElem) {

            var tag = $j(scriptElem);

            if(tag.attr(Analytics.LOADED_SCRIPT_KEY))
                return;

            var scriptURL = new URI(tag.attr('src'));

            var analyticsPageType = scriptURL.getQueryStringValue(Analytics.PAGE_TYPE_QUERY_KEY, Analytics.PageType.REPORT_VIEWER);

            if(!window.$A) {
                window.$A = new Analytics();
            }

            window.$A.init(analyticsPageType);

            tag.attr(Analytics.LOADED_SCRIPT_KEY, 'true');
        });
    } catch (e) {
    }
}

_CustomUtilInit();

もちろん、これは、前述の各JavaScriptファイルのCustom.jsファイルの前にjQueryライブラリが含まれていることを前提としています。

URIクラスは、私がインターネットで見つけて、使用するために微調整したものです。カスタムJavaScriptの読み込みについて質問がある場合は、コメントを残してください。もう少し詳しく説明するように最善を尽くします。

于 2012-04-19T12:13:19.587 に答える