Masterclass InProces 2.12

Agenda
- Introductie
- Gebruik
- Beheer organisatie en procesmodel
- Objectmodelering
- UI beheer
- IPML
- Rapportages
Wat is InProces
- Enterprise Content Management
- Platform as a Service
- Authentication
- Authorisation
- Multi-tenant
Enterprise Content Management

InProces ECM
- Proces management (intern / extern)
- Dossiervorming / substitutie
- Organisatiestructuur / routering / autorisatie
- Kennismanagement
- Klant contact (balie/telefoon)
- Digitaal vergaderen en besluiten (college/raad)
- Website
- Burgerloket/Ondernemersloket
- Studentenloket
- Objectmanagement
- Governance
- Multi-organisatie / Multi-lingual
What's new : InProces 2.11
- serverside
- scheiding blobs en operationele data !!
- search engine lucene naar aparte service
- IPML (many)
- functions
- OpenAPI 3.0 (swagger)
- clientside
- Fuse (material design)
- views / widgets
- samen werken aan zelfde zaak
What's new: InProces 2.12
beta 1 april 2018, rc 1 juli 2018, release 1 augustus 2018
- serverside
- IPML
- servicemix stateless
- voorbereiding docker
- voorbereiding barebone iron
- externe gegevensbron functionaliteit
- swagger
- xml
- webservices soap / wsdl
- clientside
- auto translate
- bulk verwerking zaken
- search
- business rules
- progressive web app
InProces Architectuur
website
loket
inproces
bestuur
.........
private cloud
applicatie clusters
database clusters
internal datasources
external datasources (land. voorz / open data)
public cloud
applicatie clusters
database clusters
basis
gemeente
waterschap
onderwijs
.......
Amstelveen
Aalsmeer
.....
Rijnland
.....
UvA
.....
Delfland
HvA

app server

app server
app server
app server
app server
tenants
organisatie type
SaaS
- software as a SERVICE
- service bevat
- infrastructuur (tot aan de meterkast)
- basis functionaliteit
- organisatietype functionaliteit
- organisatie functionaliteit
- d.m.v. configuratie
- d.m.v. standaard content
- support
- beheer
applicatie toegang
- Toegang via browser
- Laatste 2 major versies
- Hostname bevat applicatie, omgeving en klant
https://[applicatie].[omgeving].[klant].[tld]
omgeving | host |
---|---|
test | https://inproces.test.webbergen.nl |
acceptatie | https://inproces.acceptatie.webbergen.nl |
productie | https://inproces.webbergen.nl |
staging | https://inproces.staging.webbergen.nl |
authenticatie methodes
instelbaar per applicatie
- InProces
- LDAP
- AD
- ADFS
- DigiD
- eHerkenning
- SurfConnext
applicatie routering
via URL parameters
parameter | voorbeeld |
---|---|
portaal | /home |
widget | /home/zaak |
schema | /home/zaak/evenementenvergunning |
sleutel / docunid | /home/zaak/evenementenvergunning/2017-001234 |
belangrijste applicaties
applicatie | doel | interface |
---|---|---|
basis | container voor vaste componenten | - geen - |
inproces | gebruik vanaf 2.11 | responsive |
contentbeheer | configuratie applicaties | classic |
zaken | configuratie processen | classic |
wijzer | gebruik sociaal domein | responsive |
connect | koppelingen monitor | classic |
bestuur | gebruik besluitvorming | classic |
intranet | gebruik medewerkers | responsive |
website | gebruik klanten | responsive |
Agenda
- Introductie
- Gebruik
- Beheer organisatie en procesmodel
- Objectmodelering
- UI beheer
- IPML
- Rapportage
InProces Gebruikersinterface

Agenda
- Introductie
- Gebruik
- Beheer organisatie en procesmodel
- Objectmodelering
- UI beheer
- IPML
- Rapportages
zaken.staging.webbergen.nl/management

Organisatie model
- organisatie
- organisatie zelf
- ketenpartners
- users uit LDAP / AD / ADFS
- groepen in InProces
- rol
- afdeling / team
- organisatieonderdeel
- partij
beheer medewerkers

- synchronisatie met externe user-dir
- additionele config in IP
medewerker in organisatie

proces model

zaaktypen
- Proces definitie (uitbreiding van het zaak-schema)
- Interne en externe zaaktypen
- Onderdelen
- Algemene classificatie
- Aanleiding (b.v. aanvraag formulier, post, mail etc.)
- Behandeling algemeen
- Proces verloop
- Resultaat definitie tbv archief en vervolg processen
- Dossiervorming
- Subprocessen
- Views (user interface)
- Functies
- Bussinessrules
zaaktype

Procesverloop
- fase
- beslaat een periode
- behandelaar vast of berekend
- status
- sluit een periode af
- checklist
- controle mechanisme
- kan automatisch worden gezet
Businessrules
- naam
- conditie (fase + ipml)
- uitvoering
- functie
- service
- save
- send
Views
gebruikersknoppen in de zaak widget

Views
- standaard
- documenten
- memos
- subprocessen
- timeline
- kaart
- custom
- icon
- naam
- filter (js)
- widget
Zaak functions
- standaard
- volgende fase
- vorige fase
- toewijzen
- annuleren
- etc.
Functions
- IPML -> server side uitvoering
- conditie
- parameters
- function
- return
- uitvoerbaar via
- businessrule
- API extern
- in widgets
InProces Open API
- restfull
- /api/{schema}/{function}/{id}?.....
- /api/zaak/naarfase/2018-0001358
- Swagger Open API 2.0
- /swagger
Agenda
- Introductie
- Gebruik
- Beheer organisatie en procesmodel
- Datamodelering
- UI beheer
- IPML
- Rapportages
Gegevensmodellering
- Schema
- class van een entiteit
- Entiteit
- instantie van een schema
- content
- object met inhoudelijke gegevens
- context
- relatie tussen 2 content entiteiten
Schema definitie
- Visuele weergave voor zowel classic als fuse
- eigenschappen
- tabbladen
- fieldset -> meerdere fieldset entiteiten per schema
- fields -> meerdere field entiteiten per fieldset
- views (alleen fuse)
- tbv het tonen van widgets of starten van functies
- functions
- serverside uitvoeren van IPML code
- events
- create
- update
- delete
Agenda
- Introductie
- Gebruik
- Beheer organisatie en procesmodel
- Datamodelering
- UI beheer
- IPML
- Rapportages
Single Page Application
- Application server parsing
- MVC Model
- Model (json)
- View (html5 / css3)
- Control (javascript)
- Frameworks
- AngularJS
- Angular material
- losse modules
- Routering d.m.v. URL
Gegevens flow
component | middel | output |
---|---|---|
database | mongo-db | json |
applicatieserver |
data parser (schema defin. / autorisatie) |
json |
applicatieserver | ipml parser (applicatie/widget) |
html5/css3/es6 |
browser | inproces MVC client angularjs parser angularjs-material |
html5/css3/es6 |
Model View Controller

Material Design
UI Componenten
- Applicatie
- Toolbar widget
- Navigatie widget
- Portaal placeholder
- Portaal
- vaste indeling
- of dynamische widgets
- Widget
UI componenten
- contentbeheer.staging.webbergen.nl/management
- kies applicatie
- panel sitemanagement
- applicatie
- portalen
- widgets
Basis componenten
- InProces applicatie
- Portalen
- Dossiers
- Klantcontact
- Vergaderingen
- Widgets
- Dossiers widget voor werkvoorraad en zoeken
- Bevat dynamische filter mogelijkheden
- Zaak widget met views:
- zaak-dossier
- zaak-memo's
- subdossiers
- timeline
- .....
- Dossiers widget voor werkvoorraad en zoeken
UI component
- applicatie, portaal of widget
- definitie
- view panel
- IPML => HTML
- controller panel
- model in JSON
- control in javascript
- view panel
- opmaak
- CSS
- assets zoals images of fontfiles
Widget
- Model
- View
- Control
<ip-widget>
<content>
<!-- your code here -->
</content>
</ip-widget>
Agenda
- Introductie
- Gebruik
- Beheer organisatie en procesmodel
- Datamodelering
- UI beheer
- IPML
- Rapportages
Wat is IPML
- InProces Markup Language
- String parser
- Vertaald strings naar strings
- InProces Magic Language
- functional operations
- procedural operations
- Resources
- https://help.brein.nl/home/oplossing/inproces-foundations?tag=beheerder#inproces-markup-language
- https://help.brein.nl/ipml-doc
InProces Magic Language
- Elements
- <ip-widget>
- <.. widget name..>
- <http>
- ....
- Statements
- Functions
InProces entiteit model

InProces schema model

IPML in Schema
Field | Description | Event |
---|---|---|
aftersavefunction | Event first save | after first save |
afterupdatefunction | Event every save | after every save |
afterdeletefunction | Event after delete | after inactive |
functioncondition (multiple) | Expression to test if function may be executed | before function call |
functionparameters (multiple per function) | Array of parameters for function | before function call |
function (multile) | Expression to be executed | Function call |
functionresult | Expression to return after function | after function call |
IPML in Fieldset
Field | Description | Event |
---|---|---|
includecondition | Checks if user has a right to read the fields of this fieldset | every read |
legend | Dynamic fieldset title | form creation (fuse/classis) |
help | Generates help fir this fieldset | form creation (fuse/classis) |
IPML in Field
Field | Description | Event |
---|---|---|
label | Dynamic fieldlabel | form creation (fuse/classis) |
help | Generates help for this field | form creation (fuse/classis) |
create | default value | before entity creation |
update | calculated value | Every save |
IPML in Application, Portaal en Widget
Field | Description | Event |
---|---|---|
(applicatie)template | html template | view |
opmaak | css expression | view |
controller | javascript expression | view |
IPML Testen
- IPML test widget: /home/ipml

IPML Objecten
- Any object
- functions
- update
- ....
- properties
- object
- .... any
- filter
- javascript
- (format object naar javascript save notatie)
- javascript
- functions
- this
- context waarin ipml wordt uitgevoerd
- (meestal een entiteit)
- context waarin ipml wordt uitgevoerd
Entiteit(en)
- Is een record in de database (instance)
- Definitie op basis van een schema (class)
- 1 entiteit lezen d.m.v. sleutel of id
- syntax
{... schemanaam.. [ docunid/sleutel ]....veld of object of function.. }
- syntax
- meerdere zoeken dmv query
- syntax
{... schemanaam.. [ ..query.. ]....veld of object of function.. }
- syntax
{zaak[2018-0001234].betreft}
{ip-var(zaken = {zaak[?[startdatum] > 01-01-2017].object} )}
{zaken[?[onderwerp] = "Evenementenvergunning"].object}
{ip-var(....)}
{ip-var(obj = {
"naam":"Arend Marie",
"geslacht":"gender-neutraal"
})}
{ip-var(zaak = {zaak[2018-0001234].object})}
{/*
Een goede gewoonte om documentatie in je IPML op te nemen:
De gevonden zaak gaan we annuleren.
*/}
{zaak.annuleren({
"reden":"Vanuit IPML een zaakje geannuleerd."
})}
creeert een of meer object(en) of entiteit(en) in memory
{ip-log(....)}
{ip-var(zaak = {zaak[2018-0001234].object})}
{ip-log(De gevonden zaak: {zaak.docunid|javacsript} )}
{ip-var(zaken = {zaak[?[onderwerp] = "Evenementenvergunning"].object} )}
{ip-log(aantal venementenvergunningen = {zaken.value|length()}
stuur bericht naar user en naar de serverlog
{ip-create(..)}
{ip-var(mijnvoorstel = {ip-create({
"schema": "bestuursvoorstel",
"documenttitel": "Voorstel verlenen vergunning Heetpasweg 13"
})}
)}
{mijnvoorstel.save()}
{ip-var(zaak = {zaak[2018-000125].object})}
{zaak.connect({
"contextschema":"zaak-document",
"doelsleutel":"{mijnvoorstel.sleutel}",
"doeldocunid":"{mijnvoorstel.docunid}",
"context":"Bestuursvoorstel {mijnvoorstel.documenttitel}"
})}
ip-create creert een entiteit in memory
.save function legt entiteit vast in de database
{ip-update()}
{ip-var(medewerker = {medewerker[{gebruiker.sleutel}].object})}
{medewerker.update({
"hobby":"IPML-en"
})}
{medewerker.save()}
ip-update werkt een object of een entiteit in memory
{ip-list(....)}
{ip-list(["eerste","tweede","derde"])}
{ip-list({this.eerstebehandelaar|javascript}, {gebruiker.sleutel})}
ip-list creëert een itereerbare list in memory
{(if ...) ? (..then..) : (..else ..)}
{({this.cijfer} > 5) ? (geslaagd) : (gezakt)}
{({zaak.betreft}) || ({document.documenttitel})}
condities
{ip-for(... in ...) => (.....)}
{ip-for(medewerker in {medewerker[?[cijfer] > 5].object}) => (
{medewerker.save({"geslaagd" : "ja"})}
)}
{ip-for(zaak in {zaak[?[eerstebehandelaar] in {gebruiker.rollen|javascript}].object}) => (
{zaak.naarfase({
"eerstebehandelaar": "{zaak.eerstebehandelaar}",
"afhandelinsgstatus": "Advies inwinnen"
})}
)}
ip-for itereert over een lijst
{ip-calc(...)}
{ip-var(inclusiefbtw = {ip-calc({this.bedrag} * 0.21)})}
{ip-log({inclusiefbtw.value})}
ip-calc tbv berekenen

Text
IPML Debugger
IPML Functions
-
Standaard
- update
- map (list)
- Entiteit
- save
- remove
- schema / zaaktype
- .....

Swagger / OpenAPI
Events
- Op functions tabblad van schema
- Overerving door
- eigen schema eerst
- daarna parent,
- daarna parent van parent etc.
- events:
- create
- nadat de entiteit is gecreëerd in de database
- update
- na elke save
- delete
- na elke inactief gemaakte entiteit
- create
Masterclass Dag 2
Hands-On
Afstemmen en Besluiten
Proces Afstemmen en Besluiten
- voorstel opgesteld in Word
- aanbieden middels registratie
- hoofdproces = voorstel behandelen
- fase afstemmen
- subproces voorstel adviseren
(vraag medewerkers en/of gremia om advies)
- subproces voorstel adviseren
- fase besluiten
- subproces voorstel besluiten
(vraag gremia om besuit)
- subproces voorstel besluiten
- fase afhandelen
- fase afstemmen
Benodigd formulier
- Schema "voorstel" met velden:
- Titel
- Word document
- Steller
- Aanbieder
Oefening 1: Formulier
- ga naar zaken.staging.uva.nl/management
open panel met formulieren - Kopieer formulier "voorstel" naar "voorstel_initialen"
- Geef formulier ook een andere titel. bv "Voorstel initialen"
- Voeg richttext veld "beslispunten" toe aan eerste fieldset
- Instellingen gelijk aan samenvatting veld (controller en classic eigenschappen tabladen)
- Test je formulier d.m.v.
inproces.staging.uva.nl/aanvraag/formulier-indienen/voorstel_initialen
Benodigd sjabloon t.b.v. voorblad
- Documenttitel
- Datum
- Opsteller
- Aanbieder
- Samenvatting
- Beslispunten
Oefening 2: Sjabloon
- ga naar zaken.staging.uva.nl/management
open panel met sjablonen - Kopieer sjabloon "voorstel" naar "voorstel_initialen"
- Voeg veld beslispunten toe aan de inhoud
(net zoals samenvatting veld) - Test je sjabloon d.m.v.
inproces.staging.uva.nl/home/formulier-indienen/voorstel_initialen
Benodigde zaaktypen
- voorstel behandelen (hoofdproces)
- voorstel adviseren (subproces)
- voorstel besluiten (subproces)
Oefening 3: Zaaktype voorstel
- ga naar zaken.staging.uva.nl/management
open panel met zaaktypen - Klik op "zaaktype toevoegen"
- Vul de parameters in conform volgende slides
Oefening 3: Zaaktype voorstel

Oefening 3: Zaaktype voorstel

Oefening 3: Zaaktype voorstel

Oefening 3: Zaaktype voorstel

Oefening 3: Zaaktype voorstel

Oefening 3: Zaaktype voorstel
- Ga naar inproces.staging.uva.nl
open Nieuw dossier starten - Zoek jou zaaktype en klik er op
- Vul een nieuw voorstel in
- Selecteer je zelf als opsteller (default)
- Ga naar je werkvoorraad
- Controleer of er een zaak is gestart met jou zaaktype
Oefening 4: Zaaktype afstemmen
- Maak een nieuw zaaktype
- onderwerp = "Voorstel afstemmen initialen"
- product = "voorstel_initialen"
- handeling organisatie = "adviseren"
- fasering = "beoordelen"
- Open daarna in zaaktype "voorstel_initalen" het tabblad subzaken
- Voeg je eigen "Voorstel afstemmen initialen" zaaktype als subzaaktype toe
Oefening 4: Zaaktype afstemmen
- Open je zaak
- Ga naar de subzaken view
- klik op het plusje
- kies jou zaaktype "Voorstel afstemmen initialen"
- Start een subzaak met:
- betreft: "Advies door {naam van de medewerker}"
- kies start en gewenste einddatum
- kies de medewerker bij behandelaar veld
- kies jezelf als verantwoordelijke
Oefening 4: Zaaktype afstemmen
- klik nogmaals op het plusje
- kies jou zaaktype "Voorstel afstemmen initialen"
- Start een subzaak met:
- betreft: "Advies door {naam van gremium}"
- kies start en gewenste einddatum
- kies het gremium bij behandelaar veld
- kies jezelf als verantwoordelijke
- Controleer in de hoofdzaak of de subzaken bij de sub-zaken view zichtbaar zijn
Widget voorstel
- InProces bied standaard views voor
- documenten
- memo's
- subprocessen
- timeline
- info
- geo
- Voor het behandelen van een voorstel kan een zaaktype specifieke widget nuttig zijn
Widget voorstel
- Redenen eigen widget
- snel starten van afstemming subzaak
- snel overzicht van gegeven adviezen
Oefening 5: widget "voorstel"
- Ga naar
contentbeheer.staging.uva.nl/management - Kies applicatie InProces
- Kies panel sitemanagement
- klik op menu optie "nieuwe widget"
- Op "widget" tabblad de naam "voorstel_initialen"
- Op het definitie tabblad de code:
<ip-widget>
<content>
<h1>My first Little widget</h1>
</content>
</ip-widget>
Oefening 5: widget "voorstel"
- Ga naar
zaken.staging.uva.nl/management - Open je eigen zaaktype "Voorstel initialen"
- Ga naar tabblad "views"
- Voeg een view toe
- naam "voorstel"
- label "voorstel"
- icon naar keuze
- locatie "sidemenu"
- positie 1
- widget "voorstel_initialen"
- Open de zaak in de InProces werkvoorraad en controleer of de widget als eerste getoond wordt
Oefening 5: widget "voorstel"
- Open widget "voorstel"
- Kopieer definitie tabblad code
- Plak in je eigen definitie voorstel_initialen code
- Kopieer controller code uit "voorstel" widget
- Plak in je eigen controller code
- Idem voor opmaak tabblad
- In opmaak tabblad "scan en replace"
.voorstel door .voorstel_initialen
Benodigde functie
- Afstemmen met een gremium betekent het vragen van een advies aan elk lid
- Dit betekent een subproces per lid voor de afstemmen subzaak van het gremium
- Het oordeel van het gremium zal door de secretaris worden vastgesteld na advies van de leden
- Voor elk lid van een overlegorgaan (of andere groep) moet een "Voorstel adviseren" subzaak aangemaakt worden in de subzaak van het beoordelen door het gremium
- Een functie "afstemmenleden" kan in een iteratie door de leden gaan en per lid een startzaak van het type voorstel afstemmen aanmaken
Oefening 6: functie afstemmenleden
- Open je zaaktype "Voorstel afstemmen initialen"
- Ga naar het tabblad functies
- Voeg een nieuwe functie toe met naam"afstemmenleden"
- functie:
{ip-for(member in {ip-list({groep[{this.eerstebehandelaar}].members})}) => (
{this.startzaak({
"zaaktypesleutel":"{this.zaaktypesleutel}",
"eerstebehandelaar":"{member.value}",
"betreft":"Advies van {organisatieonderdeel[{member.value}].naam} over {this.betreft}",
"afhandelingsverantwoordelijke":"{organisatieonderdeel[{gebruiker.sleutel}].fullname}"
})}
)}
Oefening 6: functie afstemmenleden
- Ga naar het tabblad views
- Voeg een nieuwe view toe
- naam"afstemmenleden"
- icoon naar keuze
- locatie toolbar
- positie 1
- functie "afstemmenleden"
Oefening 6: functie afstemmenleden
- Open de zaak "Voorstel"
- Ga naar de view "subzaken"
- Open een subzaak van het type "voorstel afstemmen"
- Controleer of de functie "afstemmenleden" via een knop in de toolbar van de subzaak aangeklikt kan worden
- InProce sgaat de subzaken nu aanmaken voor elk van de leden uit het gremium aan wie deze afstemming is aangeboden. Controleer dat bij de subzaken view
Masterclass InProces 2.12
By Ronald Brinkerink
Masterclass InProces 2.12
Enterprise Content Management met InProces
- 531