====== Workflow stažení dokumentu do ESO9 ====== ===== 1. Vznik dokumentu na AP ===== * AP přijme dokument a nastaví mu ''%%status = 1%%''. ===== 2. Volání Webhooku ===== * Webhook má ve své databázi uloženo ''%%AppID%%''. * Webhook získá ''%%Secret%%'' z HTTP volání AP. * AP zavolá Webhook a předá ''%%AppID%%'' a ''%%Secret%%''. * Webhook spustí databázovou proceduru ''%%spPeppolDocDownloader%%'' pro stažení dokladu do produkční DB. * Oba tyto údaje musí být **totožné s databází subjektů na AP**. ===== 3. Autorizace požadavku ===== * Webhook přijme požadavek z AP a porovná ''%%AppID%%'' a ''%%Secret%%'' s údaji ve své interní databázi. * Pokud údaje **nesouhlasí**, Webhook vrátí **neautorizovanou odpověď (401)**. * Dle ''%%AppID%%'' najde produkční databázi aplikace, pro kterou je doklad určen. * Porovná ''%%Secret%%'' získaný z provolání z AP s údaji v produkční databázi dané aplikace. * Pokud údaje **nesouhlasí**, Webhook vrátí **neautorizovanou odpověď (401)**. ===== 4. Zápis do produkční databáze ===== * Webhook přistupuje do produkční databáze s **SQL autentikací**. Přihlašovací údaje (connection string) jsou uloženy ve vlastní databázi Webhooku. * Použitý SQL účet musí mít oprávnění: * práva na funkci ''%%fnHodnotaParam_Varchar%%'' * právo zápisu do tabulky ''%%PEPPOL_DOC_QUEUE%%'' * SQL skript pro založení uživatelského účtu: -- Připojení k master databázi USE [master]; GO -- Vytvoření přihlašovacího jména (login) na úrovni serveru CREATE LOGIN [PeppolHttpHandler] WITH PASSWORD = 'SilneHeslo123!'; GO * SQL skript pro založení příslušné DB role: CREATE ROLE [PeppolHttpHandlerRole] GO GRANT INSERT ON [dbo].[PEPPOL_DOC_QUEUE] TO [PeppolHttpHandlerRole] GO GRANT SELECT ON [dbo].[PEPPOL_DOC_QUEUE] TO [PeppolHttpHandlerRole] GO GRANT EXECUTE ON [dbo].[fnHodnotaParam_Varchar] TO [PeppolHttpHandlerRole] GO GRANT EXECUTE ON [dbo].[spPeppolDocDownloader] TO [PeppolHttpHandlerRole] GO * SQL skript pro přidělení příslušné DB role novému uživateli: -- Vytvoření uživatele v databázi na základě přihlašovacího jména CREATE USER [PeppolHttpHandler] FOR LOGIN [PeppolHttpHandler]; GO -- Přidání uživatele do konkrétní role v databázi ALTER ROLE [PeppolHttpHandlerRole] ADD MEMBER [PeppolHttpHandler]; GO * Webhook otevře databázové spojení a zapíše záznam do tabulky ''%%PEPPOL_DOC_QUEUE%%''. * Tento záznam obsahuje ID dokladu z AP. * **Zde končí oprávnění databázové role použité Webhookem.** ===== 5. Stažení dokladu do produkční databáze ===== * Doklad se z AP do produkční DB stahuje databázovou procedurou ''%%spPeppolDocDownloader%%''. * Tuto proceduru spouští Webhook. * Procedura se spouští explicitně pod uživatelským účtem ''%%peppolDocCreate%%''. * SQL skript pro založení uživatelského účtu: -- Připojení k master databázi USE [master]; GO -- Vytvoření přihlašovacího jména (login) na úrovni serveru CREATE LOGIN [peppolDocCreate] WITH PASSWORD = 'SilneHeslo123!'; GO * Uživatelský účet musí mít oprávnění: * role ''%%DB_OWNER%%'' na: * aplikační DB * dokumentová DB * logovací DB * SQL skript pro přidělení příslušné DB role novému uživateli USE ESO9Start / ESO9Start_DOC / ESO9Start_LOG -- Vytvoření uživatele v databázi na základě přihlašovacího jména CREATE USER [peppolDocCreate] FOR LOGIN [peppolDocCreate]; GO -- Přidání uživatele do role db_owner v databázi ALTER ROLE [db_owner] ADD MEMBER [peppolDocCreate]; GO ===== 6. Zpracování fronty dokumentů ===== * DB procedura ''%%spPeppolDocDownloader%%'' zpracuje tabulku ''%%PEPPOL_DOC_QUEUE%%''. * Pro všechny záznamy se ''%%status = 0%%'': * provede autorizaci vůči AP * stáhne doklad * založí doklad ve formátu BIS3.0 do DMS ESO9 (jako typ ''%%FPUPEPP%%'') a naváže jej na zpracovávaný záznam v tabulce ''%%PEPPOL_DOC_QUEUE%%'' * stažením dokladu z AP do aplikace ESO9 dojde ke zvýšení stavu dokladu na AP na ''%%status=2%%'' (=staženo) * založí doklad daného typu (faktura, dobropis) do produkční DB * … a do DMS založí všechny binární přílohy (PDF), které doklad BIS3.0 obsahuje * při chybě založení dokladu zůstává v produkční DB uložen doklad ve formátu BIS3.0 (v DMS), z nějž se lze po odstranění příčiny chybu znovu pokusit založit doklad (faktury) * tento doklad již nelze znovu stáhnou z AP, protože zde je již ve stavu ''%%status=2%%'' (=staženo) * po úspěšném založení dokladu v produkční databázi je na něj navázán zdrojový doklad ve formátu BIS3.0 (v DMS) a všechny jeho přílohy ===== 7. API rozhraní Webhooku ===== * Webhook poskytuje vlastní **API rozhraní (CQRS)**, které umožňuje: * mazání záznamů * zobrazení záznamů * editaci záznamů * API je autorizováno pomocí HTTP hlavičky\\ ''%%X-PEPPOL-WEBHOOK-SECRET%%''