xpages获取文档/数据源的UNID

时间:2014-10-23 09:58:32

标签: xpages

我在使用数据源的xpage上使用Mark Hughes picklist。我从中选择值的视图是列出具有另一个数据源的文档。

我将所选值放入<xp:inputText>。我想创建一个链接,它应该从视图中将我重定向到列出的文档(从中我获取了值)。换句话说,我确实想从视图中找到文档的UNID,我选择了它。

我为ssjsSelectFunction尝试了以下代码:

var unid = viewScope.unid;

if(typeof unid != "undefined" && unid != null)
{
var doc = database.getDocumentByUNID(unid);
var val1 = doc.getItemValueString("txt_numeAcord_1");
var val2 = doc.getUniversalID();

getComponent("inputText24").setValue(val1);
getComponent("inputText25").setValue(val2);
}

但是在选择了所需的文档之后。从选项列表中,只有inputText25更新了值(UNID),inputText24为空。只有当我再次打开选项列表并选择文档时,才会添加inputText24字段值。我想我错过了什么。

我怎样才能做到这一点?

我的xpage代码:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex" >
    <xp:this.data>
        <xp:dominoDocument var="Contr" formName="(fmFormularCIP)"></xp:dominoDocument>
        <xp:dominoView var="view1" viewName="vwAcord"></xp:dominoView>
    </xp:this.data>
    <xp:panel id="AcordCadru">
        &#160;&#160;&#160;

        <xp:br></xp:br>
        &#160;&#160;
        <xp:checkBox text="Acord cadru" id="checkBox6"checkedValue="Da" uncheckedValue="Nu" value="#{Contr.chkAcord}">

            <xp:eventHandler event="onchange" submit="true"
                refreshMode="partial" refreshId="AcordCadru">
            </xp:eventHandler>
        </xp:checkBox>
        &#160;

        <xp:inputText id="inputText24" value="#{Contr.acord}">


        </xp:inputText>

        <xc:viewpicklist rowsPerPage="10"
            buttonImage="./folder_explore.png" tableClass="tablecellgreen"
            headerClass="headerclass" rowClass="odd, even" searchBar="false"
            searchButtonText="Search" searchButtonClass="button2"
            searchBarClass="headerclass" pagerStyleFirst="navbutton1"
            pagerStylePrevious="navbutton2" pagerStyleCurrent="navbutton4"
            pagerStyleNext="navbutton2" pagerStyleLast="navbutton3"
            typeAheadBar="false" select="UNID" onReturn="Set Scope Value"
            bottomBarClass="bottomround headerclass" cancelButtonText="Cancel"
            cancelButtonClass="button2 floatthisright" type="Single Value"
            finishButtonText="Finish" finishButtonClass="button2 floatthisright"
            multiSelectButtonAddImg="./add.png"
            multiSelectButtonRemoveImg="./delete.png"
            picklistButtonClass="button" openDialogWith="Button"
            picklistLinkImg="./add.png" multiSelectLinkAddImg="./add.png"
            multiSelectLinkRemoveImg="./delete.png" selectWith="Button"
            multiValueSeparator="," clearSearchImg="./cross.png"
            SelectCellWidth="30px" dialogID="dialog1"
            dialogTitle="Alegeti nr. acord cadru" fieldName="inputText24"
            refreshID="AcordCadru" datasrc="view1" selectColumn="0"
            varName="viewScope.unid">
            <xc:this.viewColumn>
                <xp:value>0</xp:value>




                <xp:value>1</xp:value>
                <xp:value>2</xp:value>
                <xp:value>3</xp:value>
                <xp:value>4</xp:value>
            </xc:this.viewColumn>

            <xc:this.ssjsSelectFunction><![CDATA[#{javascript:
var unid = viewScope.unid;

if(typeof unid != "undefined" && unid != null)
{

var doc = database.getDocumentByUNID(unid);
var val1 = doc.getItemValueString("txt_numeAcord_1");
var val2 = doc.getUniversalID();


Contr.setValue("acord",val1);
Contr.setValue("sv",val2);
}}]]></xc:this.ssjsSelectFunction>
        </xc:viewpicklist>
        <xp:br></xp:br>
        &#160;&#160;&#160;

        <xp:inputText id="inputText25" value="#{Contr.sv}">


        </xp:inputText>
    </xp:panel>


</xp:view>

1 个答案:

答案 0 :(得分:1)

inputText24未获得所选值,因为执行ssjsSelectFunction的代码为时已晚。它在刷新由参数refreshID引起的面板“AcordCadru”期间执行。位于xc:viewpicklist前面的所有字段都会在 ssjsSelectFunction代码执行之前刷新。这就是为什么inputText24没有获得新的选定值,而是inputText25之后的xc:viewpicklist

如果您将inputText24置于xc:viewpicklist后面,则会获得新选择的值。

但是,您可能希望首先使用字段inputText24,然后选择选项列表按钮xc:viewpicklist。对于这个

  • 删除ssjsSelectFunction代码
  • 使用完全相同的代码

    inputText24前面添加一个计算字段
    <xp:text
        escape="true"
        id="computedField1">
        <xp:this.value><![CDATA[#{javascript:
            var unid = viewScope.unid;          
            if (unid && unid !== Contr.sv) {
                var doc = database.getDocumentByUNID(unid);
                var val1 = doc.getItemValueString("txt_numeAcord_1");
                Contr.setValue("acord",val1);
                Contr.setValue("sv",unid);
            }
            return "";
            }]]></xp:this.value>
    </xp:text>
    

    它会将新选择的值设置为文档,并立即在inputText24inputText25中显示。