xpages: не може да изчисли колона за изглед с помощта на getColumnValue()

В кода по-долу се опитвам да изчисля последната колона, използвайки стойност, която идва от друга колона в изгледа.

Не мога да разбера защо това не работи, връщайки стойността по подразбиране през цялото време:

<?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".

Доста объркан....


person Ben Dubuc    schedule 01.12.2015    source източник
comment
Тъй като изглежда, че използвате изглед на Notes като източник на данни за вашия панел за изглед, обмисляли ли сте да направите цялата си математика в задната част, използвайки изгледа на Notes? Ако направите това, то е бързо и всичко, което трябва да направите, е да опресните контролата. Поставете логиката си във формулата на колоната, като използвате езика на формулите.   -  person Steve Zavocki    schedule 01.12.2015
comment
Тествайте кода с return "--. " + s;, за да видите какво всъщност съдържа s.   -  person Knut Herrmann    schedule 01.12.2015
comment
Също така опитайте s.equalsIgnoreCase() вместо s.equals()   -  person Per Henrik Lausten    schedule 01.12.2015
comment
Съгласен съм с Per относно пренебрегването на главни и малки букви, но въз основа на предложението на Paul бих препоръчал тест за равенства, използващ s.toUpperCase() == CATEGORY_DISCOUNT;   -  person pipalia    schedule 01.12.2015


Отговори (2)


Опитайте s=="CATEGORY_DISCOUNT". Прехвърляте го към SSJS низ, а не java.lang.String. .equals() може да не работи за SSJS низове.

person Paul Stephen Withers    schedule 01.12.2015

Колеги програмисти, проблемът не беше свързан с кода, а със стойностите, записани в документа.

Оказва се, че падащото меню, използвано за въвеждане на стойности, има формула, която изглежда така:

FrenchValue + " | " + Alias

Разбира се, в мрежата допълнителното пространство всъщност се спестява с псевдонима. Така че имах допълнително място в началото на всяка стойност, която търсех...

Един-два пъти съм се хващал от това, а сега и колегата си взе ценен урок!!!

Стандартният код започна да работи като чар, след като допълнителното пространство беше премахнато от колоната за изглед, което беше използвано в падащото меню на формуляра, който запълваше полето в колоната за изглед.

Крайният код на колоната беше подобен на този:

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