= [wiki:DeployerGuide Przewodnik wdrożeniowca] > eDokumentyApi = System eDokumenty udostępnia API (Application Programming Interface) dzięki któremu jesteśmy w stanie przeprowadzać podstawowe czynności bez konieczności logowania do systemu. Usługa jest zabezpieczona rozszerzeniem WSSecurity protokołu SOAP i wymaga podania w nagłówkach wywołania XML nazwy użytkownika i hasła. Hasło i użytkownik to specjalne dane, które należy wprowadzić do pliku config.inc pod kluczami {{{ define('EDOK_API_LOGIN', 'edok_api_user'); define('EDOK_API_PASSWORD', 'edok_api_pass'); // Dodatkowa stała która umożliwia pominięcie autentykacji (FALSE - nie sprawdza danych EDOK_API_LOGIN i EDOK_API_PASSWORD) // domyślnie ustawiona na TRUE, można wysłać GET lub dodatkowe nagłówki WSS // define('EDOK_API_AUTH_MODE', TRUE); }}} wartości stałych w powyższym przykładzie są tylko danymi prezentacyjnymi i nie powinno się ich używać na produkcyjnej bazie. Stałe te mogą mieć dowolne wartości ważne jednak aby te same wartości podać przy wywołaniu usługi SOAP w kliencie. Usługa jest dostępna pod adresem: http://{host}:{port}/apps/edokumenty/classes/eDokumentyApi/EDokApiServer.php Opcjonalnie od wersji 0.9.8 usługa jest dostępna pod skróconym adresem: http://{host}:{port}/eDokumentyApi.php Wartość {host} oraz {port} należy zamienić odpowiednimi wartościami zgodnymi z konfiguracją serwera instalacyjnego systemu eDokumenty. Dokumentacja API znajduje się pod adresem http://{host}:{port}/apps/edokumenty/classes/eDokumentyApi/DokumentacjaAPI.txt Podgląd dokumentacji API {{{ #!php wartość, gdzie klucz to nazwa pola z bazy z tabeli contacts * natomiast wartość to ciąg tekstowy, który szukamy i który ma się znaleźć w kluczu * * @return Array - tablica identyfikatorów kontaktów - tablica może być pusta jeśli nie znalazł, SoapFault w razie niepowodzenia * * @throws Exception - SoapFault */ Array searchContacts(Array data) /** * Tworzy nowe zdarzenie * * @param data Array - Tablica z parametrami * @param data['dscrpt'] String - opis zdarzenia * @param data['trmtyp'] String - typ zdarzenia (TODO - zadanie, PHONECALL - rozmowa tel., MEETING - spotkanie) * @param data['type__'] String - typ rozmowy tel. jeśli trmtyp = PHONECALL (IN - przychodząca, OUT - wychodząca, INT - wewnętrzna) * @param data['start_'] String - data rozpoczęcia w formacie YYYY-MM-DD HH:MM:SS np 2010-01-01 08:00:00 * @param data['duratn'] String - czas trwania np 2h30m - co oznacza 2 godziny 30 minut * @param data['usr_id'] Mixed - identyfikator pracownika (może być tablica identyfikatorów), któremu zleca się wykonanie zdarzenia (users:usr_id) * @param data['contid'] Int - identyfikator kontaktu (contacts:contid) pod którym zostanie utworzone zdarzenie * @param data['prc_id'] Int - identyfikator sprawy (processes:prc_id) do której zostanie dołączone zdarzenie * @param data['adduid'] Int - identyfikator pracownika (users:usr_id) który zleca zdarzenie, musi należeć do jednostki i mieć aktywne konto * * @return Int - id event jeśli sukces (events:evntid), 0 w razie niepowodzenia * * @throws Exception - SoapFault */ Int createEvent(Array data) /** * Zwraca dane zdarzenia * * @param evntid Int - Id zdarzenia (events:evntid) * * @return Array - tablica danych zdarzenia jeśli sukces, SoapFault w razie niepowodzenia * * @throws Exception - SoapFault */ Array getEvent(Int evntid) /** * Zwraca listę zdarzeń według zadanych parametrów * * @param data Array - Tablica z parametrami * @param from__ Date - data w formacie YYYY-MM-DD (np 2010-01-01) z jakiego dnia ma pobrać zdarzenia * @param to____ Date - data w formacie YYYY-MM-DD (np 2010-01-10) do jakiego dnia ma pobrać zdarzenia, jeśli brak parametru do ustawiany na from__ * @param usr_id Int - Id praconwika (users:usr_id) * @param contid Int - Id kontaktu (contacts:contid) * * @return Array - tablica zdarzeń (może być pusta jeśli nie ma takich, które spełniają kryterium wyszukiwania) * jeśli sukces, SoapFault w razie niepowodzenia * * @throws Exception - SoapFault */ Array getEvents(Array data) /** * Zwraca dane etapów danej procedury. * Identyfikator procedury można pobrać wykonując $client->getProcess($prc_id) i w zwróconej * tablicy będzie kolumna procid. * * @param Int procid - Id procedury (procedures:procid) * * @return Array - tablica z danymi etapów jeśli pusta tzn, że procedura nie ma etapów * * @throws Exception - SoapFault */ Int getProceduresStages(Int procid) /** * Wykonuje dany etap procedury oraz aktywuje następny * * @param Int procid - Id procedury (procedures:procid) * @param Int ptstid - Id etapu z wskazanej procedury jakie zostanie wykonany jako załatwiony * @param Int next_ptstid - Id etapu z tabeli stages_def * ("ptstid" jest etapem decyzyjnym to "next_ptstid" będzie wybrane * jako następny etap jeżeli jest następnikiem etapu "ptstid") * * @return Boolean - TRUE w przypadku powodzenia w każdym innym jest zwracany wyjątek SoapFault * * @throws Exception - SoapFault */ Int completeStage(Int procid, Int ptstid, Int next_ptstid = NULL) ?> }}} Przykład wywołania API z poziomu PHP w systemie eDokumenty '''Hasło powinno być zakodowane przy użyciu funkcji md5''' {{{ #!php // Plik MyService.php umieszczony w apps/edokumenty. // MyService.php 'http://{host}:{port}eDokumentyApi.php', "uri" => "eDokumentyAPI", 'encoding'=>'UTF-8' ); // Dodatkowo od wersji 3.3 autentykacja nie wymaga nadpisania klienta Soap. Wystarczy do url z adresem serwisu dodać parametry GET w postaci // a1 - login, // a2 - hasło, // a3 - symbol jednostki /* $ops = array( 'location' => 'http://{host}:{port}eDokumentyApi.php?a1='.EDOK_API_LOGIN.'&a2='.md5(md5(EDOK_API_PASSWORD).'_SOAP_eDok_api').'&a3='.DEFAULT_ENTITY_SYMBOL.'', "uri" => "eDokumentyAPI", 'encoding'=>'UTF-8' ); // bezpośrednie wywołanie klienta Soap $client = new SoapClient(NULL, $ops); */ $client = new EDokApiClient(null, $ops); $client->setUser(EDOK_API_LOGIN); // ten sam co w config.inc $client->setPass(md5(EDOK_API_PASSWORD)); // to samo co w config.inc $header = new SoapHeader('eDokumentyAPI', 'entity_symbol', DEFAULT_ENTITY_SYMBOL); $client->__setSoapHeaders($header); // Tworzy kontakt $contid = NULL; try { $data = array( 'name_1' => 'SOAP TEST'.date('d H:m:s'), 'name_2' => 'SOAPTEST', 'nip___' => 1111111111, 'street' => 'Główna', 'symbol' => 'FGH99' ); $contid = $client->createContact($data); var_dump($contid); } catch(SoapFault $fault) { var_dump($fault); if ($fault->faultcode < 100) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } } // Tworzy sprawę $prc_id = NULL; try { $data = array( 'dscrpt' => 'SOAP TEST '.date('d H:m:s'), 'briefcase_symbol' => 'DK.023', 'orunid' => 49, 'rspoid' => 54, 'fxtrid' => 60, 'prtpid' => 1, ); $prc_id = $client->createProcess($data); var_dump($prc_id); } catch(SoapFault $fault) { var_dump($fault); if ($fault->faultcode < 100) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } } // tworzy dokument w sprawie if ($prc_id) { $doc_id = NULL; try { $data = array( 'dscrpt' => 'SOAP TEST '.date('d H:m:s'), 'prc_id' => $prc_id, 'dctpid' => 1, 'target' => 54, 'from_contact_symbol' => '12345', 'to_contact_symbol' => '54321', ); $doc_id = $client->createDocument($data); var_dump($doc_id); } catch(SoapFault $fault) { var_dump($fault); if ($fault->faultcode < 100) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } } // dodaje załącznik do utworzonego dokumentu // o treści Testowy plik i nazwie dokument.txt if ($doc_id) { try { $filePath = './test.pdf'; $content = base64_encode(file_get_contents(filePath)); $dd = $client->addAttachmentToDocument($content, basename(filePath), $doc_id); var_dump($dd); } catch(SoapFault $fault) { var_dump($fault); if ($fault->faultcode < 100) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } } } } // zwraca dane (tablica) o sprawie wszystko z tabeli processes gdzie prc_id = $prc_id try { $data = $client->getProcess($prc_id); var_dump($data); } catch(SoapFault $fault) { var_dump($fault); if ($fault->faultcode < 100) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } } ?> }}} W przypadku jeśli chcemy utworzyć własnego klienta SOAP dla innego języka programowania np. JAVA należy skontaktować się z działem oprogramowania celem wyszczególnienia specyfikacji takiego klienta.