Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Dyrektywa skryptu #pragma systemu PROMOTIC

Dyrektywa skryptu #pragma umożliwia w skrypcie wpływanie na sposób zastosowania owego skryptu w systemie PROMOTIC a także ewentualnie modyfikację samej zawartości skryptu.

Jednak do przetworzenia dyrektywy #pragma dochodzi w chwili kompilacji takiego skryptu i tym różni się od wywołanie metod podczas uruchomienia skryptu. W przypadku aplikacji webowej skrypty panelu graficznego są wprawdzie uruchamiane u kilenta, lecz przetworzenie dyrektywy #pragma przebiega na serwerze i klient uzyska już przetworzony skrypt.

System PROMOTIC podczas kompilacji przetworzy daną dyrektywę #pragma i właściwy kod dyrektywy #pragma usunie ze skryptu. Jednak na miejsce byłej dyrektywy #pragma może zostaś zapisany nowy kod, jako wynik przetworzenia odpowiedniej dyrektywy #pragma.

Uwaga! Dyrektywa skryptu #pragma zawsze jest zapisana w notatce skryptu, tzn. w VBScript za znakiem "apostrof" ('), w JavaScript za dwoma znakami "ukośnik" (//).

 
Istnieją dwa rodzaje dyrektyw #pragma:
 

#pragma variable

Służy do modyfikacji właściwego skryptu, tzn. do skryptu jest włożony nowy kod, jako wynik przetworzenia odpowiedniej dyraktywy #pragma.

Dyrektywa skryptu ta włoży do ciała skryptu kod zawierający założenie zmiennej lokalnej w skrypcie o odpowiedniej nazwie (polecenie var dla JavaScript lub Dim dla VBScript) a następnie kod do zinicjalizowania zmiennej odpowiednią wymaganą wartością (wartością taką może być również odniesienie do obiektu).

Włożony kod, powstały w wyniku przetworzenia jednej i tej samej dyrektywy #pragma w tym samym skrypcie może różnić się na przykład w zależności od tego, czy skrypt znajduje się w lokalnym albo Web panelu, itd.

Ten rodzaj dyrektywy #pragma sprawia, że skrypty są bardzeij przejrzyste, umożliwia w sposób systemowy wychwycić odniesienia do obiektów a także umożliwia wychwycić niektóre różnice pomiędzy panelem lokalnym a Web panelem.

 
#pragma variable x = Macro("makro wyrażenie"):

Umożliwia obliczyć makro wyrażenie. W skrypcie wytworzy zmienną lokalną oraz ustawi jej wartość początkową na wartość rezultatu obliczenia wyrażenia makro. Jest stosowana zwłaszcza do wczytania tekstu lokalizacyjnego (Makro wyrażenie $.text). W przypadku Webu dochodzi do obliszenia wyrażenia już na serwerze, więc przetworzenie dyrektywy #pragma posiada dostęp do danych i plików serwera.

Na przykład '#pragma variable sComment = Macro("$.text('sys','comment')")

Inną możliwością jak uzyskać zlokalizowany tekst użycie Makro wyrażenie $.text lub EvalMacro.

 
#pragma variable x = PmaObjectRef("ścieżka"):

Umożliwia uzyskanie odniesienia do Pma obiekt w drzewie Pma obiektów lub jego implementacyjny podobiekt. W skrypcie zostanie założona zmienna lokalna i zostanie ustawiona jej wartość początkowa jako odniesienie do wymaganego obiektu (dla takiej zmiennej zatem nie są stosowane polecenia Dim oraz Set).

W ten sposób uzyskane odniesienie do obiektu jest dogodne, ponieważ odniesienie jest znane już w środowisku deweloperskim PROMOTIC, tzn. że PROMOTIC wie o takim odniesieniu i jest znany typ obiektu, do którego jest wytwarzane odniesienie co w przyszłości umożliwi w edytorze skryptów inteligentną pomoc z lictą metod i właściwości obiektu, itd.

Do uzyskania obiektu położonego na dynamicznej (z góry nie znanej) ścieżce służy metoda PmaObject.Pm.

Na przykład '#pragma variable oTemperature1 = PmaObjectRef("/Block1/Data/#vars/Temperature1")

Na przykład '#pragma variable oTemperature1 = PmaObjectRef("../Data/#vars/Temperature1")

 
#pragma variable x = PmgObjectRef("ścieżka"):

Umożliwia uzyskanie odniesienia do Pmg obiektu lub do jego podobiekt implementacyjnego w panelu graficznym. W skrypcie zostanie założona zmienna lokalna i zostanie ustawiona jej wartość początkowa jako odniesienie do wymaganego Pmg obiektu lub jego implementacyjny podobiekt Dyrektywa skryptu ta działa wyłącznie w skryptach w panelach graficznych (zdarzenia Pmg obiektów).

W ten sposób uzyskane odniesienie do obiektu jest dogodne, ponieważ odniesienie jest znane już w środowisku deweloperskim PROMOTIC, tzn. że PROMOTIC wie o takim odniesieniu i jest znany typ obiektu, do którego jest wytwarzane odniesienie co w przyszłości umożliwi w edytorze skryptów inteligentną pomoc z lictą metod i właściwości obiektu, itd.

Do uzyskania Pmg obiektu położonego na dynamicznej (z góry nie znanej) ścieżce służy metoda PmgObject.Items.

Na przykład '#pragma variable oEdit0 = PmgObjectRef("../edit0")

Na przykład '#pragma variable oTemperature1 = PmgObjectRef("../edit0/#vars/Temperature1")

#pragma option

Służy do wpłynięcia na sposób, w jaki w systemie PROMOTIC zostanie zastosowany skrypt, tzn. że ustawia niektóre parametry systemu PROMOTIC. Nie dochodzi do modyfikacji zawartości skryptu (z wyjątkiem usunięcia właściwej dyrektywy #pragma).
 
#pragma option OldGlobalMethodCall:

Umożliwia włączenie starego sposobu wywoływania metod globalnych, kiedy metody globalne były wywoływane w skrypcie bezpośrednio przez ich nazwę (tak samo jak funkcje języka VBScript). Sposób ten jednak nie był zgodny z Web aplikacjami. W nowy sposób można metody globalne wywołać przy pomocy Pm.Methods. Ta dyrektywa skryptu ma sens tylko dla metod globalnych aplikacji. Jeżeli nie jest ustawione (lub jest zastosowana wartość 0), wtedy jest wykorzystany nowy sposób wywołania metod globalnych.

Składnia: '#pragma option OldGlobalMethodCall = 0/1

gdzie 0 (domyślnie) oznacza nowy sposób a 1 oznacza stary sposób.

Na przykład '#pragma option OldGlobalMethodCall = 1

Przykład wywołania metody gloablnej Test z dwoma parametrami w skrypcie bezpośrednio w stary sposób:

  v = Test(5, 8)

Przykład wywołania metody globalnej Test z dwoma parametrami w skrypcie pośrednio w nowy sposób:

  v = Pm.Methods.Test(5, 8)


Historia:
Pm8.03.07: Usunięty błąd: w skrypcie nie działała dyrektywa skryptu #pragma option OldGlobalMethodCall.
Pm8.00.00: Podczas pisania skryptów można teraz wykorzystać tzw. #pragma dyrektywa skryptu. Służy w celu prostszego wytwarzania zmiennej pomocniczej lub specjalnych flag do interpretacji skryptu.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice