いいね!数

0

閲覧数
214

いつもお世話になっております。

現在、サブ項目のあるxpagesを開発しようと思っております。

以下のページを参考にしております。

http://www.tech-notes.dyndns.org/domino/ouyou_sample_subitems.html

このように、サブ項目の内容をJSON形式で保存した時、他のxpagesページを作成して、該当ビューを集計できないか?を模索しております。

上記ページで言えば、複数ページで登録された品目ごとに金額を集計したい、ということになります。

最初に、

−−−−−−−−−−

鉛筆 100円 3本

ノート 150円 2冊

−−−−−−−−−−

と登録し、別の登録で、

−−−−−−−−−−

鉛筆 105円 2本

ノート 130円 4冊

消しゴム 80円 2つ

−−−−−−−−−−

と登録した場合、最終的に、ビューデータを取得して、

−−−−−−−−−−

鉛筆 510円

ノート 820円

消しゴム 160円

−−−−−−−−−−

と計算したいのです。

 

何か方法はありますでしょうか。

よろしくおねがいします。

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:Oct 5, 2016, 8:16:07 PM

回答・コメント

いいね!数

1

こんにちは。

私のサイトを読んでもらってうれしいです。

さて、ご希望のことをやりたければ、基本こんな感じかと。結構力技なので、実行できるユーザーは限定したほうがいいでしょうね。

  • 集計用のXPageに[集計]というボタンを用意
  • このボタンをおしたら、全文書を表示するビューを用意し、全文書をなめるループを作る
  • 文書から品目と金額の記録されたJSONデータを取り出し、fromJson()で配列に変換
  • 得られた配列をループさせれば各項目の品目と金額が得られる

このループを走らせれば、全文書の全品目をなめることができる。

ここまでできたら、品目ごとの合計金額を保持するハッシュを用意し、品目ごとの合計金額を計算。

このハッシュをデータソースに指定して<xp:repeat>や<xp:dataTable>で処理させれば集計結果を表示できます。

個々の処理についての具体的な質問があればまた答えますよ。例えば、「ビューを使って文書をなめる処理はどう書くの?」とか。

/Yac

 

回答日時:Oct 6, 2016, 12:24:22 AM

いいね!数

0

回答、ありがとうございます。

手順については、理解しました。

「実際にViewを使って文書をなめる」は、@DbColumnでなめて、Listに入れようかな、と思っています。

もしくは、SSJSでgetView(View名)とかでしょうか・・・・

ビューで取得した後に、

>ここまでできたら、品目ごとの合計金額を保持するハッシュを用意し、品目ごとの合計金額を計算。

このあたりの理解力が(Javascriptでの処理かとは思いますが)不足しております。

よろしければ、ご教示いただけますと、助かります。

(Dominoの開発、15年ぶりくらいで、あまりの進歩にびっくり&ワクワクしています)

 

回答日時:Oct 6, 2016, 12:06:09 PM

いいね!数

1

品目ごとの合計を求める処理でしたね。

allViewが全文書を表示してるビューだとします。こんな感じで文書と各文書に保存されてる品目リストをなめていきます。

listはJavaScriptのObject。JavaScriptのObjectはハッシュテーブルとして使えるので品目名で値段の合計にアクセスできます。

var doc = myView.getFirstDocument();
var list = {};  // ここに全品目の費用の合計を集める
while(doc) {
  var jsonText = doc.getItemValueString("jsonField");
  var items = fromJson(jsonText);
  for(var index=0; index < items.length; index++) {
    var item = items[index];
    var name = item.name;  // 品目
    var value = item.value; // 値段
    if (!list[name]) {
      list[name].value = 0;  // 品目が初めて出てきたときに0初期化
    }
    list[name].value += Number(value);
  }
  doc = myView.getNextDocument(doc);
}

 

これで各品目の合計の入ったlistが手に入るので、後はこれを<xp:repeat>や<xp:dataTable>のデータソースに指定すればいいかな、という感じですかね。

実際に動作させるところまでは試してないので多少エラーが出るかもしれませんが、まぁそのときはゴメンナサイ。

/Yac

回答日時:Oct 6, 2016, 11:20:26 PM

いいね!数

0

回答ありがとうございます!

頂いた内容で、チャレンジしてみます。

 

回答日時:Oct 7, 2016, 9:45:01 AM