Repeaters in Horizontal Stacks are going sideways ➡️

Overview

In the Report Builder, you can add a Repeater control to a flow document's layout that iterates over a specific header of a given data source. When the report is run, any "child" controls inside the Repeater control will appear once for each iteration.

Currently, the child controls within a Repeater control are automatically arranged in a vertical formation. However, depending on the data being repeated, this can lead to unnecessarily long documents containing lots of pages.

Therefore, we're making it possible to stack repeated content horizontally - by placing the Repeater control within a Horizontal stack control!

Who will be affected?

This will affect new and existing reports containing Repeater controls.

Details

Repeater controls at the root of a flow document will be unchanged.

However, if a Repeater control is placed within a container, the appearance of its child controls will be determined by that container. This means that:

  • A Repeater control within a Horizontal stack control will now repeat horizontally.
  • A Repeater control within a Vertical stack control will continue to repeat vertically.
  • A Repeater control within a Repeater control will behave according to its parent control.
  • The Repeater control's Margins and Relative Width won't be applicable.

Initially, repeated content will only appear horizontally when the report is run. The Document Layout Editor will be updated to reflect this new behaviour in the subsequent Alloy release.

Wrap child controls

As flow documents typically use portrait orientation, it's important for Horizontal stack controls to have their Wrap child controls property set to Yes when appropriate. Otherwise, their child controls may go off the page!

Therefore, to ensure that any newly-horizontal content remains visible after the change, we recommend checking your custom reports for any Repeater controls within Horizontal stack controls and configuring them as above.

Expected release

29th June 2023 as part of the Alloy v2.48 release.

Report data source header changes 📄

Overview

In the Report Builder, you can create an Item data source to represent the attributes and properties of a particular item, and an AQS data source to fetch the attribute data of multiple items.

You may have tried to use an Item data source as a parameter within an AQS data source, e.g. to fetch the defect items raised against that item. Currently, this doesn’t work because the Item Id header of the Item data source is a Text type, which isn't directly comparable with actual Item IDs.

Therefore, we're changing the Item Id header type from Text (string) to Link (AlloyId[]) to make this possible!

To accommodate this, a few other changes will also happen.

Who will be affected?

This will affect report builders wishing to use an Item data source as a parameter within an AQS data source.

Details

The Item data sources in everyone's custom reports will be updated with this change automatically.

However, any existing AQS data sources containing an unusable parameter as described above will still throw an error (1586360664 - Parameter type String cannot be used in node of type AlloyId). To fix this, simply recreate the parameter.

No more sorting by Item Id

After this change, it will no longer be possible to sort by the Item Id header on any data source. Doing so will throw an error (1603203353 - Ordering is not supported on the following type AlloyId).

Hardly anyone has attempted this, so we don't envisage it causing issues going forward.

More flexible joins

To create a Join data source, you must select a header from each of the two data sources you wish to join. Currently, you can only join headers of the same type (or a Link type to a Text type).

After this change, it will be possible to join a Text header to any other header type and vice versa. The other header type will be "stringified" for comparison.

AQS statistics constraints

AQS statistics data sources contain two headers to represent the data returned by its query. The Key header is a Text type and the Value header is a Number type.

After this change, API users will be able to specify the type of these headers via two new optional properties:

  • KeyConstraint - corresponds to the attribute being grouped on, so can be set to any attribute type.

  • ValueConstraint - corresponds to the aggregated values of the attribute being queried, so can be set to Number, DateTime or GeoJSON.

These can be declared within the relevant request model when using the /api/custom-report/{customReportCode}/data-source endpoint to add (Swagger/ReDoc) or edit (Swagger/ReDoc) an AQS statistics data source.

This will be useful for creating joins in some scenarios.

For example, imagine having an AQS statistics data source that counts Waste Containers grouped by type, and an AQS data source that fetches items of the Waste Container Types design.

To create a Join data source from these, you would select the Key header (String) of the first data source and the Item Id header (Link) of the second data source.

By default, the Item Id header will be stringified for comparison with the Key header, so the join should work. However, you can set KeyConstraint to "Link" to ensure an accurate comparison.

Expected release

29th June 2023 as part of the Alloy v2.48 release.

Alloy May 2023 Update

We've got some exciting new features for you this month! The update took place during the evening of the 25th May. For a full list of changes in v2.47, please visit the Alloy Changelog.

New Item Form Expressions Builder 🧱

Item forms let you customise how a user can enter data when they create or edit items of a particular design/interface. You decide which controls appear on the form (e.g. show a Checkbox control for this Yes/No attribute) and how they behave (e.g. make the control "Required" even though the attribute isn't).

You can now use expressions to make your item form dynamic and reactive to user input!

What's an expression? Well, it's a sequence of values and functions that produces a final output.

Each control on the form has several configurable properties. If you set a property to target an expression, it will be set according to the expression's output, which can change depending on how the form is used (e.g. make the control "Required" only if another control is populated).

While some of you have been experimenting with writing expressions manually via the Alloy API, we're proud to announce the new Item Form Expressions Builder!

This lets you define an expression visually, by adding nodes to represent different values and functions, and then linking them together in a logical sequence. On first use, a handy tour will highlight the key areas and walk you through a simple example. For more detail, check out Alloy Help.

Expressions unleash the full power of item forms. Therefore, we're thrilled to make them accessible to a wider audience, and look forward to seeing them being used in innovative ways!

New join types in the Report Builder 🖇️

In the Report Builder, you can define a Join data source to combine the data from two AQS data sources (or other Join data sources) that share at least one column header.

Previously, the joined data would only include matching rows. For each row in the first data source, the value in the shared column (Defects in the example below) is compared to all the rows in the second data source. For every match, a combined row is created in the Join data source.

Those of you familiar with SQL will recognise this as an Inner join.

However, there are now other join types to choose from when configuring your Join data source!

A Left outer join includes the matching rows, along with all the rows from the first data source. As these extra rows have no matches in the second data source, they contain no values for those columns.

A Right outer join is the same except reversed, so all the rows from the second data source are included instead of the first.

A Full outer join includes all rows from both data sources! As with the other outer joins, non-matching rows will have blank columns on their opposite side.

Set workflow parameters ⚙️

Last month, we announced a new feature initially for Alloy API users: the ability to define and set parameters for manual workflows. This lets a workflow take input from the user that triggers it, providing a whole new degree of flexibility.

Following that, it's now possible to specify values for workflow parameters in Alloy Web. If a user triggers a manual workflow with one or more defined parameters, a window will appear to let them select each parameter and enter a value (see below).

For now, workflow parameters can only be defined via the API. However, this ability will also come to Alloy Web soon!

New Close Project workflow ✅

We've added a new Close Project manual workflow to all customer projects.

This provides a quick and easy way to close all the tasks in a project by setting their Status attributes to a chosen value (using the new workflow parameter feature mentioned above).

For those of you with projects containing hundreds of tasks, this will surely be welcome news. 😊

Edit the colour and icon of any item 🎨

If the Context property of an item is Core or Module, it can't be edited (except for any custom attributes your organisation has added to its design). This ensures that important items remain consistent for everyone.

However, we do like to offer customisation where we can!

Therefore, you can now edit the Colour and Icon properties of any item, regardless of its Context. 

You can also set the Name and Colour of any basemap.

Optimised item header on iOS 🦲

Nowadays, iPhones come in different form factors and screen shapes. Up top, you've got your classic "rectangle" (iPhone SE), the distinctive "notch" (iPhone 14) and the new "island" (iPhone 14 Pro).

Additionally, some models display a thin grey bar at the bottom, to serve as a reference point for gestures such as app switching. In Alloy Mobile, this could obscure the dots in the minimised item header (that indicate when multiple items are selected).

Therefore, we've optimised the item header to display correctly on all iPhone models, whether it's positioned at the top or bottom of the app. The dots can no longer be obscured and a white bar now indicates that you can drag the header upwards to see the selected item's details.

Stacked assets on Android 🥞

As you perform a round using Alloy Mobile, you may find yourself needing to select from one or more overlapping assets (e.g. to record when a bin hasn't been put out).

Previously, only the top asset would be selected, unless you spent time zooming in far enough for the assets to appear separately (and then zoom out afterwards).

Now, the overlapping assets will be listed in a standard item picker, making it easy and quick to select the correct one.

New Alloy Help site 📖

We're pleased to announce that Alloy Help has received a beautiful makeover this week 💄.

The website has been rebuilt from the ground up to be bigger, bolder and easier to navigate.

Content now appears larger and fills more of the screen, making it clearer and more comfortable to read. The left sidebar can group articles more effectively for better browsing. A handy Table of Contents appears on the right, which displays an outline of the current article and your position in it, and lets you jump to a particular heading.

There's even a Dark Mode for some gentle night-time viewing 🌙.

This forms part of ongoing work to improve the quality and readability of Alloy's documentation, so you can find and absorb information when you need it.

To check it out, visit help.alloyapp.io or select the bottom-right ? icon in Alloy.


Manual Workflow Parameters 🛠️

Overview

With the April 2023 update comes the ability to specify parameters for manual workflows, enabling the workflow to take input from the user that triggers it!

This new feature is currently only available in the Alloy API but will appear in Alloy Web soon (look out for it in upcoming release notes 👀).

Start by creating a design with the desired parameters represented as attributes. When you create the workflow, you can now specify your parameter design in the trigger model. You can then reference the parameters by their attribute codes when configuring the workflow's actions.

When you trigger the workflow, you can specify which parameters to use and supply any required values. Once the feature comes to Alloy Web, users will be prompted to enter values for all parameters defined by the parameter design when they trigger the workflow.

Parameters greatly increase the flexibility of workflows, to the point where a single workflow can now cater for multiple circumstances that previously required setting up multiple workflows. We look forward to seeing how you use them!

Who is affected?

This change provides new opportunities for workflow editors when designing and implementing manual workflows via the Alloy API.

Details

Here are the steps for setting up a manual workflow that takes parameters via the Alloy API.

Create a parameter design

  • Create a design that implements the designInterfaces_workflowManualTrigger interface.
  • Add an attribute for each parameter you plan to use.

Create a workflow

  • Create a workflow via the /api/workflow endpoint (Swagger/ReDoc).
  • For the trigger property, specify a WorkflowTriggerWebModelBase with a discriminator of ManualTrigger
  • For the parametersDesignCode property, enter the code of your parameter design.

Use a parameter in an action

  • Add an action via the /api/workflow/{code}/action endpoint (Swagger/ReDoc).
  • For the parameters property, specify an array containing at least one object with a discriminator of WorkflowComputedItemAttributeWebModel.
  • For the value property of the WorkflowComputedItemAttributeWebModel object, specify an object with a discriminator of WorkflowSyntaxNodeTriggerParameterWebModel.
  • For the parameterCode property of the WorkflowSyntaxNodeTriggerParameterWebModel object, specify the relevant attributeCode from your parameter design.

Trigger the workflow

  • Run the workflow via the /api/workflow/{code}/manual-run endpoint (Swagger/ReDoc).
  • For the triggerParameters property, specify the relevant attribute code from your parameter design and optionally provide a value.

Alloy April 2023 Update

This month's update brings two new features to the Geometry Editor and makes several common actions quicker to perform. The update took place during the evening of the 27th April. For a full list of changes in v2.46, please visit the Alloy Changelog.

Measure geometry everywhere 📏

Back in October, we added the Measure tool, which lets you select multiple points on the map to see the length between them, plus the area of any closed shape.

We've now extended this functionality to the Geometry Editor, so you can see the dimensions of all lines and polygons, even as you draw them!

Snap to nearby geometry ➡️

Another new feature in the Geometry Editor is snap layers, which lets your pointer "snap" to nearby geometry.

To get started, select Menu (bottom-right)choose Snap layers, and then choose a visible layer to act as the snap layer.

From now on, when your pointer approaches snap layer geometry, it'll automatically jump to align itself with the nearest point or line.

This makes it super easy to plot geometry directly alongside another item's geometry, e.g. a building connected to another building, a road branching off from another.

Quickly add columns in the Data Explorer 📋

Adding attribute columns in the Data Explorer is a common action, one that we certainly find ourselves performing a lot. Despite selecting all your desired attributes upfront, you inevitably end up wanting to add more later!

To reflect this, we've added an extra Configure attributes button to the top bar. This lets you open the Pathfinder in a single click, without having to use the bottom-right Menu button.

Quickly access the Job Work Units Editor 🛠️

When viewing a job's details, you can open the Job Work Units Editor by switching to the Job Work Items or Job Bill Items tab, and then selecting More in the action bar.

While this is intuitive, it can become a bit laborious if you've got lots of jobs to move through!

To address this, you can now open the Job Work Unit Editor from the General tab as well, without having to switch tabs.

Easily filter designs in the map picker 🗺️

When selecting items in the map picker, you can filter the displayed items by selecting Menu (bottom-right) and choosing Filter designs.

Previously, the right-hand item list would change to a design list. After selecting the relevant designs, you then had to select Search here to refresh the displayed items and change the list back to items.

This proved confusing at times, so selecting Filter designs now displays a standard design picker, and the map refreshes automatically after saving your selection.

Custom Job Work Items on Android 🛠️

Following on from last month, custom job work items are now supported on Android in addition to iOS.

When adding a job work item to a job, you can now choose from all designs that implement the Job Work Items interface (and which you have permission to create items for).

To learn more about custom job work items, see February's post.


Alloy March 2023 Update

This month's update lets you do more with Alloy's existing features, particularly if you work with multiple contractors. The update took place during the evening of the 30th March. For a full list of changes in v2.45, please visit the Alloy Changelog.

Better looking AQS attributes 😎

Previously, editable AQS attributes appeared as tall dark boxes that displayed their underlying JSON code. While it was occasionally useful to edit the code directly, the box took up a fair bit of vertical space and was restricted by the limited width available.

Therefore, AQS attributes now occupy a single line like other attributes. This frees up space for up to five attributes below it, letting you see more information without scrolling.

Selecting an AQS attribute will open the query in the AQS Builder, where you can view and edit its structure and values.

To access the query's JSON code in a full-sized editor, select the { } button.

JSON attributes have undergone a similar transformation in recent months.

Process over 1000 activity items at once 📋

Creating or editing activity items (e.g. defects, jobs, job work units) requires Alloy to perform extra logic for activity-specific functionality (e.g. copying geometry from a parent asset, calculating costs).

Previously, this work was performed using Alloy's Extended API, which could process all the extra logic at the cost of performance. Unfortunately, a safety limit of 1000 items was necessary to ensure consistent service delivery.

However, over the past year, we've been working to gradually migrate these functions to the main Alloy API, which we've documented in previous announcements. With some crafty optimisations, we've been able to reproduce the same functionality at higher performance levels, to the point where the safety limit can be ditched!

Therefore, you can now create/edit over 1000 activity items in a single workflow, or by using the Alloy API directly.

Street Manager v4 🚧

Both Alloy Web and Alloy Mobile have been updated to support Street Manager v4, in accordance with legislation coming into force on 1st April.

For full details of what's changed, see this previous announcement.

Job cost calculation permissions 💵

When a user edits the Estimated Value or Actual Value attribute of a job work item, the Estimated Cost or Actual Cost attribute is recalculated accordingly.

Previously, this required the user to have read and write permission for the Cost attributes of the job work item's design.

However, if you employ contractors to carry out jobs, you probably don't want to grant them these permissions! Doing so would let them edit the cost of their work directly, irrespective of the value.

Therefore, Alloy now calculates the Cost attributes of job work items via a system process. This means that users can now update the value of their work without needing to see or edit the cost.

Custom Job Work Items on iOS 🔨

Following on from last month, custom job work items are now supported on Alloy Mobile iOS (and on Android next month).

When adding a job work item to a job, you can now choose from all designs that implement the Job Work Items interface (and which you have permission to create items for).

Support for Change Component Job Work Items is coming soon.

Edit JWIs and attach multiple images on Android 📷

Following on from last month, these two features are now available on Android in addition to iOS.

When creating a new job, you can now edit job work items as you add them. Previously, you had to finish creating the job, edit the job, and then enter values for the job work items you added.

When attaching images to an item, you can now select up to five images at once to upload them all in one go.

Street Manager v4 Support 🚧

Overview

For those of you using Alloy to interact with the government's Street Manager service, an important transition is coming up.

In May 2022, the Department of Transport released v4.0 of the Street Manager API. Since then, they've continued to maintain endpoints for both v3 and v4.

While v3 isn't being decommissioned until May/June 2023, the legislative changes in v4 will come into force on 1st April 2023, effectively compelling all users to make the switch.

Therefore, we're updating Alloy to support the current v4.15 specification ahead of this deadline.

Who will be affected

This change will affect anyone using Alloy Web or Alloy Mobile to interact with the Street Manager service.

Details

Fortunately, there are only a few changes to learn about!

New permit conditions

  • NCT09d - Changes to traffic management arrangements APPLIES TO ALL MAJOR PERMITS on Category 0, 1, and 2 streets only.
  • NCT03 – Activities ancillary to those permitted – supplementary information.

For more detail, see the Statutory guidance for highway authorities.

New Traffic Management type

A new TM Carriageway Restriction Type will be available: Temporary obstruction 15 minute delay.

Footpath Closure

A new Foothpath Closure attribute will be mandatory for all permit requests.

Emergency Contact Name and Number

New Emergency Contact Name and Emergency Contact Number attributes will be optional for most permit requests, unless the chosen Traffic Management type is Multi Way Signals or Two Way Signals.

Expected Release

30th March 2023 as part of the Alloy v2.45 release.

Alloy February 2023 Update

We've got more good stuff for you this month, including several quality-of-life improvements that are simple yet effective. The update took place during the evening of the 23rd February. For a full list of changes in v2.44, please visit the Alloy Changelog.

Read all about it

Sometimes, you want to store lots of text within a Text attribute, e.g. a description of a job, notes about an asset's condition.

By default, Text attributes are displayed as a single line. However, you can change this by editing a design's stencil and enabling the Multiline property of the attribute's control. This lets you see up to 12 lines of the attribute's text.

Previously, any text longer than 300 characters would appear truncated. While you can display the full text in a tooltip by hovering your mouse over it, this is tricky for touchscreen users.

Therefore, we've added a discreet Show More button below the last line.

Select it to display the full text in its own window.

See where attributes come from

When viewing the results of a Join query in the Data Explorer, the columns display attributes from the queried design/interface, along with attributes from one or more linked designs/interfaces.

Previously, it wasn't clear which attributes came from which design/interface, especially when viewing attributes with identical names (e.g. Title, Subtitle).

Therefore, the column header of a linked attribute now displays the design/interface it comes from, providing a clearer picture of the data in front of you.

Isolate work to specific contractors

If you employ multiple contractors, you don't want them seeing every job work item in your system, as these often contain sensitive information, e.g. how much you pay another contractor!

No problem, you can now create custom job work item types, and make each one apply to a specific contractor only.

It's simple – just create a new design that implements the Job Work Items interface, so it inherits all the necessary attributes.

You can then configure the permissions of your new design accordingly, so that only the appropriate contractor has read/write access to it.

When configuring a job in the Job Work Unit Editor, your new design will now be selectable.

However, when the job is viewed, each contractor will only see the job work items of the design that applies to them.

Customise search settings in the Job Work Unit Editor

When choosing work items in the Job Work Unit Editor, you can now customise the search settings in the same way as standard item pickers.

Remember, search settings apply per design/interface, so customising them here will affect how items of the Work Items interface are listed throughout Alloy.

Edit job work items as you add them on iOS

When creating a job in Alloy Mobile iOS, you can specify one or more job work items to represent the work to be done.

Previously, you could add the job work items, but couldn't edit their values until you'd finished creating the job and then gone back to edit it.

Now, selecting the Job Work Items field will open the new Job Work Item Editor, where you can select from a list of available work items and then edit their values before proceeding to create the job.

This feature will arrive on Android next month.

Attach multiple photos at once on iOS

When viewing an item's details in Alloy Mobile iOS, you can upload one or more file attachments directly to it.

If you choose to Add from photos, you can now select up to five photos simultaneously and attach them all in one go. Nice!

Admins can disable users

Admins can now disable user accounts in Alloy Web. This prevents a user from logging into Alloy on any platform without deleting their account, in case it needs to be re-enabled in future.

Alloy January 2023 Update

We're starting the year off with a modest update. Nothing too crazy, just a few useful improvements to make your experience better 😊 (especially on Android). The update took place during the evening of the 26th January. For a full list of changes in v2.43, please visit the Alloy Changelog.

Extend Blueprinted Designs/Interfaces with Custom Interfaces

In September, we announced the introduction of custom interfaces. For the first time, it was possible to create a new interface that one or more designs could implement, providing a way to share a single set of generic attributes across multiple custom designs.

For technical reasons, it wasn't originally possible for a blueprinted design/interface to implement a custom interface. But not anymore!

Now, a custom interface can be implemented by any design/interface, regardless of whether its Context is Core, Module or Customer.

This fully unlocks the possibilities of custom interfaces, as they can now be used to extend the hundreds of ready-made designs/interfaces available in Alloy.

Bulk Invoice Workflows

For customers with the Financial Accounts module installed, this will be a welcome announcement!

A new module is available containing two manual workflows, which can automatically generate invoices for a list of Customer Accounts or Supplier Accounts.

For each account, the workflow will find all the related job work units that have their Invoicing status set to Ready and process them all into a single Account Invoice item for that account.

The resulting Account Invoices will be left with their Status set to Draft, giving you the opportunity to double-check everything and make any changes before progressing them to Issued.

We know that some of you need to process hundreds of invoices at a time, so these new workflows will save you a lot of time and effort! If you'd like the new module to be enabled for your Alloy customer project, please contact Support.

See Nearby Items when Editing Geometry on Alloy Mobile

Previously, when creating geometry for a new item (or editing the geometry of an existing item), the map area would appear empty.

Even with the Satellite basemap enabled, being unable to see the position and shape of nearby objects could sometimes make plotting the new geometry a bit tricky.

The items on your map now remain visible when editing geometry, making it easier to draw points or polygons accurately in relation to nearby items.

The items shown respect the layer configuration of the main map and the Search Here button can be used to refresh the current view.

Multiple Improvements on Android

Alloy Mobile has received special attention on Android this month, incorporating several changes that were recently implemented for iOS.

Item Forms on Android

If a custom item form exists for a design/interface, it will now be displayed to Android users when they create or edit a corresponding item. Users will only see the attributes that the item form has controls for, listed in the order defined by the item form.

Otherwise, the standard item form will be displayed. Users will see all the design/interface's attributes, listed in chronological order.

Prevent Locked Items Being Edited on Android

In Alloy Web, items can be locked to prevent them being edited. This can be done manually via the action bar or automatically via a workflow.

When locked items get synced to Alloy Mobile Android, they now display a visual indication of their locked status if you try to edit them. Users can no longer edit the locked item’s attributes or add/remove any items associated with it (e.g. attachments, job work items, related tasks).

Read-only View of Link Attributes on Android

When an item has a Link attribute that references multiple items (e.g. a job with multiple job work items), it shows as “X selected” when viewing the item's details in Alloy Mobile Android.

Tapping this now always displays the list of referenced items, even if the attribute is set to Read-only, or your user account has Read-only permission to the attribute.

Show Previous EntriesShow Previous Entries