Synchronizace Google Drive s DMS ESO9
Pro automatické souborové exporty/importy z/do ESO9 lze nově použít Google Drive (GD), který lze pomocí automatu oboustranně synchronizovat s DMS ESO9. Užitečné to může být zejména pro uživatele, kteří nemají přímý přístup k aplikační databázi (tj. typicky provoz aplikace v cloudu). Práce se soubory přitom nemusí probíhat na GD, synchronizované složky si lze namapovat na vlastní lokální disk. Uživatel tak může nahrát požadované soubory na svůj lokální disk a ty se následně automaticky naimportují do ESO9. Nebo naopak spustí v ESO9 export a vyexportované soubory se automaticky uloží na jeho lokální disk.
Synchronizační automat
Základem řešení je automat (program), který se v pravidelných intervalech spouští a dle své konfigurace provádí export z DMS ESO9 na GD či import z GD do DMS ESO9. Pravidelné spouštění lze zajistit přes plánované úlohy ve Windows, časem lze toto nahradit systémovou službou či např.balíčkem v Dockeru.
Program ESO9DMS2GoogleDrive.exe lze získat na vyžádání v ESO9 international. Pro režijní spouštění je konfigurace uložena v souboru ESO9DMS2GoogleDrive.exe.config. Pro servisní režim se spouští s parametry z příkazové řádky (GD pro service account nemá žádné webové rozhraní, nelze tedy ve webovém prohlížeči zobrazit obsah disku; proto servisní režim, který toto umožní z příkazové řádky)
Konfigurace
LOG
- logování do souboru zapnuté (1) / vypnuté (0). Pokud je logování zapnuté, vytvoří se ve složce s programem logovací soubor ESO9DMS2GoogleDrive.log
- standardně se logují akce typu založená/vymazání dokumentu z DMS ESO9 i do LOGovací databáze jako Action=9 (externí akce)
CREDENTIAL_FILE
- relativní cesta k souboru s credentials k použitému Google Účtu
- nejedná se o běžný uživatelský účet, ale o účet službový (service account) - popis na https://cloud.google.com/iam/docs/service-accounts?_ga=2.114400130.-443116471.1589793102
- JSON soubor se generuje na adrese https://console.cloud.google.com/iam-admin/serviceaccounts
ConnStr
- connection string k aplikační databázi
- na jeho základě se vytváří i connstr k LOGovací a DOCumentové databázi
Action
- spouštěná akce: 1=Import, 2=Export
SQL_SELECT_IDLOGUSER
- výběrový SQL dotaz, který vrací ID uživatele, pod nímž se provádí import; pro export není povinný
- musí obsahovat alespoň sloupec IDUZIVATEL
SQL_SELECT_DOC2EXPORT_GOOGLE_DRIVE
- výběrový SQL dotaz, který vrací dokumenty, které se budou exportovat z DMS do GD
- musí obsahovat alespoň sloupec DOKUMENTFILEGUID
ExportFolder
- jméno složky v GD pro export dokumentů z DMS ESO9
- pokud složka neexistuje, založí se v rootu GD pro daný účet (složka není nikde „vidět“, je tedy lepší mít exportní složku připravenou)
SQL_AFTER_DOC_EXPORTED
- SQL dotaz/příkaz, který se spouští po exportu souboru z DMS ESO9 do GD
- musí obsahovat parametr %FILEGUID%, který se nahradí GUIDem aktuálně vyexportovaného dokumentu
- může obsahovat nastavení hodnoty řádku v DMS, které způsobí, že se dokument nebude uplodovat opakovaně (změní stav, zvedne verzi, …)
- nebo může obsahovat smazání dokumentu v případě, že se DMS používá jen jako TEMP úložiště pro export
ImportFolder
- složka na GD, odkud se importují dokumenty do DMS ESO9
- musí existovat a musí obsahovat nějaké dokumenty, jinak není co importovat
- pokud existuje na GD více složek se stejným jménem (přístupných pod daným účtem), vezme se první nalezená
SQL_AFTER_DOC_IMPORTED
- SQL dotaz/příkaz, který se spouští po importu souboru z GD do DMS ESO9
- musí obsahovat parametr %FILEGUID%, který se nahradí GUIDem aktuálně naimportovaného dokumentu
- může obsahovat nastavení hodnoty řádku v DMS (typ dokumentu, verzi, …)
DeleteDocAfterImport
- příznak, zda se má po importu do DMS ESO9 dokument z GD smazat (1) či nikoli (0)
- pro mazání zpravidla nejsou pro daný účet dostatečná oprávnění
- má přednost před přesunem naimportovaného dokumentu do jiné podsložky (parametr ImportedFolder)
ImportedFolder
- jméno podsložky v rámci importní složky, kam se po úspěšním importu do DMS ESO9 přesune naimportovaný soubor tak, aby se neimportoval opakovaně
- pokud podsložka neexistuje, založí se
- pokud není parametr zadán, vytváří se defaultně složka „Imported“
Příklad:
<applicationSettings> <ESO9DMS2GoogleDrive.My.MySettings> <setting name="CREDENTIAL_FILE" serializeAs="String"> <value>..\..\..\eso9-1589890273102-ba2d6bc069e3.json</value> </setting> <setting name="LOG" serializeAs="String"> <value>1</value> </setting> <setting name="ConnStr" serializeAs="String"> <value>Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=ws021;Initial Catalog=eso9start</value> </setting> <setting name="Action" serializeAs="String"> <value>1</value> </setting> <setting name="SQL_SELECT_IDLOGUSER" serializeAs="String"> <value>SELECT IDUZIVATEL FROM UZIVATEL WHERE KOD_UZIV = 'turych'</value> </setting> <setting name="SQL_SELECT_DOC2EXPORT_GOOGLE_DRIVE" serializeAs="String"> <value>SELECT * FROM QDOKUMENT WHERE version = '1.0'</value> </setting> <setting name="ExportFolder" serializeAs="String"> <value>Export</value> </setting> <setting name="SQL_AFTER_DOC_EXPORTED" serializeAs="String"> <value>update DOKUMENT set VERSION = '2.0' WHERE DOKUMENTFILEGUID = '%FILEGUID%'</value> </setting> <setting name="ImportFolder" serializeAs="String"> <value>Import</value> </setting> <setting name="SQL_AFTER_DOC_IMPORTED" serializeAs="String"> <value>update DOKUMENT set VERSION = '1.0' WHERE DOKUMENTFILEGUID = '%FILEGUID%'</value> </setting> <setting name="DeleteDocAfterImport" serializeAs="String"> <value>0</value> </setting> <setting name="ImportedFolder" serializeAs="String"> <value>Hotovo</value> </setting> </ESO9DMS2GoogleDrive.My.MySettings> </applicationSettings>
Parametry z příkazové řádky pro servisní režim (konfigurační soubor musí také existovat, použije se z něj pouze parametr CREDENTIAL_FILE):
- parametry se zadávají ve formátu /p Action=xxx
- v případě spuštění servisního režimu se neprovádí standardní akce import/export
- výsledek spuštění servisního režimu se zapisuje do LOGovacího souboru a do konsole (příkazový řádek)
- Action=List - zobrazí obsah GD přístupný pod daným účtem (credentials)
- Action=Delete - vymaže obsah GD přístupný pod daným účtem (credentials)