Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejs
// 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
propertyjsdoc.plusworkflow
classNamePW.core.fn.Functions
:

Code Block
languagejs
 var fn = Functions.getFunction("maxOf",[1,4]);

Mając pobraną funkcję z parametrami (

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.core.fn.Function
) możemy ją wywołać:

Code Block
languagejs
 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
languagejs
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
languagejs
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 83, która zwróci wynik 3. Wydaje się jednak, że prostszym i "czystszym" rozwiązaniem jest wywołanie samemu wewnętrznej funkcji:

Code Block
languagejs
var fn = Functions.getFunction('maxOf',[Functions.getFunction('maxOf',[8,4]),3]);