Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

Biuletyn Techniczny

Wykorzystanie API
Wersja: 2019.0
Copyright © 2019 COMARCH

Wszelkie prawa zastrzeżone


Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek
postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie
na nośniku filmowym, magnetycznym lub innym, powoduje naruszenie praw autorskich niniejszej
publikacji.

Wykorzystanie API 2 Wersja 2019.0


Spis treści

1 Wprowadzenie ............................................................................................................... 5

2 Hermetyczność ............................................................................................................... 5

3 Wersjonowanie .............................................................................................................. 6

4 Algorytm postępowania ................................................................................................. 6

5 Przykłady zastosowań .................................................................................................... 7


5.1 Import dokumentu z pliku .TXT .................................................................................. 7
5.1 Wsadowy import transakcji ........................................................................................ 7

6 Przykładowe kody .......................................................................................................... 7


6.1 Dadanie ZS z jednym elementem (VBA) ...................................................................... 7
6.2 Przekształcenie ZS do FS (VBA) .................................................................................. 9
6.3 Dodaj Kontrahenta (.NET) .........................................................................................11

7 Wskazówki do API w C8............................................................................................... 12


7.1 Ogólne wytyczne w zakresie konfiguracji ...................................................................12
7.2 Plik Konfiguracyjny ...................................................................................................14
7.3 Logowanie do API poprzez usługę .............................................................................14
7.4 API a aplikacje działające w oparciu o webserwis .......................................................14
7.5 Connection string .....................................................................................................15

Wykorzystanie API 3 Wersja 2016.2


Wykorzystanie API 4 Wersja 2019.0
1 Wprowadzenie
System CDN XL może pracować jako serwer aplikacji udostępniając innym aplikacjom swoje funkcje. Dzięki
zaimplementowaniu funkcji API (Application Programming Interface) dowolna aplikacja może w prosty sposób
korzystać z mechanizmów, którymi dysponuje CDN XL. Daje to niespotykaną w rozwiązaniach konkurencyjnych
otwartość systemu, pozwalając zarówno na integrację ze standardowymi narzędziami programistycznymi, (np.
Microsoft Office i Visual Basic) jak i możliwość integracji z dowolnym systemem informatycznym
eksploatowanym w firmie.
System CDN XL oferuje kilkadziesiąt funkcji pozwalających na zdalną pracę w systemie. Funkcje te są
zgromadzone w bibliotece CDN_API.DLL, która jest instalowana łącznie z całym systemem CDN XL.

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) .

Wykorzystanie API 5 Wersja 2016.2


3 Wersjonowanie
Ponieważ zakładamy, iż funkcjonalność CDN XL API będzie stale rozszerzana, funkcje te zostały wyposażone w
mechanizm wersjonowania. Zapewni on kompatybilność z poprzednimi wersjami API, czyli pozwoli na
uniknięcie sytuacji, w których po zmodyfikowaniu (rozszerzeniu) funkcji API Użytkownicy i Integratorzy byliby
zmuszeni do wprowadzania odpowiednich zmian w napisanych przez siebie aplikacjach wspomagających.
Ponieważ CDN XL musi zawsze działać na najnowszych strukturach danych, mechanizm wersjonowania będzie
pełnił rolę translatora pomiędzy strukturami API przekazanymi z zewnętrznej aplikacji, a strukturami
wykorzystywanymi wewnątrz CDN XL. Po wartości przekazanej w polu: Wersja, zostanie rozpoznana struktura
przekazana do funkcji i dokonane zostanie odpowiednie przepisanie wartości do struktury wewnętrznie
wykorzystywanej przez CDN XL. W momencie, gdy struktury wewnętrzne i zewnętrzne są różne, pola
niewykorzystywane zostaną wypełnione domyślnymi wartościami.
Ponieważ struktury danych wykorzystywane przez API służą również do zwracania danych z programu CDN XL,
mechanizm wersjonowania jest mechanizmem działającym w obie strony (dokonana zostanie odpowiednia
translacja danych wewnętrznych do struktury przekazywanej na zewnątrz).
Dzięki temu aplikacje napisane w aktualnej wersji API będą działały poprawnie również w kolejnych wersjach
CDN XL, bez potrzeby dokonywania w nich przeróbek (z wyjątkiem sytuacji, w której chcemy rozszerzyć
funkcjonalność aplikacji o nowe możliwości CDN XL API).

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;

Wykorzystanie API 6 Wersja 2019.0


• XLZamknijDokument – zakończenie edycji i zamknięcie dokumentu; dokument może być zamykany w
trybie normalnym (zapis bez możliwości późniejszej modyfikacji) lub w trybie „do bufora";
• XLLogout – w obrębie jednej sesji otwartej funkcją XLLogin możemy wystawić dowolną ilość
dokumentów. Wystawienie każdego z nich powinno zaczynać się wywołaniem funkcji
XLNowyDokument i kończyć wywołaniem funkcji XLZamknijDokument.

5 Przykłady zastosowań

5.1 Import dokumentu z pliku .TXT


Jest to szczególnie istotne dla firm wprowadzających bardzo długie transakcje zakupu. Często wraz z towarem
jego dostawca dostarcza dyskietkę ze specyfikacją dostawy. Korzystając np. z programu Microsoft Excel można
napisać prosty program wczytujący taki plik tekstowy do arkusza, a następnie łączący się poprzez CDN XL API z
systemem CDN XL i generujący odpowiedni dokument zakupu.

5.1 Wsadowy import transakcji


Firmy wielooddziałowe często importują poprzez łącza modemowe transakcje ze swoich oddziałów do centrali,
gdzie mają one być następnie wprowadzone do bazy danych. Program importujący transakcje może za
pośrednictwem CDN XL API połączyć się z systemem CDN XL i zapisywać w jego bazie danych zaimportowane z
oddziałów dokumenty.

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.

6.1 Dadanie ZS z jednym elementem (VBA)


Sub Dodaj_Zamowienie()
Dim Sesja As Long
Dim Wynik As Long
Dim Login As XLLoginInfo_12
Dim IDDokumentu As Long
Dim Naglowek As XLDokumentZamNagInfo_12
Dim Element As XLDokumentZamElemInfo_12
Dim Zamkniecie As XLZamkniecieDokumentuZamInfo_12

Sesja = 0
IDDokumentu = 0

Wykorzystanie API 7 Wersja 2016.2


With Login
.Wersja = 12
.programID = "TestXL"
.Baza = "CDNXL_Test"
.OpeIdent = "ADMIN"
.OpeHaslo = ""
End With

Wynik = XLlogin_12(Login, Sesja)


If Wynik <> 0 Then
MsgBox("Błąd logowania: " & Wynik)
End If
With Naglowek
.Wersja = 12
.Typ = 6
.Akronim = "Test"
End With

Wynik = XLNowyDokumentZam_12(Sesja, IDDokumentu, Naglowek)


If Wynik <> 0 Then
MsgBox("Błąd dodawania nagłówka: " & Wynik)
End If

With Element
.Wersja = 12
.Ilosc = 10
.CenaKatalogowa = 1
.Towar = "Test"
End With

Wynik = XLDodajPozycjeZam_12(IDDokumentu, Element)


If Wynik <> 0 Then
MsgBox("Błąd dodawania pozycji: " & Wynik)
End If
With Zamkniecie
.Wersja = 12
.TrybZamkniecia = 2
End With
Wynik = XLZamknijDokumentZam_12(IDDokumentu, Zamkniecie)
If Wynik <> 0 Then
MsgBox("Błąd zamykania nagłówka: " & Wynik)
End If

Wynik = XLlogout_12(Sesja)
If Wynik <> 0 Then

Wykorzystanie API 8 Wersja 2019.0


MsgBox("Błąd wylogowania: " & Wynik)
End If
End Sub

6.2 Przekształcenie ZS do FS (VBA)


Public Sesja As Long
Public IDDokumentu As Long
Public Wynik As Long
Public ElemInfo As XLDokumentElemInfo_12

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

Wykorzystanie API 9 Wersja 2016.2


.ZamTyp = Range("a2").Value
End With
Wynik = 0
Wynik = XLNowyDokument_12(Sesja, IDDokumentu, NagInfo)
If Wynik <> 0 Then
Wynik = MsgBox("Błąd dodawania nagłówka: " & Wynik)
Exit Sub
End If
End Sub

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

Function Pierwszy_wolny_rekord() As Integer


Dim licznik As Long
licznik = 2
Do
If Range("A" & licznik).Value = "" Then
Pierwszy_wolny_rekord = licznik
Exit Function
Else
licznik = licznik + 1
End If
Loop
Stop
End Function

Sub DodajPozycje()

Wykorzystanie API 10 Wersja 2019.0


Worksheets("Pozycja ZS").Select
licznik = Pierwszy_wolny_rekord()
For x = 2 To licznik - 1
With ElemInfo
.Wersja = 12
.ZamFirma = Range("b" & x).Value
.ZamTyp = Range("a" & x).Value
.ZamNumer = Range("c" & x).Value
.ZamLp = Range("d" & x).Value
End With
Wynik = 0
Wynik = XLDodajPozycje_12(IDDokumentu, ElemInfo)
If Wynik <> 0 Then
Wynik = MsgBox("Błąd dodawania pozycji: " & Wynik)
Exit Sub
End If
Next x
End Sub

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

6.3 Dodaj Kontrahenta (.NET)


Dla programistów wykorzystujących platformę MS .NET został przygotowany plik assembly, zawierający
deklaracje struktur oraz funkcji używanych w CDN XL API. Plik jest dostępny na stronie ComArch (w zasobach
Wykorzystanie API 11 Wersja 2016.2
CDN XL). Obecna wersja jest wersją testową, ciągle rozwijaną. Plik należy dołączyć w referencjach projektu (w
Microsoft Visual Studio .NET można to zrobić wybierając w menu Project/Add Reference).
using System;
using cdn_api;
namespace XLNowyKontrahent
{
class APIDodajKontrahenta
{
[STAThread]
static void Main(string[] args)
{
XLLoginInfo_12 Login = new XLLoginInfo_12();
Login.Wersja = 12;
Login.ProgramID = "API.NET";
Login.Baza = "maciek4n";
Login.OpeIdent = "ADMIN";
Login.OpeHaslo = "";
Int32 SesjaID = 0;
Int32 KontrahentID = 0;
int LoginResult = cdn_api.cdn_api.XLLogin(Login, ref
SesjaID);
if (LoginResult == 0)
{
XLKontrahentInfo_12 Kontrahent = new XLKontrahentInfo_12();
Kontrahent.Wersja = 12;
Kontrahent.Akronim = "Nowy Kontrahent";
int KontrahentResult =
cdn_api.cdn_api.XLNowyKontrahent(SesjaID,ref KontrahentID,Kontrahent);
}
cdn_api.cdn_api.XLLogout(SesjaID);
}
}
}

7 Wskazówki do API w C8

7.1 Ogólne wytyczne w zakresie konfiguracji

1. Do sprawdzenia są elementy związane z wymogami systemowymi.

• Zainstalowany i włączony .NET 4.0.

2. Warunki związane z samym systemem ERP XL dla wszystkich systemów operacyjnych:

Wykorzystanie API 12 Wersja 2019.0


• Baza systemu ERP XL musi być podpięta dla wszystkich użytkowników komputera
(wpis o bazie musi być w rejestrze w gałęzi HKEY_LOCAL_MACHINE:
[HKEY_LOCAL_MACHINE\SOFTWARE\CDN\CDNXL\MSSQL\Bazy] - 32bit
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\CDN\CDNXL\MSSQL\Bazy] 64 bit)

• Musi być wpisany klucz HASP


[HKEY_LOCAL_MACHINE\SOFTWARE\CDN\HASPXL]
Lub
[HKEY_LOCAL_MACHINE\SOFTWARE\CDN\HASP]
"Serwer"="Tu nazwa serwera HASP"

• Ścieżka do systemu ERP XL musi być w globalnej zmiennej środowiskowej PATH -


widzianej przez wszystkich użytkowników systemu, a w szczególności przez ASPNET

• 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.

3. Na systemach serwerowych (2003,2008, 2012) i VISTA, Win 7, 8 najlepiej utworzyć dla


takiej aplikacji osobną pulę aplikacji. Użytkownik, na którym działa pula (domyślnie Usługa
Sieciowa) musi mieć prawo do katalogu z systemem CDNXL, aby miał uprawnienia do
uruchomienia systemu.

4. Dodatkowo funkcje API powinny być wołane w trybie wsadowym.


5. Na C8 - nowy interfejs - przed logowaniem do API trzeba zawołać poniższy kod.

//jeśli C8 wołana jest metoda z ClaRUN.dll


public class Cdnsys
{
[DllImport("ClaRUN.dll")]
static extern void AttachThreadToClarion(int _flag);
public void AttachThread()
{
try
{
AttachThreadToClarion(1);
}
catch (Exception){}
}
}
Powyższe AttachThreadToClarion trzeba wołać przy każdym podnoszeniu nowego wątku.

Wykorzystanie API 13 Wersja 2016.2


6. W zmiennej środowiskowej Path powinno być wskazanie w ścieżce na jeden folder z
systemem ERP XL (jeżeli jest zawarte odwołanie do innych folderów z wcześniejszymi
wersjami należy je usunąć a następnie zapisać zmiany i zrestartować komputer).

7. Trzeba wołać attachthread wg wskazań w dokumentacji (lub jak powyżej) do każdego


nowego wątku i nie używać async'a. Jeżeli XLLogin jest wołane w innym wątku niż
pozostałe funkcje API to ten wątek musi pozostać aktywny tak długo jak wołamy funkcje
API – nie można po jego zakończeniu wołać funkcji API.

8. AttachThreadToClarion woła się 1 raz po utworzeniu wątku .net ( w tymże utworzonym


wątku) – czyli 1 raz na wątek (teoretycznie nie ma ograniczenia na ilość wywołań
AttachThread). Po wywołaniu AttachThreadToClarion wątek .net i wątek Clariona to jest
jeden i ten sam wątek, nie ma więc operacji odwrotnej do AttachThreadToClarion. Jak
zakończy się wątek utworzony w .net to zakończy się również w Clarionie i obiekty
wątkowe zostaną zwolnione.

7.2 Plik Konfiguracyjny


Plik konfiguracyjny aplikacji nie pojawia się automatycznie po stworzeniu projektu i należy go
dodać samodzielnie. Wystarczy kliknąć prawym przyciskiem myszy na projekt, do którego chcemy
dodać plik z konfiguracjami, następnie wybrać opcję "Add New Item" i w oknie wyboru typu pliku
zaznaczyć "Application Configuration File". Dalej podaje się jego nazwę - standardowo App.config i
potwierdza wybór.

7.3 Logowanie do API poprzez usługę


Podczas startowania usługi ( np. realizacja zamówienia ZS dokumentem WZ) wołany jest
XLLogin, czyli są ustawiane obiekty globalne m.in. kolekcje rodzajów kontrahentów, definicje
dokumentów itd. (wszystkie rzeczy konfiguracyjne XL’a). Potem startuje nowy wątek, w którym są
wystawiane dokumenty np. WZ. Podczas gdy startuje nowy wątek to część danych konfiguracyjnych
kopiuje z wątku głównego (robiona jest kopia żeby wątki się nie blokowały na czas dostępu do danych
w wątku głównym). Należy zwrócić uwagę na specyficzne zachowanie usług (jeżeli usługa
zawiera metody OnStart, OnStop, AutoResetEvent, WaitOne) – przy jej uruchamianiu wołana jest
metoda OnStart (jeśli w niej byłoby umieszczone logowanie do API) to wątek w którym OnStart został
wywołany może być za chwilę zakończony, co pociąga za sobą zwolnienie obiektów globalnych
ładowanych przy XLLogin. Od tego momentu nowo tworzone wątki generujące np. WZ nie mają skąd
skopiować danych konfiguracyjnych.

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).

7.4 API a aplikacje działające w oparciu o webserwis

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.

Wykorzystanie API 14 Wersja 2019.0


Rozwiązaniem będzie przy starcie usługi wydzielenie jednego wątku, związanie go z
clarionem (AttachThread…) i pozostawieniem aktywnym przez cały czas działania usługi. W wątku
tym trzeba wywołać od razu XLLogin. I teraz można zrobić od razu XLLogout, lub pozostawić tą
sesję aktywną i w niej wystawiać dokumenty z wątków tworzonych na żądanie klientów – będzie
szybciej działać. Czyli teraz nie byłoby już wołania XLLogin,XLNowyDokument…, XLLogout za
każdym razem, ale jedynie XLNowyDokument z ID sesji ustalonym w wątku pierwszym.
Trzeba tak zmodyfikować dodatek, żeby choć jeden wątek procesu był podłączony do
wątku clarionowego, tak aby nie było sytuacji, w której proces jest aktywny a żaden wątek nie
jest połączony z clarionem. To wymaganie nie dotyczy okresu aktywności przed pierwszym
wywołaniem AttachThreadToClarion.

Możliwe problemy do weryfikacji:


• czy IIS po wylogowaniu z API od razu zamknie wątek czy zostawi w puli na pewien
czas
• czy podczas pracy w innym wątku na API IIS nie zamknie takiego zużytego wątku z
puli, bo już tam długo tkwił (wtedy zwolnione zostaną obiekty globalne z których
może chcieć korzystać pracujący wątek – one pracują w ramach jednego procesu
w3wp)

7.5 Connection string


Po zmianach w API XLPolaczenie nie zwraca automatycznie danych odnośnie połączenia. Funkcja API zwraca
niezbędne dane do połączeń w aplikacji uzupełnione w tabeli cdn.Konfig i Kon_Numer = -137, Kon_Komentarz
= ‘ConnectionString’.
Od wersji 2019.0 XLPolaczenie zwraca dane z funkcji skalarnej CDN.PodajDodatokwyConnectString – co
pozwala na dynamiczną weryfikację połączenia, w przeciwieństwie do stałej danej wpisanej w CDN.Konfig.

Wykorzystanie API 15 Wersja 2016.2

You might also like