Bibliotheek in ProcessMaker - cs.uu.nl .Bibliotheek in ProcessMaker Gevraagd wordt voor een...
date post
10-Nov-2018Category
Documents
view
213download
0
Embed Size (px)
Transcript of Bibliotheek in ProcessMaker - cs.uu.nl .Bibliotheek in ProcessMaker Gevraagd wordt voor een...
Bibliotheek in ProcessMaker Gevraagd wordt voor een bibliotheek een informatiesysteem te ontwerpen. De bibliotheek heeft
een aantal bibliothecarissen die de verzameling beheren, en leden die deze boeken kunnen lenen.
Leden mogen maximaal 2 boeken thuis hebben. Daarnaast wil de bibliothecaris nieuwe boeken
kunnen bestellen bij de verschillende leveranciers. Gevraagd wordt hier een informatiesysteem voor
te ontwerpen.
Er zijn dus twee processen van belang: boeken aanschaffen en boeken lenen.
Specificatie
Datamodel
BookMember
User
Supplier Offer
Locationba
d
c
Voor de bibliotheek gebruiken we een versimpeld datamodel. Boeken staan op een locatie in de kast
(relatie b) of zijn uitgeleend aan een lid (relatie a). Als relatie a niet gezet is, is het boek aanwezig in
de bibliotheek. Voor een boek worden offertes uitgebracht (relatie c) door een supplier (relatie d).
Proces 1: boek aanschaffen
In dit model gaan we ervan uit dat er 5 leveranciers zijn.
Analyse: Het model is sound omdat a) alle plaatsen afgedekt zijn met de plaatsinvarianten
i+p+q+r+s+f = 1 en t+leveranciers = 5, en b) f+5leveranciers is een home marking. Daarnaast
kan transitie bestel boek alleen vuren als er 5 tokens in leveranciers liggen, wat door het
model afgedwongen wordt, doordat vraag leverancier en geef levertijd altijd even vaak
moeten vuren. Het model is dus correct.
Transitie Rol Omschrijving
Selecteer boek librarian De bibliothecaris geeft de details van het boek dat besteld moet
worden.
Vraag
leverancier
librarian De bibliothecaris vraagt aan een leverancier om de beschikbaarheid
en levertijd op te geven.
Levertijd
leverancier
supplier De leverancier geeft de beschikbaarheid en levertijd van het
gevraagde boek door
Bestel boek librarian Uit de opgaven van de leveranciers kiest de bibliothecaris de beste
optie, en bestelt daar het boek
Lever boek supplier De uitverkoren supplier levert het boek af bij de bibliotheek
Plaats boek librarian De bibliothecaris plaatst het boek in het rek in de bibliotheek, zodat
leden het boek kunnen lenen.
Proces 2: leen een boek
Aanname: leden brengen boeken altijd terug.
Analyse: het model is een Jackson omdat iedere transitie maar n ingaande en n uitgaande pijl
heeft. Met behulp van de Jackson reductieregels is het net te reduceren tot een enkele gemarkeerde
plaats. Ofwel, het model is sound.
Transitie Rol Omschrijving
Kies boek Member Een lid van de bibliotheek pakt een boek uit de kast om het te
lenen.
Controleer
uitgeleende
boeken
Librarian De bibliothecaris controleert of het betreffende lid niet al twee
boeken geleend heeft. Is dit het geval, mag het lid het boek niet
meenemen.
Leen boek Member Het lid neemt het boek mee naar huis
Breng boek terug Member Het lid brengt het boek terug
Zet boek terug Librarian De bibliothecaris zet het boek terug in de kast.
Implementatie
Gebruikers en rollen
Eerst maken we de gebruikers aan.
1. Log in op ProcessMaker 2. Ga naar Admin -> users 3. Klik op New en maak de volgende gebruikers aan:
User name First name Last name Password
asup Ab Supplier absup
bsup Bert Supplier besup
balie Bert Alie balie
lid1 Een Lid eenlid
lid2 Tweede Lid tweelid
We definiren vervolgens de volgende drie rollen: Member, Librarian en Supplier.
1. Selecteer Groups 2. Klik op New en maak ieder van de drie rollen aan. 3. Selecteer de rol en klik op Users. Voeg de volgende gebruikers aan de rollen toe:
Rol Leden
Member lid1, lid2
Librarian balie
Supplier asup, bsup
Datamodel
Het datamodel implementeren we ook in ProcessMaker. Hiervoor blijven we in Admin.
1. Klik op Settings, en ga naar PM tables 2. Klik op New en kies New PM table 3. Maak de volgende tabellen op deze manier:
Tabel Veldnaam Label Type Size Primary Key Auto incr.
BOOK ID Id VARCHAR 255 Ja
NAME Name VARCHAR 255
ISBN ISBN VARCHAR 255
AUTHORS Authors VARCHAR 255
LOCATION Location BIGINT
MEMBER Member VARCHAR 255
OFFER SUPPLIER Supplier VARCHAR 255 Ja
BOOK Book VARCHAR 255 Ja
DELIVERY Delivery date DATETIME
PRICE Price FLOAT
LOCATION ID Id BIGINT Ja Ja
NAME Name VARCHAR 255
Location kunnen we van te voren al vullen met waarden, zeg Kast 1 en Kast 2. Dit doen we door
op de tabel Location te klikken en op Data te klikken.
Nu hebben we de tabellen en gebruikers aangemaakt, en kunnen we de processen gaan definiren.
Proces 1: Bestel boek
Omzetting van Petrinet: in plaats van de constructie met de plaats Leverancier gebruiken we het
multi-instance task workflowpatroon, door de taak Geef levertijd het type Parallel mee te geven.
Daarmee wordt de taak uitgevoerd door alle Suppliers, en Bestel boek kan pas vuren nadat alle
taken zijn afgerond. Daarmee heeft het BPMN-model hetzelfde gedrag als bovenstaand Petrinet,
voor een willekeurig aantal leveranciers.
Om een formulier te maken, klik in het zijmenu op Dynaforms
Formulier: Selecteer boek
Dit formulier vult de bibliothecaris in bij het bestellen van een nieuw boek.
Elementen:
Element Variabele Type Label Display mode
Textbox book String Boek Parent
Textbox authors String Auteurs Parent
Textbox ISBN String ISBN Parent
Formulier Geef Levertijd:
Dit formulier vult een leverancier in om de levertijd en prijs door te geven.
Elementen
Element Variabele Type Label Display mode
Textbox book String Boek View
Textbox authors String Auteurs View
Textbox ISBN String ISBN View
Datetime deliveryTime Datetime Levertijd Parent
Textbox price Float Prijs Parent
Om bestaande variabelen te gbruiken, kiezen we niet Create variable, maar Select variable (zie
hieronder).
Om een float-variabele toe te voegen, klik op settings tijdens het koppelen:
Formulier Bestel boek
Dit formulier gebruikt de bibliothecaris om de leverancier te selecteren waarbij hij of zij het boek wil
bestellen.
Elementen:
Element Variabele Type Label Display mode
Textbox book String Boek View
Textbox authors String Auteurs View
Textbox ISBN String ISBN View
Dropdown preferred_supplier String Leverancier Parent
Daarnaast zetten we nog de SQL query voor de Dropdown om de juiste opties te tonen. We willen
dat de leveranciers getoond worden, samen met de waarden die ze geselecteerd hebben. Dat doen
we met de volgende query:
SELECT SUPPLIER AS k, CONCAT(USR_FIRSTNAME, ' ', USR_LASTNAME, ': ', DELIVERY, ' (prijs:',ROUND(PRICE,2),')') AS v FROM PMT_OFFER INNER JOIN USERS ON USR_UID=SUPPLIER WHERE BOOK="@#APPLICATION"
De query retourneert twee velden: een key en een label. In dit geval is de key de supplier, en de
value is de naam van de supplier, samen met de levertijd en prijs die de leverancier voor dat boek
heeft ingevuld. Het boek identificeren we aan de hand van de variabele @@APPLICATION (in SQL
moet je daar @# voor schrijven volgens de ProcessMaker handleiding). Omdat we niet het ID van de
supplier willen hebben, maar de volle naam, halen we deze op uit de tabel USERS. Daarmee krijg je
dus een INNER JOIN op die tabel. (Je kunt deze query altijd uitproberen met bijvoorbeeld
PHPMyAdmin).
Formulier Lever boek
Dit formulier gebruikt de leverancier om aan te geven dat het boek is geleverd.
Elementen
Element Variabele Type Label Display mode
Textbox book String Boek View
Textbox authors String Auteurs View
Textbox ISBN String ISBN View
Datetime delivered Datetime Datum Parent
Formulier Plaats boek
Dit formulier gebruikt de bibliothecaris om het boek in het systeem en in de kast te plaatsen.
Elementen
Element Variabele Type Label Display mode
Textbox book String Boek View
Textbox authors String Auteurs View
Textbox ISBN String ISBN View
Datetime delivered Datetime Datum View
Dropdown location Bigint Locatie Parent
Daarnaast moeten we nog de opties voor de locaties in de Dropdown aangeven. Dit doen we weer
met een SQL query:
SELECT id, name FROM PMT_LOCATION;
Koppel vervolgens de formulieren aan de betreffende taken.
Role-Assignment
Koppel de taken aan de gebruikersrollen zoals in de specificatie bij de transities vermeld (selecteer
self-service):
Voor de taak Geef levertijd, selecteer je Parallel Assignment, met de rol Supplier.
Eerste testrun
Nu is in principe het model rond, en kun je gaan testen of het werkt. Zoals je merkt, krijgen de twee
leveranciers de taak geef levertijd toebedeeld, maar ziet de tweede leverancier de waarden van de
eerste leverancier. Ook is de Drop-down voor de leverancier nog leeg, omdat het systeem er geen
data in zet! Dat gaan we doen met triggers!
Triggers
Trigger 1: Sla leveranciersgegevens op.
We willen de waarden die de leverancier heeft ingevuld opslaan in de tabel PMT_OFFER. Dat geeft
drie stappen:
1. Haal de waarden op die de leverancier heeft ingevuld 2. Stop deze in de database 3. Reset de formulierwaarden voor de volgende run.
Dat levert de volgende PHP-code op:
// get the values $curre