Handleiding E# Sourcecode Generator
Development System
Elenco B.V. Versie 0.0.3 Datum: 14 december 2006
1
INLEIDING ...................................................................................................................... 4 1.1 HET E# CONCEPT ........................................................................................................ 4 1.2 AUTOMATISCHE AANPASSINGEN EN FUNCTIES ............................................................ 5 1.3 GEBRUIK VAN DE GENERATOR .................................................................................... 6 1.4 INSTALLATIE TOEPASSINGSOMGEVING ........................................................................ 8 1.5 CODE GENERATIE ........................................................................................................ 9 1.6 OVERIGE FUNCTIES VAN DE CODEGENERATOR ............................................................ 9 1.6.1 Bijwerken taaltabel ............................................................................................ 9 1.6.2 Translator........................................................................................................... 9 1.6.3 DBUpdate......................................................................................................... 10 1.6.4 Importeren vanuit Excel ................................................................................... 10 1.7 OPTIONS TABBLAD .................................................................................................... 10 1.8 DE SQL-BUILDER ..................................................................................................... 11 1.9 DE RULES EDITOR ..................................................................................................... 12 1.10 COLUMNS EDITOR ..................................................................................................... 14
2
SYSTEEM OPZET ........................................................................................................ 15 2.1 2.2 2.3 2.4
ALGEMEEN ................................................................................................................ 15 HOOFDSCHERM ......................................................................................................... 15 APPLICATIEPANEEL ................................................................................................... 16 PRESENTATIE IN HET DETAILPANEEL ......................................................................... 18
3
E# CODE GENERATIE................................................................................................ 20
4
GENERATOR COMMANDO'S .................................................................................. 24 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 4.16 4.17 4.18 4.19 4.20 4.21 4.22 4.23 4.24
ALGEMEEN ................................................................................................................ 24 E#DESTFOLDER ........................................................................................................ 24 E#MENUITEM ........................................................................................................... 24 E#MODULE ............................................................................................................... 24 E#BACKOFFICE......................................................................................................... 25 E#DATABASE ............................................................................................................ 25 E#CASCADE .............................................................................................................. 25 E#MULTIGRID .......................................................................................................... 25 E#GRIDSELECT ......................................................................................................... 25 E#BIZOBJECT............................................................................................................ 26 E#BIZSUBJECT .......................................................................................................... 29 E#BIZEND ................................................................................................................. 29 E#USERSELECT ......................................................................................................... 29 E#EXCLUDE .............................................................................................................. 29 E#EXCLUDEGRID ...................................................................................................... 29 E#READONLY ........................................................................................................... 30 E#HIDDEN ................................................................................................................. 30 E#FILTER .................................................................................................................. 30 E#SETOUTPUT .......................................................................................................... 31 E#COMMAND ............................................................................................................ 31 E#EXECUTE............................................................................................................... 31 E#CASCADE .............................................................................................................. 32 E#NOSELECTION....................................................................................................... 32 E#BALANCEDOBJECT ............................................................................................... 33
5
STANDAARD COMPONENTEN................................................................................ 36 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9
6
INLOGSCHERM ........................................................................................................... 36 HET DASHBOARD ..................................................................................................... 37 GEBRUIKERS ONDERHOUD ........................................................................................ 39 TAALMODULE ........................................................................................................... 39 GENERATOR INSTELLINGEN ...................................................................................... 40 BEREKENINGEN ......................................................................................................... 43 GEGEVENS VALIDATIE .............................................................................................. 44 TABEL ONDERHOUD .................................................................................................. 46 MUTATIE LOGGING .................................................................................................... 46
INTEGRATIE MET OFFICE ...................................................................................... 48 6.1 WORD KOPPELING ..................................................................................................... 48 6.2 INLEZEN BOOKMARKS ............................................................................................... 48 6.3 TEKSBLOKKEN .......................................................................................................... 49 6.4 EXCEL KOPPELING .................................................................................................... 49 6.4.1 Export Dataset naar Excel ............................................................................... 49 6.5 XML EXPORT ........................................................................................................... 50 6.6 KOPPELING MET OUTLOOK........................................................................................ 50 6.6.1 Standaard e-mail .............................................................................................. 50 6.6.2 Safe Mail met Redemption Plug-in................................................................... 51
7
PROCES MANAGEMENT .......................................................................................... 52 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11
8
INLEIDING ................................................................................................................. 52 HANDMATIG MANAGEN VAN HET PROCES ................................................................ 52 STATE TRANSITION ENGINE ...................................................................................... 52 STE STATUS ............................................................................................................. 53 STE PROCESS MANAGEMENT ................................................................................... 53 STE OBJECTEN ......................................................................................................... 53 UITVOERING VAN STATE TRANSITION ....................................................................... 55 ACTIE MANAGER ...................................................................................................... 55 ACTIE MANAGER OBJECTEN ..................................................................................... 55 TIME MANAGER ........................................................................................................ 56 TIME MANAGEMENT OBJECTEN ................................................................................ 56
LIJST VAN GERESERVEERDE NAMEN ................................................................ 58
1
Inleiding
1.1 Het E# Concept De E# Sourcecode Generator is bedoeld als gereedschap bij de ontwikkeling van zakelijke toepassingsprogrammatuur. Het genereert de broncode voor standaardschermen welke eenvoudig naar wens kan worden toegesneden middels instellingen voor de generator, zoals welke velden wel of juist niet getoond worden, volgorde van velden op het invoerscherm, etc. Omdat de broncode beschikbaar komt van de ontwikkelaar is het bovendien eenvoudig om maatwerkaanpassingen te maken. E# kan worden gecombineerd met iedere module welke in Visual Studio ontwikkeld is, op een zelfde manier als de Visual Studio talen in samenwerking gebruikt kunnen worden. Zoals de naam al zegt, het programma stelt Broncode samen voor een uiteindelijke applicatie. Deze gegenereerde broncode wordt toegevoegd aan een basis framework welke uit de volgende onderdelen bestaat: • In- en uitloggen van gebruikers; • Onderhoud van gebruikers, hierbij wordt gebruik gemaakt van een tabel tblPeople welke een aantal velden vereist; • Gebruikers Autorisatie op moduleniveau; • Onderhoud van de gebruikers interfacetaal; • Een State Transition Engine voor proces management; • Een Time Manager voor proces management; • Een Action Manager voor gebruikers ondersteuning in de procesafhandeling; • Validerings-routines voor diverse type velden zoals, numerieke-, datum- en valutavelden; • Ieder veld kan worden ingesteld of het verplicht of optioneel ingevoerd moet worden; • Afhandeling van een menuboom; • Interfacing met de database; • Eenvoudige berekeningen; • Interfacing met specifiek ontwikkelde routines welke eenvoudig aan schermen kunnen worden gekoppeld. De E# Sourcode Generator (verder kortweg Generator) genereert broncode voor de volgende scenario's: • Het werken met een Business Object, bijvoorbeeld Klanten, Medewerkers, Producten, enz. • Het werken met Business Objecten en daaraan gerelateerd Subjecten, bijvoorbeeld Klantorders, Productsamenstellingen, etc.; • Berekeningen binnen een object, al dan niet gekoppeld met waarden uit gerelateerde tabellen. • Business rules voor velden tussen gekoppelde objecten. Bijvoorbeeld is het mogelijk om de som van een veldwaarde van de subject regels in een veld van een object op te slaan. • Business rules om een veld uit een object te correleren met het resultaat van een veld van de gerelateerde subjecten. Bijvoorbeeld een factuurbedrag moet gelijk zijn aan de som van de bedragen van alle factuurregels. De broncode wordt gegenereerd aan de hand van een script waarin de schermlayout, filtering, plaats in de menuboom, extra database velden, etc. kunnen worden ingesteld.
De broncode wordt uiteindelijk binnen een Visual Studio ontwikkelomgeving ingelezen en van daar uit in de uiteindelijke toepassing gecompileerd. Door deze tussenstap is het mogelijk om de gegenereerde code als startpunt te nemen voor verdere ontwikkeling van zeer specifieke eisen of te gebruiken zoals deze door de Generator is aangemaakt. Het voordeel van het laatste is uiteraard dat ontwikkelingen in de Generator eenvoudig aan de gebruiker kunnen worden aangeboden. Deze Generator stelt klanten van Elenco in staat om in zeer korte tijd een startpunt voor een nieuwe toepassing te verkrijgen waarbij het uitgangspunt de primaire bedrijfsprocessen is. Het systeem wordt opgezet met vier programma omgevingen; de FrontOffice, de BackOffice, de WebServices en de Server. De huidige status van de Generator maakt integraal een Front- en BackOffice omgeving aan waarbij het onderscheid alleen door gebruikers autorisatie gemaakt kan worden. LET OP: de veldnamen in de tabellen zijn Case Sensitive. Het niet conformeren aan hoofd en kleine letters kan tot interpretatiefouten leiden. In een aantal situaties wordt dit door het systeem ondervangen, in een aantal gevallen is dit niet mogelijk, het wordt aanbevolen om uit te gaan van Case Sensitive invoer.
1.2 Automatische aanpassingen en functies Er zijn een aantal onderdelen waarvoor in het systeem automatisch functionaliteit aanmaakt. • Toevoegen van records in een combobox. Indien een veld verwijst naar een andere tabel (object), wordt hier voor een combobox aangemaakt in het detail paneel. Indien voor dit veld de instelling E#NoSelection wordt gebruikt wordt er geen combobox maar een invoerveld aangemaakt. Het verschil tussen tussen de twee is dat de combobox volledig geladen wordt bij het openen van het scherm en bij E#NoSelection alleen het betreffende record geladen wordt op het moment dat een waarde is ingevoerd. Indien de gewenste waarde nog niet bestaat, kan men deze direct invoeren vanuit het scherm waar men werkt. Indien dit niet gewenst is kan men deze optie uitschakelen met E#NoEdit (of in de specificatie van het betreffende veld). • De verdeling van het presentatie paneel en het detail paneel wordt automatisch aangepast aan het regels dat men in ieder onderdeel presenteert. • De verdeling tussen de grids in het presentatiepaneel verloopt automatisch afhankelijk van het aantal records in ieder Grid. • De kolombreedte van het Grid krijgt een standaard waarde welke afhankelijk is van het type veld en de maximale grootte van het veld. De minimale grootte is standaard ingesteld op 4%, de maximale grootte is ingesteld op 75% van de paneelbreedte. De paneelbreedte is mede afhankelijk van de schermresolutie. • De mogelijkheid voor AutoLogging. Men kan iedere gewenste tabel instellen op Autolog. Er wordt dan een tabel aangemaakt welke een copie is van de layout van de hoofdtabel, aangevuld met registratievelden, waarin iedere toevoeging of wijziging in de hoofdtabel wordt vastgelegd.
1.3 Gebruik van de Generator De gebuikers-interface van de Generator is verdeeld over een aantal Tabbladen. Het Tabblad Generator bevat alle functies welke noodzakelijk zijn voor het aanmaken van de bronbestanden. Select Server is een selector waarmee de SQLserver machine kan worden geselecteerd welke als target systeem moet worden gebruikt voor de uitvoering van de generatie opdrachten. Initieel wordt de SQL database server gebruikt welke in de .ini file van de staat (dit bestand wordt door de applicatie gebruikt voor het verbinden met de server en de database en bevindt zich in de /bin folder van de applicatie). Met deze selector kan men desgewenst een andere target machine uit het netwerk kiezen. Als men een machine kiest, laat een tweede selector alle beschikbare applicatie databases zien. Dit hoeven niet perse databases te zijn welke conformeren aan deze generator. Na het selecteren van een server worden in het uitvoerscherm de beschikbare databases getoond. De systeem databases worden niet in dit overzicht getoond en kunnen ook niet worden geselecteerd.
Commando Start Compiler Language Exec DB Update Translator
Omschrijving Deze opdracht genereert van alle .src bestanden, welke in de hoofd directory van het project aanwezig zijn, de broncode en plaats de .vb bestanden in de aangegeven subfolders. Scant alle .vb bestanden in de hoofd directory en alle subdirectories op taallabels en werkt de database van taallabels bij. Werkt de database referentie bestanden bij. Genereert de broncode voor de vertaalmodule en de menumodule.
Compile Files Load Excel to DB STE Report
Install Application Done
Geeft een fileselector waarmee een of meerdere .src bestanden kunnen worden geselecteerd en waarvoor e broncode wordt gegenereert. Geeft een fileselector waarmee een Excel bestand naar een database tabel kan worden geïmporteerd. De default tabelnaam is de naam van de Excelfile. STE is een hulpfunctie waarmee de een overzicht wordt gegevens van de State Transition en de Time Manager opdrachten in het systeem. Deze overzichten worden tevens in een textbestand opgeslagen. Dit is een ardevol hulpmiddel in het tunen van de State Transition Engine en de Time Manager. Is de installatie procedure van een nieuwe applicatie omgeving. indien de database reeds bestaat, wordt deze bijgewerkt om met de generator samen te kunnen werken. Het programma verlaten.
1.4 Installatie toepassingsomgeving Nadat "Install Application" geactiveerd is, wordt de op dat moment geselecteerde Server en Database getoond. Deze namen kan men veranderen, bij de uitvoering van de installatie wordt de Server geselecteerd welke in "Server Name" staat en de database welke in "Name of Database" staat.
Met "Start Installation" wordt de uitvoering van de installatie procedure begonnen. Hier wordt nog om een bevestiging gevraagd.
Hierna worden de database aangemaakt en de minimaal benodigde tabellen. Verder worden een Systeem Administrator aangemaakt en de landentabel wordt geladen vanuit een Excelsheet NTT.xls.
1.5 Code generatie Het is mogelijk om voor een of meerdere bestanden de code te genereren. Met de keuze "Compile Files" wordt een file selector geboden waarbij men een of meerdere source bestanden kan kiezen.
Zoals in bovenstaand voorbeeld kan worden gezien, worden als eerste stap in de code generatie de wijzigingen in de database aangebracht. De wijzigingen worden direct doorgevoerd in de database, dit kan de toevoeging van velden zijn of een type omzetting van velden voor zover SQLserver dit toestaat.
1.6 Overige functies van de Codegenerator 1.6.1 Bijwerken taaltabel Met de opdracht "Language" wordt de taaltabel bijgewerkt. Alle modules worden gescanned op de taalsleutelwoorden (deze beginnen met lang....) en werkt de taaltabel bij. Ook de menustructuur wordt onderzocht en in de taaltabel bijgewerkt. Hierdoor is het mogelijk om alle sleutelwoorden en teksten door de gebruikersorganisatie te laten aanpassen.
1.6.2 Translator Met het commando "Translator" wordt de broncode gegenereerd voor applicatie taalmodule (JITTranslator.vb) en de menumodule (MenuControl.vb).
1.6.3 DBUpdate Exec DBUpdate actualiseert en schoont de diverse systeemtabellen op.
1.6.4 Importeren vanuit Excel Load Excel to DB is een commando waarmee tabbellen vanuit een ExcelSheet kunnen worden geïmporteerd. Mocht de betreffende tabel niet bestaan, dan wordt deze aangemaakt met alle standaard velden en uitgebreid met de velden welke in de Excelsheet staan. Voor het geval dat een Excel bestand uit meerdere bladen bestaat, wordt om de naam van de te importeren tabel gevraagd. Indien de naam van het werkblad niet de tabelnaam is, kan men een alternatieve naam ingeven. De velden welke nog niet in de database voorkomen worden als tekstvelden geïmporteerd, het wordt derhalve aanbevolen om eerst de applicatie te genereren en daarbij de database velden te definiëren.
1.7 Options Tabblad In het options tabblad kunnen diverse instellingen worden opgegeven voor de applicatie.
1.8 De SQL-Builder De SQL builder is een hulpmiddel voor het testen van eigen SQL statements welke in de applicatie kunnen worden gebruikt. Men kan een zelf gebouwde selectie string testen en de selectie string laten maken zoals het systeem deze voor een tabel genereert bij het aanmaken van de broncode. De eigen filterstring wordt tijdens het bouwen verwerkt in de SQL Result string en met testen krijgt men het resultaat te zien. Men kan uitsluitend SELECT statements testen uit overwegingen van data-integriteit en beveiliging. Als optie kan men aangeven of de Select string op basis van de Front-Office of Back-Office instellingen moet worden aangemaakt.
1.9 De Rules Editor De generator is in staat om relaties tussen veldwaarden aan te maken. Om dit te vereenvoudigen is een Rules Editor toegevoegd aan de Sourcode Generator welke de rules strings kan bouwen.
Er kan voor ieder veld uit het systeem maar één regel worden ingevoerd, hiermee wordt de consistentie van de gegevens gewaarborgd. Er zijn verschillende operaties mogelijk en combinaties van gegevens uit verschillende velden. Met de knop "Test" kan het resultaat van de operatie worden getest, hiervoor wordt de SQL builder gebruikt waarbij het systeem de resulterende string in het "Owner SQL String" veld plakt, overschakelt
naar de SQL builder tab en wordt de knop "Test" van de SQL-builder geactiveerd. Er kan bij d Business Rule worden aangegeven of het een z.g. Balanced Field dient te zijn. Voor de details over het functioneren van deze Balanced Objects zie paragraaf 4.24 E#BalancedObject.
1.10 Columns Editor De Columns Editor kan worden gebruikt voor het instellen van generator parameters voor ieder veld van de applicatie database.
De details voor deze functie kunt u vinden in hoofdstuk 5.5 Generator Instellingen.
2
Systeem Opzet
2.1 Algemeen De opzet van het systeem is zo eenvoudig mogelijk gehouden. Vooralsnog wordt er naar gestreefd om een menubalk te vermijden.
2.2 Hoofdscherm Het scherm in ingedeeld in een Menupaneel en een Applicatiepaneel. Op het Menupaneel wordt de menuboom getoond en de datum en het logo van het bedrijf. Enter Title Here File
Child
Welcome screen to the application with introduction and help
2.3 Applicatiepaneel
Het bovendeel van het Applicatie paneel is ingedeeld in een Selector gedeelte en verder een Gridpaneel voor het overzichtsgedeelte, een detail paneel voor de invoer en detail overzicht van het record en een knoppenbalk. Het selector gedeelte wordt alleen gebruikt indien er gebruik van wordt gemaakt, anders wordt de ruimte verdeeld over het Grid paneel en het Edit paneel. In geval er gekozen is voor GridEdit voor het object, dan komt het Invoerpaneel te vervallen en wordt de ruimte volledig gebruikt voor het grid. Ook de knoppen voor het toevoegen van nieuwe regels komen te vervallen. De knoppen balk wordt gebruikt voor de interactie op het getoonde scherm of het doorschakelen naar een volgend element (BizSubject). De ontwikkelaar is vrij om verschillende schermstructuren door elkaar te gebruiken, ieder object is in die zin een zelfstandig geheel. Zo kan men voor hetzelfde business object ook verschillende schermen aanmaken, bijvoorbeeld voor verschillende gebruikersgroepen of op verschillende momenten in het bedrijfsproces. Belangrijk is nog te vermelden dat de verhouding tussen Grid Paneel en het Detail Paneel dynamisch wordt bepaald aan de hand van het aantal regels in ieder paneel. Het systeem zal proberen zoveel mogelijk alle regels op het Detail Paneel te tonen tenzij er veel regels in het Grid paneel getoond moeten worden. Indien gekozen wordt voor de uitvoering met formulieren, dan wordt de indeling van het applicatie paneel gebruik voor de indeling van de formulieren. De ruimte van het Applicatiepaneel in het hoofdvenster is de ruimte waar de formulieren worden getoond. Voor
iedere afzonderlijke gebruiker wordt de positioneren en grootte van de formulieren opgeslagen en gebruikt voor het weergeven van deze formulieren.
Een voorbeeld van de layout met gebruikmaking van formulieren.
Het juiste formulier kan worden geselecteerd door op het zichtbare deel van het formulier te klikken of door dit formulier in het menu te kiezen. In bovenstaand voorbeeld zijn meerdere formulieren te zien en het Informatie dashboard voor de gebruiker.
2.4 Presentatie in het detailpaneel Het detail paneel wordt automatisch opgemaakt aan de hand van de gegevens typen welke voor de database velden zijn opgegeven. Zo worden datatypen onderkend als: • Alfanumeriek; • Decimaal; • Datum; • Valuta; • Boolean. De grootte van alfanumerieke velden wordt bepaald aan de hand van de opgegeven veldlengte en kunnen 1, 2 of 3 kolommen breed zijn. Eveneens worden voor ieder alfanumeriek veld de invoer beperkt tot de maximale veldlengte. Zijn de velden nog groter, dan wordt automatisch naar een RichTexbox overgeschakeld. Voor het gebruikers gemak worden grote velden ondersteund met een edit formulier.
Een voorbeeld van een detail panel met kleine en middelgrote velden.
Een voorbeeld van een edit panel met onder meer een groot invoer veld.
Indien het grote invoerveld geselecteerd wordt, wordt er een invoerpaneel getoond. De lettergrootte is hier wat groter gekozen waardoor het gebruikers comfort verder toeneemt.
3
E# Code Generatie
De Generator kent de volgende primaire commando's: • E#DestFolder : De bestemming folder waarin de broncode wordt opgeslagen • E#MenuItem : De code voor het menuitem waarin het in de boomstructuur wordt gehangen • E#Module : De modulenaam waarmee het in de applicatie bekend wordt • E#Database : Voor het aanmaken van tabellen en velden in de database • E#MultiGrid : Hiermee wordt aangegeven dat er de grids uit het scherm gelijktijdig worden getoond. • E#BIZOBJECT : Het Primaire business object voor de module • E#BIZSUBJECT : De business Subject welke aan het Object is gerelateerd. • E#BackOffice : Wordt de Module als FrontOffice (standaard) of als BackOffice module gebruikt. Dit heeft onder meer te maken met de presentatie van de database velden. • E#BizEnd : Eind instructie voor een hoofdprocedure. Wordt standaard gegenereerd door de volgende procedure en is alleen nodig indien er subprocedures worden toegevoegd. • E#USERSELECT : Standaard pre-selectie op de gebruiker welke is aangelogd • E#Command : Voor het toevoegen van een extra commandoknop op procedure niveau • E#Execute : Voor het uitvoeren van de commando's behorende bij Commando knoppen. Wordt automatisch gegenereerd bij een commando knop. • E#SetOutPut : Voor het instellen van een standaard initiële waarde van een veld. • E#Exclude : Hiermee kunnen velden worden gespecificeerd welke in de betreffende module niet moeten worden gebruikt (het functioneren is vergelijkbaar met de Frontend Back-Office instelling van de database velden, echter uitsluitend voor het betreffende Business object of subject). • E#ExcludeGrid: Hiermee kan men velden van de objecten specificeren welke niet op het Grid worden getoond (vergelijkbaar met de Front Office en Back office Grid selectie van de kolommen, echter uitsluitend voor het betreffende Bisiness object of subject). • E#Hidden: Indien een veld wel gebruikt wordt, maar men wil niet dat het op het detail paneel zichtbaar is, kan men deze met E#Hidden verbergen. Het veld wordt niet getoond en neemt ook geen ruimte van het detail paneel in beslag, de code voor het gebruik van het veld wordt echter wel gegenereerd zodat het bijvoorbeeld in berekeningen kan worden gebruikt. De velden kunnen met het E#Hidden commando ook gekoppeld worden aan de conditie van een ander veld waarmee zij alleen zichtbaar zijn indien het conditieveld is aan of uitgevinkt. • E#Command : Voor het opnemen van commando knop met de mogelijkheid om hieraan een procedure te koppelen. • E#Cascade voor het koppelen van onderlinge tabellen. • E#NoSelection : Voor een gekoppelde tabel wordt geen Combobox getoond maar een invoerveld. De indirecte velden (de velden welke bij de gekoppelde tabel horen) worden verder wel bijgewerkt als met een Combo selectie box. • E#ReadOnly : Om velden uit de tabel op het detail paneel zichtbaar te maken terwijl deze hier niet zijn te wijzigen. • E#GridSelect : Een functie om een alternatieve SQL selectie string te specificeren in plaats van de string welke door het systeem wordt gegenereerd. De string moet een geldige SQL instructie zijn.
De meeste commando's kennen variabelen of subcommando's Een voorbeeld van een script: E#DestFolder FrontOffice E#MenuItem 800.100.0 E#Module SalesOrderMaint E#Database tblCompany, IsDeb as bit E#Database SalesOrder, tblCompanyID as int, OrderStatus as int E#Database SalesOrderLine , tblCompanyID as int, SalesOrderId as int, Quantity as real, UnitPrice as money, LinePrice as money E#EXCLUDE tblCompany, Embassy, Jan, Piet, Klaas '/ Onzinvelden E#EXCLUDE SalesOrder, tblCompanyID E#SETOUTPUT SalesOrder, Orderstatus , 1 '/Orderstatus is nieuw E#BIZOBJECT SalesOrderPanel, tblCompany E#NOEDIT E#Filter ISDeb=1 E#BIZSUBJECT SalesOrder, SalesOrderLine E#FILTER OrderStatus <= 3 E#BIZSUBJECT SalesOrderLine Aan de hand van het script worden tevens de database en het menu aangepast. Het bovenstaande script resulteert in een module met de volgende drie schermen
Het selectiescherm voor het selecteren van de klant. De regel uit het script waarmee dit scherm wordt aangemaakt ziet er als volgt uit: E#BIZOBJECT SalesOrderPanel, tblCompany E#NOEDIT E#Filter ISDeb=1 De naam van het scherm heet SalesOrderPanel en is gekoppeld aan de database tabel tblCompany. Het is bedoeld als selectiescherm, dit kunnen we instellen met het subcommando E#NoEdit, er wordt dan geen onderhoudsscherm maar een selectie scherm aangemaakt. Naast het selector veld worden het nummer ende naam van het geselecteerde object getoond. Met het filter E#Filter ISDeb=1 is in dit voorbeeld ingesteld dat alleen debiteuren getoond worden uit de lijst van bedrijven. Dit filter kan iedere selectie zijn welke een valide Boolean oplevert. Het scherm op Order niveau
Het overzicht met orders waarbij nieuwe orders kunnen worden toegevoegd, gewijzigd en verwijderd en waar naar orderregels kan worden doorgeschakeld. De instructie ziet er als volgt uit: E#BIZSUBJECT SalesOrder, SalesOrderLine E#FILTER OrderStatus <= 3 De koppeling met de database is de SalesOrder tabel. Er wordt aangegeven dat er nog een dochter object is dat gebruikt gaat worden. Er is een filter ingesteld op OrderStatus <= 3. Ook hier geldt dat ieder filter aangemaakt kan worden dat een valide SQL boolean waarde oplevert. Doordat er een dochter object SalesOrderline is aangegeven wordt een knop gegenereerd om vanuit een geselecteerde opdracht naar de orderregels te gaan.
Het scherm op orderregel niveau
De script regel is E#BIZSUBJECT SalesOrderLine
Dit voorbeeld heeft een beperkt aantal velden, later zal een voorbeeld getoond worden waarbij dit verder is uitgewerkt. De kleurstelling zijn compiler instellingen welke eenvoudig (en in een later stadium interactief) kunnen worden aangepast. Deze subject regels kunnen verder worden gecascadeerd, het aantal schakels is in beginsel niet beperkt. Men kan er ook voor kiezen om alle grids te tonen, dit is overzichtelijker indien er niet meer dan twee of drie grids gebruikt worden. Het scherm kan er dan als volgt uit zien. In dit voorbeeld zijn zowel de orders als de corresponderende orderregels zichtbaar. De velden op het detailpaneel zijn deze van de geselecteerde regel uit een van de grids. Het enige wat men hoeft te doen om dit scenario te selecteren is het commando E#MULTIGRID toe te voegen in het script.
4
Generator Commando's
4.1 Algemeen De Generator commando's worden als upper case uitgevoerd en worden door het systeem herkend door het E# voorvoegsel. Het maakt niet uit of ze in het script met hoofdletters of kleine letters worden geschreven. Het is verder van belang om de volgende grondbeginselen in acht te nemen. • Het systeem gaat er vanuit dat de primaire sleutel de Tabelnaam is met de extensie ID. Bijvoorbeeld de primaire sleutel van een tabel genaamd Klanten is KlantenID. Als velden in de database mag men veldnamen alleen op ID of id laten eindigen als dit bedoeld is om hiermee de betreffende tabel te koppelen. • Er zijn een aantal velden welke door het systeem worden toegevoegd om de eigen administratie uit te kunnen voeren. Deze veldnamen mogen niet op applicatie niveau worden gebruikt. Bovendien zal het systeem het gebruik van deze veldnamen filteren, het zal derhalve niet tot technische fouten leiden. Dit zijn twee groepen: o Voor het verwijderen van records. Records worden operationeel alleen gemarkeerd voor verwijdering, daadwerkelijke verwijdering gebeurd vanuit een tabel onderhoudsfunctie. De velden zijn IsDeleted, DeletedBy en DateDeleted. o Voor de State Transition Engine, het mechanisme om het proces te sturen en voor het aanmaken van acties, worden de volgende velden gebruikt SysEventStatus, SysEventExe en SysEventSet.
4.2 E#DestFolder Deze instructie zorgt er voor dat de gegenereerde broncode in de folder wordt geplaatst waar wij hem gebruiken willen. Het formaat is: E#DestFolder FolderName Voorbeeld: E#DestFolder FrontOffice
4.3 E#MenuItem Deze instructie zorgt er voor dat het betreffende scherm in de door ons gewenste locatie van het menu komt. Het formaat is: E#MenuItem MenuItme [, OudeMenuItem] Voorbeeld: E#MenuItem 800.100.0
4.4 E#Module Dit is de naam waarmee de gegenereerde module in het systeem bekend is De module naam moet uniek zijn binnen het systeem. Het formaat is: E#Module ModuleName Voorbeeld: E#Module SalesOrderMaint
4.5 E#BackOffice Hiermee wordt ingesteld of de module een FrontOffice of een Backoffice module is, default is een Frontoffice module. Momenteel is dit alleen voor de verwerking van de instellingen voor de gebruikte velden. Later zal deze ook gebruikt worden om de code in het FrontOffice of in het BackOffice pakket te installeren. BackOfiice kent geen opties.
4.6 E#Database Met dit commando kunnen tabellen en velden in de database worden toegevoegd of gewijzigd. Het is een krachtig hulpmiddel waarmee direct bij de module ervoor gezorgd kan worden dat alle benodigde velden ook daadwerkelijk in de databasebeschikbaar zijn. Hiermee dient men zorgvuldig om te gaan daar het ook verregaande effecten kan hebben op het functioneren van het systeem, met name het feit dat velden ook gewijzigd kunnen worden. Het formaat van E#DataBase is: E#DataBase TableName[, FieldName [as type]] [, FieldName [as type]]....... Voorbeeld: E#Database SalesOrderLine , tblCompanyID as int, SalesOrderId as int, Quantity as real, UnitPrice as money, LinePrice as money In een script kunnen meerdere E#Database commando's voorkomen
4.7 E#Cascade Met dit commando is het mogelijk om een selectietabel te koppelen met het resultaat van een andere selectietabel Het formaat van E#Cascade is: E#Cascade Brontabel, AfhankelijkeTabel, [Sleutelveld] Een voorbeeld is: E#Cascade applTables applColumns TableName In dit geval zal in een detailpaneel, waar de beide velden zijn opgenomen, in de comboBox van applColumns alleen de selectie te zien zijn welke bij de geselecteerde ApplTables horen. De verwijzing vindt plaats op index niveau, tenzij de optionele veldnaam gegeven is. In dat geval wordt de filterstring Sleutelveld = 'Brontabel.Name' (bijvoorbeeld TableName = 'applTables.Name'.
4.8 E#MultiGrid De resultaat tabellen van de business subjecten worden in het Gridpaneel getoond. De grootte van de afzonderlijke grids wordt dynamisch geschaald afhankelijk van het aantal regels in ieder grid. MultiGrid kent geen opties.
4.9 E#GridSelect Hiermee kan een eigen database selectie worden meegegeven als alternatief voor de door het systeem gecreëerde SQL commando. Werkt alleen op de selectie van het hoofdgrid.
Het formaat van E# GRIDSELECT is: E# GRIDSELECT SQL string Een voorbeeld is: E#GRIDSELECT SELECT * FROM SalesOrder INNER JOIN SalesOrderLine ON SalesOrderLine.SalesOrderID = SalesOrder.SalesOrderID WHERE SalesOrderID = " & Val(SISalesOrderID.Text) & " Standaard wordt een LEFT JOIN aangemaakt zodat alle records uit het BIZOBJECT geselecteerd worden. In dit voorbeeld dient er een E#SELECTOR SalesOrderID bij het BIZOBJECT gedefinieerd te zijn.
4.10 E#BizObject Het hoofdobject van deze module. Kent de volgende instellingen: • Standaard, een grid met de resultaten van gevraagde tabel. Hierbij worden ook de waarden getoond van de direct gekoppelde tabellen. De invoer van nieuwe records gebeurt op een invoerpaneel. De selectie in het Grid is te overschrijven met het commando E#GRIDSELECT waardoor men iedere valide SQL Select string kan gebruiken. De intentie hierbij is om de gegenereerde string als uitgangspunt te nemen en deze naar behoefte aan te scherpen of uit te breiden en in het bron document terug te zetten waardoor deze in de compilatie meegenomen wordt. • E#NoEedit, hiermee wordt alleen een selector aangeboden waarmee uit hoofdtabel kan worden geselecteerd. • E#Selector, Hiermee kunnen velden uit het object worden benoemd waarop de presentatie gefilterd wordt. Alleen de records welke aan de zoeksleutel voldoen worden in het grid getoond.
Een voorbeeld van een scherm met, in dit geval 3 zoeksleutels waarop gezocht kan worden.
• •
•
• •
E#Filter, een extra filter instelling op de hoofdtabel waarmee de selectie kan worden gestroomlijnd. Deze dient een valide SQL-Boolean op te leveren. Een eventuele filterstring dient als laatste statement in het Bizobject commando te staan. E#ReadOnly Op gebruikers niveau kan men de autorisatie van gebruikers regelen om objecten toe te voegen of te wijzigen. Indien men een object uitsluitend als ReadOnly object wil presenteren, bijvoorbeeld om het als een grid selector te gebruiken in een multigrid scherm, kan men de status van het object op ReadOnly zetten. De code voor de knoppen voor uitvoering van de diverse commando's worden niet aangemaakt evenals het detail paneel. E#Verify is een optioneel veld waarvan de waarde wordt gecontroleerd of het begin van de string overeenkomt met de ingevoerde waarde. Men krijgt de keuze op het opslaan van het record af te breken. Deze mogelijkheid zal met name gebruikt worden in combinatie met de presentatie van gefilterde4 gegevens waardoor men niet altijd direct in staat is om het bestaan van een record te controleren. E#Unique is een optioneel veld. Indien de waarde van het ingevoerde veld gelijk is aan deze van een bestaand record, kan het record niet opgeslagen worden. E#GridEdit, Deze levert een scherm variant op weermee in het getoonde Grid kan worden gewerkt in plaats van op het invoerpaneel.
Een voorbeeld van een Gridedit scherm. Formaat: E#BizObject FormulierNaam, TableName [E#NoEdit] of [E#GridEdit] [E#ReadOnly] [E#Filter SQLBoolean] [E#Selector VeldA, VeldB, ...] [E#Verify VeldX] [E#Unique VeldY] Voorbeeld: E#BIZOBJECT SalesOrderPanel, tblCompany E#NOEDIT E#Filter ISDeb=1
Een voorbeeld waarbij het object tblCompany op E#ReadOnly is gezet, het detail paneel en de standaard commando knoppen worden niet aangemaakt. Eventuele extra knoppen kunnen wel worden aangemaakt zoals in het volgende voorbeeld is te zien waarbij een Excel export knop is gebruikt.
4.11 E#BizSubject Het BizSubject onderdeel is een belangrijk onderdeel van het interactie concept. Het stelt de ontwerper in staat om aan een BizObject andere objecten te koppelen en deze in een scherm weer te geven en te onderhouden. Het BizSubject dient een relatie te hebben met het object en alleen de records met het ID van het object worden getoond. Het voorbeeld gaat uit van bedrijven als Object waarbij alle verkooporders worden getoond. Van het BizObject kan in een scherm maar een instantie zijn, de BizSubjecten mogen er meerdere zijn. Ieder volgend Subject dient een relatie te hebben met het daarboven liggende object. In het voorbeeld is het tweede subject de verkooporderregel, de individuele verkooptransacties van een van de orders. Er is gekozen om geen technisch maximum aan het aantal subjecten in te stellen. Formaat: E#BizSubject TableName [,TableName] [E#ReadOnly] [E#Filter SQLBoolean] Voorbeeld: E#BIZSUBJECT SalesOrder, SalesOrderLine E#FILTER OrderStatus <= 3
4.12 E#BizEnd Geeft het einde aan van een Procedure (BizObject of BizSubject). Dit commando wordt automatisch gegenereerd bij een nieuwe procedure. Het kan echter wenselijk zijn om code toe te voegen tussen twee procedures. BizEnd kent geen opties.
4.13 E#UserSelect Met dit commando wordt het recordfilter initieel ingesteld op de gebruiker welke is ingelogd op dit werkstation. UserSelect kent geen opties
4.14 E#Exclude Met dit commando kan men velden van het Invoerpaneel uitsluiten. Hiermee kan buiten de algemene opmaak instellingen in het ColumnMaintenance, op scherm niveau velden uitgesloten worden op het invoerpaneel. Dit maakt het mogelijk om schermen functioneel toe te spitsen in het gebruik. Formaat: E#Exclude TableName, FieldName[, FieldName]...... Voorbeeld E#EXCLUDE tblCompany, Embassy '/Comment In een script kunnen meerdere E#Exclude commando's voorkomen, ongeacht of deze voor een of meerdere tabellen zijn. Als men er vanwege de leesbaarheid er de voorkeur aan geeft om dit commando over meerdere regels te verdeling dan kan dit met inachtneming van de commando structuur.
4.15 E#ExcludeGrid Met dit commando kan men bepalen om velden niet op het Grid te tonen. Om ervoor te zorgen dat deze verder wel in de module kunnen worden gebruikt, worden deze velden op het grid onzichtbaar gemaakt (kolombreedte 0). Met dit commando kunnen, buiten de algemene
opmaak instellingen in het ColumnMaintenance, op scherm niveau velden uitgesloten worden op het Grid. Dit maakt het mogelijk om schermen functioneel toe te spitsen in het gebruik. Formaat: E#ExcludeGrid TableName, FieldName[, FieldName]...... Voorbeeld E#EXCLUDEGRID tblCompany, Embassy '/Comment In een script kunnen meerdere E#ExcludeGRID commando's voorkomen, ongeacht of deze voor een of meerdere tabellen zijn. Als men er vanwege de leesbaarheid er de voorkeur aan geeft om dit commando over meerdere regels te verdeling dan kan dit met inachtneming van de commando structuur.
4.16 E#ReadOnly Hiemee kan een veld of velden uit een tabel op alleen lezen worden ingesteld op het detail paneel. Formaat: E#ReadOnly TableName, FieldName [, FieldName]..... Voorbeeld: E#ReadOnly tblCompany, Embassy '/Comment
4.17 E#Hidden Indien een veld gebruikt wordt, bijvoorbeeld in een formule, maar men wil het niet op het detail paneel tonen, kan met het commando E#Hidden het veld verborgen blijven. Formaat: E#Hidden TableName, FieldName[, FieldName]...... Voorbeeld: E#Hidden tblCompany, Embassy '/Comment Het commando E#Hidden kan ook conditioneel worden gebruikt. Velden worden getoond of verborgen afhankelijk van een van de velden op het detail paneel. Formaat: E#Hidden Cond [True/False] Conditie veld, Afhankelijk Veld[, Afhankelijk Veld] De velden kunnen in de conditionele variant optioneel van een tabelnaam worden voorzien bijvoorbeeld indien een veldnaam meerdere keren op het detailpaneel voorkomt. Bijgaande is een voorbeeld uit een standaard module voor het onderhoud van de State Transition objecten. Voorbeeld: E#Hidden Cond True procSTEObjects.Repeating, RepeatPeriod, MaxRepeats, Repeats De conditie True/False geeft aan dat de velden zichtbaar zijn indien procSTEObjects.Repeating Waar (True) is of zichtbaar zijn indien procSTEObjects.Repeating Onwaar (False) is.
4.18 E#Filter Het E#Filter commando kan niet alleen gebruikt worden op BizObject of BizSubject niveau maar ook als filtercommando voor selectors (ComboBox velden).
Dit filter wordt toegevoegd aan de selectie om de combobox te vullen. Het filter dient een geldige SQL boolean op te leveren. Formaat: Voorbeeld: E#Filter tblProducts, Product, [tblProducts].[Name] Like " & chr(39) & "Zool%" & chr(39) & " In een SQL selectie wordt een alfanumerieke waarde ingesloten in enkele quotes. Aangezien deze ook als begin voor het commentaar wordt gebruikt, kan dit opgelost worden door deze te vervangen door " & Chr(39) & ". In bovenstaand voorbeeld ziet het SQL statement er voor dat deel uit als [tblProducts].[Name] Like 'Zool%'
4.19 E#SetOutput Met SetOutput wordt het opgegeven veld in deze module als standaard ingesteld op een waarde. Deze wordt gebruikt bij het instellen van het bedrijfsproces. Het formaat van Setoutput is: E#SetOutput TableName, FieldName, Value bijvoorbeeld E#SETOUTPUT SalesOrder, Orderstatus, 1 '/Orderstatus is nieuw In een script kunnen meerdere E#SetOutput commando's worden opgenomen.
4.20 E#Command Met deze instructie kan een extra knop worden toegevoegd. Indien een procedure aangeroepen moet worden kan deze procedure aan een commandoknop gekoppeld worden. Doormiddel van de switch E#Nothread kan bepaald worden of de aangeroepen functie op de achtergrond of interactief gestart wordt. Indien het een invoeroperatie betreft zal men deze interactief willen starten, een procedure of een formulier af te drukken of gegevens te bewerken zal men vaak op de achtergrond willen laten lopen zodat men ongestoord verder kan werken. Het formaat van E#Command is: E#COMMAND CommandNaam, [Procedurenaam] [E#Nothread] bijvoorbeeld: E#Command cmdReadWord, ApplXML.WordImport Met de optie E#Nothread wordt geen nieuwe Thread aangemaakt.
4.21 E#Execute Met E#Execute kan een procedure worden toegevoegd, bijvoorbeeld om een meer complexe routine te koppelen aan een eerder gedefinieerde knop. Het formaat van E#Execute is: E#Execute CommandNaam
VB.Net instructions (bijvoorbeeld een procedure of extra instructies welke aan de lopende hoofdprocedure moeten worden toegevoegd)
4.22 E#Cascade Indien in het Detail Paneel er een ComboBox is welke afhankelijk is van de geselecteerde waarde van een van de andere ComboBoxen, kan men dit aangeven door het commando E#Cascade (het cascaderen van comboboxen). Het formaat van E#Cascade is: E#Cascade Primaire Tabel, Afhankelijke Tabel, Sleutelveld bijvoorbeeld: E#Cascade ApplTables, ApplColumns, TableName Dit voorbeeld is uit een van de standaard modules voor het koppelen van Bookmarks uit een Word document aan velden uit de database. Hier selecteert men de Tabel en vervolgens worden in de combobox voor de database velden alleen de velden van de geselecteerde tabel getoond. Een voorbeeld hiervan is aanwezig in het standaardscherm voor koppeling van de Word bookmarks aan database velden. De inhoud van de combobox FieldName (tabel ApplColumns) is afhankelijk van de selectie van de combobox Tablename (tabel ApplTables).
De combobox FieldName is gekoppeld aan de combobox TableName. Als er een tabel in TableName wordt geselecteerd, worden in de combobox FieldName alleen de velden getoond welke bij de geselecteerde tabel behoren.
4.23 E#NoSelection Met dit commando kan men veld, dat normaliter resulteert in een Combobox of een DataPicker, als een normaal invoerveld weergeven. Veel gebruiker vinden het plezieriger om een datum in te voeren dan om een datum met een datepicker te selecteren, vooral als het veel sterk afwijkende datums zijn. Hetzelfde geldt voor selecteren middels een combobox. Bovendien heeft het laden van een combobox van hele grote tabellen een nadelige invloed op de prestaties van het systeem.
Het formaat van E#NoSelection is: E#NoSelection TableName, FieldName[, FieldName]...... Voorbeeld: E#NoSelection ProcActions, TimeClosed, TimeOpened '/ Comment
4.24 E#BalancedObject Een speciale functie is het Balanced Object. In de business rules kan de relatie worden aangemaakt tussen velden van Objecten met de onderliggende subjecten, bijvoorbeeld dat een orderbedrag de som is van de individuele orderregelen bedragen. Bij het invoeren van de orderregels wordt dan het veld orderbedrag van het Orderobject bijgewerkt en bijgewerkt gehouden bij iedere toevoeging of wijziging van een orderregel. Het kan echter ook voorkomen dat een veldwaarde vergeleken moet worden met een veld uit een onderliggend subject, deze waarden dienen in "Balans" te zijn. Hiervoor is het balanced object toegevoegd. Bij de business rule wordt aangegeven dat het een Balanced Field betreft.
En in het generator script wordt het commando E#BalancedObject tussen de twee objecten toegevoegd.
E#DestFolder Application E#MenuItem 830.101.0 E#Module DebCredRegels0 E#MultiGrid E#Excludegrid DebCredRegel, Relatie, DebCredRegelID E#BIZOBJECT DebCredRegels0Panel, DebCredRegel E#Filter [tblCompany].[IsDeb] = 1 E#BalancedObject E#exclude DebCredSubRegel, DebCredRegelID E#Exclude GrootboekRekening, GrootboekRekeningID E#BizObject BoekstukPaneel0, DebCredSubRegel Na het genereren van de code werkt het "Balanced Object" als een pop-up scherm waar de veldwaarde van het master object vergeleken wordt met de Business rule van het onderliggende (Balanced) object.
Indien bij het verlaten van het object er een verschil is tussen de twee waarden wordt er een waarschuwing gegevens (uiteraard in de preferente taal van de gebruiker). Men wordt alleen gewaarschuwd maar kan het object wel verlaten. E#BalancedObject kent geen opties
5
Standaard Componenten
5.1 Inlogscherm De toegangsbeveiliging is op een aantal niveaus vastgelegd. De bekende gebruikers welke op de betreffende module mogen inloggen, staan in het inlogscherm en kunnen worden geselecteerd. Gebruikers die niet in de betreffende module mogen inloggen worden niet getoond (type gebruiker en actieve gebruiker). Ieder gebruiker heeft een wachtwoord. Dit wachtwoord is gecodeerd opgeslagen en is zodanig geconstrueerd dat het oorspronkelijke wachtwoord niet te reproduceren is. Als het wachtwoord vergeten is, dan moet er een nieuw wachtwoord door de gebruiker worden aangemaakt. Voor iedere module dient te worden aangegeven wat voor soort gebruiker het is voor die module. De mogelijkheden zijn: Niet geautoriseerd, de gebruiker heeft geen toegang tot de module. Dit kan zowel om veiligheidsredenen als om reden van gebruikersvriendelijkheid zijn. Alleen lezen. Deze gebruiker kan de gegevens zien maar niet bijwerken of toevoegen. Normale gebruiker. Deze gebruiker kan gegevens lezen, toevoegen en muteren maar niet verwijderen. Manager. Deze gebruiker kan alles wat de normale gebruiker kan en ook records verwijderen. (Voor de goede orde. In het systeem worden records niet feitelijk verwijderd maar voor verwijdering gemarkeerd. Daadwerkelijke verwijdering vindt plaats in de module tabel onderhoud.
5.2 Het DashBoard
Het dashboard is bedoeld als een informatiecentrum voor de gebruiker. Het bestaat uit een overzicht van gegevens selecties welke belangrijk voor de gebruiker zijn en een overzicht van uitstaande acties. Het bovendeel van het scherm wordt gevuld met gebruikers afhankelijke dataviews waarvan de selecties vrij te definiëren zijn. Het wordt gepresenteerd in datagrids, de locatie en het formaat van deze grids zijn instelbaar en worden bij het uitloggen door de gebruiker in de laatste stand opgeslagen. Iedere gebruikers heeft derhalve zijn eigen informatiebronnen beschikbaar op een wijze welke hem of haar het beste uit komt. Er is in beginsel geen beperking aan het aantal dataviews dat men wil presenteren, het paneel waarop deze worden gepresenteerd kan men verschuiven. Het zal eerder een praktische beperking dan een technische beperking zijn. Het onderste deel van het scherm is gevuld met de acties voor deze gebruiker welke nog niet zijn afgesloten, deze staan gesorteerd op status en uitvoerdatum. Er kan op iedere kolom worden gesorteerd zoals dit in alle schermen het geval is. Indien een actie wordt geselecteerd wordt een formulier getoond.
Men kan meerdere acties gelijktijdig geopend hebben staan, deze worden ieder in een eigen formulier getoond.
5.3 Gebruikers Onderhoud Binnen de module gebruikers onderhoud kan men voor iedere module de autorisatie instellen van de gebruikers.
Indien een gebruiker niet is geautoriseerd voor een module, zal deze ook niet zichtbaar zijn in het selectiemenu. Alleen voor de onderdelen waar men minimaal leesrechten voor heeft zal zichtbaar zijn.
5.4 Taalmodule De taalmodule stelt de gebruiker in staat om alle teksten welke in de applicatie worden gebruikt in te voeren zodanig dat de betekenis optimaal is voor de gebruikers. Deze functie wordt integraal met de generatie van code mee-gegenereerd.
Tegelijkertijd kan hiermee ook meertaligheid worden bewerkstelligd daar deze gegevens voor ieder land kunnen worden ingevoerd. Als ieder land kan men naar wens ook ieder taalgebied benoemen.
5.5 Generator Instellingen Een van de modules welke standaard in de BackOffice wordt geïnstalleerd is de ColumnMaintenance module. Met deze functie kan de gebruiker zelf een groot aantal instellingen bepalen. Deze instellingen worden bij een eerstvolgende generatie gebruikt om de toepassing naar de gebruikers wensen toe te spitsen.
De instellingen van dit scherm worden gebruikt tijdens de code generatie. De klant kan hier een aantal zaken aangeven welke bij de eerstvolgende Generator slag worden verwerkt. Deze instellingen zijn: • PanelOrder: Hiermee kan de volgorde van de velden worden aangegeven waarmee ze op het invoerpaneel worden getoond. • Validation: Naast de standaard validatie op basis van het veldtype, kan men validatieregels toevoegen. Deze werken op veld niveau en gelden voor alle schermen waarin dat veld wordt gebruikt. De vorm is "FIELDNAME comparator Waarde", de Fieldname wordt door de Generator vervangen door de veldnaam en mag derhalve op iedere locatie in de vergelijking voorkomen. Men is hierdoor is staat om iedere validatie toe te passen. • AliasFor: Koppeling met andere tabellen geschiedt normaliter doormiddel van de naam van de tabelindex waarnaar wordt verwezen. Er zijn echter situaties waarin dit niet mogelijk of niet wenselijk is. Het is niet mogelijk indien er meerdere verwijzingen zijn naar dezelfde tabel (bijvoorbeeld een verwijzing naar een postcode terwijl er aparte adressen zijn als bezoekadres en postadres) of het is niet wenselijk omdat we specifieke informatie uit de gekoppelde tabel willen gebruiken. Dit wordt door het systeem zelf al gedaan bij het persoonsonderhoud. Hier wordt een persoon gekoppeld met een land terwijl we apart de nationaliteit en de taal willen onderkennen. Doormiddel van de AliasFor koppelen we het veld met een tabel. Door het veld in de tabel dezelfde naam te geven als de veldnaam in de gekoppelde tabel zal het systeem de uitvoer koppelen met het gewenste veld.
•
•
•
• • • • •
• •
•
ValueField: Het primaire zoekveld in een tabel is het veld met de naam "Name". Het kan soms wenselijk zijn om dit veld een andere naam te geven. Dit kan door het ValueField in te vullen. In dat geval wordt de presentatie van Name weergegeven met ValueField. In het systeem wordt echter verder Name gebruikt. Hoewel deze functie het meest waarschijnlijk voor het "Name"-veld gebruikt wordt is het niet beperkt tot dit veld. Indien er in een Grid twee velden zijn met dezelfde naam kan men onderscheid maken door het ValueField in te vullen met een onderscheidende naam. Calculation: Hier kan een formule in worden gevoerd waarvan het resultaat in dit veld wordt opgeslagen. Indien een gebruiker de waarde van de berekening niet mag wijzigen, dient het veld als Read Only te worden ingesteld. Normaliter mag de gebruiker de berekende waarde overschrijven. De ingevuld waarde wordt dan opgeslagen. Indien een van de variabelen wordt gewijzigd, wordt de berekening opnieuw uitgevoerd. Editable: Dit is momenteel alleen van toepassing voor velden waar een selectie aangekoppeld is. Indien deze als Editable wordt ingesteld kunnen nieuwe records aan de gekoppelde tabel worden toegevoegd vanuit het scherm waar men werkt en worden de ingevoerde gegevens direct overgenomen in het invoerpaneel. FOGrid: Of het veld op het Grid getoond wordt in FrontOffice modules FOControl: Of het veld op het invoerpaneel getoond wordt in FrontOffice Modules FOGridInd: Indien het veld uit een gekoppelde tabel afkomstig is wordt het in het Grid getoond indien deze parameter aangevinkt is. FOControlInd: Indien het veld uit een gekoppelde tabel afkomstig is wordt het op het invoerpaneel getoond indien deze parameter aangevinkt is. Deze velden kunnen niet door de gebruiker worden gewijzigd en zijn uitsluitend ter informatie. Required: Geeft aan of het veld verplicht is of optioneel. Deze werkt uitsluitend op FrontOffice modules. In de backoffice zijn de velden in beginsel optioneel. Van deze gebruikers wordt verwacht dat men goed bewust is van hetgeen men doet en krijgen om deze reden meer flexibiliteit. BOGrid, BOControl, BOGridInd en BOControlInd hebben dezelfde functie, echter voor een backoffice module. FileSelector: Deze indicator geeft de mogelijkheid om aan een invoerveld een fileselector te koppelen. Dit wordt bijvoorbeeld gebruikt bij de STE objecten (zie Proces Management) om uit te voeren programma's te selecteren. Als deze vlag waar is, genereert de generator de code om een file te selecteren en het volledige Windows padnaam van de geselecteerde file wordt in het veld geplaatst. IsImage: Geeft aan dat dit veld een afbeelding betreft. Het padnaam van de veldinhoud wordt als afbeelding weergegeven in de linkeronderhoek onder de menuselector. Door op de afbeelding te dubbelklikken wordt het op ware grootte in een eigen formulier (vernster) weergegeven met een maximum van de schermgrootte.
•
NoSelection. Op scherm niveau kan bepaald worden of een veld wel of niet als Combo selectie box wordt gebruikt. Dit is met name van belang bij zeer grote tabellen (zoals bijvoorbeeld een postcode tabel) waarvan het laden relatief lang kan duren. Dit kan ook op veld niveau bepaald worden waardoor het automatisch voor alle schermen geldt of kan in het script voor een scherm gebruikt worden waardoor het uitsluitend voor het betreffende scherm van toepassing is.
5.6 Berekeningen In het bovenstaande is aangegeven dat er berekeningen kunnen worden gemaakt welke men vastlegt in het veld Calculation van de veldspecificatie tabel (applColumns). Hieraan zijn enkele voorwaarden verbonden. • De elementen van de berekening dienen beschikbaar te zijn op het detail paneel, zowel de invoer waarden als de uitvoerwaarden worden uit de controls op het detailpaneel gehaald. Indien een control niet gevonden wordt op het detail paneel van het betreffende BizSubject wordt naar boven gezocht langs de BizSubjecten tot an het BizObject naar de control. Dit kan omdat deze alleen een gedetermineerde relatie hebben. • Een tweede belangrijke voorwaarde is dat de betreffende control geen combobox is op het detail paneel. De leidt tot conflicterende invoer en is om deze reden geblokkeerd. De invoer van een van de velden van een Combobox mag wel. • Indien een formule is ingevoerd welke niet in het scherm voorkomt (een van de detailpanelen zichtbaar of verborgen), wordt een foutmelding gegeven en wordt in de formule een 0 waarde ingevoerd. De formulering gebeurt doormiddel van de veldspecificatie van de tabelwaarden. Het resultaatveld is altijd het veld waar men de berekening bij specificeert. Met de introductie van versie 0.0.2 is de beperking op het aantal velden niet meer van toepassing (was maximaal twee velden en een constante). Hierdoor zijn de mogelijkheden voor het uitvoeren van berekeningen enorm toegenomen. De volgende formule bij het veld SalesOrderLine - LinePrice: Product.Salesprice * Quantity * (1 + (VAT.Percentage / 100)) Levert een geldig resultaat op indien aan er een relatie is aangegeven tussen de SalesOrderLine en de Product tabel en de VAT tabel. Het systeem genereert zowel de berekening als de event procedures voor de afhandeling van wijzigingen in de waarden op het detail paneel. In onderstaand voorbeeld zijn formules toegepast voor de berekening van het Ex. BTW regelbedrag zowel als voor het BTW bedrag.
Bij wijziging van bijvoorbeeld het aantal worden beide berekening doorgevoerd.
5.7 Gegevens Validatie In de tabelinstellingen kan men aangeven of een veld vereist is. Als een veld als vereist is gemarkeerd, dan genereert de Generator de code die controleert dat er een waarde is ingevuld. Dit wordt ook gedaan indien in de database het veld ingesteld is dat het niet leeg (NULL) mag zijn. Voor alle velden genereert de Generator de controle routines zodat bij opslag of mutatie wordt gecontroleerd dat de velden aan de invoer criteria voldoen. • Een numeriek waarde moet numeriek zijn. • Een datum moet een geldige datum zijn. • Een bedrag moet een geldig bedrag zijn, dit mag volgens de Amerikaanse dan wel de Nederlandse notatie zijn. Het bedrag wordt in honderdsten van de valuta gevalideerd en vastgelegd.. Alfanumerieke velden worden niet op inhoud gecontroleerd tenzij er een validatie is opgegeven. Deze validatie wordt als z.g. Regular Expression opgegeven in het veld Validation. er zijn hiervoor twee mogelijkheden • REGEX, een directe Regular Expression voor de validatie van het veld. • REGEX FIELD een indirecte Regular Expression welke in een tabel staat opgeslagen. Een voorbeeld hiervan is de Postcode welke per land verschillende is. In de NTT tabel kan een postcode formaat opgeven (als Regular Expression). Bij de postcode kan men de indirecte validatie gebruiken "REGEX FIELD NTT.PostCodeFormat". Als een of meerdere velden niet voldoen, wordt de opslag niet uitgevoerd en worden de betreffende invoervelden rood gemarkeerd.
De velden in rood voldoen niet aan de validatie regels. Dit kan zijn omdat zij verplicht ingevoerd moeten worden of omdat de ingevoerde waarde niet conformeert aan de validatie regels voor het type veld, eventueel aangevuld met eigen validaties voor dat veld.
5.8 Tabel Onderhoud Deze functie is uitsluitend toegankelijk voor gebruikers met het niveau systeembeheerder en autorisatie Manager voor deze module. In de module Tabel Onderhoud kan iedere tabel opgeroepen worden en kunnen van ieder records velden worden gewijzigd. Op deze wijze is men in staat om tot op zeer laag niveau is het systeem onderhoud en correctie uit te voeren.
Binnen deze module kunnen de tabellen ook geschoond worden van de verwijderde records. In de operationele omgeving worden record niet feitelijk verwijderd maar als "verwijderd" gemarkeerd (evenals door wie en wanneer het object is verwijderd), de applicatiebeheerder kan deze verwijdering desgewenst ongedaan maken.
5.9 Mutatie logging Het is mogelijk om voor tabellen een logtabel te definiëren. In deze logtabel worden alle toevoegingen en mutaties van de records uit de hoofdtabel weggeschreven met de gebruiker en het tijdstip. Dit is nodig om te conformeren aan het Maturaty model maar vooral om te kunnen traceren hoe fouten zijn ontstaan en hoe deze voorkomen kunnen worden. De instelling of voor een tabel logging van toepassing is wordt vastgelegd in de tabel ApplTables. In verband met beveiliging is wordt het afgeraden om voor deze tabel een
onderhoudsscherm te maken (hoewel dit zeer goed mogelijk is) maar de instelling van de logging te doen via het tabel onderhoudsscherm. Men kan de tabel ApplTables selecteren en het veld AutoLog aanvinken. Indien deze waar is, wordt bij een eerstvolgende generatie de logtabel aangemaakt. Nadat de logtabel eenmaal is aangemaakt kan men de logging uitschakelen door deze indicator uit te vinken. De verwerking van de logging gebeurd verder automatisch.
6
Integratie met Office
6.1 Word koppeling Er is voor gekozen om gebruik te maken van de z.g. Bookmarks in Word document templates (*.dot bestanden) zowel voor de koppeling met gegevens uit de database als voor het gebruik van standaard tekstblokken. Een module verzorgt het onderhoud van van de koppeling van database velden met de bookmarks van document templates. Dit is een gegenereerde module met in het script een extra knop welke de module koppelt met een procedure voor het inlezen van de Document Bookmarks. De koppeling tussen de applicatie en de documenten gebeurt met twee paramaters: • De Generator sleutel: de generator sleutel is de primare indicator voor de koppeling. Vanuit de applicatie wordt, voor het aanmaken van een documenten een generatorsleutel gebruikt. • De Document sleutel. Als tweede sleutel wordt de documentnaam gebruikt. Bij het opmaken van de documenten worden alle documenten aangemaakt welke aan de opgegeven criteria voldoen. Dit kan 1 of een serie van documenten zijn. E#Command cmdWordPrint, ApplWord.CreateWordDocument(GeneratorSleutel as string, TabelNaam as string, DatatableNaam.select(), DataSetNaam) [E#Nothread] Indien het optionele E#Nothread achterwege wordt gelaten, wordt het document op de achtergrond aangemaakt en kan men, tijdens het produceren van het document of de documenten, verder werken. De bookmarks kunnen worden gekoppeld aan tabellen en velden of worden gemarkeerd als tekstblok. Indien de markering tekstblok aanstaat worden, bij gebruik van de wordkoppeling, alle tekstblokken getoond in de taal van de gebruiker welke voldoen aan de Generator sleutel en de document sleutel. Er kunnen dan 1 of meerdere tekstblokken worden geselecteerd en op de betreffende plaats worden ingevoerd. Als de documentsleutel leeg is, worden alle tekstblokken getoond welke aan de generator sleutel voldoen. Als de generator sleutel leeg is, worden alle tekstblokken getoond. Meervoudige records. Als een resulterende recordset uit meerdere records bestaat, dan worden alle records opgemaakt volgens het patroon van het eerste record, na ieder record wordt een nieuwe regel ingevoegd.
6.2 Inlezen Bookmarks Er is een procedure beschikbaar voor het inlezen van bookmarks van Word document templates. Deze procedure heet: ApplWord.WordImport Deze kan worden aangeroepen met bijvoorbeeld het commando:
E#Command cmdReadWord, ApplWord.WordImport
6.3 Teksblokken De mogelijkheid bestaat om met standaard tekstblokken te werken. Bij de bookmark koppeling kan men aangeven dat er een tekstblok ingevoegd moet worden. Voor eventuele selectie van tekstblokken vanuit een scherm kan men de volgende functie aanroepen. E#Command cmdTextBlocks, ApplWord.CreateTextBlockSelection(GeneratorSleutel as string, Tabelnaam as string, Datatable.select(), DataSet) [E#Nothread]
6.4 Excel Koppeling 6.4.1 Export Dataset naar Excel Er is een procedure beschikbaar voor het exporteren van een dataset naar een excelbestand. Dit mag iedere willekeurige beschikbare dataset zijn in de module. Deze procedure heet ApplExcel.ExcelExport. Deze kan worden aangeroepen met bijvoorbeeld het commando: E#Command cmdExportExcel, ApplExcel.ExcelExport(dtSalesOrderLine) Het commando kan meerdere keren worden herhaald, voor ieder commando wordt een eigen button aangemaakt. De naam van de button mag gelijk of verschillend zijn. In een BizObjectBizSubject scenario wordt het commando ondergebracht in het scherm van het lopende object. Bijvoorbeeld: E#DestFolder Application E#MenuItem 800.100.0 E#Module SalesOrderMaint E#Database tblCompany, IsDeb as bit E#Database SalesOrder, tblCompanyID as int, OrderStatus as int E#Database SalesOrderLine , tblCompanyID as int, SalesOrderId as int, Quantity as real, UnitPrice as money, LinePrice as money E#EXCLUDE tblCompany, Embassy, Jan, Piet, Klaas '/ Onzinvelden E#EXCLUDE SalesOrder, tblCompanyID E#SETOUTPUT SalesOrder, Orderstatus , 4 '/Orderstatus is nieuw E#BIZOBJECT SalesOrderPanel, tblCompany E#NOEDIT E#Filter ISDeb=1 E#BIZSUBJECT SalesOrder, SalesOrderLine E#FILTER OrderStatus <= 3 E#Command cmdExportExcel, ApplExcel.ExcelExport(dtSalesOrder) E#BIZSUBJECT SalesOrderLine E#Command cmdExportExcel, ApplExcel.ExcelExport(dtSalesOrderLine) Er zal vanuit bovenstaand scenario een commandoknop "cmdExportExcel" worden aangemaakt in het scherm SalesOrder voor een excelsheet met salesorders en in het scherm SalesOrderLine zal een knop worden aangemaakt "ExportExcel" voor een excelsheet met SalesOrderLines (datatable Salesorderline, de inhoud van de in het scherm getoonde salesorderregels.
Als een datatable niet bestaat zal er een error ontstaan.
6.5 XML Export Er is een procedure beschikbaar voor het exporteren van een dataset naar een XML-bestand. Dit mag iedere willekeurige beschikbare dataset zijn in de module. Deze procedure heet ApplExcel.ExcelExport. Deze kan worden aangeroepen met bijvoorbeeld het commando: E#Command cmdExportExcel, ApplExcel.ExcelExport(dtSalesOrderLine) Het commando kan meerdere keren worden herhaald, voor ieder commando wordt een eigen button aangemaakt. De naam van de button mag gelijk of verschillend zijn. In een BizObjectBizSubject scenario wordt het commando ondergebracht in het scherm van het lopende object. Bijvoorbeeld: E#DestFolder Application E#MenuItem 800.010.0 E#Module PersonMaint E#BIZOBJECT PersonMaintenancePanel, tblPeople E#Command cmdExportXML, ApplXML.XMLExport(dttblPeople) E#Command cmdExportXML, ApplXML.XMLExport(dtPrimView) Er zal vanuit bovenstaand scenario een commandoknop "cmdExportXML" worden aangemaakt in het scherm PersonMaint voor een XML bestand met de persoonsgegevens. Met het tweede commando wordt een XML bestand aangemaakt met de persoonsgegevens welke in het Grid getoond worden. Als een datatable niet bestaat zal er een error ontstaan.
6.6 Koppeling met Outlook 6.6.1 Standaard e-mail Met deze functie wordt een e-mail aangemaakt en verzonden. De resulterende e-mail wordt in de outbox van Outlook geplaatst. Het formaat van de aanroep van de standaard e-mail is: ApplOutlook.Send_Email(strTo, strCC, strSubject, [strContent], [strAttachments], [strBCC]) Ingeval er meerdere attachments zijn, kunnen deze in de strAttachments worden opgenomen, gescheiden door een komma (,). Bijvoorbeeld bij de oproep middels een commando knop E#Command, cmdEmail, ApplOutlook.Send_Email(strTo, strCC, strSubject, [strContent], [strAttachments], [strBCC])
6.6.2 Safe Mail met Redemption Plug-in De beveiliging van outlook veroorzaakt dat bij iedere mail, welke vanuit andere applicaties wordt aangeboden, de gebruiker gevraagd wordt of hij deze verzending toestaat. Hoewel dit een veiliger methode is, heeft het als gevolg dat er nimmer e-mail kunnen worden verzonden tijdens z.g. onbewaakt gebruik. Ook wordt het door veel gebruikers als vervelend ervaren indien er tientallen keren dezelfde vraag wordt gesteld. Dit kan worden voorkomen door de installatie van de z.g. Redemption plug-in. Deze staat safe-mails toe. De aanroep structuur is hetzelfde als voor de normale e-mails, alleen wordt hier de koppeling met de safe-mail plug-in gebruikt. ApplOutlook.Send_Email_Direct(strTo, strCC, strSubject, [strContent], [strAttachments], [strBCC]) De werking is verder identiek aan de standaard e-mail.
7
Proces Management
7.1 Inleiding Een van de belangrijkste elementen van software is de mogelijkheid het bedrijfsproces te ondersteunen door het nemen of initiëren van acties. In dit verband verstaan we onder ondernemen van een actie dat het systeem zelfstandig activiteiten uitvoert of externe processen start. Onder acties initiëren wordt verstaan dat gebruikers gesignaleerd worden een handeling of activiteit uit te voeren. Binnen het concept van dit applicatiesysteem kan de ondersteuning van het bedrijfsproces op verschillende manieren worden ingevuld, handmatig door de gebruiker of een automatische mechanisme: 1. Het handmatige mechanisme is dat aan een business object (bijvoorbeeld een verkoop order) een statusveld wordt toegekend. Doormiddel van selectie of filtering alleen de records tonen welke aan deze status voorwaarden voldoen. Dit kan in vele gevallen voldoende zijn echter de activiteit wordt uitsluitend zichtbaar als de gebruiker het object oproept. 2. Het eerste automatische mechanisme is de "State Transition Engine" welke de status veranderingen van objecten volgt en managed en op basis van een bereikte status acties kan ondernemen; 3. Het tweede automatische mechanisme is de "Time Manager" welke de objecten in de tijd kan volgen.
7.2 Handmatig Managen van het Proces Processen kan men handmatig managen door aan objecten een status toe te kennen en in specifieke schermen op deze status te filteren.
7.3 State Transition Engine Als een van de basis onderdelen van de applicatie wordt een z.g. State Transition Engine meegeleverd welke in de achtergrond aan de hand van een status van het business object acties onderneemt of initieert. Het ondernemen in dit verband bestaat uit het uitvoeren van een taak of het starten van een proces of applicatie. Het initiëren bestaat uit het plaatsen van een actie in de actielijst. De State Transistion Engine is een mechanisme welke de status van Business Objecten beheert en volgt. Na de creatie van een Business object bepaald de STE in welke status deze begint. Dit wordt gedaan aan de hand van de STE object definitie. Afhankelijk van de ontwikkeling van het Business Object wordt vervolgens het verloop van de "State" bepaald. Bij het bereiken van een gedefinieerde status zal de State Transition Engine een of meerdere handelingen uitvoeren welke door de gebruiker zijn gedefinieerd. De STE controleert periodiek alle business objecten tegen de uitvoeringslijst en voert deze opdrachten uit voor de objecten welke de status hebben bereikt. De STE controleert eveneens periodiek de actielijst om eventuele escalaties uit te voeren. De acties zelf worden beheerd door de Actie Manager.
Men kan STE objecten ook markeren als "Alleen Handmatig", dit zijn objecten welke door de STE buiten beschouwing worden gelaten en alleen door een gebruiker kunnen worden gestart. Dit is uiteraard alleen zinvol indien deze het kenmerk "gebruikers actie" heeft. Verder kent het systeem een gebruikers niveau tot welke niveau van de gebruikers de "gebruikers actie" zichtbaar is.
7.4 STE Status De status van het object wordt in de STE als een numerieke waarde verwerkt. De referentietabel is de systeemtabel tblSTEStatus. De actie van de STE kan ook een statuspromotie zijn zonder verdere handelingen, bijvoorbeeld op tijd. "A" uur na het bereiken van status "X" gaat het object over in status "Y".
7.5 STE Process Management In de State Transistion Engine is ook het mechanisme van "If Then Else" beschikbaar. De obejcten welke aan de status voldoen worden optioneel onderworpen aan een condition. De uitvoering van het STE object kan aan de Waar of Onwaar resultaat van de codition gekoppeld worden. Ook is het mogelijk om de uitvoering van de condition aan een andere status te koppelen en afhankelijk van het resultaat naar de verschillende objecten te verwijzen. De conditie moet een geldig SQL select statement zijn.
7.6 STE Objecten Als eerste definieert de ontwikkelaar de STE objecten, objecten welke de relatie aangeven tussen het Business Object en zijn ontwikkeling. De STE objecten zien er als volgt uit: • TableName, de Tabel waar het Business Object is opgeslagen (Business object ID in applTables) • Status (numeriek tblSTEStatusID) De status van het object welke in SysEventStatus of in het veld uit het STE object FieldName is opgeslagen. Als de status van het object gelijk is aan die van het STE object, wordt het object geëvalueerd en te nemen actie en uitgevoerd. • Veld naam (ID uit ApllColumns) FieldName indien FieldName een waarde heeft, reageert het systeem op de waarde welke in dit veld staat. • Nieuwe status (numeriek) Als deze > 0 is (0 of Null geeft geen nieuwe status) wordt de status van het object daarop, als vervolgstatus, ingesteld, anders wordt de status met 1 verhoogd. Dit staat de gebruiker in staat om een beslissingsboom af te wikkelen afhankelijk van de status, bijvoorbeeld indien status 3 als eerste bereikt wordt, dan wordt de volgende status 8, wordt status 4 het eerste bereikt, dan wordt de vervolgstatus 25. De betekenis van de status wordt opgeslagen in de tabel tblSTEStatus. • StartTime, het tijdstip waarop de gebeurtenis, welke gekoppeld is aan de status van het object, wordt uitgevoerd. Indien StarTime leeg (Null) of 0 is, dan wordt de object gebeurtenis direct uitgevoerd. • Naam van het STE Object, wordt voor logging en referentie gebruikt. • Omschrijving, wordt voor logging en referentie gebruikt.
• • • • • • • • • • • •
• •
•
•
•
Prioriteit, de volgorde waarin de State Transition Objecten objecten worden onderzocht. Gebruikers Actie (boolean). Er wordt een actie aangemaakt voor de Actie Manager Handmatige Actie (boolean). Het object wordt door de STE buiten beschouwing gelaten, het is een evaluatie welke door de gebruiker wordt geïnitieerd. Gebruikersgroep (Groep AliasFor tblGroepID) Proces (boolean) De uitvoering van het STEobject is het starten van een Proces. Proces naam (deze kan wordt via de fileselector gevuld) Initialisatie tijdstip in uren (periode na het aanmaken van de actie waarop deze actie actief moet worden/moet worden uitgevoerd) (StartTime) Herhaling (boolean). Zolang de status van het object niet veranderd wordt deze periodiek opnieuw uitgevoerd. Herhalingsperiode in uren (nieuwe initiatie van de actie na begintijd van de status + Starttijd + (Herhalingsaantal+1) * Herhalingsperiode > now()) Maximum herhaling (MaxRepeats) het maximaal aantal keren dat de actie mag herhalen. Indien 0 of Null, dan is de herhaling onbeperkt, anders stopt deze na als Herhalingsaantal=Maximum herhalingen. Actie afsluiten (boolean) Als deze waar is, wordt de status van het business object als uitgevoerd gemarkeerd. Gebruikers selectie (UserSelection) het criterium waarop de gebruiker (of gebruikers groep) geselecteerd wordt voor de acties. Dit kan gebruikt worden om de acties op gebruiker te filteren. Indien niet ingevuld, dan zou bedoeld moeten worden dat de acties door iedere willekeurige gebruiker opgepakt mag worden. Uitvoertijd in uren (ProcessTime alarmeringsmogelijk op plandatum-uitvoertijd). Dit is de doorlooptijd welke maximaal mag verlopen waarna de activiteit uitgevoerd moet zijn; Escalatietijd in uren(EscalationTime): De tijd na het starten van de state (SysEventSet) dat er een escalatie optreed indien de execution vlag SysEventExe nog false is of, indien de uitvoering een actie is, de status van de gespecificeerde actie nog closed (0) is. Als het systeem, om wat voor reden dan ook een proces niet kan uitvoeren, zal er een ander alarmeringsmechanisme in werking moeten treden. EscalatieObject. Dit STE object wordt normaliter niet gestart, uitsluitend als escalatie. Een STE object kan ook als escalatie worden gebruikt, ongeacht of dit wel of niet een specifiek escalatie object is, echter een escalatie object kan uitsluitend via een ander STE object worden gestart. EscalatieActie. Het STE object dat de escalatie afhandelt. Dit is een commando regel met verschillende mogelijkheden: o commando type "action gebruikersID message". Er wordt een actie aangemaakt voor de gebruiker met ID gebruikersID. In de info regel wordt de message geplaatst o commando type "mail emailadres message". Er wordt een e-mail aangemaakt en via de redemption plugin direct verzonden aan de geadresseerde met een standaard header en de message. o commando type "run programpath [switches]". Het programma programpath (de volledige windows pathnaam van het programma). De optionele switches worden met de aanroep meegegeven. Als er een fout optreed wordt deze in de log vastgelegd. Reporting. Indien acties is een log dienen te worden opgenomen kan dat hier worden gemarkeerd.
•
Object sluiten (CloseObject). Het object wordt niet meer geëvalueerd. Om de referentie met objecten en gebeurtenissen te kunnen herleiden is het beter om een STE object niet te verwijderen maar om deze uit te schakelen. Het weer inschakelen van het object kan door deze indicator weer uit te zetten.
7.7 Uitvoering van State Transition Een Business Object wordt geselecteerd voor evaluatie indien de status van het object gelijk is aan de STE status en niet op reeds uitgevoerd staat (SysEventExe). Het object wordt uitgevoerd indien minimaal aan een van de volgende voorwaarden wordt voldaan: • Direct uitvoerbaar (STE StartTime is null) of geen gebeurtenis tijdstip ingevoerd van het business obejct (Object SysEvenSet is null), na uitvoering wordt de uitvoeringsstatus op uitgevoerd gezet (SysEventExe is waar); • Indien het een niet herhalend STE object en het eerste gebeurtenis tijdstip bereikt is (SysEventSet + StartTijd < now()), de uitvoeringsstatus wordt hier niet veranderd, deze moet desgewenst door de bewerkingsapplicatie gezet worden indien de status beëindigd is of de object status wordt veranderd; • Indien het een herhalende STE object is en het tijdstip van de herhalingsgebeurtenis is bereikt (SysEvenSet + StartTijd + Repeats * RepeatPeriod < Now()), de uitvoeringsstatus wordt hier niet veranderd, deze moet desgewenst door de bewerkingsapplicatie gezet worden indien de status beëindigd is of de object status wordt veranderd. Optioneel kan een maximaal aantal herhalingen worden ingesteld, indien de uitvoering van het STE object dit aantal bereikt heeft zal het niet meer uitgevoerd worden. De uitvoeringsstatus wordt dan op uitgevoerd gezet.
7.8 Actie Manager De ActieManager handelt de acties af, hieronder wordt begrepen het afmelden van acties en het eventueel zetten van een nieuwe status op het betreffende of een ander business object (dit kan een ander record zijn van hetzelfde of een geheel ander business object zijn). Ook bestaat de mogelijkheid dat de ActieManager een nieuw business object aanmaakt. Voor het managen van het proces kan de (eind-) gebruiker ook zelf (vervolg) acties aanmaken. Hierbij kan uit iedere actie worden gekozen welke het kenmerk "gebruikers actie" heeft. Deze acties zijn verder normale STE objecten, echter hierop wordt gefilterd voor de selectie lijst voor de gebruikers.
7.9 Actie Manager Objecten De Actieobjecten hebben de volgende velden: • STE object • TabelNaam (Object referentie) • ObjectIdent (Absolute ID van het actie object) • Status (1 nieuw, 2 Open, 3 Cancel, 5 Cancelled, 4 Closed by user, 6 Closed by System) • Plandatum • Uiterste Starttijd (ToStartTime), het tijdstip waarop met de uitvoering van de actie begonnen zou moeten zijn. Het systeem kan een alert voor de gebruiker maken om
• • • • • • • • • • • • •
deze aan de actie te herinneren. Het tijdstip wordt bij het aanmaken van de actie ingesteld op plandatum - processtime. Indien de processtime niet is ingevuld is het de plandatum/tijd. Uitvoerdatum Escalatie actie (EscalationAction) Escalatie tijdstip (ToEscalate), het tijdstip waarop de actie escaleert. Het tijdstip wordt bij het aanmaken van de actie ingesteld op Plandatum - Escalatietijd. Indien de escalatie tijd niet is ingevuld wordt de plandatum als escalatie tijdstip genomen. Actienemer (GebruikersID) Gedelegeerd aan (GEbruikersID) Delegatie tijdstip Tijdstip Geopend Tijdstip Gesloten Tijdstip Geannuleerd ID vervolgactie Toelichting Gesloten door Geïnitieerd door
Daarnaast kunnen er nog aanvullende velden in de maatwerkoplossing worden toegevoegd, bijvoorbeeld voor het koppelen van een persoon of een bedrijf aan de betreffende actie. Voor gebruikers comfort kunnen diverse stamtabellen worden toegevoegd waaraan velden worden gekoppeld.
7.10 Time Manager Tijd kan een belangrijke parameter zijn in de levensloop van objecten. Naast het State Transition Engine is er ook een TimeManager in het systeem aanwezig. Voor objecten kunnen tijdmarkeringen worden gedefinieerd. Op grond van deze tijdmarkeringen maakt het systeem acties aan, analoog als de State Transition Engine dit doet. Als begintijd voor het object is de waarde welke in SysEventSet is opgeslagen. Indien er een combinatie gebruikt wordt van de State Transition Engine en de Time Manager, dient men zich er terdege van bewust te zijn dat de time manager de waarde van SysEventSet volgt. Ter beveiliging kan men instellen dat er alleen naar het gekeken moet worden indien de SysEventStatus 0 of Null is. Er kunnen per business object in beginsel een onbeperkt aantal Time Management Objecten ingesteld worden. Het aantal wordt bepaald door de verwerkingstijd van alle objecten en de frequentie waarmee zij geëvalueerd worden. In de meeste situaties in het aantal objecten en het aantal bewakingsmomenten beperkt en zal in de praktijk geen problemen opleveren.
7.11 Time Management Objecten De Time Manager controleert de Time Management Objecten periodiek of een object actie behoeft. • Tabel naam (Business object) • Veldnaam. Dit is een optioneel veld! Indien hier een veld staat ingevuld, wordt de waarde van dat veld als Uitvoertijd genomen in plaats van de veldwaarde van het TMObject-veld Uitvoertijd. Hiermee is het mogelijk om de doorlooptijd afhankelijk te
• • • • • • • •
• • • • • • •
•
•
maken van een objectvariable. Als voorbeeld een object huurcontracten met een doorlooptijd per contract. Een TMObject voor de bewaking van het aflopen van het contract kan middels een Status verandering gedaan worden maar met deze mogelijkheid ook met een TMObject gekoppeld aan de doorlooptijd (in uren) van het contract. Het systeem kan het veldtype nog controleren waardoor ook een datum als veldtype kan worden gebruikt. Actietijdstip, de tijd na het SysEventCreated tijdstip waarop de actie moet worden ingepland; Naam Omschrijving Gebruikers Actie (boolean) Handmatige Actie (boolean) Gebruikersgroep (Groep AliasFor tblGroepID) Planning tijdstip (De plandatum van de resulterende actie wordt de SysEventSet tijdstip van het object + de Planperiode) (PlanTime). Indien null of 0, dan is de actie direct. Herhalend (boolean). Dit is in het geval een actie herhalend, bijvoorbeeld ieder uur of iedere week of iedere 6 weken, dient te worden geinitieerd na de eerste wachttijd. Bijvoorbeeld een controle actie op iedere tweede dag na een initiële wachttijd van 2 weken. Herhalingsaantal (numeriek aantal keren dat de actie is geïnitieerd) Herhalingsperiode (nieuwe initiatie van de actie na begintijd van de SysEventSet + Starttijd + (Herhalingsaantal+1) * Herhalingsperiode > now()) Maximum herhaling (MaxRepeat) het maximaal aantal keren dat de actie mag herhalen. Indien 0 of Null, dan is de herhaling onbeperkt. Actie afsluiten (boolean) Als deze waar is, wordt de status van het business object als uitgevoerd gemarkeerd. Gebruikers selectie (UserSelection) het criterium waarop de gebruiker (of gebruikers groep) geselecteerd wordt voor de acties. De acties worden alleen aan de betreffende gebruiker getoond. Uitvoertijd (ProcessTime alarmeringsmogelijk op plandatum-uitvoertijd); Escalatietijd, looptijd na het initiëren van de actie waarop een escalatie wordt gestart. Deze is alleen van toepassing indien het een gebruikers actie betreft. Als het systeem, om wat voor reden dan ook een proces niet kan uitvoeren, zal er een ander alarmeringsmechanisme in werking moeten treden. EscalatieActie. Het STE object dat de escalatie afhandelt. Dit is een commando regel met verschillende mogelijkheden: o commando type "action gebruikersID message". Er wordt een actie aangemaakt voor de gebruiker met ID gebruikersID. In de info regel wordt de message geplaatst o commando type "mail emailadres message". Er wordt een e-mail aangemaakt en via de redemption plugin direct verzonden aan de geadresseerde met een standaard header en de message. Als er een fout optreed wordt deze in de log vastgelegd. Reporting. Indien acties is een log dienen te worden opgenomen kan dat hier worden gemarkeerd.
8
Lijst van Gereserveerde Namen
De volgende namen en conventies worden door het systeem gebruikt en kunnen tot fouten leiden indien zij niet juist worden toegepast. • • •
•
Veldnamen, eindigend op ID zijn altijd de primaire index van een tabel. Indien een veld op "ID" eindigt wordt een tabel index aangenomen en wordt een koppeling getracht te maken met de van deze index afgeleidde tabelnaam. Velden beginnend met "sysEvent" zijn systeemvelden in de tabel welke door het systeem gebruikt worden voor proces management. Deze worden in niet getoond in de schermen. Deze systeemvelden komen is alle tabellen voor Tabelnamen mogen niet eindigen op LOG. Dit zijn gereserveerde identificaties van log tabellen. Doormiddel van de AutoLog indicator kan op een tabel logging worden geactiveerd welke worden opgeslagen in een tabel welke TabelnaamLOG heet. Hierin worden ook de tijd en de gebruiker vastgelegd. Variabelen welke met "lang" van language beginnen, mogen niet door de gebruiker worden gedeclareerd, het systeem zorgt voor declaratie van deze variabelen en opname in taalmodule. Indien de gebruiker een variabele declareert elke met "lang" begint, zal het systeem een foutmelding wegens dubbele declaratie geven. Ook bij maatwerkuitbreidingen zal de generator deze trefwoorden zelf opzoeken en in de taalmodule opnemen.