Xpages - 重复控制/查看SSJS

时间:2018-05-01 15:00:54

标签: xpages xpages-extlib

我在live和DEV上有完全相同的数据库设计,但是,当我对页面进行重复控制时,它在DEV上按预期工作,从视图中提取文档的状态,但不在实时,它只列出视图中文档的编号。它似乎也没有返回任何唯一值。我使用dbcolumn获取值,并尝试在其周围包装@unique,然后使用脚本lib来处理唯一条目,但没有这样的运气。附图和下面的代码。有什么想法吗?

<table class="table table-hover">
  <thead>
    <tr>
      <th>Status</th>
      <th>Total</th>
      <th>%</th>
    </tr>
  </thead>
            <tbody>

                <xp:repeat id="repeat1" rows="30" var="row">
                    <xp:this.value><![CDATA[#{javascript://var result = @DbColumn("", "vwStatusStats", 1);
//var result = session.evaluate("@DbColumn(\"\"; ; \"vwStatusStats\"; 1)").elementAt(0) 


//result = session.evaluate("@Unique");

//return result
//return @Unique(@DbColumn("", "vwStatusStats", 1))

return DbColumnArray("", "", "", "unique", "", "vwStatusStats", 1)
}]]></xp:this.value>

                    <tr>
                        <td>
                            <xp:text escape="true"
                                id="computedField11">
                                <xp:this.value><![CDATA[#{javascript:row}]]></xp:this.value>
                            </xp:text>
                        </td>
                        <td>
                            <xp:text escape="true"
                                id="computedField1">
                                <xp:this.value><![CDATA[#{javascript:var v:NotesView = database.getView("vwStatusStats");
var vec:NotesViewEntryCollection = v.getAllEntriesByKey(row);
return vec.getCount().toString()}]]></xp:this.value>
                            </xp:text>
                        </td>

                        <td>
                            <xp:text escape="true"
                                id="computedField2">
                                <xp:this.value><![CDATA[#{javascript:var total = getComponent("cmpTotal").getValue();
var amount = getComponent("computedField1").getValue();

var result = (amount / total) * 100;

return result}]]></xp:this.value>
                            </xp:text>
                        </td>
                    </tr>
                </xp:repeat>

                <tr>
                    <td>Total</td>                      
                    <td>
                        <xp:text escape="true" id="cmpTotal">
                            <xp:this.value><![CDATA[#{javascript:var v:NotesView = database.getView("vwStatusStats");

return v.getEntryCount().toString()}]]></xp:this.value>
                        </xp:text></td>
                        <td>
                            <xp:text escape="true"
                                id="computedField3">
                                <xp:this.value><![CDATA[#{javascript:var total = getComponent("cmpTotal").getValue();
var amount = getComponent("cmpTotal").getValue();

var result = (amount / total) * 100;

return result}]]></xp:this.value>
                            </xp:text></td>
                </tr>               

            </tbody>
                    </table>        

Issue

2 个答案:

答案 0 :(得分:0)

在实时数据库中检查具有相同名称/别名的多个视图。您的实时版本可能会寻找与您期望的视图不同的视图。

最佳做法还是确保@DbColumn调用通过@DbName()作为第一个参数。它仍然需要完成相同数量的工作,但它将确保一致的结果(“”对XPiNC不起作用)。根据Howard Greenberg的分析,使用SSJS / Java获取视图并返回getColumnValues()也可能比@DbColumn()表现得更好。作为额外的奖励,可能值得查看此XSnippet,以便为包含重复https://openntf.org/XSnippets.nsf/snippet.xsp?id=repeat-with-header-and-footer-facets的HTML使用重复控制方面。它确保表格的HTML不会注入额外的HTML。

答案 1 :(得分:0)

您的实时视图似乎已损坏。使用Notes客户端打开它以验证它是否包含预期值。 一种可能是腐败的程序化名称&#34;列属性中的值。有时,特别是通过在视图设计中复制/粘贴,对于具有不同公式的列,您的列将获得相同的美元值(例如,$ 1)。这导致&#34;奇怪&#34;其中一列中的值与其公式完全不同。删除程序化值,将自动生成新的值。