Integrace pomocí moduleObject
Integrace pomocí moduleObject
Koncept slouží pro integraci mezi moduly pomocí volné vazby. Často vzniká požadavek, aby bylo v modulu možné omezeně pracovat s entitami jiného modulu, např. je přiřazovat jako související položky, nebo pouze zobrazovat v GUI.
Zkopírovat odkaz na sekciImplementace poskytující strany
Modul, který se rozhodne poskytovat svoje objekty jiným modulům zajistí implementaci rozhraní com.fg.webapp.cps.v1.modules.integration.ModuleObjectDataProvider (nezaměňovat s ramjet data providery).
Je nutné zvolit dostatečně unikátní název typu objektu, doporučena je konvence "název modulu"/"typ entity" - pro inspiraci viz existující implementace.
Vrácený objekt je v minimalistické formě (id, název), může poskytovat další vlastnosti v dodatečné mapě.
Doporučené vlastnosti pro lepší integrovatelnost:
- url - veřejné url objektu
- lang - jazyk objektu
- objectPath - drobečková navigace umístění objektu, odděleno entitou »
- tags - seznam přiřazených štítků (resp. jejich systemId)
Pro kontrolu oprávnění (např. ve fulltextu, nebo pro obsahové bloky) je pak nutné doplnit
- securityModule - id security modulu (hodnota jako se používá v security metadatech security/module)
- securityIdentifier - id security objektu (hodnota jako se používá v security metadatech security/identifier)
- securityIdentifierObject - dodatečně lze vracet přímo instanci SecurityIdentifier (hodnota jako se používá v security metadatech security/identifierObject)
Preferované je implementovat včetně rozšíření pro podporu query - com.fg.webapp.cps.v1.modules.integration.query.ModuleObjectQuerySupport, pak lze plnohodnotně použít v UI.
Existující instance provideru v kontextu modulu jsou pro použití automaticky registrovány, není nutné řešit ručně.
Zkopírovat odkaz na sekciStrana konzumující
Modul, který chce získavat cizí objekty pak využije servisní třídu com.fg.webapp.cps.v1.modules.integration.ModuleObjectService. Ta řeší optimalizované načítání objektů, lze získat i seznam poskytovaný více moduly najednou (volání na jednotlivé providery si třída řeší interně)
Pro práci s daty objektu modulu je vhodné nespoléhat na dostupnost konkrétních vlastností.
1 // ukázka volání pomocné metody pro získání Optional hodnoty s možností konverze2final String lang = moduleObject.getData(DATA_LANG, String.class).orElse(null);
Zkopírovat odkaz na sekciAplikační události
Pro vybrané implementace jsou dostupné integrační aplikační události
jejich implementace zatím vznikají pouze při opodstatněném požadavku na integraci
Zkopírovat odkaz na sekciVazba na publikaci
Události svázané s životním cyklem objektu modulu, pomocí kterých mohou jiné module obecně reagovat na změny dostupnosti objektu.
- ModuleObjectPublishedEvent - objekt se stal veřejně dostupným, případně použitelným pro integraci
- ModuleObjectUnpublishedEvent - objekt není dále veřejně dostupný ani jinak smysluplně použitelný pro integraci
Publikace je zde chápána v obecnějším významu a tedy použitelná i pro objekty, které klasickou publikací ve smyslu redakčního obsahu neprocházejí. Dle typu objektu lze informovat obecně o dostupnosti pro integraci.
Zkopírovat odkaz na sekciVazba na provázání objektů
Události reagující na provázání objektů. Datový model pro uložení vazeb mezi objekty modulů je typicky obecný bez možnosti aplikace referenční integrity na úrovni databáze. Proto je vhodné mít možnost reagovat na vytvoření vazby aplikačně.
Události poskytují objectTypeSource a objectIdSource reprezentující zdrojový objekt, který ma k sobě navázané cílové objekty dostupné jako objectTypeTarget a objectIdTarget.
- ModuleObjectAttachedEvent - akce navázání cílového objektu na zdrojový
- ModuleObjectDetachedEvent - akce rozpojení cílového objektu se zdrojovým
Zdrojový objekt je tedy chápán jako nadřazený, cílový jak ten který je ke zdrojovému napojený
Zkopírovat odkaz na sekciRamjet
Dostupné komponenty pro použití v UI
- com.fg.edee.integration.web.conversion.ModuleObjectConversionStrategy
- com.fg.edee.integration.web.dataProvider.moduleObject.ModuleObjectRecordListingSource
- com.fg.edee.integration.web.ui.widget.autocomplete.ModuleObjectAutocompletionDataProvider
Zkopírovat odkaz na sekciExistující implementace
- edeeAssessment - schvalovací proces preview modulu
- edeeComment - komentář edeecomment modulu
- edeeContentBlock - obsahový blok (jako id objektu je použito sourceId)
- edeeFile - soubor z výchozího úložiště f.file
- edeePage - stránka (jako id objektu je použito sourceId)
- edeeWeb - web
- edeeStorage - úložiště (jako id objektu je použit hash code textového id storage)
- edeeTag - štítek
- edeeCategory - kategorie
- edeeUser - uživatel administrace
- edeeLink - objekt odkazu link modulu
- gaAccount - analytics modul - účet Google Analytics
- gaProfile - analytics modul - profile Google Analytics
- mailRecipientList - adresní list mail modulu
- mailCampaign - kampaň mail modulu
- registeredUser - registrovaný uživatel
- scramJetEdee - formulář scramjet modulu
- eshopProduct - produkt eshop modulu
- eshopCategory - kategorie produktů eshop modulu
- eshopGroup - skupina produktů eshop modulu
- eshopBrand - značka z eshop modulu
Zkopírovat odkaz na sekciExistující vazby na události
- modifikace souvisejícího objektu u obsahovému bloku emituje ModuleObjectAttachedEvent/ModuleObjectDetachedEvent událost na kterou reaguje edeelink modul pokud je cílový objekt typu edeeLink