Création de zones de condition requises

Une zone peut être déclarée comme requise dynamiquement dans une application Maximo Anywhere en fonction des valeurs des autres zones.

Pourquoi et quand exécuter cette tâche

Vous pouvez spécifier un gestionnaire d'événements dans le fichier app.xml afin de contrôler si une zone qui dépend des valeurs d'une autre zone est requise. Les gestionnaires d'événements sont implémentés dans des fichiers JavaScript qui sont associés à une vue dans l'application mobile.

Par exemple, si une intervention appartient à un type de travail Maintenance de secours, la zone Priority doit devenir une zone requise. La zone Priority n'est pas requise pour les autres types d'intervention, de sorte que vous devez appliquer une condition pour contrôler quand la zone est requise. Vous créez un gestionnaire d'événements pour la zone Priority pour surveiller la ressource et l'attribut associé au type de travail et déclarer la zone comme requise si un utilisateur mobile sélectionne Maintenance de secours dans la zone Type de travail. Si un utilisateur mobile change la valeur du type de travail, le gestionnaire vérifie également la valeur afin de déterminer si la zone Priority est requise.

Procédure

  1. Ouvrez le fichier app.xml de l'application à mettre à jour et ajoutez la zone à laquelle appliquer la condition.
  2. Dans la section UI du fichier app.xml, ajoutez un type d'initialiseur du gestionnaire d'événements aux zones.
    1. Dans l'élément <text> de la nouvelle zone, ajoutez un élément enfant intitulé <eventHandlers>.
    2. Dans l'élément <eventHandlers>, ajoutez un élément enfant intitulé <eventHandler>.
    3. Spécifiez initialize comme attribut d'événement et ajoutez les attributs de méthode et de classe.

    Par exemple, pour que la zone Priority soit requise pour les types de travail urgents, ajoutez un type d'initialiseur du gestionnaire d'événements à la vue à laquelle appartiennent les zones. L'événement associé au gestionnaire pour la vue Détails de l'intervention est nommée 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>
  3. Appliquez la condition du gestionnaire d'événements à un fichier JavaScript.
    1. Créez un dossier pour le gestionnaire dans le répertoire MaximoAnywhere\apps\nom_application\common\js\application. Le nom du dossier doit correspondre au nom appliqué à l'attribut de classe du gestionnaire d'événements.
    2. Ajoutez le fichier JavaScript au répertoire MaximoAnywhere\apps\nom_application\common\js\application. Le nom du fichier JavaScript doit correspondre au nom appliqué à l'attribut de classe du gestionnaire d'événements.
    3. Ajoutez la condition du gestionnaire d'événements d'initialisation au fichier JavaScript.
    Par exemple, afin d'ajouter la condition pour que le gestionnaire d'événements déclare la zone Priority comme requise pour les types de travail urgents, créez le fichier WODetailExtensionHandler.js dans le répertoire MaximoAnywhere\apps\nom_application\common\js\application\customerExtensions et ajoutez le code JavaScript.
    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"); 
    						}
    			)));
    		}
    		
    	});
    });
  4. Sauvegardez vos changements et affichez l'aperçu de l'application mobile mise à jour dans un simulateur de navigateur mobile.

Que faire ensuite

Générez et déployez l'application.