2012-03-27 16 views
1

Wenn ich eine Funktion in SSJS habe und ich möchte einen "festen" Parameter und eine Liste von anderen, die sich ändern können, übergeben, was ist der beste Weg, das zu tun? Mit einer Art HashMap oder JSON oder etwas anderem?Wie übergebe ich variable Parameter an eine XPages SSJS-Funktion?

zum Beispiel gegeben so etwas wie:

myfunction (Code: string, ParamList: ??) {// Sachen tun hier

}

Grundsätzlich ist die Funktion ein Dokument erstellen. Und manchmal habe ich bestimmte Felder, die ich gleich weitergeben will und bevölkere und manchmal habe ich andere Felder, die ich füllen möchte.

Wie würden Sie sie weitergeben und dann in der Funktion analysieren?

Danke!

Antwort

5

Verwenden Sie die Argumente Parameter ... In JavaScript sind Sie nicht alle Ihre erforderlichen Parameter im Funktionsbaustein selbst zu definieren. So zum Beispiel die folgenden Aufruf:

myFunction(arg1, arg2, arg3, arg4); 

legal an die folgende Funktion übergeben werden:

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

, wenn ich das tue, lege ich in der Regel einen Kommentar in den Pars I, um anzuzeigen, erwarte Variable Argumente:

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

Dann können Sie diese Argumente wie folgt zugreifen:

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; 
} 

Wallah, variable Argumente.

Aber mehr auf den Punkt Ihrer Frage, ich glaube nicht, dass Sie tatsächlich variable Argumente senden müssen, noch gehen durch die Mühe des Erstellens von tatsächlichen JSON (das ist wirklich eine String-Interpretation eines Javascript-Objekts) erstellen und das eigentliche Objekt dann als assoziatives Array Referenz senden Sie Ihre Feldnamen und Feldwerte zu erhalten:

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

dann in Ihrer Funktion, die jetzt nur noch zwei Parameter benötigt:

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

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

} 

this helps .

+0

Danke Jeremy. Ich mag es wirklich, das Objekt zuerst zu erstellen und das Objekt weiterzugeben. Ich werde es auch an anderen Orten verwenden. –

-3

Ich glaube nicht, dass das in SSJS möglich ist. Ich denke, die beste Option, die Sie haben, ist eine hashmap oder Ihr eigenes (java) Objekt zu übergeben. Ich denke, dass ein benutzerdefiniertes Java-Objekt die beste Option wäre, da Sie eine 'Struktur' definieren können, wie Ihre Funktion es verarbeiten kann. Ein hashmap kann leicht erweitert werden, aber es ist nicht einfach, wenn Sie eine Menge Code haben, der viele verschiedene hashmap Strukturen schaffen ...

+1

Es ist möglich, variable Argumente sind in Javascript möglich. –

+0

In Javascript: Ja, Sie können, aber die Frage war über SSJS. Und die Antwort war in Javascript. Ich habe es vorher in SSJS versucht, aber ich habe es nicht funktioniert –

+0

SSJS und JavaScript basieren beide auf ECMAScript - und das folgende funktioniert für mich: XPages Code: SSJS-Code: fu nction outputMultipleParms() { \t var Ausgabe: string = ""; \t für (i = 0; i

5

Ich würde dies als zweiten Parameter mit einem JSON-Objekt tun ...

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); 
} 

Dann rufen Sie die Funktion wie folgt aus:

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

Glücklich Codierung.

/Newbs

+1

Lesen Sie sich Ihr Beispiel weiter, nachdem ich meine unten gepostet habe - ich wurde von Ihnen mit einem JSON-Objekt weggeworfen ... es ist nicht wirklich ein "JSON-Objekt", es ist ein JavaScript-Objekt ... JSON ist eine String-Repräsentation eines Objekts - - Also im Wesentlichen meine und Ihre Antwort sind die gleichen. –

+0

Danke Henry! Das ist Jeremys Antwort sehr ähnlich. Du hast ihn geschlagen, aber ich mag seinen Teil davon, das Objekt zuerst zu erschaffen. Ein bisschen wie ein LotusScript TYPE fühlt sich an wie. Also werde ich sein als die Antwort markieren und werde dir ein Bier kaufen, wenn ich dich das nächste Mal sehe. Jeder gewinnt! :-) –

Verwandte Themen