如何在 XPage 上配置 xe:viewFileItemService 以过滤分类视图中的数据?

How to configure an xe:viewFileItemService on an XPage to filter the data in a categorized view?

我有一个 DocsByUsername 分类视图,按用户名排序和分类。对于经过身份验证的用户,我只想在 Dojo 数据网格中显示他们的文档。网格需要支持网格内编辑,所以我需要使用 xe:viewFileItemService read/write 服务作为网格的数据源。

我认为使用以下服务配置会相当简单...

    <xe:restService id="restService1" jsId="restServiceObj"
        pathInfo="pathinfo">
        <xe:this.service>
            <xe:viewItemFileService
                viewName="DocsByUsername" var="rsEntry"
                contentType="application/json" defaultColumns="true"
                sortColumn="Username" categoryFilter="#{sessionScope.username}">
            </xe:viewItemFileService>
        </xe:this.service>
    </xe:restService>

当我预览页面并将 /pathinfo 附加到 url 以测试服务时,返回以下错误...

{
   "code":500,
   "text":"Internal Error",
   "message":"",
   "type":"text",
   "data":"java.lang.NullPointerException\r\n\tat 
      ... removed for space ...

}

如果我从 xe:viewFileItemService 切换到 xe:viewJsonService,数据会正确无误地返回。

我可以不为 xe:viewFileItemService 指定分类视图吗?

使用参数 keys 而不是 categoryFilter。这会返回用户名类别的所有文档。

... keys="#{sessionScope.username}">

Steve Zavocki 不久前blog 讨论过这个问题。

Paul,我刚刚找到了那个数据库,这就是我所做的。尽管尝试了所有方法,但我找不到使用 keys.

摆脱空白行的方法

我所做的是回到 categoryFilter 并将此代码放入其中:

var category:String = lineItemBean.getThisUNID();
if(category == null){
    return "show nothing"
} else {
    return lineItemBean.getThisUNID();
}

lineItemBean 是绑定到会话的托管 bean。 getThisUNID() 是一个简单的 getter,用于存储为字符串的父 UNID。子记录通过此 UNID 绑定到父记录。视图按此分类。如果找不到父 UNID,它会搜索类别 "show nothing",当然它永远找不到,否则 return 文档。在我这样做之前,它会显示这种情况下的所有文档(非常糟糕)。

我的休息服务类型是xe:viewJsonService。仅供参考,此网格还设置为允许行内编辑。此外,它应该没有什么区别,但数据存储在与设计不同的数据库中。希望这有帮助。