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