Грешка в Xpages setvalue?

ГРЕШКА

Моята база данни позволява на Anonymous достъп до базата данни и изпращане на формуляр, за да извършат процес. Тя има 3 роли в [Кандидат], [Администратор], [Рецензент]

проблем:

Трябва да актуализирам полето „Имейл“, като комбинирам 3 различни полета „поща“, за да го комбинирам. Така че използвам елемент за добавяне, но изглежда, че запазва грешни данни, дава допълнителен [кандидат]. Приложеното изображение ще покаже как се показва

var v;
//  Update mail 1 and mail 2 and mail3 into Email field!
if  
(
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")!=null && document1.getValue("Mail2")!="")&&
    (document1.getValue("Mail3")!=null && document1.getValue("Mail3")!="")
)   //all not empty
    {
        v.addElement(document1.getValue("Mail1")+"@brookedockyard.com.my"); 
        v.addElement(document1.getValue("Mail2")+"@brookedockyard.com.my");
        v.addElement(document1.getValue("Mail3")+"@brookedockyard.com.my"); 
        document1.replaceItemValue("Email",v)


else if
(
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")==null && document1.getValue("Mail2")=="")&&
    (document1.getValue("Mail3")===null && document1.getValue("Mail3")=="")
)   //  only have mail 1
    {
        document1.replaceItemValue("Email", document1.getValue("Mail1")+"@brookedockyard.com.my")
    }
else if
(
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")!=null && document1.getValue("Mail2")!="")&&
    (document1.getValue("Mail3")==null && document1.getValue("Mail3")=="")
)   //  only have mail 1 and mail 2
    {
        v.addElement(document1.getValue("Mail1")+"@brookedockyard.com.my"); 
        v.addElement(document1.getValue("Mail2")+"@brookedockyard.com.my"); 
        document1.replaceItemValue("Email",v)


else if
(   
    (document1.getValue("Mail1")!=null && document1.getValue("Mail1")!="")&&
    (document1.getValue("Mail2")==null && document1.getValue("Mail2")=="")&&
    (document1.getValue("Mail3")!=null && document1.getValue("Mail3")!="")
)       //  only have mail 1 and mail 3
    {
        v.addElement(document1.getValue("Mail1")+"@brookedockyard.com.my"); 
        v.addElement(document1.getValue("Mail3")+"@brookedockyard.com.my"); 
        document1.replaceItemValue("Email",v)

    }       

използвам сървърен javascript, за да запазя документ. Но по време на запазването добавя допълнителна информация в системата.


person Desmond Sim    schedule 08.06.2017    source източник
comment
Къде е останалата част от кода? Как го наричате на XPage, където инициализирате v и т.н.   -  person shillem    schedule 08.06.2017


Отговори (3)


Мисля, че вашият код се нуждае от известна оптимизация. Този код прави същото като вашия:

var v = [];
["Mail1", "Mail2", "Mail3"].forEach(function(name) {
    if (document1.getValue(name)) {
        v.push(document1.getValue(name)+"@brookedockyard.com.my"); 
    }
});
document1.replaceItemValue("Email",v);

Освен това той инициализира променливата v като празен масив. Използвайте масиви вместо вектори, когато е възможно. Той е по-ориентен на JavaScript.

person Knut Herrmann    schedule 08.06.2017

Къде е създаден вашият вектор (v)? Вие просто добавяте елементи към този съществуващ вектор, така че вашият код (настройка на Form, ако използвате computeWithForm, настройка XPage, SSJS код) трябва да инициализира този вектор със стойност „[Applicant]“ или да извлича вектор, който вече включва „[ Заявител]" стойност.

Шансовете кодът на IBM да добави "[Кандидат]" към елемента по време на метода setValue() са нула. Грешката почти сигурно е в кода на вашето приложение, а не е въведена от setValue(). Търсенето в Eclipse трябва да помогне да се идентифицира къде кодът на приложението задава тази стойност.

person Paul Stephen Withers    schedule 08.06.2017
comment
декларирам v като променлива [var v] след това само с код... като отидете да накарате ролите ми да го актуализират ~ - person Desmond Sim; 08.06.2017
comment
вече използвам тази променлива на някое място~, което спестява допълнителна стойност вътре! Благодаря за помощта - person Desmond Sim; 08.06.2017

Създайте bean с обхват на заявка.

faces-config.xml

<managed-bean>
    <managed-bean-name>forgetSsjs</managed-bean-name>
    <managed-bean-class>demo.bean.ForgetSsjsBean
    </managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

бобът

package demo.bean;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.Vector;

import javax.faces.FacesException;
import javax.faces.context.FacesContext;

import lotus.domino.NotesException;

import com.ibm.commons.util.StringUtil;
import com.ibm.xsp.model.domino.wrapped.DominoDocument;
import com.ibm.xsp.util.FacesUtil;

public class ForgetSsjsBean implements Serializable {

    private static final long serialVersionUID = 1L;

    public void saveTheDoc() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        DominoDocument wrapper = (DominoDocument) FacesUtil.resolveVariable(facesContext,
                "document1");

        Set<String> emails = new HashSet<String>();

        try {           
            for (int i = 1; i < 4; i++) {
                addEmail(wrapper.getItemValueString("Mail" + i), emails);
            }

            if (!emails.isEmpty()) {
                wrapper.replaceItemValue("Email", new Vector<String>(emails));
                wrapper.save();
            }
        } catch (NotesException e) {
            throw new FacesException(e);
        }
    }

    private void addEmail(String name, Set<String> emails) {
        if (StringUtil.isEmpty(name)) {
            return;
        }

        emails.add(name + "@brookedockyard.com.my");
    }

}

Свържете действието на вашия манипулатор на събития с метода, който определяте за запазване на документа:

страницата на xsp

<xp:this.data>
    <xp:dominoDocument var="document1" ... />
</xp:this.data>

...

<xp:button id="button1" value="save this thing">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" action="#{forgetSsjs.saveTheDoc}" />
</xp:button>
person shillem    schedule 08.06.2017