Моя база данных позволяет анонимным обращаться к базе данных и отправлять форму для выполнения процесса. У нее есть три роли внутри [Заявитель], [Админ], [Рецензент]
проблема:
Мне нужно обновить поле "Электронная почта", объединив 3 разных поля "почта", чтобы объединить их. Поэтому я использую элемент add, но он, похоже, сохраняет неправильные данные, он дает дополнительную [претенденту]. Прикрепленное изображение покажет, как оно отображается
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)
}
Я использую serveride javascript для сохранения документа. Но во время сохранения добавьте дополнительную информацию внутри системы.
Я думаю, что ваш код нуждается в некоторой оптимизации. Этот код делает то же, что и ваш:
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 родной.
Где создан ваш вектор (v
)? Вы просто добавляете элементы к существующему вектору, поэтому ваш код (параметр формы, если используется параметр computeWithForm, XPage, SSJS-код) должен быть инициализирован тем, что Vector имеет значение "[Заявитель]" или получает вектор, который уже содержит "[ Заявитель] ".
Шансы кода IBM, добавляющего "[Заявитель]" к setValue()
во время setValue()
равны нулю. Ошибка почти наверняка в вашем коде приложения, не введенном setValue()
. Поиск Eclipse должен помочь определить, где код приложения устанавливает это значение.
Создайте объект с привязкой к запросу.
Лица-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>