Search code examples
javascriptxpagesxpages-ssjs

Xpages setvalue bug?


BUG

My database allow Anonymous to access the database and submit form to do process It have 3 roles inside [Applicant],[Admin],[Reviewer]

problem:

I need to update "Email" field by combining 3 different "mail" field to combine it. So i use add element but it seem save wrong data, it give an extra [applicant]. Attached image will display how it display

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)

    }       

i am using serverside javascript to save document. But during save it add extra information inside the system.


Solution

  • I think your code needs some optimization. This code does the same as yours:

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

    In addition it initializes the variable vas an empty array. Use arrays instead of Vectors when possible. It's more JavaScript native.