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,并将其放在重复控件的绑定数据部分中,并将集合名称设置为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,";")

然后我在 repeat 控件内放置了一个面板,将数据源设置为文档的形式,并将 Document ID 字段设置为 computed 并输入docs。现在我放在面板中的任何计算字段都可以绑定到表单字段

于 2012-11-22T15:41:09.753 回答
0

据我了解您的问题,您希望在重复控件的视图中显示文档子集 - 您的过滤应该按日期范围完成。我通过使用以下逻辑完成了类似的事情:

  1. 我的自定义控件/ xpage 的数据源是一个视图(在您的情况下是视图“xpageReports”),数据源名称为“view1”。
  2. 在数据源属性中,您可以使用三个选项来缩小文档集的范围:“按类别名称过滤”、“按列值过滤”和“在视图结果中搜索”。就我而言,我使用了“在视图结果中搜索”(在具有全文索引的数据库中)。因此,您可以使用 JavaScript 创建如下查询:

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

  1. 在重复中,您可以将源设置为“view1”

  2. 集合名称可以设置为“mydoc”

  3. 可以使用代码访问重复中计算字段中的列值

mydoc.getColumnValue("PROGRAMMATICCOLUMNNAME");

我希望这是对正确方向的暗示。据我了解,这应该符合您的要求。

于 2012-11-22T15:44:38.680 回答