Binding Function |
RFDDTAG |
|
Binding ID |
DYNAMIC_TAG_LIST |
|
Binding Description |
Dynamic Content List of Tags |
|
Purpose |
This binding will allow a user to configure an event payload that posts data to a specified HTTP/HTTPS endpoint using a number of supplied XSL style sheets to format the data into XML. This will enable a TagNet customer to send data to an endpoint without requiring any code changes to TagNet. Essentially this is a non-programmatic method to send a configurable XML payload to an HTTP endpoint. This data would then be parsed by the customers application and integrated with an ERP, MES or other similar system-of-record.
There are two variants of the RFDDTAG Binding: 1.Individual tag Info - for every tag seen during the read event cycle, a separate XML payload will be sent to the endpoint, so if (4) tags are read then (4) XML POSTs will take place. This variant is documented here. 2.Multiple Tag List - the taglist XML contains all tags within the event cycle. So if (4) tags are read then (1) XML POST will take place. This variant is documented within this topic.
The Style Sheets should be copied out of TagNet/Integrator/JSMInstance/RFID/ folder into a user defined folder (e.g. Custom-xsl) within the as they will be overwritten upon subsequent updates to TagNet. The folder path for the modified style sheets would then be TagNet/Integrator/JSMInstance/Custom-xsl
|
|
Logic |
Collects whatever tags are seen during a read event cycle from a given portal and performs the following logic: üResolves each tag to its mapped object attributes (Product, Asset, or Person) and pushes them in real time to the PEV display Client. üProcesses IMOVE rules is so specified in Binding properties and automatically transfers inventory from location A to Location B. Sends out email if IMOVE has [EMAIL] keyword anywhere in description. üSupports full GPIO script as a result of standard MATCH / NOMATCH/ NOTAG variables. üTriggers Camera support if so configured in the Physical Reader profile üSupports all Filter keywords (including *RSSI, *PRODTYPE, *ANTENNA) üSupports Binding Email Exceptions. Email notification is sent when an error is encountered. üSends out Tag Event data as listed below via an HTTP post to the user defined endpoint ❖Read Point attributes (Logical/Physical reader, antenna, RSSI, timestamp, etc.) ❖Base Item attributes ❖Asset attributes ❖Tag Mapping attributes ❖Tag Inventory attributes ❖UDA's (both Asset and Tag Inventory via UDA Group) ❖Parent/Child attributes ❖Employee attributes üThe chart below shows what attributes are sent in the XML payload üCan be used in RSSI zone configurations and supports system logging. üCombines features from RFDPEVG and RFDPOST üCan be run synchronously as an event binding or in Batch functions.
|
|
Restrictions |
|
|
Comments |
A video tutorial of setting up this binding is accessible from this link This binding can be tested with the EF Dynamic Tag Event test utility |
|
Files Updated |
RFDTAGVS |
|
Program Name |
URI set to RFDDTAG |
|
Binding Setup |
||
Binding Properties |
Email Notification |
|
The email address to send binding specific alerts. Note: This overrides the default SMTP Recipient value under System Settings |
|
|
UDA Grouping |
|
UDA's at both the Asset instance level and Tag Inventory level instance can be included in the Dynamic XML by grouping them in a UDA Group Name |
|
|
Dwell Time |
|
Dwell time prevents the tag from being included in the web service request when seen again at the same gate when vehicle dwells there. Refer to the the Binding Change for detailed explanations of this directive. |
|
|
IMOVE Rules |
|
These directives specify the name and location of the XML. Refer to the the Binding Change for detailed explanations of each directive. |
|
|
Data Layout & Style Sheets |
|
This section specifies the content type (XML today with JSON in future), the Data layout, and the style sheet names that have been edited to included your specific attributes. Note that these style sheets are for the individual tag transaction payloads as denoted by the *TAGLIST Data Layout selection. |
|
|
Binding Properties
Shown below are the required binding properties and descriptions that should be included in the event:
Field |
Status |
Description |
Sample Data |
Ip Address |
Existing |
The endpoint IP |
https://myapp.com |
URI |
Existing |
The binding name and endpoint url |
RFDXSL-/rfidendpoint |
Email Recipient |
Existing |
Will send error emails to this address |
user@myapp.com |
UDA Grouping |
Existing |
Allows the user to define UDA attributes to send |
PART_GROUP |
Dwell |
Existing |
The dwell time in minutes |
1 |
Dwell Option |
Existing |
LOCATION or GLOBAL |
GLOBAL |
IMOVE Rules |
Existing |
YES/NO/RESULTSET if IMOVE rules are enabled |
YES |
Move Children |
Existing |
YES/NO if child tags are moved |
NO |
Log Result Set |
Existing |
YES/NO if result set enabled |
NO |
Content Type |
New |
Specifies the HTTP POST content type |
Application/xml |
XSL Location |
New |
The location of the XSL file |
C:\TagNet\rfid.xsl |
XSL UDA Location |
New |
The location of the UDA XSL file |
C:\TagNet\uda.xsl |
Data Fields
Field |
Description |
LocationID |
Logical Reader Name |
ReaderID |
Physical Reader Name |
Antenna |
Antenna Name |
RSSI |
RSSI Value (if enabled) |
Binding |
The name of binding executed |
RFDTGMAP |
All tag mapping fields from RFDTGMAP for the tag scanned |
UCCRCIM |
All Product Master fields for the item linked with the tag |
RFDASSM |
All Asset data linked with the tag |
RFDLOCIN |
All Location data linked with the tag |
RFDLOCEX |
UDAs based on the groupings |
RFDASSEX |
UDAs based on the groupings |
RFDLOCIA |
Any child tags |
RFDPHLOG |
Additional log data (sequence, timestamps, etc.) |
Shown below are the configuration Style Sheets and resulting XML transaction sets:
Group |
|
dynamic-taglist.xsl |
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" exclude-result-prefixes="rdml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdml="http://www.lansa.com/2000/XML/Function" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes" xalan:indent-amount="4"/>
<xsl:template match="/">
<TagNotification>
<EventBindingID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDREQBND']/@value"/></EventBindingID> <LocationID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDREQLOC']/@value"/></LocationID> <ScheduleDate><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDREQDAT']/@value"/></ScheduleDate> <ScheduleTime><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDREQTIM']/@value"/></ScheduleTime> <EventCycle><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDREQCYC']/@value"/></EventCycle>
<Tags> <rdml:fragment name="TAGLISTDETAILS" /> </Tags>
</TagNotification>
</xsl:template>
</xsl:transform>
|
dynamic-taglist- details.xsl |
<xsl:transform version="1.0" exclude-result-prefixes="rdml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdml="http://www.lansa.com/2000/XML/Function" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes" xalan:indent-amount="4"/>
<xsl:template match="/">
<Tag>
<TagID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLTGHX']/@value"/></TagID> <ReaderID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLRDID']/@value"/></ReaderID> <SequenceNumber><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLTGSQ']/@value"/></SequenceNumber> <TagLogDate><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLTGDT']/@value"/></TagLogDate> <TagLogTime><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLTGTM']/@value"/></TagLogTime> <Antenna><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLTANT']/@value"/></Antenna> <RSSI><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDPLRSSI']/@value"/></RSSI>
<Object><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDTGOBJT']/@value"/></Object> <ContainerID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDBINID']/@value"/></ContainerID> <ContainerMapDate><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDBINDTE']/@value"/></ContainerMapDate> <ContainerMapTime><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDBINTME']/@value"/></ContainerMapTime> <ItemMapDate><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDITMDTE']/@value"/></ItemMapDate> <ItemMapTime><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDITMTME']/@value"/></ItemMapTime>
<AssetID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDASSTID']/@value"/></AssetID> <SerialNumber><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDASSRLN']/@value"/></SerialNumber> <DatePurchased><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDASPRDT']/@value"/></DatePurchased> <Value><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDASPVAL']/@value"/></Value> <CheckoutDuration><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDASCDUR']/@value"/></CheckoutDuration> <Comment><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDASTEXT']/@value"/></Comment>
<Item><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDIID']/@value"/></Item> <PartID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='UCCERPITM']/@value"/></PartID> <Category><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='UCCITMCCD']/@value"/></Category> <ItemName><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='UCCITMNAM']/@value"/></ItemName> <BrandName><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='UCCITMBRN']/@value"/></BrandName> <Description><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='UCCITMDSC']/@value"/></Description> <Image><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='UCCCRTIDN']/@value"/></Image>
<EmployeeID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPUID']/@value"/></EmployeeID> <EmployeeBadgeNumber><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPBDG']/@value"/></EmployeeBadgeNumber> <LastName><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPLNM']/@value"/></LastName> <FirstName><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPFNM']/@value"/></FirstName> <Company><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPCMP']/@value"/></Company> <Trade><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPTRD']/@value"/></Trade> <EmployeeImage><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDEMPIMG']/@value"/></EmployeeImage>
<InventoryType><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDINVCCD']/@value"/></InventoryType> <Quantity><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLOCQTY']/@value"/></Quantity> <Level1><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLVL1ID']/@value"/></Level1> <Level2><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLVL2ID']/@value"/></Level2> <Level3><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLVL3ID']/@value"/></Level3> <Level4><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLVL4ID']/@value"/></Level4> <Level5><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLVL5ID']/@value"/></Level5> <LotNumber><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLOCLOT']/@value"/></LotNumber> <LotStatus><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDLTCODE']/@value"/></LotStatus>
<Attributes> <rdml:fragment name="TAGLISTATTRIBUTES" /> </Attributes>
<Children> <rdml:fragment name="TAGLISTCHILDREN" /> </Children>
</Tag>
</xsl:template>
</xsl:transform> |
dynamic-taglist- attributes.xsl |
<xsl:transform version="1.0" exclude-result-prefixes="rdml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdml="http://www.lansa.com/2000/XML/Function" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" xalan:indent-amount="4"/>
<xsl:template match="/">
<Element Value="{/rdml:function/rdml:fields/rdml:field[@name='RFDEUXVAL']/@value}" Description="{/rdml:function/rdml:fields/rdml:field[@name='RFDEUDESC']/@value}" Name="{/rdml:function/rdml:fields/rdml:field[@name='RFDEUELEM']/@value}"/>
</xsl:template>
</xsl:transform> |
dynamic-taglist- children.xsl |
<xsl:transform version="1.0" exclude-result-prefixes="rdml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rdml="http://www.lansa.com/2000/XML/Function" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" xalan:indent-amount="4"/>
<xsl:template match="/">
<ChildTagID><xsl:value-of select="/rdml:function/rdml:fields/rdml:field[@name='RFDIACHID']/@value"/></ChildTagID>
</xsl:template>
</xsl:transform> |
Generated XML sent to HTTP endpoint
Action |
|
Multi-tag list XML |
<?xml version="1.0" encoding="UTF-8"?>
<TagNotification>
<EventBindingID>DYNAMIC_TAG_LIST</EventBindingID> <LocationID>SERVICE-GROUP</LocationID> <ReaderID>NEW-RDR</ReaderID> <ScheduleDate>20190624</ScheduleDate> <ScheduleTime>103204</ScheduleTime> <EventCycle>56</EventCycle>
<Tags>
<Tag> <TagID>26C000000000000000000022</TagID> <SequenceNumber>1</SequenceNumber> <TagLogDate>20190624</TagLogDate> <TagLogTime>103703</TagLogTime> <Antenna>1</Antenna> <RSSI>-35.66</RSSI>
<Object>ASSET</Object> <ContainerID>GROUPID</ContainerID> <ContainerMapDate>20121130</ContainerMapDate> <ContainerMapTime>140500</ContainerMapTime> <ItemMapDate>20121130</ItemMapDate> <ItemMapTime>140500</ItemMapTime>
<AssetID>800406</AssetID> <SerialNumber>EV83792U789</SerialNumber> <DatePurchased>20070913</DatePurchased> <Value>50.00</Value> <CheckoutDuration>0</CheckoutDuration> <Comment>IT Dept</Comment>
<Item>170000</Item> <PartID>C472E62A</PartID> <ItemName>Hand Drill</ItemName> <BrandName>Dewalt</BrandName> <Description>18 V Drill, with re-chargeable battery</Description> <Image>drill.jpg</Image>
<EmployeeID>0</EmployeeID> <EmployeeBadgeNumber/> <LastName/> <FirstName/> <Company/> <Trade/>
<InventoryType>ASSET TRACKING</InventoryType> <Quantity>1.00</Quantity> <Level1>LOCKER</Level1> <Level2>CAB1</Level2> <Level3/> <Level4/> <Level5/> <LotNumber/> <LotStatus/>
<Attributes> <Element Name="ASSET_OWNER" Description="Asset Owner" Value="IT"/> </Attributes>
<Children> <ChildTagID>2F120353130353100000000A</ChildTagID> <ChildTagID>2F120353130353100000000B</ChildTagID> </Children> </Tag>
<Tag> <TagID>26C000000000000000000023</TagID> <SequenceNumber>2</SequenceNumber> <TagLogDate>20190624</TagLogDate> <TagLogTime>103703</TagLogTime> <Antenna>2</Antenna> <RSSI>-45.12</RSSI>
<Object>ASSET</Object> <ContainerID/> <ContainerMapDate/> <ContainerMapTime/> <ItemMapDate>20121203</ItemMapDate> <ItemMapTime>112500</ItemMapTime>
<AssetID>712165</AssetID> <SerialNumber>CV83792Z412</SerialNumber> <DatePurchased>20061025</DatePurchased> <Value>324.00</Value> <CheckoutDuration>0</CheckoutDuration> <Comment>Accounting Dept</Comment>
<Item>170010</Item> <PartID>A224F12B</PartID> <ItemName>Color Printer</ItemName> <BrandName>HP</BrandName> <Description>HP Laserjet Color Printer</Description> <Image>hp_m200.jpg</Image>
<EmployeeID>0</EmployeeID> <EmployeeBadgeNumber/> <LastName/> <FirstName/> <Company/> <Trade/>
<InventoryType>ASSET TRACKING</InventoryType> <Quantity>1.00</Quantity> <Level1>DEPT20</Level1> <Level2>ROOM12</Level2> <Level3/> <Level4/> <Level5/> <LotNumber/> <LotStatus/>
<Attributes> <Element Name="ASSET_OWNER" Description="Asset Owner" Value="Accounting"/> </Attributes>
<Children/> </Tag>
</Tags>
</TagNotification> |
XML Response |
Endpoint sends back an HTTP 200 response |
Copyright © 2024 Stratum Global, Inc.