Professional Documents
Culture Documents
XL017 - Wykorzystanie API ERP XL
XL017 - Wykorzystanie API ERP XL
Wykorzystanie API
Wersja: 2019.0
Copyright © 2019 COMARCH
1 Wprowadzenie ............................................................................................................... 5
2 Hermetyczność ............................................................................................................... 5
3 Wersjonowanie .............................................................................................................. 6
U w a g a : A b y a p l i k a c j a w y k o r z y st u j ą c a C D N X L A P I m o gł a b y ć ł a t w o
pr z e n o s z o n a po m i ę d z y k o m pu t er a m i , w s k a z a n e j e st , a b y f o l d e r , w k t ó r y m j e s t
z a i n s t a l o w a n y pr o g r a m C D N X L , b y ł u m i e s z c z o n y w śc i e ż c e do s t ę pu s y s t em u
W i n do w s . U m o ż l i w i t o a p l i k a c j i z ew n ę t r z n ej o d sz u k a n i e o dpo w i e dn i c h
bi b l i o t e k D L L . W pr z y p a dk u , g d y a pl i k a c j a z ew n ęt r z n a j e st u m i e sz c z o n a w
k a r t o t e c e z b i bl i o t e k a m i pr o gr a m u C D N X L , po w y ż s z y w a r u n ek n i e j e st
konieczny.
2 Hermetyczność
Duży nacisk przy tworzeniu funkcji CDN XL API położony został na bezpieczeństwo i integralność danych
wprowadzanych poprzez te funkcje. Wynikiem tego jest funkcja weryfikująca Użytkownika (XLLogin) oraz
wewnętrzny mechanizm CDN XL kontrolujący poprawność zakończenia działania funkcji API.
Program CDN XL bardzo dokładnie śledzi wszelkie zmiany w bazie, dokonywane przy pomocy funkcji API. Jeżeli
wystąpi błąd, który spowoduje niepoprawne przerwanie działania aplikacji wykorzystującej API, to wszystkie
zmiany przez nią wprowadzone, które nie zostały poprawnie zakończone, zostają bezwzględnie wycofane.
Warunkiem poprawności zmian wprowadzanych przez API jest albo zakończenie wprowadzania obiektu, który
stanowi logiczną całość albo wylogowanie się z systemu funkcją XLLogout.
P r z y k ł a d : O bi e k t e m , k t ó r y t w o r z y l o gi c z n ą c a ł o ść j e st n p. f a k t u r a . T w o r z en i e
t a k i e go o b i e k t u z po z i o m u f u n k c j i A P I o gr a n i c z a j ą f u n k c j e X L N o w y D o k u m en t
o r a z X L Z a m k n i j D o k u m e n t . J e ż el i pr z er w a n i e d z i a ł a n i a a pl i k a c j i n a st ą pi po
w y w o ł a n i u pi e r w s z e j z n i c h , a p r z e d z a m k n i ęc i em do k u m en t u , t o do k u m en t
t a k i z o s t a n i e w y c o f a n y z b a z y d a n y c h . J e ż el i n a t o m i a st z o st a n i e po p r a w n i e
z a k o ń c z o n e w y w o ł a n i e f u n k c j i X L Z a m k n i j D o k u m en t , t o do k u m e n t t a k i j e s t
z a p i s y w a n y n a s t a ł e w b a z i e d a n y c h n a w et , j e ż el i bł ą d a p l i k a c j i w y st ą pi pr z ed
w y l o go w a n i e m s i ę po pr z ez f u n k c j ę X L L o go u t ( d o k u m en t j a k o l o g i c z n a c a ł o ść
z o s t a ł w p r o w a d z o n y po p r a w n i e) .
P r z y k ł a d : Z e s t a w f u n k c j i j e st j e de n . R ó ż n e s ą z e s t a w y pa r a m e t r ó w t y c h
f u n k c j i ( z s u f i x a m i _ 1 , … , _ 1 2 ) w b i bl i o t ec e dy n a m i c z n ej C D N _ A P I . D L L są
f u n k c j e b e z s u f i k s ó w . R o z po z n a n i e w e r s j i j e s t r e a l i z o w a n e w t en s po s ó b, ż e
k a ż d a s t r u k t u r a m a p o l e: W e r s j a , k t ó r e j e st s pr a w dz a n e p r z y w y w o ł a n i u
po s z c z e gó l n y c h f u n k c j i i w z a l e ż n o śc i o d t e j w a r t o śc i , w ew n ęt r z n i e w o ł a n e s ą
f u n k c j e z o d po w i e dn i m i s u f i k s a m i . U ż y c i e j e dn o c z e śn i e 2 w e r s j i A P I n i e j e st
po l e c a n e , j e ś l i c h o d z i o f u n k c j e do t y c z ą c e t e go s a m e go o bs z a r u , t z n . n i e
po w i n n o s i ę s t o s o w a ć f u n k c j i do d a j ą c e j n a g ł ó w ek w w er s j i 1 a f u n k c j i
do da j ą c e j po z y c j e w w er sj i 5 . C h o ć m o ż l i w e j es t d z i a ł a n i e w t a k i c h
pr z y p a dk a c h f u n k c j i , t o n i e po l ec a m y t a k i e go r o z w i ą z a n i a . N a t o m i a s t
s t o s o w a n i e r ó ż n y c h w e r sj i w r ó ż n y c h o bs z a r a c h C D N X L j e st j a k n a j b a r d z i e j
do pu s z c z a l n e . T z n . m o ż n a w y s t a w i ć z a m ó w i e n i e z e st a w em f u n k c j i w w e r s j i 1 ,
a f a k t u r ę z e s t a w e m f u n k c j i w w e r s j i n p. 5 .
Po każdorazowej zmianie struktur, publikowana będzie nowa wersja CDN XL API oznaczona kolejnym
numerem. Numer ten będzie nadawany równolegle dla wszystkich struktur API niezależnie od tego, czy została
ona zmieniona (np. zmiana tylko w strukturze XLLoginInfo spowoduje zmianę numeru wersji dla wszystkich
pozostałych struktur API).
4 Algorytm postępowania
Typowy scenariusz wykorzystujący funkcje XL-API najprościej jest prześledzić na przykładzie faktury sprzedaży.
Kolejność wywoływanych funkcji jest następująca:
• XLLogin - inicjalizacja bibliotek CDN XL, login operatora do bazy danych;
• XLNowyDokument – otwarcie nagłówka nowego dokumentu; powoduje zapisanie w bazie danych
otwartego nagłówka dokumentu (w omawianym przypadku jest to faktura sprzedaży);
• XLDodajPozycje – dodanie pozycji do faktury; wywołanie tej funkcji może nastąpić wielokrotnie, jeżeli
do dokumentu chcemy dopisać więcej niż jedną pozycję;
• XLDodajPlatnosc – zapis płatności do tworzonej faktury; wywołanie tej funkcji jest opcjonalne – jeżeli
nie zostanie wywołana, system automatycznie wygeneruje płatność domyślną przy zamykaniu faktury;
funkcja może być wołana wielokrotnie – np. w przypadku specyfikacji płatności ratalnej;
5 Przykłady zastosowań
6 Przykładowe kody
Poniżej przedstawione zostały przykładowe kody wykorzystujące CDN XL API.
Uwaga: W przypadku wielokrotnego wywoływania tej samej funkcji API (np. dodawanie wielu
pozycji do FS) konieczne jest czyszczenie struktury (zmienne typu Long należy wypełnić 0, zmienne
typu String - pustym ciągiem ””) wykorzystywanej w funkcji każdorazowo po jej użyciu. Jest to
konieczne, ponieważ w niektórych polach struktury zwracane są wartości, które w przypadku nie
wyczyszczenia ich, będą użyte przy ponownym wykorzystaniu struktury.
Sesja = 0
IDDokumentu = 0
With Element
.Wersja = 12
.Ilosc = 10
.CenaKatalogowa = 1
.Towar = "Test"
End With
Wynik = XLlogout_12(Sesja)
If Wynik <> 0 Then
Sub Zaloguj()
Dim Login As XLLoginInfo_12
Sesja = 0
Wynik = 0
With Login
.Wersja = 12
.ProgramId = "X:VBA"
.Baza = "CDN_XL_Test"
.OpeIdent = ""
.OpeHaslo = ""
End With
Wynik = XLLogin_12(Login, Sesja)
If Wynik <> 0 Then
Wynik = MsgBox("Błąd logowania: " & Wynik)
Exit Sub
End If
End Sub
Sub DodajNaglowek()
Dim NagInfo As XLDokumentNagInfo_12
Worksheets("Nagłówek ZS").Select
Wersja = 12
With NagInfo
.Wersja = 12
.Typ = 4
.ZamFirma = Range("b2").Value
.ZamNumer = Range("c2").Value
Sub ZamknijNaglowek()
Dim ZamkniecieInfo As XLZamkniecieDokumentuInfo_12
ZamkniecieInfo.Wersja = 12
ZamkniecieInfo.Tryb = 0
Wynik = 0
Wynik = XLZamknijDokument_12(IDDokumentu, ZamkniecieInfo)
If Wynik <> 0 Then
Wynik = MsgBox("Błąd zamykania nagłówka: " & Wynik)
Exit Sub
Else
Wynik = MsgBox("Poprawnie dodano dokument WZ.")
End If
End Sub
Sub DodajPozycje()
Sub Wyloguj()
Wynik = 0
Wynik = XLLogout_12(Sesja)
If Wynik <> 0 Then
Wynik = MsgBox("Błąd wylogowywania: " & Wynik)
Exit Sub
End If
End Sub
Sub Przeksztalc_ZS()
Zaloguj
DodajNaglowek
DodajPozycje
ZamknijNaglowek
Wyloguj
End Sub
7 Wskazówki do API w C8
• Operator, na którego jest logowanie przez API nie może mieć pustego hasła
• Wymagania związane z użytkownikami Windowsów:
Użytkownik ASPNET musi być w grupie użytkownicy, użytkownik na którym działa
IIS i ASP musi mieć prawa do katalogu z systemem ERP XL - chodzi o to żeby ten
użytkownik miał uprawnienia do uruchomienia ERP XL.
Rozwiązaniem jest w metodzie OnStart uruchomienie nowego wątku, w którym jest logowanie do API
i ustawienie po zalogowaniu aby wątek nie zakończył się. Można to zrobić za pomocą statycznego
obiektu klasy AutoResetEvent i metody WaitOne. W metodzie OnStop usługi trzeba wtedy zawołać
metodę Set na tym obiekcie (po wylogowaniu z API).
W architekturze serwera opartego o WCF i klienta, problemem dla clariona jest kończenie
wątku głównego gdy proces się nie kończy – czyli z punktu widzenia systemu operacyjnego
wszystko jest poprawnie, jest wątek główny samej usługi. Wątek ten nie jest jednak związany z
clarionem, więc w clarionie dopiero wątek w którym następuje logowanie do API jest wątkiem
głównym – po wylogowaniu wątek ten się kończy mimo iż proces nadal działa – czy z punktu
widzenia clariona sytuacja niemożliwa do uzyskania – nie ma czegoś takiego jak proces bez
żadnego wątku, dlatego tez z tego powodu co jakiś czas zgłaszane mogą być wyjątki.