0

ビューを Excel にエクスポートする必要があります。私はすでにどこかでいくつかのコードを見つけており、xpages でうまく機能しています。ここで、ユーザーは合計の要約を追加したいと考えています。説明します。

ユーザー名、プロジェクト ID、および機器 ID を含むドキュメントがあります。私がする必要があるのは、特定のプロジェクト ID を持つすべてのドキュメントをエクスポートし、エクスポートにユーザー名と機器 ID を表示することですが、ビューをエクスポートした後、同様の機器 ID の合計を表示します。

このようなもの:

       User              Selected Equipment
       Jonh Smith        C1
       Salley Johnson    C2
       Fred Days         C1


       Summary
       C1   2
       C2   1 

私が考えたのは、最初にプロジェクト ID で分類されたビューを使用し、次に合計列を使用して機器 ID で使用し、NotesViewEntryCollection から getAllDocumentsByKey を実行して、選択したプロジェクトのすべてのドキュメントを取得し、カテゴリ行を利用して必要な合計を取得することです。しかし、getAllDocumentsByKey に対して 1 つのドキュメントしか取得しない場合。Equipment 列を削除し、プロジェクト ID のみで分類すると、予想されるすべてのドキュメントが取得されます。

もう 1 つの考えは、sessionscope 変数に格納できるオブジェクトを用意し、getalldocumentsbykey を使用してプロジェクト ID でもう一度ソートすることでした。オブジェクトには、機器 ID 変数と合計が含まれます。ビューを操作しながら、現在の機器 ID の合計を更新します。次に、ビューのエクスポートの最後に、この sessionscope テーブルをエクスポートします。しかし、私はJavaScriptが初めてなので、どこから始めればよいか本当にわかりません。これは正しい方向ですか?もしそうなら、誰かが私を始めさせることができますか?

他のアイデアはありますか?

PS ユーザーは、Excel の小計機能を使用する必要はありません。

4

2 に答える 2

4

ブルース、あなたのライブをより簡単にして、ViewNavigatorを使用してください。ViewNavigatorにはカテゴリのエントリがあり、合計する値を設定すると、その値はビューナビゲータに表示されます。カテゴリ間をジャンプするメソッドもあるため、読み取るデータが少なくなります。たとえば、この関数を使用して、分類されたビュー(1つまたは2つのレベル)から要約データを取得します。

function getCategoryData(viewName, dataColumn, getChildren) {
    var v = database.getView(viewName);
    var nav = v.createViewNav();
    var ve = nav.getFirst();
    var isFirst = true;
    var result = "[";
        while (ve) {
    if (!ve.isTotal()) {
        var curData = ve.getColumnValues();
        if (!isFirst) {
            result += ",";
        }
        result += "{label : \"";
        result += curData[0];
        result += "\", value : ";
        result += curData[dataColumn];
        /* for 2 level categories we fetch additional data */
        if (getChildren) {
            var childve = nav.getChild();
            var firstChild = true;
            result += ", children : [";
            while (childve) {
                var childData = childve.getColumnValues();
                if (!firstChild) {
                    result += ",";
                }
                result += "{label : \"";
                result += childData[1];
                result += "\", value : ";
                result += childData[dataColumn];
                result += "}";          
                firstChild = false;
                childve = nav.getNextSibling(childve);
            }
            result += "]"
        }
        result += "}";          
        isFirst = false;
    }       
    ve = nav.getNextSibling(ve);
}
result += "]";
return result;
 }

注:JSONオブジェクトではなく、JSON文字列を返します。文字列が必要だったので、変更することをお勧めします。関数を簡単に修正して、最初にカテゴリベースのサブセットを選択できます。

function getCumulativeCategoryData(viewName, key, dataColumn, fetchChildren) {
var v = database.getView(viewName);

var nav = v.createViewNavFromCategory(key);
var ve = nav.getFirst();
    ...
 }

キーは文字列またはベクトルになります。データ型には少し注意する必要があります。ビューのカテゴリが数字の場合は、必ずNumber()キーに使用してください。そうしないと、一致しません。

于 2013-02-22T02:25:34.283 に答える
0

最後の段落で正しい軌道に乗っていますが、セッション スコープに値を保存する必要はありません。標準の JavaScript オブジェクトで十分です。ビュー内のドキュメントをループしてレポートを生成していると仮定すると、ドキュメントをループしてオブジェクトにカウントを保存するときに、各機器 ID をカウントするのが最も迅速で簡単な解決策です。

装備ID[装備ID1] 装備ID[装備ID2] . . 装備ID[装備IDx]

次に、すべてのドキュメントをループした後、上記のサンプル レポートのように、機器 ID オブジェクトの値をループします。

JavaScript オブジェクトのループ処理: JavaScript オブジェクト をループ処理または列挙するにはどうすればよいですか?

JavaScript オブジェクトの並べ替え: プロパティ値による JavaScript オブジェクトの並べ替え

于 2013-02-22T01:15:47.010 に答える