R3dKap
Expert Power AppsRéponses céées sur le Forum
-
Concernant la matrice d’autorisations, est-ce qu’elle est figée dans le marbre ou évolue-t-elle fréquemment ?
CommentID=dUOUiUafBlgLW50, PostID=x0C64rwhnVnwk66
-
Quelques remarques déjà sur ton modèle de données…
-
Est-ce que tu as prévu que ce soit l’employé qui est sur la mission ou alors la mission sur l’employé ? 🙂
Si c’est l’employé qui est sur la mission alors ton schéma est bon : colonne lookup Employé dans Mission et la flèche de Mission vers Employé.
Si c’est la mission qui est sur l’employé, alors colonne lookup Mission dans Employé et flèche de Employé vers Mission. -
La flèche Entité – Employé devrait être dans l’autre sens : c’est la colonne Entité (qui devrait être soulignée du coup) de l’employé qui le lie à la table Entité. En tout cas c’est comme ça que je fonctionne : si l’employé est rattaché à une entité alors il y a une colonne de recherche Entité dans la table Employé et ma flèche va de Employé vers Entité.
-
Si ta colonne Profil de UserProfile est de type Choix, alors pas besoin de faire figurer le bloc Profil utilisateur
Remarque : dans SharePoint on ne parle pas de “classe” mais de “liste”… 😉
CommentID=yP2y4UL7h0aF616, PostID=x0C64rwhnVnwk66
-
-
Salut @EDK, non non je t’ai pas oublié mais j’ai démarré une mission et du coup j’ai moins de temps de dispo… Je regarde ça et j’essaie de te répondre demain…
CommentID=0mVXE5DBKdDKWjp, PostID=x0C64rwhnVnwk66
-
Salut @Karlemagne,
Voici mes recommandations pour simplifier et optimiser ton application…
Modèle de données
La colonne Code vêtements dans Liste types vêtements ne devrait pas être là : le code du vêtement n’est pas propre au type de vêtement mais plutôt au vêtement lui-même qui est dans Liste vêtements. Ou alors cette colonne représente le code du type de vêtement, auquel cas elle devrait alors s’appeler Code type de vêtement. Là c’est toi qui sais… Mais par contre je ne vois pas pourquoi il y aurait aussi une colonne Code vêtement dans Liste vêtements (puisqu’il y a un lien de Liste vêtements vers Liste types vêtements) : je trouve que ça fait doublon. Une donnée n’est censé exister (sauf besoin spécifique) qu’à un seul endroit.
Tel que tu as conçu ta table Liste vêtements, ta colonne Porteur vêtement ne peut pas être obligatoire puisque le vêtement peut exister sans être attribué à personne. Et cela me fait dire du coup que la colonne Disponible n’a pas vraiment de sens puisqu’il suffit de regarder Porteur vêtement : s’il y a quelqu’un dessus c’est que le vêtement est attribué et il n’est donc pas disponible, et dans le cas contraire il est dispo.
Il faut bien ficeler ton modèle de données pour te faciliter la vie après quand tu réalises l’application. 😉
D’ailleurs, autre remarque : plusieurs de tes colonnes devraient être au singulier plutôt qu’au pluriel -> Nom porteur (sans ‘s’) car ce champ porte le nom d’UN porteur ; Code vêtement (sans ‘s’) car il représente le code d’UN vêtement. Etc… 😉
Concernant les écrans, je les aurais organisé comme détaillé ci-dessous… 🙂
Accueil
Un écran Accueil (anciennement sur l’écran Gestion_Liste_porteurs) pour lister tous les porteurs avec le nombre de vêtements pour chacun d’eux. Un bouton ‘engrenage’ pour aller sur l’écran Paramètres (voir plus bas).
Sur le Items de la galerie tu aurais (tu l’avais déjà fait) :
SortByColumns(n 'Liste porteurs vêtements';n "cr1a6_nom_porteurs";n Ascendingn)
Pour afficher le nombre de vêtements du porteur, tu y mets un libellé avec la formule suivante :
CountIf(n 'Liste vêtements';n 'Porteur vêtement'.'Nom porteurs' = ThisItem.'Nom porteurs'n)
Au clic sur un porteur on arrive sur un écran Attributions (voir plus bas) avec la formule suivante :
Navigate(n Attributions;n ScreenTransition.None;n {n locSelectedPorteur: ThisItemn }n)
Tu transmets ainsi le porteur sélectionné à l’écran cible dans une variable locSelectedPorteur qui sera locale à l’écran Attributions.
Astuce : tu pourrais aussi ajouter un composant Toggle Set sur ton écran pour permettre de filtrer la liste avec des valeurs “Tous“, “Avec vêtements“, “Sans vêtements“.
Paramètres
Un écran Paramètres (anciennement Accueil) avec les boutons pour gérer les différentes tables de paramétrage (types de vêtements, tailles, types d’accessoires et liste des accessoires)
Chaque bouton amène sur un écran dédié à chaque table (qui fonctionne toujours de la même façon pour les différentes tables) et qui liste les éléments de la table (voir l’exemple de Types de vêtements plus bas).
Porteur
Un écran Porteur (anciennement les groupes Groupe_Ajout_porteur et Groupe_Modif_porteur sur l’écran Gestion_Liste_porteurs) pour créer/éditer un porteur
Quand on y vient pour modifier un porteur le titre est plutôt Modifier porteur.
Liste types de vêtements
Un écran Liste types de vêtements qui liste tous les types de vêtements (et la logique ci-après est la même pour les autres tables : tailles, types d’accessoires, accessoires) avec un bouton ‘+’ en haut à droite pour créer et un bouton ‘<‘ en haut à gauche pour revenir en arrière
Au clic sur un élément de la galerie on arrive sur un écran Type de vêtement (du même style que l’écran Porteur) où on peut modifier le type de vêtement.
Et quand on clique sur le ‘+’ en haut à droite on arrive sur le même écran Type de vêtement mais avec le formulaire en mode Création.
Attributions
Un écran Attributions qui affiche le porteur concerné ainsi qu’une galerie avec la liste des vêtements du porteur :
L’icône ‘<‘ te ramène sur l’écran précédent.
L’icône ‘+’ affiche une popup où tu peux choisir parmi les vêtements disponibles (ceux dont la colonne Porteur vêtement est vide) et valider l’attribution.
L’icône ‘poubelle’ qui affiche une popup de confirmation et qui, sur validation, supprime l’affectation du vêtement au porteur en remettant simplement à blanc la colonne Porteur vêtement sur la ligne du vêtement concerné dans la table Liste vêtements.
Cette galerie aurait ceci dans Items :
Filter(n 'Liste vêtements';n 'Porteur vêtement'.'Nom porteurs' = locSelectedPorteur.'Nom porteurs'n)
Voilà. Si tu as besoin d’aide n’hésite pas… Ca change un peu par rapport à la direction que tu avais prise, mais c’est ce qui me semble être le plus simple, le plus efficace et le plus intuitif pour tes utilisateurs…
CommentID=3vp3W5YgmZYCbBe, PostID=hA2JWyBLAAXO4pu
-
Merci pour ces réponses @EUDES…
-
Je trouve ça étrange que tu dises que les informations s’affichent lentement dans un formulaire. Je n’ai jamais constaté cela de mon côté. Mon avis : je trouve que c’est un peu une usine à gaz de reproduire tous les champs du formulaire avec des TextInput et de faire pointer les champs sur ces TextInput… Surtout que l’avantage du formulaire, entre autres, c’est d’intégrer directement l’affichage des messages d’erreur sous les champs.
-
Bizarre : pourquoi ne pas utiliser un formulaire d’affichage qui montre la demande sélectionnée sur l’écran Liste des demande ? Ca serait plus simple…
Globalement, je te recommande de travailler directement avec les formulaires et d’utiliser les contrôles par défaut dans les datacards des formulaires (textinput pour les colonnes texte, toggle pour les colonnes oui/non, combo box pour les colonnes de choix et de type recherche).
Avant d’aborder le sujet de l’implémentation du workflow, il faudrait que tu me précises quelques éléments :
-
Est-ce que tu peux me dire quelles sont les listes que tu as créées et quelles colonnes ont chaque liste (avec le type de chaque colonne) ?
-
Dans ton post du début tu parles d’une matrice d’autorisations : c’est très bien, il faut en avoir une lorsqu’il y a autant d’intervenants dans un workflow. Peux-tu me la montrer ?
-
Comment gères-tu les différents intervenant de l’application ? As-tu créé une table pour lister les utilisateurs de l’application avec leur rôle associé ? J’ai repéré les rôles suivants (dis-moi si c’est bon ou s’il en manquent) :
-
Employé
-
N+1
-
Directeur
-
Directeur général
-
DG
-
DGA
-
DCS/DSE
-
Assistance RB
-
Responsable RH
-
DOP
-
DAF
-
Chef division RB
-
CommentID=lqQsqEmiFlfBxQV, PostID=x0C64rwhnVnwk66
-
-
Non, il ne faut pas écrire
<ListeSP>.Statut
car cela renverrai une table à une seule colonne avec tous les statuts de toutes les demandes.C’est toi qui sait où tu peux récupérer le statut de la demande en cours. Je suppose que le Switch() tu l’as mis sur un bouton qui est sur un écran qui affiche une demande spécifique. Cette demande est-elle dans une variable, dans un formulaire ? Est-elle l’élément sélectionné dans une galerie ? C’est là qu’il faut la chercher…
CommentID=kd1h1wR99091QK2, PostID=pWmFGeDs1K34Y8i
-
C’est normal… Moi dans ma formule j’ai mis “Statut” parce-que je ne connais pas le nom de la colonne Statut de ta liste, mais il faut que toi, à la place de “Statut“, tu fasses référence à la colonne en question sur la demande en cours… Tu vois ce que je veux dire ?
CommentID=mqJ0clZlB8yEHBO, PostID=pWmFGeDs1K34Y8i
-
Super merci. Chouette application. Propre… 👍
J’ai très bien compris ton besoin et je vois bien où tu veux aller et ce que tu veux faire. C’est déjà un bon début… 😉
Est-ce que tous tes écrans fonctionnent actuellement ?
J’aurais pas mal de questions/remarques/suggestions à te faire sur ce que tu as déjà produit… Je vais les numéroter pour que tu puisses me répondre avec les mêmes numéros…
-
On a plus souvent l’habitude d’avoir le bouton BACK dans le coin en haut à gauche que dans le coin en haut à droite. Perso, je mettrais plutôt l’icône BACK à gauche et le logo à droite… 😉
-
Tu as une bonne cohérence des couleurs dans ton application. C’est bien. Une seule remarque : j’aurais fait les icônes du menu de gauche en violet également pour rester cohérent avec le reste de l’application.
-
Je rajouterais un léger fond derrière l’icône de l’élément du menu sélectionné (comme dans l’éditeur Power Apps) :
-
Est-ce que tu as bien utilisé un formulaire ton écran Demande ?
-
Sur ton écran Liste des demandes on ne voit pas le demandeur. Normal ?
-
Sur Liste des demandes tu as un petit triangle jaune sur ta galerie qui indique que tu as un problème de délégation dans la formule de la propriété Items probablement. Si à terme tu as plus de 500 lignes dans ta liste ta formule ne retournera pas les bonnes données. Il faut vérifier ce point. Peux-tu me faire une capture de la formule pour qu’on regarde ça ?
-
J’ai l’impression que tous tes champs sont des champs texte. Pourquoi ne pas avoir utilisé des champs de type Choix par ex. pour Moyen de transport, Catégorie, Entité, … ou des champs de type Utilisateur pour Employé ?
-
Est-ce que tu as bien utilisé un formulaire sur ton écran Validation ?
On verra ensuite pour le workflow de validation…
CommentID=yh4J4RvrzaUMF4g, PostID=x0C64rwhnVnwk66
-
-
@EUDES quand tu dis que les interfaces sont “ok”, c’est-à-dire ? Tu as maquetté les écrans ou tu les as déjà réalisés ?
Peux-tu nous montrer par des captures ce que tu as déjà fait ?
CommentID=6QINRqpG99qQL5z, PostID=x0C64rwhnVnwk66
-
@EUDES est-ce que tu as un statut associé à ta demande pour savoir à tout moment à quelle étape elle en est ?
Si oui alors tu peux mettre ceci dans le Text du bouton :
Switch(n Statut;n "Nouvelle"; // On suppose que c'est le statut initialn "Emettre la demande";n "Emise"; // Quand la demande a été émise, le bouton est "Approuver"n "Approuver";n ...n "Statut N"; // Au statut N on affiche le libellé de l'action suivanten "Libellé N+1";n ...n)
CommentID=jzdFhje6nBb3Ujg, PostID=pWmFGeDs1K34Y8i
-
Pas d’autre solution que celle-là si tu mets tes valeurs dans des étiquettes. Pourquoi ne pas utiliser des variables plutôt ? Auquel cas elles seraient purement numériques et plus facile à manier.
Remarque :
Value(If(tgl_Prime_Licence;104;0))
Le Value() ne sert à rien car tes valeurs sont déjà numériques… 😉
D’ailleurs, tu peux écrire la même chose ainsi :
lbl_Prime_Licence.Text = Text(tgl_Prime_Licence * 140; "#0.00 €")
En effet, quand un toggle est True, il vaut 1, quand il est False il vaut 0… 🙂
CommentID=pFZXkm1AoFK0YxI, PostID=JMqG3910hA7ZeCY
-
Super top la version verticale. Bizarre que t’arrives pas à joindre le fichier…
Pour la version avec les cases à cocher, c’est assez facile à faire avec une simple galerie en fait…
CommentID=Io7JhHONimDZMl7, PostID=raCdPqEziNwgZF9
-
Aaaaaaaah ! Un modèle de données… Top ! 👍 Tellement plus facile pour comprendre le cas d’usage… 😉 Merci.
Alors, pour t’aider efficacement, il faudrait que tu me décrives (avec captures à l’appui) ce que tu as déjà fait dans l’application. Pense à bien me préciser les noms des écrans et ce que tu as mis dans le Items des galeries et dans le Datasource et le Item de tes formulaires.
Alors je pourrais te dire comment peut-être réorganiser les données dans l’app pour te faciliter la vie : genre, afficher les porteurs avec la quantité de vêtements pour chacun d’eux, puis après sélection, choix du vêtement et traitement du formulaire vêtement). A voir…
CommentID=rX1FpqPu1zXdpIT, PostID=hA2JWyBLAAXO4pu
-
Supprime ton déclencheur, remets-le puis recrée ton paramètre (MAIS SANS ACCENTS) en le mettant d’abord dans une variable de type chaîne pour utiliser ensuite cette dernière dans ton flux…
CommentID=GGjy6rraq1T80EH, PostID=58HIljqlF2BreLV
-
Pas de soucis @Geoffroy WAGNER, y’a pleins de façons d’arriver au même résultat. Que cela ne te décourage surtout pas à proposer des solutions… 😉
SubCommentID=6DesYbSglwXAZ6B, CommentID=Q0osKrRObEPvURu, PostID=pWmFGeDs1K34Y8i