Categorie: workflows Bijgewerkt: 2026-04-05 workflow instructies xml assign transaction email

Workflow Instructies

Dit artikel documenteert alle beschikbare workflow instructies in Ultimo. Instructies zijn de bouwstenen van workflows: elke XML-tag binnen een <Execution> blok is een instructie. Ze zijn gegroepeerd per categorie. Zie workflow-engine voor de algemene opzet van workflows en expressions voor expression functies.


Commonbewerken

Basis instructies die in vrijwel elke workflow voorkomen.

Assignbewerken

Wijs een waarde toe aan een property van een domain object. Kan binnen en buiten een #Transaction gebruikt worden. Binnen een Transaction worden wijzigingen naar de database geschreven; buiten een Transaction alleen in het geheugen.

Let op: Gebruik Assign NIET om een status te wijzigen. Gebruik daarvoor #ChangeStatus zodat de Status Matrix en Pre/Post workflows correct worden doorlopen.

<!-- Binnen Transaction: wijzigt het domain object in de database -->
<Transaction>
    <Assign Name="Set Job.Description" Property="${Job.Description}" Value="${Job.FeedbackDescription}" />
    <Assign Name="Set DateTime" Property="${Job.PmWorkOrder.LastMaintenanceDate}" Value="${Job.FinishedDate}" />
    <Assign Name="Reset Preference" Property="${PreferredVendor.Preference}" Value="True" />
</Transaction>

<!-- Buiten Transaction: wijzigt alleen een interne property -->
<Assign Name="Set Cost property Empty" Property="${Cost}" Value="Empty" />

Attributen: - Name - Beschrijving van de actie - Property - Property reference, bijv. ${Job.Description} - Value - Waarde, property reference, of expressie (met = prefix)


AssignTextbewerken

Wijs een String-waarde toe aan een property, specifiek voor meertalige omgevingen. Gebruik dit wanneer je een "multilingual", "neutral" of "string" waarde naar een ander type wilt converteren.

<Transaction>
    <AssignText Name="Set Job.Description" Property="${Job.Description}"
        Value="${KnowledgeTopic.Description}" SourceLanguage="EN-US" TargetLanguage="EN" />
</Transaction>

Extra attributen: - SourceLanguage - Brontaal (bijv. EN-US) - TargetLanguage - Doeltaal (bijv. EN) - PreserveOtherMultilingualValues - Behoud andere taalwaarden bij toewijzing


AssignWhenEmptybewerken

Wijs een waarde toe ALLEEN als de property nog leeg is. Handig voor standaardwaarden die niet overschreven mogen worden.

<AssignWhenEmpty Name="Set HoursEmployee if still empty"
    Property="${HoursEmployee}" Value="${Employee}" />

Commandbewerken

Voer een voorgedefinieerd commando uit. Commands zijn ingebouwde functionaliteitsblokken in Ultimo die niet als losse instructies beschikbaar zijn.

<Command Name="Job_CreateAndInitialize" CommandName="Job_CreateAndInitialize">
    <Parameter Name="JobCreateMethod" Direction="In"  Value="CreateApproved" />
    <Parameter Name="Job"             Direction="Out"  OutputProperty="${Job}" />
</Command>

Attributen: - CommandName - Naam van het commando - Parameters - In/Out parameters


Commentbewerken

Voeg commentaar toe aan de workflow XML. Wordt niet uitgevoerd maar verbetert de leesbaarheid.

<Comment Comment="Korte beschrijving"><![CDATA[Uitgebreide uitleg van het proces]]></Comment>

CreateObjectbewerken

Maak een nieuw object-instantie aan, zoals een Dictionary of Status. Niet gebruiken voor domain objects - gebruik daarvoor #Insert.

<CreateObject Name="Create status" ObjectType="Status" OutputProperty="${Status}" />
<CreateObject Name="Create dictionary" ObjectType="Dictionary[String]" OutputProperty="${StopFilter}" />

SingleItemValidationbewerken

Valideer dat een lijst precies een element bevat. Als de lijst meer elementen bevat, wordt de workflow afgebroken met een foutmelding.

<SingleItemValidation Name="Get Single Item"
    List="${ArticleSiteVendors}" OutputProperty="${ArticleSiteVendor}"
    MessageCode="0000" AllowEmpty="True" />

Attributen: - AllowEmpty - True als de lijst ook leeg mag zijn


Togglebewerken

Inverteer een Boolean waarde: True wordt False en vice versa.

<Toggle Name="Toggle RegisterStock" Property="${Article.RegisterStock}" />

UserContentbewerken

Uitbreidingspunt in een workflow waar consultants en klantbeheerders eigen logica kunnen toevoegen. Zie UserContent in de workflow engine.

<UserContent Name="Pre" />
<!-- ... standaard logica ... -->
<UserContent Name="Post" />

Consultant tip: Voor Bulk workflows moet UserContent een child van ForEach zijn.


Validationbewerken

Controleer een conditie. Als de conditie false retourneert, wordt de workflow afgebroken en een foutmelding getoond.

<Validation Name="Equipment verplicht"
    Condition="${Job.Equipment} != Empty" MessageCode="9001">
    <Parameter Name="Job" Direction="In" Value="${Job}" />
</Validation>

<Validation Name="Check threshold"
    Condition="${TotalThreshold} + ${AbcCode.Threshold} &lt;= 100" MessageCode="3844">
    <Parameter Name="AbcCode" Direction="In" Value="${AbcCode}" />
</Validation>

Attributen: - Condition - Expressie die true of false retourneert - MessageCode - Code uit de Message tabel in de database. Custom messages starten bij 9000+

Consultant tip: Validation is ideaal in UserContent Pre om extra controles toe te voegen voor een statuswijziging.


Flow controlbewerken

Instructies voor conditionele logica, lussen en flow control.

Whenbewerken

Conditionele uitvoering: de instructies binnen When worden alleen uitgevoerd als de conditie true is. Buiten een Choose gedraagt When zich als een if. Binnen een Choose als een case.

<!-- Standalone if -->
<When Name="Status change requested" Condition="${ChangeStatusTo} != Empty">
    <ChangeStatus Name="Change status" DomainObject="${Job}" NewStatus="${ChangeStatusTo}" />
</When>

<!-- Met property vergelijking -->
<When Name="Is preferred vendor" Condition="${PreferredVendor.Preference} == True">
    <WorkflowCall Name="GetPreferredVendor" WorkflowName="ArticleSiteVendor_GetPreferredVendor">
        <Parameter Name="PreferredVendor" Direction="In" Value="${PreferredVendor}" />
    </WorkflowCall>
</When>

Choose / Otherwisebewerken

If-elseif-else constructie. De eerste When waarvan de conditie true is wordt uitgevoerd. Als geen enkele When matcht, wordt Otherwise uitgevoerd.

<Choose Name="Bepaal actie">
    <When Name="X is 1" Condition="${x} == 1">
        <Assign Name="Set result" Property="${Result}" Value="1" />
    </When>
    <When Name="X is 2" Condition="${x} == 2">
        <Assign Name="Set result" Property="${Result}" Value="2" />
    </When>
    <Otherwise Name="Overig">
        <Assign Name="Set result" Property="${Result}" Value="0" />
    </Otherwise>
</Choose>

ChooseUserInteractionbewerken

Splits logica op basis van of er gebruikersinteractie beschikbaar is. Belangrijk voor workflows die zowel vanuit de UI als vanuit achtergrondprocessen (import, scheduler) kunnen draaien.

<ChooseUserInteraction Name="UI beschikbaar?">
    <WithUserInteraction Name="Met UI">
        <Dialog Name="ShowDialog" TitleCode="CONFIRM" />
    </WithUserInteraction>
    <WithoutUserInteraction Name="Zonder UI">
        <Assign Name="Standaard" Property="${Job.Description}" Value="${Job.FeedbackDescription}" />
    </WithoutUserInteraction>
</ChooseUserInteraction>

ForEachbewerken

Itereer over een lijst van items. De As property wordt automatisch aangemaakt binnen de loop en bestaat niet meer na afloop.

<ForEach Name="Keur werkorders goed" In="${CreatedWorkOrders}" As="NewWorkOrder">
    <ChangeStatus Name="Approve" DomainObject="${NewWorkOrder}" NewStatus="WorkOrderStatus.Approved" />
</ForEach>

<!-- Met conditie (filter binnen de loop) -->
<ForEach Name="Loop items" In="${AbcDeterminationList}" As="AbcDetermination"
    Condition="${AbcDetermination.Processed} == False &amp;&amp; ${Continue} == True">
    <!-- acties -->
</ForEach>

Attributen: - In - Lijst om over te itereren (List[DomainObject]) - As - Naam van de loop-variabele - Condition - Optionele filter: alleen items die voldoen worden verwerkt


Whilebewerken

Herhaal een blok totdat een conditie niet meer waar is. Heeft een cycle limit als beveiliging tegen oneindige lussen.

<While Name="Verwijder regels" Condition="${AllDeleted} == False" CycleLimit="2500">
    <Transaction>
        <GetList Name="Get batch" Type="InternalChargeLine" OutputProperty="${Lines}"
            OrderBy="Id" Top="${BatchSize}">
            <Filters>
                <PropertyFilter PropertyName="Id.InternalCharge" Operator="=" PropertyValue="${InternalCharge}" />
            </Filters>
        </GetList>
        <When Name="Geen regels meer" Condition="${Lines.Count} == 0">
            <Assign Name="Klaar" Property="${AllDeleted}" Value="True" />
        </When>
        <ForEach Name="Delete" In="${Lines}" As="Line">
            <DeleteObject Name="Delete" DomainObject="${Line}" />
        </ForEach>
    </Transaction>
</While>

Attributen: - CycleLimit - Maximum aantal iteraties (default beveiliging) - ContinueAtLimit - True om door te gaan bij het bereiken van de limiet (met voorzichtigheid gebruiken)


Counterbewerken

Verhoog een numerieke property met een stapgrootte. Equivalent aan Assign met een expressie.

<Counter Name="index" Property="${index}" Step="2" />
<Counter Name="index terug" Property="${index}" Step="-2" />

Stopbewerken

Beeindig de workflow. Verschillende modi beschikbaar:

Mode Effect
Abort Stopt alle parent workflows, rollback transaction
EndAll Beeindig huidige en parent workflows, resultaat is succesvol
EndCurrent Beeindig alleen de actieve workflow
EndUserContent Beeindig alleen de UserContent sectie
<Stop Name="Stop" Mode="Abort" />
<Stop Name="Klaar" Mode="EndAll" />

WhenFeatureTogglebewerken

Controleer of een feature toggle actief is.

<WhenFeatureToggle Name="Check feature" Feature="ExampleFeature" />

WorkflowCallbewerken

Roep een andere workflow aan. Parameters worden doorgegeven via In/Out/InOut.

<WorkflowCall Name="Initialiseer job" WorkflowName="Job_CreateAndInitialize">
    <Parameter Name="JobCreateMethod" Direction="In"  Value="CreateApproved" />
    <Parameter Name="Job"             Direction="Out"  OutputProperty="${Job}" />
</WorkflowCall>

Attributen: - WorkflowName - Naam van de aan te roepen workflow - EnforceNoUserInteraction - True om de WithoutUserInteraction-pad af te dwingen


Databasebewerken

Instructies voor database-operaties. Moeten altijd binnen een Transaction staan.

Transactionbewerken

Container voor alle database-operaties. Zonder Transaction kunnen GetList, Insert, ChangeStatus etc. niet worden gebruikt.

<Transaction>
    <Insert Name="Insert" ObjectType="Job" OutputProperty="${NewJob}">
        <Parameter Name="Status" Direction="In" Value="JobStatus.Created" />
    </Insert>
</Transaction>

Attributen: - Flush - Tussentijds naar database schrijven - IncludeTrashedObjects - Verwijderde objecten meenemen in queries - IncludeTranslationsForQuery - Vertalingen meenemen bij Query instructie - IsolationLevel - Default (kan uncommitted data lezen) of ReadCommitted (alleen committed data)

Consultant tip: Gebruik ReadCommitted alleen bij bekende locking/performance problemen.


Insertbewerken

Maak een nieuw domain object aan in de database. De Id wordt automatisch gegenereerd als autokey actief is.

<Insert Name="Insert Incident" ObjectType="Incident" OutputProperty="${Incident}">
    <Parameter Name="Context"       Direction="In" Value="${IncidentContext}" />
    <Parameter Name="Status"        Direction="In" Value="IncidentStatus.None" />
    <Parameter Name="Description"   Direction="In" Value="${Job.Description}" />
    <Parameter Name="ReportDate"    Direction="In" Value="${Job.StatusCreatedReportDate}" />
    <Parameter Name="ReportEmployee" Direction="In" Value="${Job.ReportForeignKeyEmployee}" />
    <Parameter Name="Site"          Direction="In" Value="${Job.Site}" />
</Insert>

Attributen: - ObjectType - Type domain object (Job, Equipment, Incident, etc.) - OutputProperty - Property om het nieuwe object in op te slaan - Parameters - Veldwaarden voor het nieuwe record (Direction altijd In)


Updatebewerken

Werk meerdere properties van een domain object bij in een instructie. Vervangt meerdere Assign instructies.

<Update Name="SetJobProperties" DomainObject="${Job}">
    <Parameter Name="Context" Direction="In" Value="JobContext.TD" />
    <Parameter Name="Status"  Direction="In" Value="JobStatus.Created" />
</Update>

Copybewerken

Kopieer properties van het ene domain object naar het andere. De objecten hoeven niet van hetzelfde type te zijn, maar de property-namen en datatypes moeten overeenkomen.

<Copy Name="Copy CustomColumns" Source="${Job.ServiceDeskReportType}" Target="${Job}"
    CopyType="OnlySetIfEmpty" CustomOnly="True" />

Attributen: - CopyType - Overwrite (overschrijf bestaande waarden) of OnlySetIfEmpty (alleen lege velden vullen) - CustomOnly - True om alleen custom properties te kopieren


ChangeStatusbewerken

Wijzig de status van een domain object via de Status Matrix. De matrix bepaalt of de overgang is toegestaan en welke Pre/Post workflows worden uitgevoerd.

<ChangeStatus Name="Activate" DomainObject="${Job}" NewStatus="JobStatus.Active" />
<ChangeStatus Name="Copy status" DomainObject="${Job2}" NewStatus="${Job1.Status}" />

Attributen: - DomainObject - Het object waarvan de status wordt gewijzigd - NewStatus - Nieuwe status (enum waarde, property reference, of numeriek) - UsedDate - Optionele datum/tijd voor de statushistorie


DeleteObjectbewerken

Verwijder een domain object. Dit omvat trash + delete, inclusief Pre/Post workflows.

Volgorde: StatusMatrix validatie -> PreTrash -> Status naar Trash -> PostTrash -> PreDelete -> Daadwerkelijke delete.

<DeleteObject Name="Delete" DomainObject="${Job}" />

TrashObjectbewerken

Markeer een domain object als verwijderd (soft delete). Het object kan nog hersteld worden.

<TrashObject Name="TrashJob" DomainObject="${Job}" />

UntrashObjectbewerken

Herstel een naar de prullenbak verplaatst domain object.

<UntrashObject Name="UntrashJob" DomainObject="${Job}" />

GetItembewerken

Haal exact een domain object op uit de database. Het resultaat MOET precies 1 record bevatten.

<GetItem Name="Get default status" Type="DefaultProgressStatusContextRecordStatus"
    OutputProperty="${DefaultStatus}">
    <Filters>
        <PropertyFilter PropertyName="Id.DefaultProgressStatusContext.Id"
            Operator="=" PropertyValue="${Job.ServiceDeskReportType.SetContext}" />
        <PropertyFilter PropertyName="Id.Status" Operator="=" PropertyValue="1" />
    </Filters>
</GetItem>

GetListbewerken

Haal meerdere domain objects op als lijst. De OutputProperty moet van type List[...] zijn.

<GetList Name="Get subjobs" Type="Job" OutputProperty="${SubjobList}"
    OrderBy="ScheduledStartDate" OrderDirection="Ascending">
    <Filters>
        <PropertyFilter PropertyName="Multijob" Operator="=" PropertyValue="${Job}" />
        <PropertyFilter PropertyName="ScheduledStartDate" Operator="<"
            PropertyValue="${Job.ScheduledStartDate}" />
    </Filters>
</GetList>

Attributen: - OrderBy / OrderDirection - Sortering - Top - Maximum aantal resultaten


GetCountbewerken

Tel het aantal records dat aan de filter voldoet.

<GetCount Name="Tel subjobs" Type="Job" OutputProperty="${SubJobCount}">
    <Filters>
        <PropertyFilter PropertyName="Multijob" Operator="=" PropertyValue="${Job}" />
    </Filters>
</GetCount>

GetSum / GetMax / GetMinbewerken

Aggregatiefuncties op een specifieke property.

<GetSum Name="Sum Quantity" Type="ObjectBatch" OutputProperty="${SumQuantity}" PropertyName="QuantityOut">
    <Filters>
        <PropertyFilter PropertyName="JobMaterial" Operator="=" PropertyValue="${JobMaterial}" />
    </Filters>
</GetSum>

<GetMax Name="Max price" Type="Article" OutputProperty="${MaxPrice}" PropertyName="Price" />
<GetMin Name="Min score" Type="RiskClass" OutputProperty="${MinScore}" PropertyName="FromScore" />

GetGroupedListbewerken

Haal een gegroepeerde lijst op. Output type is GroupedList[GroupKey, ItemType].

<GetGroupedList Name="Materials per warehouse" Type="JobMaterial"
    OutputProperty="${GroupedMaterials}" GroupBy="Warehouse" OrderBy="Id">
    <Joins>
        <Join Name="Warehouse" Alias="warehouse" Type="LeftOuterJoin" />
    </Joins>
    <Filters>
        <PropertyFilter PropertyName="Id.Job" Operator="=" PropertyValue="${Job}" />
    </Filters>
</GetGroupedList>

Query / Subquerybewerken

Voer een geavanceerde query uit met custom projectie (specifieke kolommen).

<Query Name="GetDepartments" Type="Department" OrderBy="Id" OrderDirection="Ascending"
    OutputProperty="${DepartmentResult}">
    <Properties>
        <Property Name="Id" Alias="DepartmentId" Type="GroupProperty" />
        <Property Name="emp2.Description" Alias="Description" Type="GroupProperty" />
    </Properties>
</Query>

IsReferredTobewerken

Controleer of een domain object door andere objecten wordt gerefereerd.

<IsReferredTo Name="Check references" DomainObject="${Job}" OutputProperty="${JobIsUsed}"
    ExcludeTrashedRecords="True" />

Flushbewerken

Schrijf in-memory wijzigingen naar de database, zonder de transaction te beeindigen. Kan geheugen vrijmaken bij grote operaties.

<Flush Comment="Write changes to DB" />

Logbewerken

Schrijf een bericht naar een logbestand. Configureer de log via log.config.

<Log Name="Log" Description="New job created" LogName="Workflow" Type="Information">
    <Parameter Name="NumberOfRecords" Direction="In" Value="${NumberOfRecords}" />
</Log>

Log types: Information, Warning, Error


Filtersbewerken

Filters worden gebruikt binnen GetItem, GetList, GetCount, GetSum, GetMax, GetMin en GetGroupedList.

PropertyFilterbewerken

De meest gebruikte filter. Vergelijkt een property met een waarde.

<PropertyFilter PropertyName="Status" Operator="=" PropertyValue="JobStatus.Active" />
<PropertyFilter PropertyName="Equipment" Operator="!=" PropertyValue="Empty" />

Operators: =, !=, >, <, >=, <=, Like


CombinedFilterbewerken

Combineer meerdere filters met AND of OR.

<CombinedFilter FilterOperator="And">
    <PropertyFilter PropertyName="Id.Job" Operator="=" PropertyValue="${Job}" />
    <PropertyFilter PropertyName="Status" Operator="=" PropertyValue="JobMaterialStatus.Created" />
</CombinedFilter>

<CombinedFilter FilterOperator="Or">
    <PropertyFilter PropertyName="Status" Operator="=" PropertyValue="JobStatus.Active" />
    <PropertyFilter PropertyName="Status" Operator="=" PropertyValue="JobStatus.Finished" />
</CombinedFilter>

InFilterbewerken

Filter op meerdere waarden tegelijk (SQL IN clausule).

<InFilter PropertyName="Status" Values="JobStatus.Active, JobStatus.Closed" />
<InFilter PropertyName="Id" Values="${WorkPeriodIds}" />

NotFilterbewerken

Inverteer een filter (SQL NOT).

<NotFilter>
    <PropertyFilter PropertyName="Id.ProgressStatusNextAvailable" Operator="="
        PropertyValue="${DefaultAvailable}" />
</NotFilter>

DateFilter / DatePartFilterbewerken

Filter op datum of een deel van een datum.

<DateFilter PropertyName="ActivateDate" Operator="=" PropertyValue="#{Environment.CurrentDate}" />
<DatePartFilter PropertyName="DepreciationStartDate" Operator="!=" PropertyValue="1" DatePart="Day" />

DatePart waarden: Hour, Day, Week, Month, Quarter, Year


BetweenFilterbewerken

Filter op een bereik (inclusief grenzen).

<BetweenFilter PropertyName="${Job.Cost}" LowValue="1000" HighValue="2000" />

PropertyEmptyFilterbewerken

Filter op lege waarden.

<PropertyEmptyFilter PropertyName="Description" />

WhenFilterbewerken

Conditionele filter: wordt alleen toegepast als de conditie waar is.

<WhenFilter Condition="${UseSiteFilter} == True">
    <PropertyFilter PropertyName="Site" Operator="=" PropertyValue="${Job.Site}" />
</WhenFilter>

DistanceFilterbewerken

Filter op geografische afstand in meters.

<DistanceFilter FirstLatitude="52.123" FirstLongitude="5.456"
    SecondLatitude="52.789" SecondLongitude="5.012" Operator="<" Distance="1000" />

Joinsbewerken

Joins worden gebruikt binnen Get-instructies om gerelateerde entiteiten mee te laden.

<GetList Name="Get items" Type="JobMaterial" OutputProperty="${Materials}">
    <Joins>
        <Join Name="Warehouse" Alias="warehouse" Type="LeftOuterJoin" />
        <Join Name="Article"   Alias="article"   Type="InnerJoin" />
    </Joins>
    <Filters>
        <PropertyFilter PropertyName="article.Description" Operator="Like" PropertyValue="%" />
    </Filters>
</GetList>

Join types: InnerJoin, LeftOuterJoin


Communicationbewerken

Instructies voor communicatie: emails, reminders, afspraken.

Emailbewerken

Verstuur een email op basis van een TextTemplate. De template wordt uit de database gehaald via de code.

<Email Name="SendEmail" From="#{Settings.EmailSender}" To="${Job.Employee}"
    CC="${Job.ReportEmployee}" RelatedSubjects="${Job}" EmailTemplateCode="0000"
    Concept="true" OutputProperty="${Email}">
    <Attachments>
        <Attachment FileName="Bijlage.pdf" Data="${AttachmentData}" />
    </Attachments>
</Email>

Attributen: - From - Afzender (meestal #{Settings.EmailSender}) - To - Ontvanger: employee, lijst van employees, emailadres, of combinatie - CC / BCC - Carbon copy / blind carbon copy - RelatedSubjects - Domain objects gekoppeld aan de email (voor traceerbaarheid in Ultimo) - EmailTemplateCode - Code van de TextTemplate in de database - Concept - True als de email als concept moet worden opgeslagen (niet direct verzenden)

Consultant tip: Gebruik Concept="true" tijdens testen zodat emails niet daadwerkelijk worden verstuurd.


Reminderbewerken

Stuur een interne reminder (notificatie) naar een of meer medewerkers.

<Reminder Name="Stuur herinnering" Recipients="${Recipients}"
    Priority="${Priority}" ReminderTemplateCode="0000"
    RelatedSubjects="${Job}" EnablePushNotifications="True" />

CreateAppointment / UpdateAppointmentbewerken

Maak of wijzig een afspraak in een externe agenda via email.

<CreateAppointment Name="Plan afspraak" From="#{Settings.EmailSender}"
    To="${Job.Employee}" StartDate="${Job.ScheduledStartDate}"
    EndDate="=#addminutes(${Job.ScheduledStartDate}, 30)"
    Location="Werkplaats A" RelatedSubjects="${Job}" TemplateCode="0000"
    OutputProperty="${Appointment}" />

Dialogbewerken

Instructies voor gebruikersinteractie via dialogen. Alleen beschikbaar als AllowUserInteraction="True".

Dialogbewerken

Toon een dialoogvenster aan de gebruiker.

<Dialog Name="VraagNaam" TitleCode="ASKFORNAME" AllowCancel="True">
    <Container Border="True">
        <Text Name="NewName" Value="${OriginalName}" OutputProperty="${NewName}"
            LabelCode="NAME" Required="True" />
    </Container>
</Dialog>

Dialog controlsbewerken

Beschikbare controls binnen een Dialog:

Control Beschrijving
Text Tekstveld
TextArea Groot tekstveld (meerdere regels)
Number Numeriek veld
Date Datumkiezer
DateTime Datum+tijd kiezer
Time Tijdkiezer
Duration Duur (uren:minuten)
CheckBox Vinkje
CheckBoxGroup Groep vinkjes
RadioGroup Keuzerondjes
ComboBox Keuzelijst
SelectionList Selectielijst uit database
EmailAddress Email-adres selectie
FileSelector Bestand uploaden
Signature Digitale handtekening
Location Locatiekiezer
Html HTML-teksteditor
Password Wachtwoordveld
Literal Alleen-lezen tekst
ListSelector Lijst met bron- en doellijst
SelectionPeriod Periodeselectie

Voorbeeld met meerdere controls:

<Dialog Name="UrenRegistratie" TitleCode="HOURREGISTRATION">
    <Container TitleCode="DETAILS" Border="True">
        <SelectionList Name="Employee" OutputProperty="${SelectedEmployee}"
            ColumnName="EmpId" Required="True" LabelCode="EMPLOYEE" />
        <Number Name="Hours" OutputProperty="${Hours}" LabelCode="HOURS"
            DecimalPrecision="2" MinValue="0" />
        <DateTime Name="StartDate" OutputProperty="${StartDate}"
            LabelCode="STARTDATE" Required="True" IntervalMinutes="15" />
        <TextArea Name="Remark" OutputProperty="${Remark}" LabelCode="REMARK"
            TextAreaRows="4" />
    </Container>
</Dialog>

Dialog validatiebewerken

<Validations>
    <ValidationExpression Name="Check waarden ingevuld"
        Condition="${Hours} != Empty || ${FixedPrice} != Empty"
        MessageCode="1030" ValidationType="Error" TriggerType="OnClose" />
    <ValidationWorkflow Name="Validate status"
        WorkflowName="Validation_ChangeProgressStatus">
        <Parameter Name="NewProgressStatus" Direction="In" Value="${NewStatus}" />
    </ValidationWorkflow>
</Validations>

Dialog updatesbewerken

Gebruik UpdateWorkflow om dialoog-waarden dynamisch bij te werken:

<Updates>
    <UpdateWorkflow Name="Get defaults" WorkflowName="Dialog_GetDefaults">
        <Parameter Name="Employee" Direction="In" Value="${Employee}" />
        <Parameter Name="DefaultCategory" Direction="Out" OutputProperty="${DefaultCategory}" />
    </UpdateWorkflow>
</Updates>

User Inputbewerken

Messagebewerken

Toon een meldingsbericht aan de gebruiker.

<Message Name="Bevestiging" MessageCode="0169">
    <Parameter Name="WorkOrder" Direction="In" Value="${WorkOrder}" />
</Message>

Questionbewerken

Stel een Ja/Nee (of Ja/Nee/Annuleer) vraag.

<Question Name="Bevestig" Type="YesNo" MessageCode="0000"
    Default="Yes" OutputProperty="${QuestionResult}" />

ContinuationQuestionbewerken

Ja/Nee vraag waarbij "Nee" de workflow afbreekt.

<ContinuationQuestion Name="Doorgaan?" MessageCode="0846">
    <Parameter Name="Article" Direction="In" Value="${JobMaterial.Article}" />
</ContinuationQuestion>

SystemDialogbewerken

Toon een systeemdialoog (bijv. een selectiescherm).

<SystemDialog Name="Kies Equipment" DialogName="SelectDomainObject">
    <Parameter Name="EntityName"   Direction="In" Value="Equipment" />
    <Parameter Name="SqlWhereClause" Direction="In" Value="EqmContext = 1" />
    <Parameter Name="DomainObject" Direction="Out" OutputProperty="${SelectedEquipment}" />
</SystemDialog>

Viewbewerken

Open een scherm na een workflow-actie.

<View Name="Open job" ViewName="DataEntryScreen">
    <Parameter Name="DomainObject" Direction="In" Value="${CreatedJob}" />
    <Parameter Name="ScreenName"   Direction="In" Value="${FormName}" />
</View>

VerifyElectronicSignaturebewerken

Vraag de gebruiker om een elektronische handtekening (wachtwoord + reden).

<VerifyElectronicSignature Name="Verifieer" />

Import / Exportbewerken

Importbewerken

Importeer data vanuit XML of CSV.

<Import Name="Import data" Data="${Input}" OutputProperty="${Output}"
    RollbackOnError="True" ProcessObjects="True" Culture="NL" />

Attributen: - RollbackOnError - Rollback bij fouten - ProcessObjects - Voer workflow business logica uit tijdens import - ImportFormat - Xml (default) of Json - ErrorOutputProperty - Property voor foutmeldingen - ErrorCount / InsertCount / UpdateCount etc. - Tellerproperties


Exportbewerken

Exporteer data naar XML of CSV.

<Export Type="${ExportConnector.EntityToExport}" Data="${Data}"
    OutputProperty="${Output}" ExportFormat="${ExportConnector.FileType}"
    Culture="${ExportConnector.Culture}" Encoding="${ExportConnector.OutputEncoding}"
    Separator="${ExportConnector.CsvSeparator}" />

Documentbewerken

CreateDocument / DocumentGridPagebewerken

Maak een Excel of XML document met data.

<CreateDocument Name="Export" DocumentType="Excel" FileName="Export.xlsx"
    ConvertHtmlToPlainText="True">
    <DocumentGridPage Name="Cost overzicht" PageTitle="Kosten" Type="Cost"
        ViewfieldConfiguration="default">
        <Properties>
            <Property Name="Id" Alias="CostId" Type="Property" />
            <Property Name="Context" Alias="Context" Type="Property" />
        </Properties>
    </DocumentGridPage>
</CreateDocument>

Downloadbewerken

Download een bestand uit de FileService. De workflow stopt na het downloaden.

<Download Name="Download rapport" FileName="Documents\Rapport.pdf" />

Filebewerken

Instructies voor bestandsbeheer in de Ultimo FileService.

Instructie Beschrijving
OpenFile Open een bestand als stream
SaveFile Sla een bestand op
CopyFile Kopieer een bestand
MoveFile Verplaats/hernoem een bestand
DeleteFile Verwijder een bestand
FileExists Controleer of bestand bestaat
CreateFolder Maak een map aan
CopyDirectory Kopieer een map
MoveFolder Verplaats/hernoem een map
DeleteFolder Verwijder een map
FolderExists Controleer of map bestaat
GetFileList Lijst van bestanden in een map

OpenFilebewerken

Open een bestand uit de FileService als stream. Alle bestanden moeten binnen de FileServiceData-locatie staan.

<OpenFile Name="Open" FileName="Documents\input.txt" OutputProperty="${Stream}" Encoding="utf-8" />

Attributen: - FileName - Pad binnen de FileService - OutputProperty - Property van type FileServiceStreamContainer - Encoding - Encoding (bijv. utf-8, utf-16, iso-8859-1)


SaveFilebewerken

Sla een bestand op in de FileService. Data moet van het type DocumentContainer zijn.

<SaveFile Name="Save" FileName="Documents\Report.pdf" Data="${ReportStream}" />

CopyFilebewerken

Kopieer een bestand naar een nieuwe locatie in de FileService.

<CopyFile Name="Copy" SourceFile="${Source.ImageFile}" TargetFile="${Target.ImageFile}" />

MoveFilebewerken

Verplaats of hernoem een bestand in de FileService.

<MoveFile Name="Move" SourceFile="Import\input.xml" TargetFile="Import\processed\input.xml" />

DeleteFilebewerken

Verwijder een bestand uit de FileService. Kan niet ongedaan worden gemaakt.

<DeleteFile Name="Delete" FileName="Import\${ConnectorId}\Input\upload" />

FileExistsbewerken

Controleer of een bestand bestaat in de FileService.

<FileExists Name="Check" FileName="${Dir}\${FileName}" OutputProperty="${Exists}" />

GetFileListbewerken

Haal een lijst van bestandsnamen op uit een map in de FileService.

<GetFileList Name="Get files" OutputProperty="${Files}" FolderName="Workflows"
    SearchPattern="*.wfl" OrderBy="Name" />

Attributen: - OutputProperty - Van type List[String] - FolderName - Map in de FileService - SearchPattern - Regex of wildcardpatroon voor bestandsnamen - OrderBy - Sortering (bijv. Name)


CreateFolderbewerken

Maak een nieuwe map aan in de FileService.

<CreateFolder Name="MaakMap" FolderName="Documents" />

CopyDirectorybewerken

Kopieer een map inclusief inhoud naar een nieuwe locatie.

<CopyDirectory Name="Copy" SourceDirectory="${SourceDirectory}" TargetDirectory="${TargetDirectory}" />

MoveFolderbewerken

Verplaats of hernoem een map in de FileService.

<MoveFolder Name="Move" OriginalFolderName="${OldName}" NewFolderName="${NewName}" />

DeleteFolderbewerken

Verwijder een map uit de FileService.

<DeleteFolder Name="Delete" FolderName="${FullPath}" />

FolderExistsbewerken

Controleer of een map bestaat in de FileService.

<FolderExists Name="Check" FolderName="Documents" OutputProperty="${FolderExists}" />

Printbewerken

Druk data af naar een printer geconfigureerd in UCT.

<Print Name="Print" PrinterId="0001" FileName="Documents\Order.pdf"
    Landscape="False" Data="${Data}" />

Attributen: - PrinterId - Id van de printer in UCT - FileName - Tijdelijke bestandsnaam voor printdata - Landscape - True voor liggend formaat (niet van toepassing op email-printers) - Data - De data om af te drukken


Reportbewerken

CreateReportbewerken

Genereer een rapport (Crystal Reports) in verschillende formaten.

<CreateReport Name="Genereer rapport" ReportName="job01" ReportType="Pdf"
    OutputProperty="${ReportData}" ShowTrashedRecords="False">
    <CollectInput Name="Input" DialogTitleCode="CRITERIA">
        <CollectInputFormula Name="F1" ColumnName="EqmId" Operator="Like"
            ResultType="string" SqlWhereClause="EqmContext = 1" />
    </CollectInput>
    <ReportParameter Name="P1" Value="${Job.Id}" />
    <ReportFormulaValue Name="F1" ColumnName="JobId" Operator="=" Value="${Job.Id}" ResultType="string" />
</CreateReport>

ReportType opties: Pdf, Word, Excel, ExcelDataOnly, Rtf, EditableRtf, Csv, Html, Xml


Printbewerken

Druk data af naar een printer (geconfigureerd in UCT).

<Print Name="Print" PrinterId="0001" FileName="Documents\Order.pdf"
    Landscape="False" Data="${Data}" />

Textbewerken

FormatTextbewerken

Formatteer tekst via de template engine. Gebruik een TextCode uit de database of een inline template.

<FormatText Name="Format label" TextCode="ARCGISCONDITIONPEROBJECT"
    OutputProperty="${Title}" />

<FormatText Name="Format warning" TextCode="2938" OutputProperty="${Warning}">
    <Parameters>
        <Parameter Name="Reservation" Direction="In" Value="${Reservation}" />
    </Parameters>
</FormatText>

CheckFormatText / UnformatTextbewerken

Reguliere expressies: valideer of parseer tekst.

<!-- Valideer met regex -->
<CheckFormatText Name="Check URL" Text="${Url}"
    Mask="^https?://.*$" CaseSensitive="False" OutputProperty="${IsValid}" />

<!-- Parseer tekst met regex groepen -->
<UnformatText Name="Extract filename" Text="${UploadedFile}" Mask="[^\\]*$"
    CaseSensitive="False" OutputProperty="${FileName}">
    <Parameter Name="0" Direction="Out" OutputProperty="${FileName}" />
</UnformatText>

XMLbewerken

XmlParser / CsvToXmlParserbewerken

Parseer XML of CSV naar een XmlDocumentContainer voor verdere verwerking.

<XmlParser Name="Parse XML" Input="${Input}" OutputProperty="${XmlDoc}" />

<CsvToXmlParser Name="Parse CSV" Input="${Input}" Separator=";" Type="Employee"
    OutputProperty="${XmlDoc}" Encoding="UTF-8" Action="InsertOrUpdate" HasHeaderLine="True" />

XmlTransformbewerken

Transformeer XML met een XSLT stylesheet.

<XmlTransform Name="Transform" Input="${XmlDoc}" XsltName="import.xslt"
    OutputProperty="${TransformedDoc}" Encoding="UTF-8" />

XmlValidationbewerken

Valideer XML tegen een XSD schema.

<XmlValidation Name="Validate" Input="${XmlDoc}" XsdName="schema.xsd" />

Listbewerken

AddToList / RemoveFromListbewerken

Voeg items toe aan of verwijder items uit een lijst.

<AddToList Name="Voeg toe" List="${Articles}" Item="${Article}" />
<RemoveFromList Name="Verwijder" List="${Jobs}" Item="${Job}" />

Filterbewerken

Filter een lijst op basis van een conditie.

<Filter Name="Niet-lege items" InList="${InList}" OutList="${ResultList}"
    As="${value}" Condition="${value} != Empty" />

Mathbewerken

Add / Subtractbewerken

Reken met twee numerieke waarden.

<Add Name="Verhoog teller" ValueLeft="${Counter}" ValueRight="1" OutputProperty="${Counter}" />
<Subtract Name="Bereken verschil" ValueLeft="100" ValueRight="${Used}" OutputProperty="${Remaining}" />

Data (Test)bewerken

Instructies voor het beheren van testdata in scenario-tests.

InsertTestDatabewerken

Maak testdata aan voor een scenario. De testdata wordt automatisch verwijderd wanneer het scenario klaar is. Benader testdata via ${TestData.[Name]}. Naamconventie: recordtype-prefix gevolgd door twee cijfers in lowercase, bijv. emp01, job01, eqm01.

<InsertTestData Name="OBJ1" ObjectType="Job" />
<!-- Benader via ${TestData.OBJ1} -->

Attributen: - Name - Naam van de testdata (wordt gebruikt als referentie) - ObjectType - Type entiteit om aan te maken (Job, Employee, Equipment, etc.) - Parameters - Veldwaarden voor het testrecord

Let op: Bij een compound key hoeft alleen de LineId leeg gelaten te worden; de Id wordt automatisch gegenereerd.


SetRelationbewerken

Stel een relatie in op een testdata-object. Gebruik dit voor properties die niet gezet kunnen worden tijdens creatie, of voor circulaire referenties.

<SetRelation Name="Set Multijob" Relation="${TestData.Job.Multijob}" Value="${TestData.Job}" />

Attributen: - Relation - Referentie naar de relatie, bijv. ${TestData.JOB1.Employee} - Value - Waarde van de relatie


Datebewerken

CalculateWeekOfYearbewerken

Bereken het weeknummer van een datum.

<CalculateWeekOfYear Name="Weeknummer" Date="#{Environment.CurrentDate}" WeekOfYear="${WeekDate}" />

Debugbewerken

Debugbewerken

Toon een debug-bericht. Alleen in Development/Test omgevingen. De workflow stopt bij het debug-bericht.

<Debug Name="Debug" Message="${Job.HoursCalculated}" />
<Debug Name="Debug expression" Message="#{Environment.CurrentDateTime}" />
<Debug Name="Debug berekening" Message="#round(3.33335, 2)" />

Consultant tip: Verwijder altijd Debug instructies voor deployment naar productie. In productie zorgt Debug voor een foutmelding.


Gerelateerde artikelenbewerken