Item Inquiry is the first production module to surface UHF RFID reads in Dragon Guard Handheld. An operator can point the scan gun at any tagged item and instantly see its warehouse identity — item number, description, stock status, and bin location — without typing a single character. The RFID path is fully additive: barcode search and manual text entry continue to work exactly as before, and the screen never blocks when RFID hardware is unavailable or a tag is unregistered.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/CodexaCP/DG_APK/llms.txt
Use this file to discover all available pages before exploring further.
Flow
Operator opens Item Inquiry and selects a scan mode
When the Item Inquiry screen loads, it calls If RFID is unavailable and
RfidHandheldContextService.GetContextAsync("item-inquiry") to retrieve the module’s RFID context (cached after the first fetch). The result drives which modes are offered in the mode picker:- Barcode — keyboard-wedge only. No RFID hardware is activated.
- RFID (
RfidSingleorRfidInventory) — UHF only; available whencontext.CanUseRfidistrue. - Hybrid — keyboard-wedge + UHF simultaneously; available when
context.CanUseRfidistrue.
CanOperateWithoutRfid is true, StartSessionAsync automatically downgrades to Barcode mode and fires ErrorOccurred with a non-blocking status message. The operator can continue working.IScanCaptureService.TagObserved fires with EPC
The RFID adapter emits a The The view model updates the UI with the operator feedback string “RFID EPC captured.” as soon as the event fires, before the resolve call completes.
TagObservedEventArgs containing a ScanResult for each distinct EPC the hardware reads. The view model subscribes to this event during initialization and unsubscribes when the page disappears.ScanResult delivered here has:ViewModel calls GET /api/rfid/tags/resolve/{epc}
The view model immediately calls the RFID tag resolve endpoint using the raw EPC from the event:The backend looks up the EPC in the RFID registry and returns an
RfidTagResolveDto:RfidTagResolveDto.ItemNo is the Dragon Guard item number associated with this EPC in the registry. It is a business key, not a derived value from the EPC itself. ItemId is the internal GUID for the registry record.EPC resolved — display item details
When
The operator feedback string changes to “RFID EPC resolved.”If
resolved.IsResolved is true, the view model populates the inquiry card with the fields from the resolve response:| Field | Displayed as |
|---|---|
ItemNo | Item number heading |
ItemDescription | Item name / description |
ObjectType | Tag object type (e.g. "ITEM", "BIN") |
Status | Registration status |
Quantity | Registered quantity |
LocationCode | Warehouse location (shown when non-empty) |
BinCode | Bin position (shown when non-empty) |
resolved.ItemNo is present, the view model proceeds to Step 5 to fetch the full stock summary.ItemNo present — fetch full stock summary
When the resolve response includes a non-empty This is the same call path used by barcode and manual search. The displayed stock summary (quantities by location, bin, lot, etc.) is identical regardless of how the item was identified.
ItemNo, the view model reuses the standard item inquiry endpoint to populate the stock summary list:Barcode and manual text search always use
GET /api/items/inquiry directly — they never go through the RFID resolve endpoint. The resolve path is exclusive to RFID and Hybrid mode tag events.EPC not registered — show controlled message
When the backend returns
IsResolved = false (the EPC exists as a read but has no registry entry), the view model shows the controlled message:EPC leido, pero aun no esta registrado como item.The operator feedback string is “RFID EPC not registered.” The inquiry form remains open and fully functional for barcode or manual lookup. No error state is set on the screen.
Operator Feedback Strings
The view model maps every outcome to a short status string displayed in the scan result area:| Situation | Feedback string |
|---|---|
| Barcode keyboard-wedge read | Barcode captured. |
| RFID tag seen by hardware | RFID EPC captured. |
| Backend resolved EPC to item | RFID EPC resolved. |
| EPC not in registry | RFID EPC not registered. |
| Network or API failure during resolve | RFID resolve failed. |
Graceful Degradation
The RFID path is designed to be a transparent enhancement, not a dependency. The following table shows how each failure scenario resolves without disabling the inquiry screen:| Failure | Behaviour |
|---|---|
CanUseRfid = false + CanOperateWithoutRfid = true | StartSessionAsync downgrades to Barcode mode, fires ErrorOccurred with a non-blocking message. Barcode and manual search work normally. |
CanUseRfid = false + CanOperateWithoutRfid = false | StartSessionAsync fires ErrorOccurred and does not start a session. Screen stays open; operator can retry or use a different mode. |
RfidHandheldContextService backend unreachable | Returns RfidHandheldContextDto.Fallback(module): CanUseRfid = false, CanOperateWithoutRfid = true. RFID is silently disabled; barcode/manual inquiry unaffected. |
GET /api/rfid/tags/resolve/{epc} transport failure | View model catches the exception, sets feedback to "RFID resolve failed.", does not change IsSessionActive. Operator can scan again or switch to barcode. |
IsResolved = false | Controlled message shown. No exception, no disabled state. |
RfidHandheldContextService Context Fields
The context fetched for the "item-inquiry" module is a RfidHandheldContextDto. The fields most relevant to Item Inquiry are:
RfidEffectivePolicyContextDto governs duplicate suppression and read limits during the session:
DuplicateReadWindowSeconds > 0 means the same EPC will not fire TagObserved again until the window has elapsed. This prevents the view model from issuing redundant resolve calls when the operator holds the trigger over a tag in inventory mode.
The context is fetched once and cached by RfidHandheldContextService. It remains valid for the lifetime of the operator’s session. Call ClearCache() if policy or device registration changes at runtime (e.g. after a settings sync).