Champs et formulaires

Formulaire

  • Champ modifiable : iResourceController.setEditable("NomSystemeChamp")
  • Champ obligatoire : iResourceController.setMandatory()
  • Champ “réactif” (aller-retour serveur) : iResourceController.setThrowEvents()

Affichage dynamique

Dans un formulaire, il est possible de nommer un élément pour le manipuler grâce à du code : ligne, colonne, section, fragment (ensemble de lignes, de colonnes ou de sections).

Il suffit de lui ajouter un ‘id’ dans la description XML : <text id="bloc001">Ceci est un bloc</text>

On peut alors manipuler ce bloc en JavaScript pour l’afficher / le cacher : show("bloc001",false);

Cette fonction show est présente dans certains contextes (scripts de formulaire). Quand elle n’existe pas, on peut utiliser : iResourceController.showBodyBlock("bloc001",true);

Bloc HTML

Si un bloc est de type HTML (<html id="bloc001"></html>), il est possible de ‘remplacer’ son contenu (HTML dynamique) : setHtml('bloc001', '<b>Gras</b>');.

On peut également « évaluer » une variable qui contient du HTML : <html eval="VariableHTML" />

Masquer un bouton

//Masquer un bouton ‘système’
if(iResourceController.getButton( "header", iResourceController.TOP_CONTAINER ) != null) {
  iResourceController.getButton( "header", iResourceController.TOP_CONTAINER ).setHidden( true );
}
//Noms des boutons standards
//saveAndClose, save, close, cancel, terminate, previous, next, header, history, abort, reminder, sendinformationmail, delegate_treatment, delegate_task, refuse_delegation, cancel_delegation

//Masquer un bouton d’action
var workflowButton = iResourceController.getButton( "Clôturer", iResourceController.BOTTOM_CONTAINER );
if ( workflowButton != null ) {
  workflowButton.setHidden( true );
}

Remarque : pour le bouton d’action, il est mieux d’utiliser le nom système du bouton :

var contextSysadmin=iWorkflowModule.getContextByLogin( "sysadmin" );
var action = iWorkflowModule.getAction( contextSysadmin, iWorkflowInstance.getCurrentTaskInstance(contextSysadmin).getTask(), "NOM_SYSTEME_DU_BOUTON");
var workflowButton = iResourceController.getButton( action.getLabel(), iResourceController.BOTTOM_CONTAINER );

Champs standards

Lecture/écriture de champ

Pour lire le contenu d’un champ : getValue("fieldName");

Pour écrire dans un champ : setValue("fieldName",newValue);

Note

Attention au respect du type de champ ! Certains champs doivent-être “forcés” pour respecter leur nature.

Info

En cas de contexte particulier, préciser la ressource : iWorkflowInstance.getValue(); ou iLinkedResource.setValue(...);.

Nombres

Pour écrire un nombre : setValue ("NombreDeRetours", new java.lang.Float(5));

Dates

Les dates, dans Process, sont des Timestamp au format java.util.Date.

Mettre la date du jour

setValue("DateDeCloture", new java.util.Date());

Récupérer de la date de fin de la tâche courante

iTaskInstance.getMaxEndedDate( );

Ajouter 2 jours de délai à une étape

// calcul de 2 jours supplémentaires en millisecondes
var delayMillis = (2) * 24 * 60 * 60 * 1000;

// somme de la date et de l'heure actuelles et du délai de 2 jours puis transformation en type Date
var maxEndedDate = new java.util.Date( java.lang.System.currentTimeMillis() + delayMillis );

// affectation de la date de fin à la tâche courante
iTaskInstance.setMaxEndedDate( maxEndedDate );

Utilisation du Gregorian Calendar

Exemple en ajoutant 3 semaines à une date (attention, cette méthode est plus gourmande en ressources) :

//Création d’un calendar à parti du champ date
var calendar = new Packages.java.util.GregorianCalendar();
calendar.setTime(iTaskInstance.getMaxEndedDate( ));

//Ajout de 3 semaine au calendar
calendar.add(Packages.java.util.Calendar.WEEK_OF_YEAR, 3);

//Mise à jour du champ
setValue("DateTheorique ",new Packages.java.sql.Timestamp( calendar.getTimeInMillis() ));

Choisir le format d’affichage d’une date

//On définie le format d'affichage grâce à l'objet java 
var formatdedate = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
if( maDate!=null ) {
  return formatdedate.format( maDate );
}

Champs annuaire

Utilisateur

Récupérer les propriétés

//IUser correspond à l'utilisateur connecté
iUser.getEmail();
iUser.getLogin();
IUser.getFullName();
...

Au-delà des attributs, il existe différentes méthodes pour obtenir les propriétés du compte :

  • IAttachment getAvatar();
  • String getSignature();
  • Date getLastPasswordUpdate();
  • Date getLastVisitedDate();
  • Date getCreatedDate();
  • IUser getCreatedBy();
  • Collection getCollaborators();
  • Collection getLeaders();
  • boolean isMemberOf( IGroup group, boolean recursive );
  • boolean isMemberOf( IOperatorRole role, boolean recursive );
  • boolean isSubscriber( IMailingList mailingList );
  • Collection getParents();
  • Collection getAllParents();
  • boolean isEnable();
  • void enable();
  • void disable();
  • boolean isConnectionAllowed();
  • boolean isLocked();
  • void unlock();

Alimentation

Si le champ est multivalué :

var personnes = new Packages.java.util.ArrayList();
personnes.add(iWorkflowModule.getUserByLogin("sysadmin"));
setValue("lst_participants",personnes);

Si le champ est monovalué :

setValue("lst_participants",iWorkflowModule.getUserByLogin("sysadmin"));

Groupe

Récupérer les membres

var membres = null;
var group = iWorkflowModule.getGroupByName("GroupSysName");
if (group!=null) {
   membres = group.getAllMembers();
   //Renvoi une collection de IUser
}

Appartenance à un groupe

var group = iWorkflowModule.getGroupByName("GroupSysName");
if ((group!=null && iUser.isMemberOf(group, true)) { //Le true permet d'être récursif ou non
  alert("OK !");
} else {
  alert("KO !");
}

Rôle

Alimentation

Identique à l’alimentation du champ utilisateur (les rôles sont multivalués).

Appartenance à un rôle

var role = iWorkflowModule.getOperatorRole( monContext, "Appli_Name", "Role1")
if ((role!=null && iUser.isMemberOf(role,true)) { //Le true permet d'être récursif ou non
  alert("OK !");
} else {
  alert("KO !");
}

Calculer un rôle

On utilise une ouverture de code ‘Back-Office’ disponible dans la rubrique développement d’une version de processus, onglet ‘Scripts de routage’ : Script Routage Script Routage

function onEvaluateOperators(workflowModule, taskInstance, list) {
  //On vérifie que nous sommes à la bonne étape
  if (taskInstance.getTask().getName() == "PLANNING") {
    var iWorkflowInstance = taskInstance.getWorkflowInstance();
    var auditeurs = iWorkflowInstance.getValue("rol_Auditeurs");
    var responsable = iWorkflowInstance.getValue("rol_Redacteurs");
    //On aliment la liste des opérateurs à partir de 2 champ rôles différents
    if(auditeurs != null) {
       list.addAll(auditeurs);
    }
    if(responsable != null) {
       list.addAll(responsable);
    }
  }
}

Organisation

Parcours

//Récupération de l’organisation du créateur
var orga = iWorkflowInstance.getValue("sys_Creator").getOrganization();

//Récupération des organisations filles
var filles = orga.getOrganizations();

//Récupération de l’organisations parente
var parent = orga.getParent();

//Récupération des membres
var parent = orga.getMembers();

Attributs étendus

Récupération

//Alimentation à partir d’un attribut pour un utilisateur
//Idem pour les groupes, Organisations et localisations
var attValue = iUser.getExtendedAttributes().getValue("NomSytemeAttribut");
if(attValue != null) {
   iWorkflowInstance.setValue("MonChamp" ,attValue);
}

Tableaux dynamiques

Parcours

//On alimente un champ du document à partir d’une ligne de tableau
var adresses = iWorkflowModule.getLinkedResources(iWorkflowInstance,"tab2_Adresses");

for( var it=adresses.iterator(); it.hasNext(); ) {
  var adresse = it.next();
  if (adresse.getValue("lst_tab2_Type").equals("Livraison")) {
     setValue("txt_VilleLiv",adresse.getValue("txt_tab2_Ville"));
  }
}

Création de ligne

//Création d'une liste de lignes
var arrResources = new Packages.java.util.ArrayList();

for ( var j = 0; j < rows.length; j++ ) {
  // création d'une ligne, pour le tableau
  var childResource = iWorkflowModule.createLinkedResource( iWorkflowInstance, "tab7_AvenantsDansMarche" );

  // positionnement des valeurs
  childResource.setValue( "txt_tab7_NumDevisCommit", rows[j][2]);
  childResource.setValue( "txt_tab7_EtabliPar", rows[j][7]);
  childResource.setValue( "txt_tab7_MontantODV", new java.lang.Float(rows[j][4]));

  //Récupération d'une valeur du document père 
  childResource.setValue( "txt_tab7_OdreDeVente", iWorkflowInstance.getValue("txt_OrdreVente"));

  // ajout de la ligne à  la liste
  arrResources.add( childResource );
}

// Ajout des lignes de la liste au tableau
iWorkflowInstance.addLinkedResources( arrResources );

Sous-processus

Accès

  • Accéder au document père depuis le document fils (tableau de sous-processus) : iWorkflowInstance.getParentInstance()
  • Accéder au document père depuis le document fils (processus embarqué) : iWorkflowInstance.getParentContainerWorkflowInstance()
  • Accéder au document père depuis le tableau : iWorkflowInstance.getValue() ( et non getValue()).

parcours

var dir = iWorkflowInstance.getValue("Direction");
//Le contexte est important, il permet de récupèrer les droits d'un utilisateur pour manipuler les objets SDK
var cont = iWorkflowModule.getContextByLogin("sysadmin");

//Récupération du réservoir
var cat = iWorkflowModule.getCatalog( cont , "DonneesIndicateurs", 4 );
//Récupération d'une table du réservoir
var tab = iWorkflowModule.getResourceDefinition( cont, cat, "Indicateurs" );
//Récupération des lignes de cette table
var all = iWorkflowModule.getResources( cont, tab );

//Parcour des lignes et création des lignes de tableau
var arrResources = new Packages.java.util.ArrayList();
for( var it=all.iterator(); it.hasNext(); ) {
    //d correspond à la ligne courante
    var d = it.next();
    //On vérifie une valeur de la liste
    if(d.getValue("DirectionConcernee").equals(dir)) {
        var childResource = iWorkflowModule.createLinkedResource( iWorkflowInstance, "Indicateurs" );
        var r = d.getValue("Responsable");
        
        childResource.setValue( "Indicateur",d.getValue("LibelleIndicateur") );
        childResource.setValue( "Responsable",r);
        
        arrResources.add( childResource );
    }
}
//Ajout des lignes au tableau
iWorkflowInstance.addLinkedResources( arrResources );

Sources :