如何将变量参数传递给XPage SSJS函数?

时间:2012-03-27 21:00:45

标签: xpages

如果我在SSJS中有一个功能,并且我想传递一个“公司”参数和一个可以改变的其他参数列表,那么最好的方法是什么?使用某种hashMap或JSON还是别的什么?

例如给出类似的东西:

myfunction(code:string,paramList:??){ //在这里做点什么

}

基本上该功能会创建一个文档。有时我会有某些字段,我会立即传递并填充,有时候我会有不同的字段,我想要填充。

你如何传递它们然后在函数中解析?

谢谢!

3 个答案:

答案 0 :(得分:5)

我会用JSON对象作为第二个参数...

function myfunction(code:String, data) {
   // do stuff here...
   var doc:NotesDocument = database.CreateDocument();
   if(data) {
      for (x in data) {
         doc.replaceItemValue(x, data[x]);
      }
   }
   // do more stuff
   doc.save(true, false);
}

然后你调用这样的函数:

nyfunction("somecode", {form:"SomeForm", subject:"Whatever",uname:@UserName()});

快乐的编码。

/ Newbs

答案 1 :(得分:5)

使用arguments参数...在JavaScript中,您不需要在功能块本身中定义任何参数。因此,例如,以下调用:

myFunction(arg1, arg2, arg3, arg4);

可以合法地传递给以下函数:

myFunction () {
  // do stuff here...
}

当我这样做时,我通常在parens中发表评论以表明我期待变量参数:

myFunction (/* I am expecting variable arguments to be passed here */) {
  // do stuff here...
}

然后,您可以像这样访问这些参数:

myFunction (/* I am expecting variable arguments to be passed here */) {
  if (arguments.length == 0) {
    // naughty naughty, you were supposed to send me things...
    return null;
  }

  myExpectedFirstArgument = arguments[0];

  // maybe do something here with myExpectedFirstArgument
  var whatEvah:String = myExpectedFirstArgument + ":  "

  for (i=1;i<arguments.length;i++) {
    // now do something with the rest of the arguments, one 
    // at a time using arguments[i]
    whatEvah = whatEvah + " and " + arguments[i];
  }

  // peace.
  return whatEvah;
}
瓦拉,可变论据。

但是,更多的是你的问题,我认为你不需要实际发送变量参数,也不需要经历创建实际JSON(这实际上是javascript对象的字符串解释)的麻烦,只需创建然后将实际对象发送为关联数组,以获取字段名称和字段值:

var x = {};
x.fieldName1 = value1;
x.fieldName2 = value2;
// ... etc ...

然后在你的函数中,现在只需要两个参数:

myFunction(arg1, arg2) {
   // do whatever with arg1

   for (name in arg2) {
     // name is now "fieldName1" or "fieldName2"
     alert(name + ": " + x[name]);
   }

}

希望这有帮助。

答案 2 :(得分:-3)

我认为SSJS不可能。我认为你最好的选择是传递一个hashmap或你自己的(java)对象。我认为自定义java对象将是最好的选项,因为您可以定义一些关于函数如何处理它的“结构”。一个hashmap可以很容易地扩展,但是如果你有很多代码创建了很多不同的hashmap结构就不容易...