C/AL dla Dynamics NAV 2018
Rozszerzenie VS Code do pracy z obiektami C/AL z Dynamics NAV 2018 wyeksportowanymi przez
finsql.exe (jeden obiekt na plik .txt): nawigacja po kodzie, porównanie repozytorium
ze środowiskami REPO → DEV → TEST → PROD, import i eksport obiektów oraz praca z repozytorium
w Azure DevOps.
Nawigacja działa na samych plikach — bez połączenia z bazą, bez licencji NAV i bez pakietów symboli.
Porównanie, import i eksport korzystają z finsql.exe i SQL Servera (uwierzytelnianie Windows).
Wersja Preview. Uwagi i błędy: kontakt przez stronę wydawcy w Marketplace.
Nawigacja po kodzie
| Funkcja |
Opis |
Przejdź do definicji (F12) |
Procedury, pola tabel, obiekty. Rozwiązuje przez deklaracje zmiennych — Cust."No." trafia w pole 1 tabeli 18. |
Znajdź odwołania (Shift+F12) |
Wywołania, odczyty pól, CODEUNIT::"Sales-Post", PAGE.RUNMODAL, uprawnienia, subskrypcje zdarzeń. |
Symbole w pliku (Ctrl+Shift+O) |
Pola, triggery, zmienne globalne i procedury, pogrupowane po sekcjach. |
Symbole w workspace (Ctrl+T) |
Każda procedura, pole, trigger i zmienna globalna. Prefiks # szuka obiektów: #Sales-Post, #80. |
| Podpowiedź (hover) |
Sygnatura procedury, obiekt właściciel, liczba odwołań. |
| Diagnostyka |
Błędy parsera i odwołania do pól, których tabela nie ma (cal.lintUnknownFields). |
| Kolorowanie składni |
Słowa kluczowe, typy, funkcje wbudowane, nagłówki obiektów, sekcje. |
Czego nie robi: nie kompiluje — jedynym kompilatorem C/AL jest finsql.exe, dlatego nie ma
zmiany nazwy (bez kompilatora nie da się sprawdzić, że jest bezpieczna). Typy wyrażeń nie są
wnioskowane: rozwiązywanie idzie po deklaracjach (Cust@1000 : Record 18), więc RecordRef,
Variant i łańcuchy przez DotNet nie są rozwiązywane.
Pierwsze uruchomienie
- Otwórz folder repozytorium z eksportem — z podfolderami
TAB/, COD/, PAG/… albo z nimi w src/.
Albo C/AL: Pobierz repozytorium — git clone z linku Azure DevOps.
- C/AL: Konfiguracja środowisk (koło zębate w widoku Porównanie) — formularz
cal.config.json.
- Testuj przy każdym środowisku.
Indeks buduje się przy pierwszym starcie (ok. 25 s dla 7 500 obiektów) i trafia do
.llm/cal-index.bin; kolejne starty trwają poniżej sekundy.
Wymagania do porównania, importu i eksportu: Windows PowerShell 5.1, Development Environment
(finsql.exe) NAV 2018 w wersji bazy, dostęp do SQL Servera (uwierzytelnianie Windows) i konto
użytkownika NAV. Skrypty PowerShell są w paczce rozszerzenia — repozytorium obiektów ich nie potrzebuje.
Konfiguracja i diagnostyka
Formularz cal.config.json:
- finsql.exe — wykrywany na dysku; ustawienie tego komputera (
cal.finsqlPath), nie wspólnego pliku.
Gdy go brak, formularz podaje, skąd pobrać Development Environment bez pełnej instalacji NAV.
- Strona kodowa — w jakiej stronie OEM finsql zapisuje obiekty (patrz niżej).
- Środowiska — bazy NAV podpowiadane z serwera SQL, instancje NST zarejestrowane w bazie
(serwer, port zarządzania), znaczniki Import i Produkcja, ścieżka promocji.
Testuj sprawdza: SQL · użytkownik NAV · finsql · instancja NST · port zarządzania · próbny eksport
Codeunit 1 — przy błędzie z przyczyną i sposobem naprawy. C/AL: Diagnostyka otwiera formularz
i testuje wszystko naraz. Hasła nie trafiają do pliku — tylko uwierzytelnianie Windows.
Strona kodowa
finsql zapisuje eksport w stronie kodowej OEM systemu Windows, na którym działa — dla polskiego
systemu CP852, nie CP1250 i nie UTF-8. Inne systemy: 850 (Europa Zachodnia), 437 (US),
865 (nordyckie), 866 (cyrylica). Wybór w formularzu albo w pliku:
{ "codePage": 852 }
Brak wpisu = 852. Według tej strony czytają indeks, porównanie, nowy obiekt i skrypty. Po starcie
i po zmianie rozszerzenie proponuje ustawienie files.encoding (np. cp852) dla workspace —
bez tego VS Code zgaduje kodowanie, znaki narodowe są nieczytelne, a zapis w złym kodowaniu
psuje obiekt na stałe.
Jak pracować
Panel C/AL ma jeden widok Porównanie z parami w kolejności ścieżki promocji:
| Para |
Kiedy się liczy |
Co robisz |
| REPO → DEV |
po kliknięciu (albo po starcie, gdy cal.compareOnStartup) |
↑ wgraj do DEV, ↓ pobierz do repo, klik = porównanie pliku |
| DEV → TEST, TEST → PROD |
po kliknięciu „porównaj” |
różnice między bazami, przeniesienie |
Wynik porównania jest zapamiętywany z datą i godziną — tabela i lista korzystają z niego,
dopóki nie wybierzesz „Przelicz”.
Tabela porównania (ikona tabeli w nagłówku widoku) pokazuje wybrane środowiska naraz:
kolumny REPO / DEV / TEST / PROD (Version List i data zapisu). Pierwsze wybrane środowisko jest
wzorcem — w pozostałych ✓ oznacza zgodność, ✗ różnicę. Wybór: DEV-TEST, TEST-PROD, DEV-TEST-PROD,
REPO-DEV-TEST-PROD albo dowolna kombinacja (np. DEV-PROD, TEST-ACC). Filtr typów obiektów
z listy rozwijanej. Zaznaczone obiekty przenosisz przyciskami Wgraj do DEV, Przenieś DEV → TEST itd.
Obiekt usunięty w DEV, który był zgodny z repo, trafia do grupy Usunięte w DEV — do usunięcia
z repo. Usuń z repo (prawy przycisk) przenosi pliki do kosza; usunięcie zatwierdzasz commitem.
Skróty w edytorze obiektu:
| Skrót |
Działanie |
Ctrl+Alt+D |
porównaj plik z DEV |
Ctrl+Alt+I |
wgraj do DEV i skompiluj |
Ctrl+Alt+R |
uruchom w kliencie NAV |
Ctrl+Alt+K |
lista obiektów środowiska albo repo (filtry, wersje) |
Ctrl+Alt+V |
dodaj zmienną |
Rzadziej używane rzeczy (nowy obiekt, pełny zrzut, blokady, debugger, przewodnik) są w menu …
widoku i w palecie poleceń pod C/AL:.
Repozytorium w Azure DevOps
Panel konfiguracji pokazuje stan repozytorium (do wysłania / do pobrania / niezatwierdzone)
z przyciskami Pobierz zmiany, Zatwierdź zmiany…, Wyślij, Otwórz w Azure.
- C/AL: Zatwierdź zmiany — wybór plików i zadania z Twoich aktywnych w Azure Boards
(albo numeru wpisanego ręcznie); opis z
#<id> wiąże commit z zadaniem.
- C/AL: Zadania i historia obiektu (prawy przycisk w edytorze) — commity obiektu z zadaniami.
Obiekt zmieniany w kilku zadaniach ma kilka commitów — każdy ze swoim zadaniem.
- C/AL: Otwórz w Azure DevOps — bieżący plik w przeglądarce.
Zadania z Boards wymagają tokenu PAT (Work Items: Read) — zapisywanego w bezpiecznym magazynie VS Code.
Ustawienia
| Ustawienie |
Znaczenie |
cal.sourceRoot |
folder z podfolderami typów obiektów; puste = src albo katalog główny |
cal.finsqlPath |
ścieżka do finsql.exe na tym komputerze |
cal.compareOnStartup |
porównanie REPO → DEV po starcie VS Code (domyślnie wyłączone) |
cal.lintUnknownFields |
podkreślanie odwołań do nieistniejących pól tabel |
cal.toolsPath |
własny katalog skryptów PowerShell zamiast tych z paczki |
Licencja
Freeware G.Nexus — bezpłatne użycie, także komercyjne. Szczegóły w pliku LICENSE, komponenty
open source w THIRD-PARTY-NOTICES.txt. Microsoft, Dynamics i NAV są znakami towarowymi Microsoft
Corporation; rozszerzenie nie jest produktem Microsoft.