Categorie: reference
Bijgewerkt: 2026-04-08
actionfield workflow actionfield1150
ActionField1150
Beschrijving: Link StopRelated Jobs and delete linked ObjectProject(s) of Project. Custom: Nee
Propertiesbewerken
| Property | Type | Accessor |
|---|---|---|
| Project | Project | Root |
| CopyJobToAnotherStopProject | Boolean | Optional |
XMLbewerken
<Workflow Name="ActionField1150" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
<Description>Link StopRelated Jobs and delete linked ObjectProject(s) of Project.</Description>
<Properties>
<Property Name="Project" Type="Project" Accessor="Root" Direction="In" />
<Property Name="CopyJobToAnotherStopProject" Type="Boolean" Accessor="Optional" Direction="In" Default="False" Comment="When Jobs must be copied to another Stop with AF1179 set this property to True" />
<Property Name="AllowedJobStatuses" Type="List[Status]" Accessor="Internal" Default="JobStatus.Created,JobStatus.Approved, JobStatus.Active, JobStatus.Postponed" />
<Property Name="DateDifferenceInMinutes" Type="Int64" Accessor="Internal" Default="0" />
<Property Name="JobPossibleToLink" Type="Boolean" Accessor="Internal" Comment="Set to true when job is impossible to link" />
<Property Name="NotAllPossible" Type="Boolean" Accessor="Internal" Comment="Set to true when not all wanted jobs are able to be linked" />
<Property Name="ObjectProjects" Type="List[ObjectProject]" Accessor="Internal" />
<Property Name="SubJobs" Type="List[Job]" Accessor="Internal" Comment="SubJobs linked with job" />
</Properties>
<Execution>
<UserContent Name="Pre" />
<Transaction>
<Validation Name="ScheduledStartDate" Condition="${Project.ScheduledStartDate} != Empty" MessageCode="2383">
<Parameter Name="Project" Direction="In" Value="${Project}" />
</Validation>
<Validation Name="ScheduledFinishDate" Condition="${Project.ScheduledFinishDate} != Empty" MessageCode="2419">
<Parameter Name="Project" Direction="In" Value="${Project}" />
</Validation>
<Comment><![CDATA[
First update all search results without workorder,
use joins to get properties for command at once
]]></Comment>
<GetList Name="Get objectProject" Type="ObjectProject" OutputProperty="${ObjectProjects}" OrderBy="Id" OrderDirection="Ascending">
<Joins>
<Join Name="Job" Alias="job" Type="InnerJoin" />
<Join Name="job.ProcessFunction" Alias="processFunction" Type="InnerJoin" />
</Joins>
<Filters>
<PropertyFilter PropertyName="Context" Operator="=" PropertyValue="ObjectProjectContext.StopSearchResult" />
<PropertyFilter PropertyName="Project" Operator="=" PropertyValue="${Project}" />
<PropertyFilter PropertyName="AddToWorkOrder" Operator="=" PropertyValue="True" />
<PropertyEmptyFilter PropertyName="WorkOrder" />
</Filters>
</GetList>
<Command Name="ObjectProjects_FindCorrespondingWorkOrder" CommandName="ObjectProjects_FindCorrespondingWorkOrder">
<Parameter Name="MessageWhenNothingFound" Direction="In" Value="True" />
<Parameter Name="ObjectProjects" Direction="In" Value="${ObjectProjects}" />
<Parameter Name="Project" Direction="In" Value="${Project}" />
<Parameter Name="NotAllPossible" Direction="Out" OutputProperty="${NotAllPossible}" />
</Command>
<Flush Comment="Get updated data" />
<Comment><![CDATA[
Add joins for performance and to only find results which we can use instead of not empty filters
]]></Comment>
<GetList Name="Get objectProject" Type="ObjectProject" OutputProperty="${ObjectProjects}" OrderBy="Id" OrderDirection="Ascending">
<Joins>
<Join Name="Job" Alias="job" Type="InnerJoin" />
<Join Name="WorkOrder" Alias="workOrder" Type="InnerJoin" />
</Joins>
<Filters>
<PropertyFilter PropertyName="Context" Operator="=" PropertyValue="ObjectProjectContext.StopSearchResult" />
<PropertyFilter PropertyName="Project" Operator="=" PropertyValue="${Project}" />
<PropertyFilter PropertyName="AddToWorkOrder" Operator="=" PropertyValue="True" />
</Filters>
</GetList>
<ForEach Name="Loop objectprojects" In="${ObjectProjects}" As="ObjectProject">
<Choose Name="Date Difference">
<When Name="DateDifference possible" Condition="${ObjectProject.Job.ScheduledStartDate} != Empty">
<Assign Name="Set Difference" Property="${DateDifferenceInMinutes}" Value="=#getdatedifference('n', ${ObjectProject.Job.ScheduledStartDate}, ${ObjectProject.WorkOrder.ScheduledStartDate})" />
</When>
<Otherwise Name="No Date Difference">
<Assign Name="ReSet Difference" Property="${DateDifferenceInMinutes}" Value="0" />
</Otherwise>
</Choose>
<GetList Name="Get subjobs " Type="Job" OutputProperty="${SubJobs}" OrderBy="Id" OrderDirection="Ascending">
<Filters>
<PropertyFilter PropertyName="Multijob" Operator="=" PropertyValue="${ObjectProject.Job}" />
<PropertyFilter PropertyName="Id" Operator="!=" PropertyValue="${ObjectProject.Job.Id}" />
<PropertyEmptyFilter PropertyName="Project" Comment="Sometimes projectfield is made unprotected for a customer" />
<PropertyEmptyFilter PropertyName="WorkOrder" Comment="Sometimes workorderfield is made unprotected for a customer" />
</Filters>
</GetList>
<Command Name="Job_ValidateLinkToStopWorkOrder" CommandName="Job_ValidateLinkToStopWorkOrder">
<Parameter Name="AllowedJobStatuses" Direction="In" Value="${AllowedJobStatuses}" />
<Parameter Name="DateDifferenceInMinutes" Direction="In" Value="${DateDifferenceInMinutes}" />
<Parameter Name="ObjectProject" Direction="In" Value="${ObjectProject}" />
<Parameter Name="SubJobs" Direction="In" Value="${SubJobs}" />
<Parameter Name="JobPossibleToLink" Direction="Out" OutputProperty="${JobPossibleToLink}" />
</Command>
<Choose Name="Link Possible">
<When Name="Possible To Link" Condition="${JobPossibleToLink} == True">
<WorkflowCall Name="Job_LinkToStop" WorkflowName="Job_LinkToStop">
<Parameter Name="CopyJobToAnotherStopProject" Direction="In" Value="${CopyJobToAnotherStopProject}" />
<Parameter Name="DateDifferenceInMinutes" Direction="In" Value="${DateDifferenceInMinutes}" />
<Parameter Name="Job" Direction="In" Value="${ObjectProject.Job}" />
<Parameter Name="Project" Direction="In" Value="${Project}" />
<Parameter Name="RecalculateDatesWhenJobFitsWithinWorkOrder" Direction="In" Value="False" />
<Parameter Name="WorkOrder" Direction="In" Value="${ObjectProject.WorkOrder}" />
</WorkflowCall>
<ForEach Name="Loop found subjobs" In="${SubJobs}" As="SubJob">
<WorkflowCall Name="Job_LinkToStop" WorkflowName="Job_LinkToStop">
<Parameter Name="CopyJobToAnotherStopProject" Direction="In" Value="${CopyJobToAnotherStopProject}" />
<Parameter Name="DateDifferenceInMinutes" Direction="In" Value="${DateDifferenceInMinutes}" />
<Parameter Name="Job" Direction="In" Value="${SubJob}" />
<Parameter Name="Project" Direction="In" Value="${Project}" />
<Parameter Name="RecalculateDatesWhenJobFitsWithinWorkOrder" Direction="In" Value="False" />
<Parameter Name="WorkOrder" Direction="In" Value="${ObjectProject.WorkOrder}" />
</WorkflowCall>
</ForEach>
<DeleteObject Name="Delete ObjectProject" DomainObject="${ObjectProject}" />
</When>
<Otherwise Name="Link Impossible">
<Assign Name="Set NotAllPossible" Property="${NotAllPossible}" Value="True" />
</Otherwise>
</Choose>
</ForEach>
</Transaction>
<UserContent Name="Post" />
<When Name="NotAllPossible" Condition="${NotAllPossible} == True">
<Message Name="Not all Possible" MessageCode="2439" />
</When>
</Execution>
</Workflow>