1

リピートコントロールのバインドデータ部分に次のコードがあります。私はコレクション名を「ドキュメント」と呼んでいます。ビューコントロールに値を表示させることができないようです。計算フィールド-docs.getItemValue( "Status")。私が間違っているアイデアはありますか?

var v:NotesView = database.getView("xpageReports");
viewScope.status=""

// Created After
var after = viewScope.crafter
if(after==null)after = @Date(2000, 1, 1, 0, 0, 0);  

// Created Before
var before = viewScope.crbefore 
if(before==null) before = @Date( @Tomorrow() );

// Build Date Range
var dr = session.createDateRange(after, before);

// Status
var status = viewScope.crstatus;
if(status =="-select-") status =""
// Department
var department = viewScope.crdepartment;
if(department =="-select-") department=""

// Unit
var unit = viewScope.crunit;
if(unit ="-select-") unit=""

var dc:NotesDocumentCollection = v.getAllDocumentsByKey(dr);
if (dc.getCount() == 0) {
    viewScope.status = "0";
    return;
}

var count = 0
var doc:NotesDocument = dc.getFirstDocument();
while (doc != null) {
    var tmpdoc = dc.getNextDocument();
    var remove = 0

    @If(status!="",@If(doc.getItemValueString("Status")!=status,remove = remove + 1,""),"")
    @If(department!="",@If(doc.getItemValueString("Department")!=department,remove = remove + 1,""),"")
    @If(unit!="",@If(doc.getItemValueString("Unit")!=unit,remove = remove + 1,""),"")
    if(remove!=0) dc.deleteDocument(doc)

    doc.recycle();


    doc = tmpdoc;

    }

return dc
4

2 に答える 2

1

ドキュメントのnoteIDを返すようにコードを変更し、これをrepeatコントロールのBind Dataセクション内に配置し、コレクション名をdocsに設定しました。

var v:NotesView = database.getView("xpageReports");
var docIDs = ""

// Created After
var after = viewScope.crafter
if(after==null)after = @Date(2000, 1, 1, 0, 0, 0);  

// Created Before
var before = viewScope.crbefore 
if(before==null) before = @Date( @Tomorrow() );

// Build Date Range
var dr = session.createDateRange(after, before);

// Status
var status = viewScope.crstatus;
if(status =="-select-") status =""
// Department
var department = viewScope.crdepartment;
if(department =="-select-") department=""

// Unit
var unit = viewScope.crunit;
if(unit =="-select-") unit=""

var dc:NotesDocumentCollection = v.getAllDocumentsByKey(dr);
if (dc.getCount() == 0) {
    return;
}

var count = 0
var doc:NotesDocument = dc.getFirstDocument();
while (doc != null) {
    var tmpdoc = dc.getNextDocument();
    var remove = 0

    @If(status!="",@If(doc.getItemValueString("Status")!=status,remove = remove + 1,""),"")
    @If(department!="",@If(doc.getItemValueString("Department")!=department,remove = remove + 1,""),"")
    @If(unit!="",@If(doc.getItemValueString("Unit")!=unit,remove = remove + 1,""),"")
    if(remove==0) docIDs = docIDs = docIDs + doc.getNoteID()+";"

    doc.recycle();
    doc = tmpdoc;

}
return @Explode(docIDs,";")

次に、繰り返しコントロール内にパネルを配置し、データソースをドキュメントの形式に設定し、[ドキュメントID]フィールドを計算して入力したドキュメントに設定しまし。これで、パネル内に配置した計算フィールドをフォームフィールドにバインドできます。

于 2012-11-22T15:41:09.753 に答える
0

私があなたの質問を理解している限り、繰り返しコントロールのビューにドキュメントのサブセットを表示したいのですが、フィルタリングは日付範囲で行う必要があります。次のロジックを使用して、同様のことを達成しました。

  1. カスタムコントロール/xpageのデータソースは、データソース名が「view1」のビュー(この場合はビュー「xpageReports」)でした。
  2. データソースのプロパティには、ドキュメントセットを絞り込むための3つのオプションがあります。「カテゴリ名でフィルタリング」、「列の値でフィルタリング」、「ビューの結果で検索」です。私の場合、「ビュー結果の検索」(全文索引のあるデータベース)を使用しました。したがって、JavaScriptを使用して次のようなクエリを作成できます。

'[dateAfter]>=01.01.2000 AND [dateAfter]<=31.12.2012';

  1. リピートでは、ソースを「view1」に設定できます

  2. コレクション名は「mydoc」に設定できます

  3. リピート内の計算フィールドの列値には、コードを使用してアクセスできます

mydoc.getColumnValue("PROGRAMMATICCOLUMNNAME");

それが正しい方向へのヒントになることを願っています。私が理解している限り、それはあなたの要件に合うはずです。

于 2012-11-22T15:44:38.680 に答える