【问题标题】:xpages: cannot compute view column using getColumnValue()xpages:无法使用 getColumnValue() 计算视图列
【发布时间】:2015-12-02 05:51:29
【问题描述】:

在下面的代码中,我尝试使用来自视图中另一列的值来计算最后一列。

我不知道为什么这不起作用,一直返回默认值:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:viewPanel rows="30" id="viewPanel1" var="varWI">
                <xp:this.facets>
                    <xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="headerPager" id="pager1">
                    </xp:pager>
                </xp:this.facets>

                <xp:this.data>
                    <xp:dominoView var="view1" viewName="WorkItem">
                        <xp:this.categoryFilter><![CDATA[#{javascript:"F832F30FA6C4686E85257F0E0008E964"}]]></xp:this.categoryFilter>
                    </xp:dominoView>
                </xp:this.data>

                <xp:viewColumn columnName="wi_Date" id="viewColumn6" displayAs="link" showCheckbox="true">
                    <xp:this.converter>
                        <xp:convertDateTime type="date"></xp:convertDateTime>
                    </xp:this.converter>
                    <xp:viewColumnHeader value="Creation Date" id="viewColumnHeader6" style="font-weight:bold">
                    </xp:viewColumnHeader>
                </xp:viewColumn>

                <xp:viewColumn id="wi_Intervention1" columnName="wi_Intervention">
                    <xp:viewColumnHeader id="viewColumnHeader9" style="font-weight:bold" value="Intervention">
                    </xp:viewColumnHeader>
                </xp:viewColumn>

                <xp:viewColumn id="wi_Category1" columnName="wi_Category">
                    <xp:viewColumnHeader id="viewColumnHeader10" style="font-weight:bold" value="Category">
                    </xp:viewColumnHeader>
                </xp:viewColumn>

                <xp:viewColumn id="viewColumn1">
                    <xp:this.facets>
                        <xp:viewColumnHeader xp:key="header"
                            id="viewColumnHeader1">
                        </xp:viewColumnHeader>
                    </xp:this.facets>
                    <xp:this.value><![CDATA[#{javascript:var s:string = varWI.getColumnValue('wi_Category');

if(s.equals("CATEGORY_DISCOUNT")) { 
    return "99. Discount" 
} else if(s.equals("CATEGORY_INCOMPATIBILITY")) { 
    return "88. Incompatibility" 
} else {
    return "--. " + s.toLowerCase();
}}]]></xp:this.value>
                </xp:viewColumn>
    </xp:viewPanel>

</xp:view>

这部分:

var s:string = varWI.getColumnValue('wi_Category');

if(s.equals("CATEGORY_DISCOUNT")) { 
    return "99. Discount" 
} else if(s.equals("CATEGORY_INCOMPATIBILITY")) { 
    return "88. Incompatibility" 
} else {
    return "--. " + s.toLowerCase();
}

始终以小写形式返回值。列值是文本,表单中的字段也是。

示例:如果列值为“CATEGORY_DISCOUNT”,则该列显示的是“--.category_discount”。

它似乎知道列值,因为它以小写形式表示,但它不会认为它等于我在“if”语句中检查的值。

很困惑....

【问题讨论】:

  • 由于您使用 Notes 视图作为视图面板的数据源,您是否考虑过使用 Notes 视图在后端进行所有数学运算?如果你这样做,它会很快,你所要做的就是刷新控件。使用公式语言将您的逻辑放入列公式中。
  • return "--. " + s;测试代码,看看s到底包含了什么。
  • 另外,尝试 s.equalsIgnoreCase() 而不是 s.equals()
  • 我同意 Per 关于忽略大小写的观点,但根据 Paul 的建议,我建议使用 s.toUpperCase() == "CATEGORY_DISCOUNT"; 进行 equals 测试;

标签: xpages xpages-ssjs


【解决方案1】:

试试s=="CATEGORY_DISCOUNT"。您将其转换为 SSJS 字符串,而不是 java.lang.String。 .equals() 可能不适用于 SSJS 字符串。

【讨论】:

    【解决方案2】:

    各位程序员,问题与代码无关,而与文档中保存的值有关。

    原来用于输入值的下拉菜单有一个如下公式:

    FrenchValue + " | " + Alias
    

    当然,在网络上,多余的空间实际上是用别名节省的。所以我在每个我正在寻找的值的开头都有一个额外的空间......

    我被那一两次抓住了,现在我的同事也学到了宝贵的一课!!!

    一旦从用于填充视图列中字段的表单下拉列表中使用的视图列中删除了额外的空间,标准代码就开始像魅力一样工作。

    最后一列代码类似这样:

    var s:string = viewEntry.getColumnValue('Intervention');
    s = s.trim();
    var col = sessionScope.lang=="en" ? 3 : 2;
    @DbLookup(@DbName(), "VWL022", s, col);
    

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多