Usługa integracji biznesowej (BIS) jest możliwa do uruchomienia zdalnie, obejmuje ona funkcje importu i eksportu danych BIS oraz funkcję wyszukiwania, które razem są określane jako zdalny BIS. Import i eksport danych są funkcjonalnie podobne do BIS opartego na plikach. Funkcja wyszukiwania działa analogicznie jak pomoc wyszukiwania wartości oraz wyszukiwanie lokalizatora w graficznym interfejsie użytkownika systemu ERP. Dane użytkownika przesyłane są bezpośrednio przez sieć, a nie, jak w przypadku plikowego BIS, przez Repozytorium Wiedzy (Knowledge Store).
Od wersji 4 Comarch ERP Enterprise, zdalne interfejsy BIS są dostępne za pośrednictwem COBRA jako interfejs komunikacyjny. Aby korzystać ze zdalnych interfejsów BIS za pośrednictwem CORBA wymagana jest również znajomość interfejsu CORBA systemu Comarch ERP Enterprise.
Od wersji 4.2 Comarch ERP Enterprise, zdalne interfejsy BIS dostępne są również za pośrednictwem usług sieciowych (web services) jako interfejs komunikacyjny. Aby korzystać ze zdalnych interfejsów BIS za pośrednictwem usług sieciowych wymagana jest również znajomość interfejsu usług sieciowych systemu Comarch ERP Enterprise.
Funkcjonalność zdalnych interfejsów BIS realizowana jest w systemie ERP za pośrednictwem aplikacji działających w tle, które są wywoływane zdalnie. Oznacza to, że są niezależne od konkretnego interfejsu komunikacyjnego.
Funkcjonalność oraz formaty danych
Format danych importu, eksportu i wyników wyszukiwania to XML. Do kodowania wykorzystywane jest UTF-8. W związku z tym, aby korzystać z danych i generować dokumenty XML klient musi zwykle stosować parser XML.
W przypadku CORBA, przesyłanie danych odbywa się w blokach, z których każdy wymaga osobnego wywołania aplikacji działającej w tle. W przypadku importu i eksportu bloki są łączone w celu utworzenia kompletnego dokumentu XML. Importowane i eksportowane dokumenty XML mogą być bardzo obszerne. Ponieważ dane przesyłane podczas wywołania przez CORBA muszą być tymczasowo przechowywane w pamięci głównej serwera (a także klienta), dokumenty XML nie są przesyłane w całości, ale w blokach.
Jeśli do importu lub eksportu wykorzystywane są usługi sieciowe, dane są przesyłane w jednym bloku, ponieważ usługi sieciowe wykorzystują protokół bezstanowy, co uniemożliwia ich przesyłanie w kilku blokach. W przypadku dużej ilości danych może to spowodować duże obciążenie serwera oraz znaczne spadki wydajności. Interfejs usług sieciowych nie nadaje się zatem do przesyłania dużych ilości danych.
Podczas importu i eksportu format dokumentu XML jest taki sam, jak w przypadku plikowego BIS i odpowiada schematowi XML, który zapewnia BIS. Inne formaty danych, np. CSV, nie są dostępne za pośrednictwem zdalnego BIS. Zdalny BIS nie można przesyłać atrybutów typu BLOB.
W funkcji wyszukiwania z CORBA wyniki wyszukiwania przesyłane są strona po stronie, tj. każda strona jest oddzielnym blokiem, zawierającym określoną liczbę kompletnych rekordów danych. Każda strona wyniku wyszukiwania jest oddzielnym dokumentem XML, stąd też może być parsowana indywidualnie, w przeciwieństwie do wyniku procesu eksportu. Dokładny format zwracanych wyników wyszukiwania został opisany w rozdziale Format danych dla wyników wyszukiwania.
W przypadku usług sieciowych, wyniki wyszukiwania nie są przesyłane w blokach, ponieważ używany protokół jest bezstanowy.
Funkcja wyszukiwania oferuje również sprawdzanie istnienia, który zwraca tylko pojedynczy rekord danych. Interfejs ten ma umożliwić wykonanie prostego zapytania, czy istnieje co najmniej jeden rekord danych pasujący do wyszukiwania. Jeśli rekord danych istnieje, jego atrybuty nie są zwracane jako dokument XML, ale jako wartości na liście parametrów. Ułatwia to realizację zdalnych weryfikacji kluczy obcych.
Cechy wspólne
Opis interfejsów CORBA oraz usług sieciowych dostępny jest w powiązanych artykułach Interfejs CORBA i Interfejs usług sieciowych. W niniejszym rozdziale opisano części interfejsów, które są wspólne dla obu kanałów komunikacji.
Format danych dla wyników wyszukiwania
Poniższy przykład opisuje format dokumentów XML reprezentujących strony wyników zdalnego interfejsu wyszukiwania:
<?xml version="1.0" encoding="UTF-8"?> <semiramis> <SearchResultRow> <guid>004076BF35F71E1080568464962B0000</guid> <name>Dr.</name> <deleteTime> <date>16/12/2003</date> <timeOfDay>17:50:58.304</timeOfDay> </deleteTime> </SearchResultRow> </semiramis>
Przykład zawiera stronę wyników z jednym wierszem. Wiersz ten jest elementem SearchResultRow. Kolejne wiersze wyników następują bezpośrednio po tym elemencie.
Elementy poniżej SearchResultRow to kolumny wyników. Nazwy elementów są nazwami atrybutów z wyszukiwania OQL (guid, name); wartości elementów są wartościami atrybutów. Format wartości atrybutu zależy od typu danych atrybutu i jest opisany w następnym rozdziale.
Atrybuty niektórych typów danych prezentowane są w sposób złożony, to znaczy, ich element XML w dokumencie XML składa się z jednego lub więcej elementów podrzędnych. Ilustruje to opis w następnym rozdziale, gdzie wartość zwracana typu danych składa się z kolumn. Przykładem w powyższym dokumencie XML jest atrybut deleteTime.
To, które kolumny wyników wyświetlane są w każdym wierszu, zależy od użytego wyszukiwania OQL. Zaleca się utworzenie określonego wyszukiwania OQL dla wyszukiwania, które ma być wywoływane zdalnie.
Typy danych w wyszukiwaniu
Wymienione poniżej typy danych są obsługiwane jako parametry ograniczające i zwracające. W obu przypadkach można określić, czy dane powinny być wprowadzane w formacie specyficznym dla użytkownika czy technicznym. Dla formatu specyficznego dla użytkownika podano przykładowe ciągi znaków. Konkretne ciągi znaków zależą od ustawień użytkownika. Format techniczny jest zawsze niezależny od ustawień użytkownika.
W przypadku złożonych typów danych, które są wymienione jako „nieobsługiwane”, zawsze istnieje możliwość zdefiniowania wyszukiwania w taki sposób, aby poszczególne atrybuty (np. kwota waluty obcej) mogły być użyte jako parametry ograniczające lub zwracające. Jedynie bezpośrednie użycie typu złożonego może nie być obsługiwane.
Typ danych | Parametr ograniczający | Parametr zwracający | ||
Specyficzny dla użytkownika | Techniczny | Specyficzny dla użytkownika | Techniczny | |
Boolean | “prawda”, “fałsz” | “true”, “false”, “” | “prawda”, “fałsz” | “true”, “false” |
ValueSet | jak techniczny | posortowane “1, 2, 3” | dwie kolumny: “1”, “text” | Dwie kolumny: “1”, “Wartość stała” |
Guid | hexadecimal | hexadecimal | hexadecimal | hexadecimal |
byte | “100” | “100” | “100” | “100” |
short | “1.000” | 1000 | “1.000” | “1000” |
int | jak short | jak short | jak short | jak short |
long | jak short | jak short | jak short | jak short |
decimal | “1.000,1” | “1000,1” | “1.000,1” | “1000,1” |
string | “text” | “text” | “text” | “text” |
char | jak string | jak string | jak string | jak string |
CisAttributeTimeStamp | “dzisiaj”, “+1”, “28/12/2003 17:15:23” | “[@today]”, “+1[D]”, “28#12#2003 17#15#23#000” | trzy kolumny:“28/12/2003”
“17:15:23” “GMT” |
dwie kolumny: milisekundy od 01/01/1970 GMT oraz identyfikator strefy czasowej |
CisObjectTimeStamp | jak CisAttributeTimeStamp | jak CisAttributeTimeStamp | jak CisAttributeTimeStamp | jak CisAttributeTimeStamp |
CisAttributeDate | jak CisAttributeTimeStamp bez informacji o czasie | jak CisAttributeTimeStamp bez informacji o czasie | jak CisAttributeTimeStamp bez informacji o czasie | jak CisAttributeTimeStamp bez informacji o czasie |
CisObjectDate | jak CisAttributeDate bez informacji o czasie | jak CisAttributeDate bez informacji o czasie | jak CisAttributeDate | jak CisAttributeDate |
TimeStamp | jak CisAttributeTimeStamp bez informacji o czasie | jak CisAttributeTimeStamp bez informacji o czasie | jak CisAttributeTimeStamp bez informacji o czasie | jak CisAttributeTimeStamp bez informacji o czasie |
Domestic Amount |
nie obsługiwany | nie obsługiwany | trzy na dwie kolumny: “1.233,44” “EUR” |
nie obsługiwany |
Foreign Amount |
nie obsługiwany | nie obsługiwany | dwie kolumny: “1.123,44” “EUR” | nie obsługiwany |
Quantity | nie obsługiwany | nie obsługiwany | dwie kolumny: “1.234,44” “cm” | nie obsługiwany |
Duration | jak Quantity | jak Quantity | jak Quantity | jak Quantity |
PointInTime | jak TimeStamp | jak TimeStamp | jedna kolumna: zawartość atrybutu wartościowego PointInTime, np. “28/12/2003” | jedna kolumna: zawartość atrybutu wartościowego PointInTime, np. “28#12#2003” |