Please read this two links: Prompt compatibility for Smart Devices and HowTo: Create a User Prompt from scratch in Smart Devices
Many times we need to select a value in a Work With List Node from a Panel object or a Work With for Smart Devices.
This article explains how to call a prompt from a Panel object to return a value selected from a list of data.
In this case, the prompt will be created from a List generated by the Work With pattern and Work With object associated to a Transaction.
To do so, follow the steps below or check this video
Create a Transaction and apply the WWSD to it. The List associated with the Transaction will be used as a prompt to select the values.
In this case, the Category Transaction is created:
And the WWSD is applied to generate the List:
Create a Panel for Smart Devices (it can also be a Work With for Smart Devices) with the following layout:
Create the following events in the Panel for Smart Devices:
Event 'Prompt'
Composite
WorkWithDevicesCategory.Category.List()
SDActions.Refresh()
EndComposite
EndEvent
Event Refresh
&Context.FromXml(&Session.Get("category"))
&CategoryId = &Context.CategoryId
&CategoryName = &Context.CategoryName
EndEvent
&Context is a variable based on Context SDT, defined as fillow:
With the Prompt button the Category List is invoked in order to select a value. This value will be saved in a web session, and upon returning to the Panel for Smart Devivces a refresh is performed to load this value in the Panel for Smart Devices layout.
For this to work correctly, in the WWSD the Enabled Data Caching property must be set to No.
In addition, create a Dashboard and call the Panel for Smart Devices from this Dashboard.
Set the Default Action property of the List Grid associated with the WWSD of the Category Transaction as shown in the figure below:
Next, in the events set the Proc action as shown below:
Event 'Proc'
Composite
SetData(CategoryId)
SDActions.Return()
EndComposite
EndEvent
SetData is a procedure with the following source:
for each CategoryId
where CategoryId=&CategoryId
&Context.CategoryId=&CategoryId
&Context.CategoryName=CategoryName
&Session.Set("category", &Context.ToXml())
endfor
And the following Parm rule:
parm(in:&CategoryId);
Upon selecting a value of the Category List it will allow saving it in the WebSession, so that it can later be obtained from the Panel for Smart Devices created in step 2.
At runtime, in this case from the Android emulator, call the Panel object from the Menu object:
Run the Prompt action to invoke the Category List:
Upon selecting a value, the Default Action (Proc) that saves the selected value in the WebSession is executed:
Upon returning to the Panel for Smart Devices, the selected value is displayed by reading it from the WebSession: