...
Code Block |
---|
|
// brak zdefiniowanych typów
PW.Functions.register("isVariable", "boolean", function(arg1){
// arg1 jest obiektem klasy PW.component.Arg
return !arg1.isArray && arg.value.is("variable");
}); |
Funkcje ogólne tworzone dla każdej funkcji, która z definicji działa na danych dowolnego typu. Przykładem takiej funkcji systemowej jest funkcja eq.
Rejestracja we wtyczce
Rejestracja funkcji we wtyczce jest taka sama jak zostało to opisane powyżej, jednak należy dodatkowo zaznaczyć, że wtyczka ta udostępnia funkcje do zarejestrowania. W tym celu należy w pliku suncode-plugin.xml dodać wpis:
...
Taki wpis spowoduje automatyczne wyszukanie wszystkich zdefiniowanych funkcji.
Wykorzystanie funkcji po stronie przeglądarki
Obecnie funkcje mogą być wykorzystywane na formularzu zadania.
Pobranie funkcji odbywa się za pomocą obiektu
Jsdoc |
---|
property | jsdoc.plusworkflow |
---|
className | PW.core.fn.Functions |
---|
|
: Code Block |
---|
|
var fn = Functions.getFunction("maxOf",[1,4]); |
Mając pobraną funkcję z parametrami (
Jsdoc |
---|
property | jsdoc.plusworkflow |
---|
className | PW.core.fn.Function |
---|
|
) możemy ją wywołać: Code Block |
---|
|
fn.call(); //returns 4; |
W powyższym przykładzie pobrania funkcji, parametry zostały podane w sposób uproszczony, czyli same wartości bez konkretnego typu. Podczas konwersji typów, mechanizm sam zgadnie typy tych wartości. Gdyby została tam podana wartość tekstowa np.: "zmienna_1", to zostałoby to rozpoznane jako typ string. Jednak w przypadku, gdybyśmy chcieli, aby w tym miejscu znalazła się wartość zmiennej formularzowej o id zmienna_1, to w takim przypadku trzeba podać wartość razem z typem:
Code Block |
---|
|
var fn = Functions.getFunction("maxOf",[{type: "variable",value: "zmienna_1"}, 4]);
//lub
var fn = Functions.getFunction("maxOf",[ServiceFactory.getVariableService().get("zmienna_1"), 4]); |
Istnieje również możliwość podania innej funkcji w parametrze:
Code Block |
---|
|
var fn = Functions.getFunction('maxOf',[{type:"function",value:{name:"maxOf",parameters:[{type:"float",value:8},{type:"float",value:4}]}} ,3]); |
W powyższym przykładzie najpierw zostanie wywołana wewnętrzna funkcja maxOf z parametrami 8 i 4, która zwróci wynik 8 i następnie zostanie wywołana funkcja zewnętrzna maxOf z parametrami 8 i 3, która zwróci wynik 3. Wydaje się jednak, że prostszym i "czystszym" rozwiązaniem jest wywołanie samemu wewnętrznej funkcji:
Code Block |
---|
|
var fn = Functions.getFunction('maxOf',[Functions.getFunction('maxOf',[8,4]),3]); |