いいね!数

0

閲覧数
185

繰り返しコントロールの中にリソースに保存してある画像を表示させたいのですが、

可能でしょうか?どのように指定をすれば良いでしょうか?

現在の以下の式が設定されています。1列目に画像を表示させたいです。

var vec:NotesViewEntryCollection = view2.getAllUnreadEntries();
var entry:NotesViewEntry = vec.getFirstEntry();
var entryItem = "";
while (entry != null) {
    entryItem = entryItem + @Text(entry.getDocument().getItemValue("PostedDate"), "S0D0")   +"^"+ entry.getDocument().getItemValueString("Categories") + "^" + entry.getDocument().getItemValueString("Subject") + "^" + entry.getDocument().getUniversalID()+"~";
    var tmpentry:NotesViewEntry = vec.getNextEntry(entry);
    entry.recycle();
    entry = tmpentry;
};
//降順ソート
var array = @Explode(entryItem,"~", @False(), @False());
array.sort(function(a,b){
        if( a > b ) return -1;
        if( a < b ) return 1;
        return 0;
});
return array;

よろしくお願い致します。

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:May 23, 2016, 1:11:18 PM

回答・コメント

いいね!数

0

配列の中に「entry.getDocument().getUniversalID()」を含めていることから、各繰り返しの中で文書を取得できるものと仮定すると、以下のスニペットコードが使えると思います。

function getAttachmentImageURL(doc:NotesDocument, strImgField:String)

第一引数:NotesDocumentオブジェクト

第二引数:フィールド名

となっています。

http://xpages.jp/XSnippetsJ.nsf/snippet.xsp?id=%E3%83%AA%E3%83%83%E3%83%81%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%88%E3%82%99%E3%81%AB%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%9F1%E3%81%A4%E7%9B%AE%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%AEurl%E3%82%92%E5%8F%96%E5%BE%97

回答日時:May 23, 2016, 1:26:01 PM

いいね!数

0

下記を参考にしてみては如何でしょうか。

 

https://www.ibm.com/developerworks/jp/lotus/education/xpages_beginner/

回答日時:May 23, 2016, 1:30:46 PM

いいね!数

0

Kazu Tatsukiさん、Rits西さん、

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

言葉が足りずに申し訳なかったのですが、表示させたい画像は、各DBの<リソース>-<イメージ>の中に

jpgで保存してあります。DBごとに決まったイメージを繰り返しコントロールに表示させたいと考えております。

繰り返しコントロールの各行には、4つのDBの未読文書が表示されるように設計し、

掲示板DBの文書の頭には→keiji.jpg ディスカッションDBの文書の頭には→discus.jgp を表示する・・・という

ことを実現させたいです。

<リソース>-<イメージ>に保存してある画像を取得し表示する方法はあるでしょうか?

回答日時:May 23, 2016, 2:05:37 PM

いいね!数

0

ちなみに繰り返しコントロールで使用しているビューにイメージを表示する列を

新たに追加することは可能です。

回答日時:May 23, 2016, 2:20:03 PM

いいね!数

0

表示したいイメージを繰り返しコントロールのあるDBのリソースに追加し、以下をやったみたのですが、ダメでした。

(イメージなしの式)

   entryItem = entryItem + @Text(entry.getDocument().getItemValue("PostedDate"), "S0D0")   +"^"+ entry.getDocument().getItemValueString("Categories") + "^" + entry.getDocument().getItemValueString("Subject") + "^" + entry.getDocument().getUniversalID() +"~";

 

(イメージ追加)

    entryItem = entryItem + @Text(entry.getDocument().getItemValue("PostedDate"), "S0D0")   +"^"+ entry.getDocument().getItemValueString("Categories") + "^" + entry.getDocument().getItemValueString("Subject") + "^" + entry.getDocument().getUniversalID() + "^" + "<img src ='/keijiban.jpg'>"+"~";

 

 

 

 

回答日時:May 23, 2016, 2:35:10 PM

いいね!数

0

なるほど、DBのリソース内のイメージですね。

以下のような感じで普通にアクセスできるとおもうのですが。

      var webScheme = facesContext.getExternalContext().getRequest().getScheme();
      var webSrvName = facesContext.getExternalContext().getRequest().getServerName();
      var webDbName = facesContext.getExternalContext().getRequest().getContextPath();
      var url = webScheme+"://"+webSrvName+webDbName+"/keijiban.jpg";

 

/keijiban.jpg だけですと http://mydomain.com/keijiban.jpg になってしまって404になってしまいますね。

 

(追記)

ドメイン名を省いた絶対パスのほうがスマートですね。

      var webDbName = facesContext.getExternalContext().getRequest().getContextPath();

      var url = webDbName+"/keijiban.jpg";

回答日時:May 23, 2016, 2:56:25 PM

いいね!数

0

こんにちは。

今回の質問の回答じゃないのですが、サンプルコードがちょっと気になります。

私だったら、こう書くかな。

要は分割された情報をわざわざ文字列に連結した後、分割しなおすのではなく、配列のまま利用しようというものです(動作確認まではしてないのでエラーになったらゴメンナサイ)。

var vec:NotesViewEntryCollection = view2.getAllUnreadEntries();
var entry:NotesViewEntry = vec.getFirstEntry();
var entryItems = [];
while (entry != null) {
    var doc = entry.getDocument();
    var item = [
      @Text(doc.getItemValue("PostedDate"), "S0D0"),
      doc.getItemValueString("Categories"),
      doc.getItemValueString("Subject"),
      doc.getUniversalID()
    ];
    doc.recycle();
    entryItems.push(item);
    var tmpentry:NotesViewEntry = vec.getNextEntry(entry);
    entry.recycle();
    entry = tmpentry;
};
//降順ソート
entryItems.sort(function(a,b){
        if( a[0] > b[0] ) return -1;
        if( a[0] < b[0] ) return 1;
        return 0;
});
return entryItems;

 

この結果は<xp:repeat>のデータソースに与えてると思いますが、各情報を利用するときも配列のまま利用できます。

さらに最適化するなら、view2の各列を取得したい情報の形に加工しておきます。

そうすれば、わざわざentry.getDocument()でViewEntryが指す文書オブジェクトを取得しなおすという処理を省けます。

    var values:java.util.Vector = entry.getColumnValues()
    var item = [
      values.get(0),  // 1列目がPostedDateを日付形式
      values.get(1),  // 2列目はCategoriesに対応
      values.get(2),  // 3列目はSubjectに対応
      values.getUniversalID()
    ];

/Yac

回答日時:May 23, 2016, 11:02:54 PM

いいね!数

0

Kazu Tatsukiさん、

頂いた回答のやり方で画像が取得できました!

yac4423さん、

ビューには手を加えたくないので、yac4423さんの最初のサンプルコードで

書き直したいと思います。こちらのほうが全然スマートですね!助言をありがとう

ございます。

今回は、質問の直接の回答であるkazuさんで解決のボタンを押させて頂きますね。

ありがとうございました。

回答日時:May 26, 2016, 9:48:16 AM