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í.

java
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