J’ai un processus qui contient plusieurs activités. J’aimerai pouvoir transmettre les données issues d’une activité dans une autre activité.
Je n’ai pas eu le résultat voulu en utilisant les “activity data” car mes données proviennent de plusieurs objets liés.
J’ai écris le script suivant qui ne fonctionne pas :
CreatePV.postValidate = function(context){
var step = context.getActivity().getStep();
if (step == "CPV-CPVS"){
// Je récupère la valeur à transmettre
var dm = context.getDataValue("Field", "Departement_DirectionMetier_id.NomDirectionMetier");
// Je mets cette valeur dans un paramètre
this.getGrant().setParameter("MY_DM", dm);
//console.log(this.getGrant().getParameter("MY_DM"));
}
};
CreatePV.postInstanciate = function(){
// Je récupère la valeur de mon paramètre dans une varaible
var val = this.getGrant().getParameter("MY_DM");
// Je récupère mon activité
var act = this.getContext(this.getActivity("CPV-CBDO"));
// Et je mets la valeur de ma variable dans mon champs
act.setDataFile("Field", "ObjectifDM_DirectionMetier_id.NomDirectionMetier", val);
};
Oui je confirme le hook postInstanciate n’est appelé qu’une fois par execution du process (= au moment de son “instantiation” pour execution). Les règles de gestion qu’on y met en général sont donc des règles de gestion plutôt “statiques”, i.e. qui resteront valable tout au long de l’execution du processus.
En général la “tuyauterie” de data entre activités n’a pas besoin qu’on écrive de code. Exemple dans la démo le processus de prise de commande passe des données entre activités uniquement par paramétrage.
Afin qu’on vous guide vers la bonne approche merci de nous fournir une description plus complète de votre processus
Or “Personne” est lui aussi en relation avec “Role” et “Centre”. Le “Centre” est lui en relation avec “Departement”, et “Departement” avec “Direction”. On a donc une relation de ce genre :
Role<----Personne—>Centre---->Departement---->Direction
Lorsque je sélectionne, une personne, je récupère aussi son rôle et son centre ( également son département et sa direction)
activité3 : Dans cette activité, j’ai également un formulaire de création qui doit être pré-remplit avec les données saisies précédemment.
J’ai une relation : PV<----Objectif----->Direction
Le problème réside dans le fait que, je n’arrive pas à pré-remplir le champs “direction name” avec la direction de la personne sélectionnée au préalable. Sachant qu’il n’y a aucune relation directe entre “Personne” et “Direction”
J’ai eu le même souci, en fait si on renseigne “seulement” la “foreign key” (ie l’id de l’objet lié), grace au Parameters par exemple, il ne rapporte pas les informations.
Voila comment j’ai fait pour que l’utilisateur ait les informations :
J’ai créé à la volée des data de type “Field” avec les informations rapportée. (par exemple le nom de la direction) :
Data d = new Data( String Groupe (“Field”), String Nom (“directionFK.directionNom”), String Valeur (“A”))
ensuite sur l’activité qui doit avoir l’information on fait un
act.addData(d)
Par contre il faut penser a mettre la valeur de ses data à “” (vide) pour qu’il n’y ai pas de mauvaise interprétation lorsque l’on relance le processus après.
Donc dans le postValidate après l’action begin par exemple:
Data d = new Data( String Groupe (“Field”), String Nom (“directionFK.directionNom”), String Valeur ("")) //on met a vide la data
[…]
act.addData(d)
Comme la clé fonctionnel existe deja, la valeur est écrasée par la nouvelle
Mais je suis preneuse d’une “meilleure” idée si le staff a !
Effectivement il faut “raccorder” tous les champs y compris les champs ramenés (d’ailleurs @Francois je ne sais pas si on pourrait améliorer ça d’une manière ou d’une autre).
Dans l’exemple de la démo, à la dernière étape (creation de la commande) on retrouve bien tous les champs requis et sélectionnés aux étapes précédentes (selection du client, du fournisseur et du produit) :
L’exemple de la demo est très différent de mon cas.
Dans la demo, la sélection du client est une activité à part entière (ce qui rend la récupération de ces données relativement simple grace à : “ORDC-100.Field.row_id” oû ORDC-100 est l’étape de sélection du client.)
Dans mon cas, la sélection d’une personne n’est pas une activité (donc on ne peut pas récupérer ces données via : [etape.Field.field name]), mais fait parti d’une activité
les champs de l’activité 1 “créer PV” contiendra en mémoire tous les champs de l’objet PV.
donc a fortiori tous les champs de la personne = FK + champs joints
[nomEtape1.Field.champPersonneId]
ou via des jointures de proche en proche :
pour aller cherche l’id + nom de la direction :
@Francois
J’ai fait le test sur la démo, en ne ramenant que les FKs sur l’étape finale et ça marche désormais (les autres champs sont correctement populés)
ça ne marche chez moi, le populate fonctionne pour les relations de niveau 1, mais pas au delà. J’ai essayé de récupérer le nom de la direction métier de la personne en utilisant cette écriture :
Ce que dis David c’est que ça fonctionnera avec la prochaine release, donc avec la P21 et l’autre écriture que vous proposez ne fonctionnera, parce que le champCentreId n’est pas lié à champPersonneId et correspond à la foreign key je suppose. ce champ donc a une autre nom dans votre objet (style champCentreFK par exemple)
Je comprend ce que vous dites, l’écriture proposé n’est qu’un exemple, elle est bien représentée dans mon processus. Je l’ai utilisé par analogie avec celle proposée par François plus haut