warehouse app task validation framework
TRANSCRIPT
One
PREDICTABLE CONTINUOUS
2 major updates
PREDICTABLE CONTINUOUS
• Xamarin-based application
• Android and Windows 10
• Task Recorder not supported • No RSAT
• Warehouse App Task Validation Framework
• Enables RSAT + Warehouse Mobile
• New UI in Dynamics 365 • RSAT can control warehouse flows
WHS App Architecture XML-based custom service
WHS App Architecture XML-based custom service
• XML-based custom service• XML in
• XML out
XML InputControls with data
<?xml version="1.0" encoding="UTF-8"?><ParentNode>
<Controls PagePattern="Default" PageTitle="Sales Picking"><Control controlType="label" name="Scan" label="Scan a work ID / license plate ID" newLine="1" data="" type="Undefined" length="-1" error="0" defaultButton="0" enabled="1"
selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="SubHeaderArea" PreferredInputMode="" PreferredInputType="" DisplayPriority="0" DisplaySubPriority="0"DataSequence="3" AttachedTo="" InstructionControl="" Footer1="" Footer2="" InputType="16806" />
<Control controlType="text" name="WHSWorkLicensePlateId" label="ID" newLine="1" data="USMF-000243" type="String" length="25" error="0" defaultButton="0" enabled="1"selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="PrimaryInputArea" PreferredInputMode="Scanning" PreferredInputType="Alpha" DisplayPriority="50"DisplaySubPriority="20" DataSequence="4" AttachedTo="" InstructionControl="" Footer1="" Footer2="" InputType="2694" />
<Control controlType="button" name="OK" label="OK" newLine="1" data="1" type="Undefined" length="-1" error="0" defaultButton="1" enabled="1" selected=""color="#000000" Status="1" NumDecimals="-1" DisplayArea="PrimaryActionArea" PreferredInputMode="" PreferredInputType="" DisplayPriority="0" DisplaySubPriority="0"DataSequence="5" AttachedTo="" InstructionControl="" Footer1="" Footer2="" InputType="16806" />
<Control controlType="button" name="Cancel" label="Cancel" newLine="1" data="" type="Undefined" length="-1" error="0" defaultButton="0" enabled="1" selected=""color="#000000" Status="1" NumDecimals="-1" DisplayArea="" PreferredInputMode="" PreferredInputType="" DisplayPriority="0" DisplaySubPriority="0" DataSequence="6"AttachedTo="" InstructionControl="" Footer1="" Footer2="" InputType="16806" />
</Controls><Auth userId="24" sessionId="{0B68B628-3B6C-453C-A889-C8D446CEE73F}" /><UserCulture>en-us</UserCulture><UserDateCulture>en-us</UserDateCulture><Device DeviceId="052d8897-fa4b-4fa2-a986-da449119db1e" /><ServerActivity ServerActivityId="{41F320CE-C4E4-0007-07A1-F941E4C4D401}" />
</ParentNode>
XML OutputResults of server processing
<?xml version="1.0" encoding="UTF-8"?><ParentNode><Controls PagePattern="Default" PageTitle="Sales Picking" ImageInfo="usmf|Product|ItemId:A0001">
<Control controlType="label" name="Pick" label="Sales orders : Pick" newLine="1" data="" type="Undefined" length="-1" error="0"defaultButton="0" enabled="1" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="SubHeaderArea" PreferredInputMode=""PreferredInputType="" DisplayPriority="0" DisplaySubPriority="0" DataSequence="3" AttachedTo="" InstructionControl="" Footer1="" Footer2=""InputType="16806" />
<Control controlType="text" name="WMSLocationId" label="Loc" newLine="1" data="FL-001" type="String" length="10" error="0" defaultButton="0"enabled="0" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="InfoAndSecondaryInputArea" PreferredInputMode="Scanning"PreferredInputType="Alpha" DisplayPriority="50" DisplaySubPriority="10" DataSequence="4" AttachedTo="" InstructionControl="" Footer1="" Footer2=""InputType="5472" />
<Control controlType="text" name="LicensePlateId" label="LP" newLine="1" data="" type="String" length="25" error="0" defaultButton="0"enabled="1" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="PrimaryInputArea" PreferredInputMode="Scanning"PreferredInputType="Alpha" DisplayPriority="50" DisplaySubPriority="20" DataSequence="5" AttachedTo="" InstructionControl="" Footer1="" Footer2=""InputType="2694" />
<Control controlType="text" name="ItemId" label="Item" newLine="1" data="A0001" type="String" length="80" error="0" defaultButton="0"enabled="0" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="InfoAndSecondaryInputArea" PreferredInputMode=""PreferredInputType="" DisplayPriority="0" DisplaySubPriority="0" DataSequence="6" AttachedTo="" InstructionControl="" Footer1="" Footer2=""InputType="1291" />
<Control controlType="label" name="RFQtyLabel" label="Qty: 1 pcs ; 1 Pcs" newLine="1" data="" type="Undefined" length="-1" error="0"defaultButton="0" enabled="1" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="InfoAndSecondaryInputArea"PreferredInputMode="Scanning" PreferredInputType="Alpha" DisplayPriority="10" DisplaySubPriority="40" DataSequence="7" AttachedTo=""InstructionControl="" Footer1="" Footer2="" InputType="18263" />
<Control controlType="label" name="RFDescription1" label=" HDMI 6' Cables" newLine="1" data="" type="Undefined" length="-1" error="0"defaultButton="0" enabled="0" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="InfoAndSecondaryInputArea"PreferredInputMode="Scanning" PreferredInputType="Alpha" DisplayPriority="30" DisplaySubPriority="10" DataSequence="8" AttachedTo=""InstructionControl="" Footer1="" Footer2="" InputType="17017" />
WHS App Task Validator2 components
• XML Recorder
• XML Playback• RSAT consumable
XML Recorder
XML Playback
Dynamics 365
Finance & Operations
Lifecycle Services
• Authoring
• Playback
Azure Dev Ops
BPM
DevOps
Project
Test Client
• Admin
• ExcelTask RecorderRSAT
Dynamics 365
Finance & Operations
Lifecycle Services
• Authoring
• Playback
Azure Dev Ops
BPM
DevOps
Project
Test Client
• Admin
• ExcelTask RecorderRSAT
Dynamics 365
Warehousing App
App Task Validation
Introduction to the UI
Introduction to the UI
Tasks to test
• Top level business processes to validate
• Description and Worker User ID required
• Start recording: Clears previously recorded steps (if any) and resets user session.
• Starts XML Recorder component
• Run task: Launches the playback screen
• View task history: Previous run data
Recorded steps
• All activities (for selected user) in warehouse mobile app are saved.
• Input XML (Mobile App -> AOS)
• Output XML (AOS -> Mobile App)
• XML can be viewed (and modified) via “View XML”
Recorded steps – Validation Strategy
• No Validation: Step will be skipped
• Full XML Validation: Exact Output XML must match
• Data Value (recommended): Specific data validated based on user-defined rules
Task input data
• Replacement variables
• Control names from WHS app XML• Use variable for control data
• RSAT can replace values
Task input data
• Replacement variables
• Special case – override default mapping
• @VariableName
• Will use variable instead of normal task input data variable
• Must edit the XML
• Variable type• User-Set• Server-Set <Control controlType="text" name="LicensePlateId"
label="LP" newLine="1" data="@TargetLicensePlateIdVar"type="String" length="25" error="0" defaultButton="0" enabled="0" selected="" color="#000000" Status="1" NumDecimals="-1" DisplayArea="InfoAndSecondaryInputArea" PreferredInputMode="Scanning" PreferredInputType="Alpha" DisplayPriority="50" DisplaySubPriority="20" DataSequence="5" AttachedTo="" InstructionControl="" Footer1="" Footer2="" InputType="2694" />
Task input data
• Generate Variables• Try to create variables for all steps
• Note: modifies XML
Validation Rules
• Data Value validation
• Create a set of validation rules
• Based on control data from mobile app
Validation Rules
• Data Value validation
• Create a set of validation rules
• Based on control data from mobile app
• All controls from Output XML are listed• Can validate existence/value
Validation Rules
• Data Value validation
• Create a set of validation rules
• Based on control data from mobile app
• All controls from Output XML are listed• Can validate existence/value
• Current validation rules• Exists, Not exists
• Equality
• Greater/Less than
Validation Rules
• Data Value validation
• Create a set of validation rules
• Based on control data from mobile app
• All controls from Output XML are listed• Can validate existence/value
• Current validation rules• Exists, Not exists• Equality• Greater/Less than
• Data value• String or @VariableName
Recording a task
• XML Recorder
• Clears user session
• Warning: Clears recorded steps and validation rules
Recording a task
• Each server transaction is recorded• Input XML (Mobile App -> AOS)
• Output XML (AOS -> Mobile App)
• Validation is based on output from server
• Description defaulted (can be changed)
• Validation Strategy defaulted to None
Playing a task
• Launches playback page
• Builds XML w/replacement variables • Can review in playback page
Playing a task
• Run test to start playback
• Monitor success/failure
• Validation messages
RSAT Integration
• Create new Task Recorder recording
• Navigate to Warehouse app task validation page
• Filter task to specific task
• Filter variables to specific ones to set
• Run task
RSAT Integration
• LCS -> BPM -> Azure Dev Ops -> RSAT
• Can execute tests from RSAT
• Utilize Excel parameter file
RSAT Integration
• LCS -> BPM -> Azure Dev Ops -> RSAT
• Can execute tests from RSAT
• Utilize Excel parameter file
• Can contain random values (TargetLP)
• Can reference global RSAT variables (Work ID)
• Can chain together tests into test suites
Dynamics 365
Finance & Operations
Lifecycle Services
• Authoring
• Playback
Azure Dev Ops
BPM
DevOps
Project
Test Client
• Admin
• ExcelTask RecorderRSAT
Dynamics 365
Warehousing App
App Task Validation
Data Management
• 4 data entities
• Can move tests between environments
• WHSWarehouseAppTaskValidator*
Versions
• 10.0.5• KB 4517769
• 10.0.6+
• Note: Non-production only.
Common Issues
• Generate Variables• Use with caution
• “Unexpected difference between request and session data” error• XML out of sync – usually means not enough validation and expected state
has “drifted”
• WHSWorkUserSessionRequestValidator:: assertAgainstSessionState
• Multiple recordings active• Will appear to not record anything