Ошибка установки Xpages?

ОШИБКА

Моя база данных позволяет 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)? Вы просто добавляете элементы в этот существующий вектор, поэтому ваш код (параметр формы при использовании 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