Processus métier pour création d'un message avec liste d'envoi

4.0
Processus métier pour création d'un message avec liste d'envoi
0.0 0
Tags: #<Tag:0x00007f682a1b0e38>

#1

Bonjour,

je me lance dans le développement d’une nouvelle application et j’ai un besoin en terme de processus métier.

L’application doit permettre de préparer l’envoie de sms à une liste de contacts. Pour cela, je souhaiterai que le processus métier soit composé de 5 étapes :
1 - un écran de recherche des contacts selon des critères à saisir par l’utilisateur
2 - Après sélection des contacts répondant aux critères, affichage d’un écran pour la rédaction du message
3 - Après validation du message, l’affichage d’un écran récapitulatif : nb de contacts + message + boutons d’action.

J’ai donc créé un processus métier.
Concernant l’écran de recherche, comment est-il possible de faire une mise en forme plus sympa ?
Concernant l’écran de sélection de contacts, je peux seulement les sélectionner un par un alors que je voudrais pouvoir tout sélectionner d’un seul clique … il peut y en avoir bcp … ça sera ingérable autrement.

merci pour votre réponse


#2

Les fonctions avancées de recherche / tri / sélection multiple / paginée sont au niveau d’une liste.

Il est donc à mon sens plus simple :

  • d’utiliser la liste des contacts avec un bouton d’action de liste
  • cette action peut afficher un badge qui compte le nombre de lignes sélectionnées (comme un export ou une suppression en masse)
  • L’action a un écran de confirmation avec un champ texte “crb_texte_sms”
  • côté serveur il faut récupérer le texte dans la méthode qui implémente l’action
CrbContact.envoyerSMS = function(params) {
   var text = params ? params.get("crb_texte_sms") : null;
   if (text) {
      var ids = this.getSelectedIds();
      for (...)
   }
}

donc se passer d’un screenflow.


#3

L’écran de confirmation d’action ne suffira pas je pense à faire ce que je veux.

l’écriture du message a envoyé nécessite plusieurs champs, dont la sélection d’un média, d’un type de message qui sont des objets liés.

est-ce-que la liste (et du coup ses fonctions avancées) ne pourrait pas faire partie d’un screenflow ?


#4

Ok, pour préciser :

L’écran de confirmation d’une action peut avoir plusieurs champs simples texte, enum, date… le média et le type de message doivent alors être des enums. On ne peut pas y utiliser un objet métier avec des règles complexes (type contrainte ou hook de validation), mais on pourra l’envisager par la suite si l’UX va dans ce sens.

Au niveau du screenflow, les activités séparent volontairement l’écran de recherche et la liste résultante pour guider pas à pas l’utilisateur :

  • recherche : à date c’est juste une suite de champs car ils sont sensés être peu nombreux car indexés, on peut regarder l’impact d’avoir un template de recherche sur l’activité, ou juste faire un formulaire générique plus joli dans un premier temps
  • multi-sélection en liste : c’est vrai que ça manque si la recherche est très prédictive et qu’on veut tout sélectionner d’un coup ou une seule page

Si c’est juste ça qui manque à votre process, on peut prévoir de faire ces évolutions asap.


#5

Le média et le type de message ne sont pas des énumérations.

Par contre, l’évolution du screenflow tel que tu l’évoques irait très bien. A savoir :

  • disposer d’un formulaire de recherche plus joli
  • multi-sélection en liste.

ces deux points permettraient de répondre complètement à notre besoin, et à d’autres j’en suis persuadée !


#6

Ok alors on met ce beosin dans notre backlog prioritaire ;)


#7

super. tiens moi au courant.

si tu veux, je peux être béta testeuse des évolutions.


#8

Concernant mon processus métier, j’ai un soucis avec ma liste de contacts. j’ai les activités suivantes :

  • begin => type = début
  • msgCreat => type =créer. ça fonctionne bien. j’affiche le formulaire de saisie du message et ça l’enregistre
  • ContactSearch => type=rechercher. écran de recherche des contacts
  • ContactSelect => type=sélectionner multiple. écran de sélection des contacts rechercher. la aussi, pas de pb, les filtres fonctionnent.

mon soucis est après. je voudrais enregistrer la liste de mes contacts sélectionnées dans mon message. pour cela j’ai un objet CrbAleContactMsg pour enregistrer la référence du contact et celle du message.

comment dois-je faire ?


#9

Je termine juste les évolutions sur les activités, ce sera en master demain.

  • Recherche : prend en compte la propriété de recherche des champs + ajoute un bouton “étendre” s’il y a trop de champ

  • Sélection : possibilité de cliquer sur la ligne (et pas que sur le radio/checkbox) + affichage en jaune des lignes sélectionnées

  • Multiple : affichage d’un badge dans le chemin de fer de l’activité qui compte les lignes sélectionnées entre les pages + bouton pour sélectionner toutes les pages | la page | ou tout desélectioner.

A tester sur votre cas métier.

L’activité contient les row_id sélectionnés à récupérer dans le hook de validation pour en faire ce qu’on veut.

exemple en java

@Override
public void postValidate(ActivityFile context)
{
	String step = context.getActivity().getStep();
	if ("MyChoiceActivity".equals(step))
	{
		// All selected row IDs
		DataFile df = context.getDataFile("Field","row_id",true);
		String[] ids = df!=null ? df.getValues() : null;
		for (int i=0; ids!=null && i<ids.length; i++) ...
	}
}

exemple en rhino

myProcess.postValidate = function(context)
{
	var step = context.getActivity().getStep();
	if ("MyChoiceActivity" == step)
	{
		// All selected row IDs
		var df = context.getDataFile("Field","row_id",true);
		var ids = df!=null ? df.getValues() : null;
		for (var i=0; ids && i<ids.length; i++) ...
	}
}

#10

ok, super. je regarde tout ça demain et je te fais un retour.

merci pour l’info de script postValidate. en fouillant dans le trainning j’avais trouvé un peu de code mais pas suffisamment. je vais aussi voir ça demain.


#11

Bonjour,

j’ai commencé les tests :
écran de recherche : la présentation est plus sympa, plus ergonomique.
sélection multiple : c’est exactement ce que je voulais. tests à pousser avec une liste très longue. le bagde sur le chemin de fer est très utile.

par contre, le clique dans la case à cocher ne fonctionne pas. il faut cliquer sur la ligne.

j’ai réussi à faire fonctionner l’enregistrement de la sélection multiple. j’ai un problème d’affichage à la fin mais je pense que ça vient de mon processus.

voilà pour mes premières impressions. je ferais des tests plus poussés d’ici ce soir


#12

Bonjour,

il y a un pb avec les critères de recherche :

je saisi un critère pour l’antenne : anren => l’écran affiche bien les 2 élèves correspondant à mon filtre


je reviens sur l’écran précédent avec le bouton “Précédent” : le critère n’est plus affiché :

mais la recherche ramène le mm résultat alors que j’ai 3 contacts dans ma base :


#13

Merci pour ton retour,
je vais regarder où est passé le filtre visiblement toujours en back mais perdu en front…

Sinon :

  • il faut retirer le droit “Annuler / Cancel” sur les activités pour retirer le bouton “Passer” si celui-ci n’a pas de sens
  • le champ énuméré “Type” du premier écran est en “select multiple” pas très pratique / il faudrait le passer en cases à cocher plus ergonomique pour l’utilisateur, sauf s’il peut n’en choisir qu’un seul il faut mettre un select simple dans les propriétés du champ.

#14

Ok le “filtre en cas de retour arrière” est corrigé dans le prochain master.


#15

Bonjour,

quand est prévue la prochaine release qui intègre ces nouveautés ?
je dois planifier des tests utilisateurs


#16

On finalise les tests et les derniers correctifs du P20.

on va releaser d’ici fin de semaine, cela inclura la sychro CROWD je ne sais pas si vous avez pu tester, de notre coté c’est OK.


#17

Bonjour,

Excusez moi de vous déranger une fois de plus, mais comment faites vous pour regrouper vos données en fonction de leur antenne ?
J’aimerai faire pareil dans mon projet

Je vous remercie d’avance pour votre solution


#18

Le regroupement en liste est piloté par l’ordre de regroupement au niveau de l’objet field.
Ex dans le démo (à jour) on regroupe les produits par code founisseur:


Ca donne: