Implementing Hold States
This feature will track the time an inventoried tag spends in user defined 'Hold' states throughout its life cycle. This is in addition to the standard Inventory management capabilities already in TagNet. A hold state is a code defined at the location level and essentially tracks the dwell time a given tag spends in multiple locations representing that state. Examples of hold state would be Freezer time (e.g. 'F'), Refrigerated or Chiller time (e.g. 'R'), Ambient time (e.g. 'A'), or Printed time (e.g. 'P').
To implement this feature a number of configuration steps are required. Shown below is the workflow to implement:
1.Within your location matrix setup, associate the last level with whatever hold state they represent as detailed below in Step #1
2.Create your Item/Part #'s that you wish to track in the TagNet Product Master.
3.Create your Base Item Hold state rules here.
4.Enable the Hold State feature in the TagNet Extension Framework as shown below in Step #4.
5.Setup your desired Reader Management configuration as described here. Use the RFDDTAG binding that sends the event payload to an EF endpoint that performs the business logic. This can be used whether the reader is server managed or via the SRC
6.Install this trigger script hold-state-import-trigger.sql. This populates the [TagHoldState] table when new tags are commissioned (NEW_RCPT) or Imported (ADJ_IMPORT).
7.Finally, setup your Hold State reporting, this can be done via the TagNet BI tool or by utilizing your own reporting method. Shown here are examples of reports that can be accomplished from the TagNet database.
When tags are first commissioned by means of an import sheet, a trigger is fired to initialize the [TagHoldState] table. When printing tags through BarTender Labelware, the embedded scripts will take care of this initialization by firing the same trigger. An alert is generated with the cumulative time if any given state exceeds the threshold formula. When that happens a Tag Level UDA event is created and an email alert is sent out (only once). Note that if that tag gets moved back to any location representing that state (e.g. 'F'), the alert will fire again as the tag has already exceeded the threshold formula previously.
When the subscribing system wishes to stop getting alerts (essentially stop tracking the tagged container), it can send a simple JSON payload with the TagID's in question via the URL shown below:
Stop Tracking URL
Content Type: application/json
Step #1. Associate Hold State codes within you Location Matrix
A location that is associated with a hold state should have the hold state value defined in the location description in Location Setup. The hold state is entered in the last location level and put in square brackets in the description field. The screenshot below shows an example of these hold states linked with different locations.
Step #4. Enable the Hold State Feature in the EF
Create a continuous Job Schedule to ProcessHoldStates and Enable it as shown below.
Check the [Send Error Alert Mails] checkbox for alerts and enable [Log Hold State] as shown below. This will log the inventory moves and state changes to the EF.TagHoldState table.
To receive email alerts, create an Email Group in the EF called HoldStateAlerts. Add specific Logical Readers or use the default wildcard of '-' as shown below. Add the Recipient email addresses as required.
Locate the hold-state-import-trigger.sql file in your TagNet Server folder (see below) and double click to execute. This will call it up in SSMS.
TagNet Inventory Inquiry Example with Hold State Counters and Alerts
Accumulated hold state times and alerts are logged here as Tag level UDA's and are automatically created for each container tag. The example below shows the total times the tagged item spent in hold states F, A, R, and P along with the time that an alert was sent for the F hold state. Total Hold Time values are represented as [days:hours:Minutes:Seconds]. The 'Last Hold State Update' UDA reflects when these values were last updated.
Copyright © 2022 Stratum Global, Inc.