Un script d'interaction utilisateur permet de programmer une interaction avec le propriétaire du travail et de modifier le travail en fonction de la réponse de l'utilisateur. Plus précisément, il permet d'afficher une série de boîtes de dialogue d'interface utilisateur avec des questions et des boutons d'action (OUI/NON, IMPRIMER/NON, OUI/NON/ANNULER). Selon la sélection de l'utilisateur, d'autres boîtes de dialogue peuvent être affichées et des actions peuvent être entreprises. Enfin, lorsque la dernière boîte de dialogue est traitée, le script est terminé et le travail est défini comme ready et peut être publié.

Si un script d'interaction utilisateur est présent, il doit d'abord être exécuté avec succès avant que le travail puisse être lancé. Le travail est forcé à l'état de pause jusque-là.

Les fonctions PHP de base peuvent être utilisées, et presque toutes celles décrites dans Job Scripting Reference. Les deux seules méthodes non prises en charge par la fonctionnalité sont $this->job->setPrinted() et $this->job->pause(). Outre les classes, méthodes et propriétés communes, vous pouvez utiliser plusieurs fonctions supplémentaires pour communiquer avec l'application MyQ Desktop Client.

Comment écrire un script d'interaction utilisateur

Sur l'onglet MyQ Desktop Client d'une file d'attente, dans la section Interaction utilisateur, ajoutez le script dans le champ, puis cliquez sur Enregistrer.

Tout d'abord, vous devez définir le main(). fonction. Cette fonction décide si la boîte de dialogue doit être ouverte (dans quelles conditions) et quelle boîte de dialogue doit être affichée.

Ensuite, vous pouvez définir des fonctions au clic avec des réactions à l'option sélectionnée: onYes(), onNo(), onPrint(), onCancel().

Les propriétés publiques sont conservées entre les appels. En fait, ils sont envoyés au client et retournés.

Structure du script

Voir le script suivant:

public $hasMoreThan10pages;
 
// script entry point
function main() {
    /** Job object */
    $job = $this->job;
    $this->hasMoreThan10pages = $job->pageCount > 10;
    // Show dialog if the job has more than 10 pages
    if ($this->hasMoreThan10pages === true) {
        $this->dialogYesNo("Job has more than 10 pages. Do you want to print in duplex?");
    }
}
 
// If yes clicked
function onYes() {
    // $this->hasMoreThan10pages is available also here
    $this->job->duplex = 'longEdge';
}
 
// If no clicked
function onNo() {
    // nothing. Job will be released.
}
PHP

En utilisant le script ci-dessus, cette boîte de dialogue s'affiche dans MDC:

Si vous êtes familier avec le langage PHP, le script est en fait un corps de l'instruction de class UserScript {...}.

Vous pouvez définir des propriétés comme $hasMoreThan10pages. Les propriétés sont persistantes entre plusieurs appels de script pour le même travail. Utilisez-les pour stocker un état entre plusieurs boîtes de dialogue.

Il y a la fonction main. Il est appelé une fois au démarrage du script. Utilisez-le pour afficher la première boîte de dialogue.

Ensuite, il y a les fonctions onXXX. Il s'agit du gestionnaire d'action appelé lorsqu'un bouton XXX est enfoncé. Par exemple, le bouton Yes est géré via la fonction onYes.

Si vous n'affichez aucune boîte de dialogue, le script est terminé.

Référence API

Voir Job Scripting Reference pour savoir comment modifier la tâche et également pour de nombreuses autres opérations que vous pouvez effectuer.

Le script d'interaction utilisateur s'exécute dans le contexte de la classe User. Le travail envoyé est accessible en tant que $this->job.

Les objets de toutes les classes, à l'exception de la classe Session, sont accessibles via l'objet job, par exemple le propriétaire owner $this->job->owner. Les objets de la classe Session sont accessibles via la fonctionnalité globale MyQ(); par exemple: MyQ()->logInfo("This message appears in the MyQ log.");.


Classe UserScript

Le script d'interaction utilisateur est le corps de la classe UserScript comme décrit ci-dessus. MyQ fournit également plusieurs méthodes intégrées de la classe User en plus de vos propres méthodes.

Méthodes de création de dialogue

Fonction

Description

void dialogYesNo(string $text)

Crée une boîte de dialogue avec le $text comme contenu et les boutons Oui, Non.

void dialogPrintNo(string $text)

Crée une boîte de dialogue avec le $text comme contenu et les boutons Imprimer, Non.

void dialogYesNoCancel(string $text)

Crée une boîte de dialogue avec le $text comme contenu et les boutons Oui, Non et Annuler.

void dialog(string $text, Field[] $fields)

Crée une boîte de dialogue avec le $text comme contenu et un tableau de champs personnalisés. Un champ peut être un bouton ou tout autre type de champ, comme une liste, par exemple. Les boutons sont toujours affichés sous les autres champs.

FieldButton button(string $title, string $id)

Crée un bouton personnalisé qui peut être utilisé dans la fonction dialog(). $title est un texte affiché sur le bouton. Le bouton $id est utilisé lors de l'exécution du gestionnaire de bouton. MyQ recherche un gestionnaire onXXXXXX est le $id.

FieldList singleSelectList(string $name, array $items)

Crée une liste d'options parmi lesquelles l'utilisateur ne peut en choisir qu'une (groupe radio). Il peut être utilisé dans la fonction dialog(). Le $items est un tableau associatif où la clé est la référence d'un élément et la valeur est le nom d'affichage d'un élément visible dans l'interface utilisateur.

FieldMultiSelectList multiSelectList(string $name, array $items)

Crée une liste d'options à partir de laquelle l'utilisateur peut en choisir plusieurs (cases à cocher). Il peut être utilisé dans la fonction dialog(). Le $items est un tableau associatif où la clé est la référence d'un élément et la valeur est le nom d'affichage d'un élément visible dans l'interface utilisateur.

Méthode onCancel

onCancel gère le bouton Annuler et est fourni par défaut. Il appelle terminate(). Vous pouvez fournir votre propre implémentation pour modifier le comportement.

Autres méthodes

Fonction

Description

void terminate()

Termine le traitement du script. Le script n'a pas été exécuté avec succès et le travail reste à l'état de pause. L'utilisateur doit exécuter à nouveau le script.

mixed getField(string $name)

Obtient la valeur du champ avec le $name après que l'utilisateur a interagi avec la boîte de dialogue. Le champ doit avoir été créé par les méthodes singleSelectList (le résultat est une valeur scalaire) ou multiSelectList (le résultat est un tableau de valeurs, qui peut être un tableau vide).