IP_Programowanie_201..

Transkrypt

IP_Programowanie_201..
Informatyzacja Przedsiębiorstw
Microsoft Dynamics NAV 2016
Development Environment – C/AL
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 1
Plan zajęć
1
2
Informacje ogólne dotyczące środowiska deweloperskiego C/SIDE ............................................... 3
1.1
Zmienne ................................................................................................................................... 4
1.2
Funkcje .................................................................................................................................... 5
1.3
C/AL Symbol Menu .................................................................................................................. 8
1.4
Pomoc kontekstowa i Debugger.............................................................................................. 9
1.5
Przydatne funkcje .................................................................................................................. 10
Przykłady kodu w tabelach ............................................................................................................ 11
2.1
Szkolenie/Seminar ................................................................................................................. 11
2.2
Instruktor/Instructor ............................................................................................................. 12
2.3
Sala szkoleniowa/Seminar Room .......................................................................................... 13
2.4
Nagłówek rejestracji szkoleń/Seminar Registration Header ................................................. 15
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 2
1 Informacje ogólne dotyczące środowiska deweloperskiego C/SIDE
•
Kod piszemy zwykle w wyzwalaczach (triggerach) tabel. Przez Object Designera wybieramy
obiekt, np. tabelę Instructor, klikamy F9 (Widok C/AL Code) i znajdujemy się w wyzwalaczach.
Na początku umieszczone są wyzwalacze dotyczące ogólnie tabeli (obiektu), dalej
poszczególnych pól.
Przykład kodu:
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 3
1.1 Zmienne
•
•
•
Zmienne lokalne i globalne ustawiamy w menu Widok C/AL Globals albo Widok C/AL
Locals
Jako zmienne globalne najczęściej definiuje się stałe tekstowe (Text Constants), w których
umieszcza się wielojęzyczne treści komunikatów (np. komunikatów o błędzie).
Przykład:
Przydatne będą zmienne lokalne typu Rekord odwołujące się do tabel.
Przykład:
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 4
1.2 Funkcje
•
Własne funkcje (np. w ramach Codeunit’ów) tworzy się jako zmienne globalne (menu Widok
C/AL Globals).
•
Jeśli funkcja ma mieć jakiś parametr wejściowy, definiuje się go poprzez przycisk „Locals”.
Parametry mogą być przekazywane przez wartość albo referencję (jeśli zaznaczona jest opcja
„Var”).
Przykład:
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 5
•
Domyślnie, utworzone funkcje są widoczne tylko w obiekcie (np. Codeunicie) i nie można się do
nich odwołać z innego miejsca. Funkcje mają wówczas ustawioną własność Local na „Yes”, a ich
definicja poprzedzona jest słowem „Local”:
Aby z innego obiektu można było dowołać się do funkcji zdefiniowanej wewnątrz np. Codeunit’u
trzeba ustawić jej własność Local na „No”:
Wówczas można uruchomić funkcję zdefiniowaną w Codeunicie np. spod Akcji na page’u.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 6
Przykład:
Funkcja CreateSalesInvoice w Codeunicie Seminar Management (50010) ma ustawioną własność
Local na „No”. W akcji page’a Seminar Registration Card (50040) zdefiniowana została zmienna
globalna odwołująca się do Codeunit’u 50010. Pozwala to na wywołanie funkcji CreateSalesInvoice
w triggerze OnAction tej akcji.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 7
1.3 C/AL Symbol Menu
•
Podczas pisania kodu wyświetlane są podpowiedzi.
Ewentualnie można też korzystać z C/AL Symbol Menu (F5 lub menu Widok
Menu).
Przykład z listą pól zmiennej Resource:
C/AL Symbol
Przykład z wywołaniem funkcji TESTFIELD dla zmiennej Seminar.
Na dole pokazane są parametry funkcji.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 8
1.4 Pomoc kontekstowa i Debugger
•
W czasie pisania kodu pod klawiszem F1 jest dostępna pomoc kontekstowa m.in. z przykładami
wywołania funkcji, opisami parametrów, polami tabel i zmiennych.
•
Debugger uruchamiamy z menu Narzędzia Debugger Sesja debugowania...
(SHIFT +CTRL +F11)
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 9
1.5 Przydatne funkcje
•
•
•
Przydatne funkcje:
• GET //pobiera jeden rekord po kluczu głównym (nigdy po innym atrybucie)
• RESET //zdejmuje filtry
• SETRANGE //ustawia filtry; najlepiej filtrować po jakimś kluczu, więc przed SETRANGE
często pojawia się też SETCURRENTKEY
• FINDFIRST/FINDSET //pobiera jeden lub wiele rekordów
• REPEAT UNTIL NEXT=0 //typowa pętla
Różnica między zwykłym podstawieniem, a funkcją VALIDATE
• Name := Seminar.Name //pod pole Name zostanie podstawiona wartość pola Name
ze zmiennej Seminar
• VALIDATE(Name, Seminar.Name) //po podstawieniu pod Name wartości pola Name
ze zmiennej Seminar, zostanie wywołany trigger On Validate w polu Name.
Różnica między Triggerami OnLookUp i OnValidate
• OnLookUp jest wywoływany przed modyfikacją rekordu, można w nim zamieścić np.
jakieś filtrowanie.
• OnValidate jest wywoływany po podstawieniu, po modyfikacji rekordu.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 10
2 Przykłady kodu w tabelach
2.1 Szkolenie/Seminar
1. Należy oprogramować następujące pola:
• „Name” – kiedy użytkownik wprowadzi lub zmieni pole „Name” to należy uzupełnić
pole „Search Name” (wielkie litery)
•
„Last Date Modified” – kiedy rekord zostanie zmodyfikowany automatycznie należy
uzupełnić to pole datą roboczą
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 11
2.2 Instruktor/Instructor
1. Należy oprogramować następujące pola:
• „Resource No.” – po wybraniu numeru zasobu, system ma uzupełnić pole “Name”
tylko w przypadku, gdy wartość pola „Worker/Subcontractor” to „Worker”
Funkcja GET pobierze jeden rekord ze zmiennej (tutaj lokalnej) Resource po kluczu głównym. Zatem
będzie to rekord, dla którego klucz główny przyjmuje taką wartość jak pole „Resource No.” w
aktualnym rekordzie tabeli Instructor.
Zapis
„Worker/Subcontractor” = „Worker/Subcontractor”::Worker
to sprawdzenie czy pole „Worker/Subcontractor” przyjęło wartość Worker.
Alternatywnie zamiast IF „Worker/Subcontractor” = „Worker…” można to ustawić w warunkowym
łączeniu tabel we własnościach tabeli Instructor:
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 12
2.3 Sala szkoleniowa/Seminar Room
1. Należy oprogramować następujące pola:
• „Post Code” – po wybraniu kodu pocztowego system ma uzupełnić pole „City”
Wystarczy przekleić wywołanie standardowej funkcji np. z tabeli 18 „Customer”:
Dla zmiennej rekordowej PostCode wywołujemy funkcję „ValidatePostCode” z parametrami City i
„Post Code”, „Country/Region Code” (które są atrybutami w naszym aktualnym rekordzie, czyli w
Seminar Room).
Pola „County” nie ma w aktualnym rekordzie, więc możemy stworzyć tekstową zmienną lokalną
„County”, którą ustawimy na pustą wartość.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 13
Aby podejrzeć definicję funkcji „ValidatePostCode” klikamy prawym przyciskiem myszy w miejscu jej
wywołania i klikamy „Go To Definition…”.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 14
2.4 Nagłówek rejestracji szkoleń/Seminar Registration Header
1. Należy oprogramować następujące pola:
• „Seminar Code” – kiedy użytkownik wybierze kod szkolenia, powinny zostać
uzupełnione pola: „Seminar Name”, „Seminar Duration”, „Minimum Participants”,
„Maximum Participants”, „Seminar Price”. Można wybrać tylko szkolenie, które nie
jest zablokowane.
Funkcja GET pobierze jeden rekord ze zmiennej Seminar, który ma klucz główny o wartości takiej jak
„Seminar Code” z tabeli Seminar Registration Header.
Funkcja TESTFIELD sprawdzi, czy dla rekordu Seminar pole Blocked ma wartość FALSE (w zmiennych
typu Boolean są wartości yes/no, ale w kodzie piszemy true/false!). Jeśli nie ma takiej wartości, to
zostanie wyświetlony domyślny systemowy komunikat. To jest komunikat systemowy, nieustawialny
co do treści, ale wielojęzyczny.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 15
Jeśli szkolenia zablokowane nie mogą być wybierane, to trzeba to zrobić przez funkcję TESTFIELD,
a nie przez pokazany poniżej filtr do tabeli.
Byłby to filtr po atrybucie innym niż klucz główny, a zatem takie przefiltrowanie tabeli by strasznie
spowalniało przetwarzanie.
Poza tym, przy takim filtrowaniu tabeli użytkownik nie widziałby w ogóle na liście zablokowanych
szkoleń. On je musi widzieć, ale nie może ich wybierać.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 16
2. Pole „Seminar Code” można zmienić (czyli wybrać inną wartość) tylko, gdy wiersze
rejestracji szkolenia nie zostały jeszcze zarejestrowane.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 17
Funkcja RESET zdejmuje wszystkie filtry ze zmiennej rekordowej jakie ewentualnie mogły gdzieś
wcześniej pojawić się w kodzie.
Funkcja SETRANGE wyfiltruje nam tylko te rekordy ze zmiennej SeminarRegLine, które mają taki
SeminarRegLine."Seminar Registration No." jak aktualny numer rejestracji szkolenia.
Funkcja FINDFIRST pobiera pierwszy rekord z przefiltrowanej przez SETRANGE zmiennej. Równie
dobrze w tym przykładzie można by wykorzystać funkcję FINDSET, która pobiera od razu cały zbiór (a
dokładnie pierwsze 500 rekordów i jak po nich przeiteruje, to następne 500 i tak aż przejdzie po
całym zbiorze).
Funkcja NEXT pobiera następny rekord.
Izabela Szczęch – Informatyzacja Przedsiębiorstw
Strona 18

Podobne dokumenty