Hmz, moeilijke titel.
Goed, we hebben een (in PHP geschreven) applicatie die aanvankelijk door users in 1 land gebruikt werd. So far so good.
Nu zijn er andere landen in hetzelfde bedrijf die ook gebruik willen maken van deze applicatie. Het is alleen zo dat zij andere business rules hebben voor wat betreft publiceren, accorderen, budgetteren etc van de content die dmv het systeem gemaakt wordt (je moet hierbij denken aan een mix van een rudimentaire project manager meets CMS)
Voorbeeld:
Een medewerker van een afdeling (persoon A) van het bedrijf in land X schrijft een document (D). Een andere afdeling (en daar de leidinggevende van, ik noem 'm persoon B ) moet in land X eerst zijn akkoord geven voordat het document gepubliceerd kan worden.
Momenteel -heel kort door de bocht- krijgt B een mailtje van het systeem met de melding dat A een document heeft geschreven, en dat daar akkoord op gegeven moet worden voordat A de mogelijkheid krijg om op het "publiceer document" linkje te klikken.
Document D heeft in dit geval dus een status die door mensen met voldoende permissies geset kan worden.
So far so good, maar in essentie is dit hardcoded in 't systeem. Wisten wij veel
Nu gaat land Y ook de applicatie gebruiken. In land Y bestaat het concept "akkoorderen" niet. Een medewerker kan hier zonder interventie van leidinggevenden zijn document publiceren. (wellicht omdat de afdelingen zo klein zijn dat de medewerker en leidinggevende een zijn. Of wat voor reden dan ook)
Voor land X en Y gelden dus verschillende regels voor het al dan niet tonen van het "publiceer document" linkje (of het uberhaupt toestaan van die actie)
Nog een voorbeeld:
In land X mogen per medewerker maximaal 5 documenten per jaar gepubliceerd worden. In land Y is dit onbeperkt.
Kortom, we hebben (landafhankelijke) business rules die we niet willen/kunnen hardcoden. Dit moet dus in de applicatie ingebakken worden op 1 of andere manier.
Hoe regel ik dit?
Drupal heeft hier een mooie "workflow" module voor:
screenshot
project pagina
Nu ben ik verder niks met Drupal van plan, maar conceptueel lijkt dit wel erg puick:
• Definieer event
• Definieer conditie
• Definieer actie
Maar -om toch even in Drupal termen te blijven- dan moet er dus een "hook" komen die bij iedere (public) method getriggered wordt, en het event evalueert, eventueel de condities en tenslotte eventueel actie onderneemt.
Events kunnen zijn:
• Nieuw document wordt gemaakt (dus zou getriggered moeten worden in de method die zorgt dat het document-toevoegen-formulier getoond wordt)
• Nieuw document gaat opgeslagen worden (dus zou getriggered moeten worden in de method die de POST variables ontvangt)
Condities:
• Huidig aantal documenten door persoon A < 5
• Lokatie (land van persoon A) = 'Slovakia'
(of combinatie van meerdere)
Acties:
• Stuur waarschuwingsmail naar corporate admin
• Onderbreek "save" actie en genereer adequate foutmelding
(of combinatie van meerdere)
Heeft iemand enig idee hoe dit te implementeren zou zijn?
Het leek mij handig om in iedere method waarvoor business rules kunnen gelden "iets" toe te voegen waarmee we kunnen evalueren of er uberhaupt een business rule is, en zo ja, wat de condities zijn waaraan al dan niet voldaan moet worden, en wat er dan voor actie ondernomen moet worden.
Maar hoe bepaal ik in dat "iets" (een of andere superclass method) dan welke event er optreedt? Ik zat te denken aan iets waarbij ik interpreteer welke method deze "hook" aanroept. Ik weet dan class = document, calling method = process_add_form() , dus event is dan 'nieuw document gaat opgeslagen worden'. (Inspired by [PHP] Zien welke functie een functie aanroept .. waar ook overtuigende argumenten zijn om hier absoluut geen stacktrace voor te gebruiken.) Jammer, maar ik wil dus eigenlijk ook niet die functieaanroep met parameter 'document.process_add_form' doen, want dan moet ik dat handmatig op 100 plaatsen gaan invoeren.
Maar hoe dán?
En dan de condities waaraan voldaan moet (of juist niet) worden:
Hoe kan ik die "handig" vertalen naar iets wat ik in een database kan opslaan? En er ook weer uithalen en correct interpreteren en afhandelen?
Of ben ik echt volledig op de verkeerde weg
Any thoughts?
Goed, we hebben een (in PHP geschreven) applicatie die aanvankelijk door users in 1 land gebruikt werd. So far so good.
Nu zijn er andere landen in hetzelfde bedrijf die ook gebruik willen maken van deze applicatie. Het is alleen zo dat zij andere business rules hebben voor wat betreft publiceren, accorderen, budgetteren etc van de content die dmv het systeem gemaakt wordt (je moet hierbij denken aan een mix van een rudimentaire project manager meets CMS)
Voorbeeld:
Een medewerker van een afdeling (persoon A) van het bedrijf in land X schrijft een document (D). Een andere afdeling (en daar de leidinggevende van, ik noem 'm persoon B ) moet in land X eerst zijn akkoord geven voordat het document gepubliceerd kan worden.
Momenteel -heel kort door de bocht- krijgt B een mailtje van het systeem met de melding dat A een document heeft geschreven, en dat daar akkoord op gegeven moet worden voordat A de mogelijkheid krijg om op het "publiceer document" linkje te klikken.
Document D heeft in dit geval dus een status die door mensen met voldoende permissies geset kan worden.
So far so good, maar in essentie is dit hardcoded in 't systeem. Wisten wij veel
Nu gaat land Y ook de applicatie gebruiken. In land Y bestaat het concept "akkoorderen" niet. Een medewerker kan hier zonder interventie van leidinggevenden zijn document publiceren. (wellicht omdat de afdelingen zo klein zijn dat de medewerker en leidinggevende een zijn. Of wat voor reden dan ook)
Voor land X en Y gelden dus verschillende regels voor het al dan niet tonen van het "publiceer document" linkje (of het uberhaupt toestaan van die actie)
Nog een voorbeeld:
In land X mogen per medewerker maximaal 5 documenten per jaar gepubliceerd worden. In land Y is dit onbeperkt.
Kortom, we hebben (landafhankelijke) business rules die we niet willen/kunnen hardcoden. Dit moet dus in de applicatie ingebakken worden op 1 of andere manier.
Hoe regel ik dit?
Drupal heeft hier een mooie "workflow" module voor:
screenshot
project pagina
Nu ben ik verder niks met Drupal van plan, maar conceptueel lijkt dit wel erg puick:
• Definieer event
• Definieer conditie
• Definieer actie
Maar -om toch even in Drupal termen te blijven- dan moet er dus een "hook" komen die bij iedere (public) method getriggered wordt, en het event evalueert, eventueel de condities en tenslotte eventueel actie onderneemt.
Events kunnen zijn:
• Nieuw document wordt gemaakt (dus zou getriggered moeten worden in de method die zorgt dat het document-toevoegen-formulier getoond wordt)
• Nieuw document gaat opgeslagen worden (dus zou getriggered moeten worden in de method die de POST variables ontvangt)
Condities:
• Huidig aantal documenten door persoon A < 5
• Lokatie (land van persoon A) = 'Slovakia'
(of combinatie van meerdere)
Acties:
• Stuur waarschuwingsmail naar corporate admin
• Onderbreek "save" actie en genereer adequate foutmelding
(of combinatie van meerdere)
Heeft iemand enig idee hoe dit te implementeren zou zijn?
Het leek mij handig om in iedere method waarvoor business rules kunnen gelden "iets" toe te voegen waarmee we kunnen evalueren of er uberhaupt een business rule is, en zo ja, wat de condities zijn waaraan al dan niet voldaan moet worden, en wat er dan voor actie ondernomen moet worden.
Maar hoe bepaal ik in dat "iets" (een of andere superclass method) dan welke event er optreedt? Ik zat te denken aan iets waarbij ik interpreteer welke method deze "hook" aanroept. Ik weet dan class = document, calling method = process_add_form() , dus event is dan 'nieuw document gaat opgeslagen worden'. (Inspired by [PHP] Zien welke functie een functie aanroept .. waar ook overtuigende argumenten zijn om hier absoluut geen stacktrace voor te gebruiken.) Jammer, maar ik wil dus eigenlijk ook niet die functieaanroep met parameter 'document.process_add_form' doen, want dan moet ik dat handmatig op 100 plaatsen gaan invoeren.
Maar hoe dán?
En dan de condities waaraan voldaan moet (of juist niet) worden:
Hoe kan ik die "handig" vertalen naar iets wat ik in een database kan opslaan? En er ook weer uithalen en correct interpreteren en afhandelen?
Of ben ik echt volledig op de verkeerde weg
Any thoughts?