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>