bibliotheek in processmaker - cs.uu.nl ?· bibliotheek in processmaker gevraagd wordt voor een...

Download Bibliotheek in ProcessMaker - cs.uu.nl ?· Bibliotheek in ProcessMaker Gevraagd wordt voor een bibliotheek…

Post on 10-Nov-2018

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 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