With planning boards, you often need a quick overview of jobs, tasks, or resources. It helps to sort the entries in the table part. In the past releases of our Visual Scheduling Add-in Developer Toolbox (short VSADT), we have already introduced the strong re-sorting function via drag&drop. Now we have worked further on this topic. Check out what's new in version 6.4 of our toolbox with AL API you can use for developing your own scheduler in Business Central.
Extended support for sorting the table
The ability to process sort codes for ordering the table rows is a strong feature of VSADT, especially in conjunction with interactive row drag & drop. Now there is another way to sort rows interactively. If you set the new option InteractiveSwitchingOfSortOrderEnabled to true, the user can re-sort the rows by clicking or tapping on a cell in the table title.
With each click, the sorting mode changes, and the rows are sorted according to the values of the cells in the respective column. There are three sorting modes: none, ascending, and descending, which are traversed in a cyclic order:
If the unsorted order is not desired, then the sorting mode none can be skipped by the option RowSortModeNoneEnabledOnInteractiveSwitchingOfSortOrder.
To inform the application about the user’s interaction, the callback OnRowSortingChangeRequested will be triggered each time the user clicks or taps on a table title cell. This gives the application the opportunity to react to the interaction, such as updating the business logic data or even canceling the requested change.
To visualize the current mode, the option SortingIndicatorVisible must be set to true. A small icon in the title cell indicates whether the rows are sorted by the values in the associated column, and if so, whether they are sorted up or down:
Asynchronous rendering for improved user experience
Depending on various parameters, such as the number of rows, the size of the time range to be displayed, the complexity of the bar design, etc., the user may find it annoying to interact with the chart as the number of data grows. In particular, vertical scrolling or zooming in and out of the time area may respond only slowly.
To improve the user experience by making the VSADT more responsive, the two new options AsynchronousRendering and AsynchronousInteractiveTimeAreaStretching have been added to speed up the visualization by asynchronous processing.
In both cases, the chart will draw the content of the time area only, when there is enough time to draw the bars, but at the latest when the user has finished the interaction. If there is a delay in drawing details, the VSADT shows only a rough sketch of the bars (only when AsynchronousInteractiveTimeAreaStretching has been set) and a stripey background to alert the user that the drawing is not yet complete.
Figure: asynchronous rendering when scrolling vertically
Figure: asynchronous interactive time area stretching
Context menu on the timescale
Regarding the possibility to let context menus appear, the timescale was still a blank spot. Now the context menu referenced by the setting TimescaleContextMenuID is shown when the user clicks the secondary button of the mouse or presses the finger on the timescale.
Enhancements to the tooltips
Since it has been possible for some time to explicitly define links not only between activities but also between allocations, we have extended the TooltipTemplate object by the additional keywords >SourceAllocation and >TargetAllocation.
More flexibility in the calculation of common non-working time
The ability to suppress non-working times in the chart is a powerful feature to focus on what is really of interest. VSADT regards for this purpose the calendars of all rows in the chart and calculates those non-working time ranges that are common to all calendars. These ranges can then be hidden.
However, this approach turns out to be disadvantageous as soon as additional calendars are taken into account, or calendars are to be ignored. For example, let's say we haven't loaded all the resources into the resource view yet (keyword "lazy loading"), but we want to hide the non-working times, also considering the calendars of the resources that will be loaded later.
An analogous problem occurs when certain calendars are to be ignored. This could be the case, for example, if you have a machine that is available 24/7. The calendar of such a resource would prevent non-working times from collapsing at all.
In both cases, the new option NonWorkingTimesCalendarIDs helps to solve these problems. This option allows you to specify which calendars should be included in the calculation.
Download new version
Features in previous releases