Categorie: reference Bijgewerkt: 2026-04-08 actionfield workflow actionfield613

ActionField613

Beschrijving: Start Google Maps and zoom in on either a coordinate or an address. Custom: Nee

Propertiesbewerken

Property Type Accessor
DomainObject DomainObject Root
OpenInNewWindow Boolean Optional

Gerelateerde workflowsbewerken

Workflow Beschrijving
DomainObject_ActionField613_CheckGeoCodes Start Google Maps and zoom in on either a coordinate or an address (CheckGeoCodes).

XMLbewerken

<Workflow Name="ActionField613" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Start Google Maps and zoom in on either a coordinate or an address.</Description>
	<Properties>
		<Property	Name="DomainObject"				Type="DomainObject"	Accessor="Root"		Direction="In" />

		<Property	Name="OpenInNewWindow"			Type="Boolean"		Accessor="Optional"	Direction="In"		Default="False"	Comment="Set to True to open Google Maps in a new window, defaults to False" />

		<Property	Name="AddressLine1"				Type="String"		Accessor="Internal" />
		<Property	Name="Building"					Type="Building"		Accessor="Internal" />
		<Property	Name="City"						Type="String"		Accessor="Internal" />
		<Property	Name="Country"					Type="String"		Accessor="Internal" />
		<Property	Name="GeocodeX"					Type="Decimal?"		Accessor="Internal" />
		<Property	Name="GeocodeY"					Type="Decimal?"		Accessor="Internal" />
		<Property	Name="PropertyGeocodeXExists"	Type="Boolean"		Accessor="Internal" />
		<Property	Name="PropertyGeocodeYExists"	Type="Boolean"		Accessor="Internal" />
		<Property	Name="ZipCode"					Type="String"		Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<Comment><![CDATA[ Preface:
							- Because -currently- database columns are not nullable, a set of coordinates is considered meaningful when either one or both coordinates are not 'empty' (effectively zero).
							- Coordinates take preference over address when opening Google Maps, as they are considered more precise.
							- For building parts there is an optional fallback to building, should no coordinates or address be found on the building part itself. ]]></Comment>

		<Validation Name="ValidateGoogleMapsAPIKeyIsSet" Condition="#{Settings.Google.ApiKey} != Empty" MessageCode="3206" />

		<Transaction>
			<Command Name="Check property GeocodeX" CommandName="HasPropertyOrForeignKey">
				<Parameter	Name="EntityName"							Direction="In"		Value="${DomainObject.EntityName}" />
				<Parameter	Name="PropertyName"							Direction="In"		Value="GeocodeX" />
				<Parameter	Name="ThrowExceptionWhenPropertyNotValid"	Direction="In"		Value="False" />
				<Parameter	Name="PropertyExists"						Direction="Out"											OutputProperty="${PropertyGeocodeXExists}" />
			</Command>

			<Command Name="Check property GeocodeY" CommandName="HasPropertyOrForeignKey">
				<Parameter	Name="EntityName"							Direction="In"		Value="${DomainObject.EntityName}" />
				<Parameter	Name="PropertyName"							Direction="In"		Value="GeocodeY" />
				<Parameter	Name="ThrowExceptionWhenPropertyNotValid"	Direction="In"		Value="False" />
				<Parameter	Name="PropertyExists"						Direction="Out"											OutputProperty="${PropertyGeocodeYExists}" />
			</Command>
		</Transaction>

		<When Name="If properties GeocodeX and GeocodeY exist on DomainObject" Condition="${PropertyGeocodeXExists} == True &amp;&amp; ${PropertyGeocodeYExists} == True">
			<When Name="When one of the coordinates is not 'empty' " Condition="${DomainObject.GeocodeX} != 0 || ${DomainObject.GeocodeY} != 0" Comment="Considered meaningful, see comment above!">
				<Assign Property="${GeocodeX}" Value="=#todecimal(${DomainObject.GeocodeX})" />
				<Assign Property="${GeocodeY}" Value="=#todecimal(${DomainObject.GeocodeY})" />

				<Validation Name="ValidateCoordinatesWithinProperRange" Condition="${GeocodeX} &gt;= -90 &amp;&amp; ${GeocodeX} &lt;= 90 &amp;&amp; ${GeocodeY} &gt;= -180 &amp;&amp; ${GeocodeY} &lt;= 180" MessageCode="3006" />
			</When>
		</When>

		<WorkflowCall Name="DomainObject_ActionField613_CheckGeoCodes" WorkflowName="DomainObject_ActionField613_CheckGeoCodes">
			<Parameter	Name="DomainObject"	Direction="In"		Value="${DomainObject}" />
			<Parameter	Name="GeocodeX"		Direction="In"		Value="${GeocodeX}" />
			<Parameter	Name="GeocodeY"		Direction="In"		Value="${GeocodeY}" />
			<Parameter	Name="AddressLine1"	Direction="Out"								OutputProperty="${AddressLine1}" />
			<Parameter	Name="City"			Direction="Out"								OutputProperty="${City}" />
			<Parameter	Name="Country"		Direction="Out"								OutputProperty="${Country}" />
			<Parameter	Name="ZipCode"		Direction="Out"								OutputProperty="${ZipCode}" />
		</WorkflowCall>

		<When Name="When no coordinates or address found and DomainObject is a building part" Condition="${GeocodeX} == Empty &amp;&amp; ${GeocodeY} == Empty &amp;&amp; ${AddressLine1} == Empty &amp;&amp; ${DomainObject.EntityName} == BuildingPart">
			<Assign Name="Set Building" Property="${Building}" Value="${DomainObject.Id.Building}" />

			<Choose Name="Check if one of the coordinates on building is not 'empty' or not">
				<When Name="When one of the coordinates is not 'empty'" Condition="${Building.GeocodeX} != 0 || ${Building.GeocodeY} != 0" Comment="Considered meaningful, see comment above!">
					<Assign Name="Set GeocodeX from building" Property="${GeocodeX}" Value="${Building.GeocodeX}" />
					<Assign Name="Set GeocodeY from building" Property="${GeocodeY}" Value="${Building.GeocodeY}" />

					<Validation Name="ValidateCoordinatesWithinProperRange" Condition="${GeocodeX} &gt;= -90 &amp;&amp; ${GeocodeX} &lt;= 90 &amp;&amp; ${GeocodeY} &gt;= -180 &amp;&amp; ${GeocodeY} &lt;= 180" MessageCode="3006" />
				</When>

				<Otherwise Name="Otherwise, use address line 1">
					<Assign Name="Set AddressLine1 from building" Property="${AddressLine1}" Value="${Building.AddressLine1}" />
					<Assign Name="Set ZipCode from building" Property="${ZipCode}" Value="${Building.ZipCode}" />
					<Assign Name="Set City from building" Property="${City}" Value="${Building.City}" />
					<Assign Name="Set Country from building" Property="${Country}" Value="${Building.Country.Description?}" />
				</Otherwise>
			</Choose>
		</When>

		<Validation Name="ValidateValidCoordinatesOrAddress" Condition="(${GeocodeX} != Empty &amp;&amp; ${GeocodeY} != Empty) || ${AddressLine1} != Empty" MessageCode="3006" />

		<UserContent Name="Post" />

		<Choose Name="Use coordinates or address for Google Maps?">
			<When Name="Coordinates" Condition="${GeocodeX} != Empty &amp;&amp; ${GeocodeY} != Empty">
				<View Name="Url" ViewName="GoogleMaps">
					<Parameter	Name="latitude"			Direction="In"		Value="${GeocodeX}" />
					<Parameter	Name="longitude"		Direction="In"		Value="${GeocodeY}" />
					<Parameter	Name="OpenInNewWindow"	Direction="In"		Value="${OpenInNewWindow}" />
				</View>
			</When>


			<When Name="Address" Condition="${AddressLine1} != Empty">
				<View Name="Url" ViewName="GoogleMaps">
					<Parameter	Name="address"			Direction="In"		Value="${AddressLine1}, ${ZipCode} ${City}, ${Country}" />
					<Parameter	Name="OpenInNewWindow"	Direction="In"		Value="${OpenInNewWindow}" />
				</View>
			</When>
		</Choose>
	</Execution>
</Workflow>

Sub-workflow XMLbewerken

DomainObject_ActionField613_CheckGeoCodesbewerken

Beschrijving: Start Google Maps and zoom in on either a coordinate or an address (CheckGeoCodes).

<Workflow Name="DomainObject_ActionField613_CheckGeoCodes" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Start Google Maps and zoom in on either a coordinate or an address (CheckGeoCodes).</Description>
	<Properties>
		<Property	Name="DomainObject"					Type="DomainObject"	Accessor="Root"		Direction="In" />

		<Property	Name="GeocodeX"						Type="Decimal?"		Accessor="Optional"	Direction="In" />
		<Property	Name="GeocodeY"						Type="Decimal?"		Accessor="Optional"	Direction="In" />

		<Property	Name="AddressLine1"					Type="String"		Accessor="Optional"	Direction="Out" />
		<Property	Name="City"							Type="String"		Accessor="Optional"	Direction="Out" />
		<Property	Name="Country"						Type="String"		Accessor="Optional"	Direction="Out" />
		<Property	Name="ZipCode"						Type="String"		Accessor="Optional"	Direction="Out" />

		<Property	Name="PropertyAddressLine1Exists"	Type="Boolean"		Accessor="Internal" />
		<Property	Name="PropertyCityExists"			Type="Boolean"		Accessor="Internal" />
		<Property	Name="PropertyCountryExists"		Type="Boolean"		Accessor="Internal" />
		<Property	Name="PropertyZipCodeExists"		Type="Boolean"		Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="When no valid coordinates found" Condition="${GeocodeX} == Empty &amp;&amp; ${GeocodeY} == Empty">
			<Transaction>
				<Command Name="Check property AddressLine1" CommandName="HasPropertyOrForeignKey">
					<Parameter	Name="EntityName"							Direction="In"		Value="${DomainObject.EntityName}" />
					<Parameter	Name="PropertyName"							Direction="In"		Value="AddressLine1" />
					<Parameter	Name="ThrowExceptionWhenPropertyNotValid"	Direction="In"		Value="False" />
					<Parameter	Name="PropertyExists"						Direction="Out"											OutputProperty="${PropertyAddressLine1Exists}" />
				</Command>

				<Command Name="Check property ZipCode" CommandName="HasPropertyOrForeignKey">
					<Parameter	Name="EntityName"							Direction="In"		Value="${DomainObject.EntityName}" />
					<Parameter	Name="PropertyName"							Direction="In"		Value="ZipCode" />
					<Parameter	Name="ThrowExceptionWhenPropertyNotValid"	Direction="In"		Value="False" />
					<Parameter	Name="PropertyExists"						Direction="Out"											OutputProperty="${PropertyZipCodeExists}" />
				</Command>

				<Command Name="Check property City" CommandName="HasPropertyOrForeignKey">
					<Parameter	Name="EntityName"							Direction="In"		Value="${DomainObject.EntityName}" />
					<Parameter	Name="PropertyName"							Direction="In"		Value="City" />
					<Parameter	Name="ThrowExceptionWhenPropertyNotValid"	Direction="In"		Value="False" />
					<Parameter	Name="PropertyExists"						Direction="Out"											OutputProperty="${PropertyCityExists}" />
				</Command>

				<Command Name="Check foreign key Country with property Description" CommandName="HasPropertyOrForeignKey">
					<Parameter	Name="EntityName"							Direction="In"		Value="${DomainObject.EntityName}" />
					<Parameter	Name="PropertyName"							Direction="In"		Value="Country.Description" />
					<Parameter	Name="ThrowExceptionWhenPropertyNotValid"	Direction="In"		Value="False" />
					<Parameter	Name="PropertyExists"						Direction="Out"											OutputProperty="${PropertyCountryExists}" />
				</Command>
			</Transaction>

			<When Name="If property AddressLine1 exists on DomainObject and it's not empty" Condition="${PropertyAddressLine1Exists} == True &amp;&amp; ${DomainObject.AddressLine1} != Empty">
				<Assign Property="${AddressLine1}" Value="${DomainObject.AddressLine1}" />
			</When>

			<When Name="If property ZipCode exists on DomainObject and it's not empty" Condition="${PropertyZipCodeExists} == True &amp;&amp; ${DomainObject.ZipCode} != Empty">
				<Assign Property="${ZipCode}" Value="${DomainObject.ZipCode}" />
			</When>

			<When Name="If property City exists on DomainObject and it's not empty" Condition="${PropertyCityExists} == True &amp;&amp; ${DomainObject.City} != Empty">
				<Assign Property="${City}" Value="${DomainObject.City}" />
			</When>

			<When Name="If property Country exists on DomainObject and it's not empty" Condition="${PropertyCountryExists} == True &amp;&amp; ${DomainObject.Country.Description?} != Empty">
				<Assign Property="${Country}" Value="${DomainObject.Country.Description}" />
			</When>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>