You can make a field required dynamically in a Maximo Anywhere app,
depending on the values of other fields.
About this task
You specify an event handler in the app.xml file to control whether a field that depends on values of another field is required. Event handlers are implemented in JavaScript files that are associated with a view in the mobile app.
For example, if
a work order has a work type of Emergency Maintenance, the Priority field
should become required. The Priority field
is not needed for other types of work orders, so you need to apply
a condition to control when the field is required. You create an event
handler for the Priority field to monitor the
resource and attribute that is associated with the work type and make
the field required if a mobile user selects Emergency Maintenance
in the Work Type field. If a mobile user changes
the value for the work type, the handler also checks the value to
determine whether the Priority field is required.
Procedure
- Open the app.xml file for the app that you want to update, and add the field that you want to
apply the condition to.
- In the UI section of the app.xml file,
add an initializer type of event handler to the fields.
- In the <text> element of the new field, add a child
element named <eventHandlers>.
- In the <eventHandlers> element, add a child element
named <eventHandler>.
- Specify initialize as the event attribute,
and add the method and class attributes.
For example, to make the Priority field
required for emergency work types, add an initializer type of event
handler to the view that the fields belong to. The event that is associated
with the handler for the Work Order Details view
is named WODetailExtensionHandler.
<view id="WorkExecution.WorkDetailView" label="Work Order Details">
...
<eventHandlers>
<eventHandler event="initialize" method="fetchAllListSizes"
class="application.handlers.WODetailHandler" />
<eventHandler event="initialize" method="handleConditionalRequiredPriority"
class="application.customerExtensions.WODetailExtensionHandler" />
<eventHandler event="render" class="application.handlers.WODetailHandler"
method="refreshAllListSizes" />
<eventHandler event="initialize"
class="application.handlers.MetersListHandler" method="initializeMeters" />
</eventHandlers>
....
</view>
- Apply the condition for the event handler to a JavaScript file.
- Create a folder for the handler in the MaximoAnywhere\apps\app_name\common\js\application directory.
The folder name must match the name that is applied to the class attribute
of the event handler.
- Add the JavaScript file to the MaximoAnywhere\apps\app_name\common\js\application directory. The name of the JavaScript file must match the name that is applied to the class attribute of the event handler.
- Add the condition for the initialize event handler to the JavaScript file.
For example, to add the condition for the
event handler to make the
Priority field required
for emergency work types, create the
WODetailExtensionHandler.js file
in the
MaximoAnywhere\apps\app_name\common\js\application\customerExtensions directory and add the JavaScript code.
define("application/customerExtensions/WODetailExtensionHandler",
[ "dojo/_base/declare",
"dojo/_base/lang",
"platform/handlers/_ApplicationHandlerBase",
"application/handlers/CommonHandler"],
function(declare, lang, ApplicationHandlerBase, CommonHandler) {
return declare( [ApplicationHandlerBase], {
handleConditionalRequiredPriority: function(eventContext){
// This is an initialize handler for the WO Details View
// to handle changes made to the worktype field
// and make the Priority field required
// current workOrder is on the eventContext
var currWO = eventContext.getResource().getCurrentRecord();
var worktype = currWO.get('worktype');
// Makes the priority field required if worktype equals EMERGENCY
currWO.getRuntimeFieldMetadata('priority').set('required', worktype && worktype=="EM");
// Hook a listener to watch the worktype attribute,
// and make the priority attribute required when the worktype is Emergency
eventContext.addResourceWatchHandle(currWO.watch('worktype',
lang.hitch(this, function(attrName, oldValue, newValue)
{
currWO.getRuntimeFieldMetadata('priority').set('required', newValue && newValue=="EM");
}
)));
}
});
});
- Save your changes and preview the updated mobile app in
a mobile browser simulator.
What to do next
Build and deploy the app.