Mixer une galerie, formulaire et position

  • Mixer une galerie, formulaire et position

    Posté par Elias sur 24 avril 2024 à 14h04

    Bonjour le forum

    J’ai du matériet (Item) que je range dans des boite qui ont 9 emplacements.

    Je veux avoir un écran qui

    1/ reprend le dessin d’une boite type (3 colonne – 3 lignes)

    2/ reprnd dans chaqu’une des 9 case le numéro d’inventaire de l Item si il est présent.

    3/ Pouvoir encoder un nouveal item dans un emplacement libre.

    Pour le point 1 je pense soit dessiner un carré de 3×3 soit mettre en fond d’écran une photo d’une boite vide.

    Pour le point 2 : je pense utilisé

    • pour mes 9 positions, 9 étiquettes de texte (et-text-position) avec les comme texte 1,2,3,4..jusque 9.
    • pour mes 9 positions, 9 étiquettes de texte (et-text-itemId) qui reprennent l’ID de l’item présent dans cette position. ..facile à dire mais comment afire?…Dans ma liste share point ‘Boites’ j’ai une colonne boite, une colnne emplacement, et une colonne itemId. Je peux donc indiquer que le contenu de mon étiquette de texte = valeur de mon champ item id pour la boite sélectionnée et pour l’emplacement = et-text-position.

    Avant d’aller plus loin cela vous semble t il une bonne solution. n’y a t il pas un autre moyen? N’y a til pas moyen de faire des galeries sous forme de tableau (un tableau 9×9 par exemple)?

    d’avance merci

    DavidZed a répondu Il y a 1 jour, 7 heures 4 Membres · 15 Réponses
  • 15 Réponses
  • Jeremy

    Membre
    24 avril 2024 à 14h26

    Salut Elias,

    tu peux, dans une gallerie, definir le nombre de colonne dans les propriétés principales de celle-ci. Par défaut c’est 1, mais ici j’ai mis 3.

    Ici pour 9 item, avec 3 inclusions, ça donne ça :

  • Elias

    Membre
    24 avril 2024 à 15h12

    Merci Jeremy, c’est super! ca m’aide vraiement. top.

    Pour mon point 2 pour l’affichage j’ai donc ma solution je dois jsute bien cadré les étiquettes de la galerie avec mon arrière plan. Ca c’est OK.

    Pour la partie 3, Y a t il le meme genre d’outils/options pour un formulaire?

    Et comment lui faire encodé dans la liste ‘Boites’ la position de l’item dans la boite?

    je pensais

    • pour mes 9 positions, 9 étiquettes de texte (et-text-position) avec les comme texte 1,2,3,4..jusque 9.
    • pour mes 9 positions, 9 “entrée de texte” dans le quel j’encode mon n° d’inventaire de mon Item (et qui est liée à ma colonne Item de liste Boites). Mais comment intégrer l’emplacement? en copiant la données de l'”étiquette de texte” 1 à 9?Vous avez une piste pour ce genre d’encodage?

    merci

  • MarKAR

    Membre
    24 avril 2024 à 15h40

    Hello Elias

    as tu essayé avec les galleries imbriquées (Nested Galleries)

    ++

  • Elias

    Membre
    24 avril 2024 à 15h55

    Je trouve que 3 sortes de galeries :

    • galerie horizontale
    • galerie verticale
    • galerie à hauteur flexible

    mais si je compredn bien une nested gallery est une gallery dans une gallery, c’est bien ca?

    Concrètement en quoi cela peut il m’aider par rapport à ce que je veux faire?

    J’image que la gallery de niveau plus élevée peu reprendre mon numéro de boite et la sous galerie le détail d’une boite. c’est bien cela?

    C’est en effet une option intéressante que je vais tester. Merci!

    Pour l’enregistrement de la position 1 à 9, y a t il des solutions?

  • MarKAR

    Membre
    24 avril 2024 à 16h20

    je ne sais pas si j’ai bien compris ton modèle mais pour répondre à ta question :

    Oui la gallerie principale peut servir à répéter les éléments et la gallerie imbriquée sert à répéter les 9 cases

  • Jeremy

    Membre
    24 avril 2024 à 17h36

    A mon avis, tu vas devoir créer une autre liste “position” qui référe à ta liste “boite”.

    Tu vas avoir 9 lignes dans cette table, 1 pour chaque position, avec une valeur “ID_boite” = l’id de la boite mère.

    Dans ta gallerie imbriquée, tu pourras avoir la gallerie principale qui affiche la liste “Boite” et une gallerie dans la gallerie qui affiche les emplacements, avec “thisItem.ID = ID_boite”.

    Soucis, il te faut maintenant générer 9 lignes à chaque création de nouvelle “boite”. C’est tout à fait faisable, mais il faut maitriser les Patch.

    Autre solution, ajouter 9 colonnes “position” à ta liste boite, tu pourras tout voir et éditer avec un seul formulaire, mais dans ce cas c’est la visualisation qui sera plus difficile à gérer en plus d’être bien plus rigide (impossible de créer une boite à 12 emplacements dynamiquement dans l’appli).

  • Elias

    Membre
    26 avril 2024 à 9h23

    Merci.

    “Soucis, il te faut maintenant générer 9 lignes à chaque création de nouvelle “boite”. C’est tout à fait faisable, mais il faut maitriser les Patch”

    Cette fonction reste pour l’instant un peu compliquée pour moi.

    Je vais un peu faire des recherches. L’idée est que lors de la création d’une nouvelle boite, on crée déjà les 9.

    Donc les listes suivantes

    -Items : avec la liste des mes objects

    -Boites : qui reprend la liste boites avec leur identification et leur date de création par exemple.

    -BoitesItems : qui reprend le contenu de toutes les boites, avec les colonnes boiteID, position, Item description.

    Par contre je ne vois pas ou et a quoi servirait le point suivant :

    “A mon avis, tu vas devoir créer une autre liste “position” qui référe à ta liste “boite”.

    Tu vas avoir 9 lignes dans cette table, 1 pour chaque position, avec une valeur “ID_boite” = l’id de la boite mère.”

    Dans cette liste j’aurais par exemple

    Position = 1; ID-boite: boite1

    Position = 2: ID-boite: boite1…. et cela jusqu’a 9

    Puis idem avec position=1; ID-boite : boite2.

    C’est ca? a quoi cela sert il? pour la fonction patch?

  • Jeremy

    Membre
    26 avril 2024 à 10h28

    Si je pose les choses, on a :

    Ma proposition était de faire 2 listes, la seconde se remplit en auto après création d’une boite :

    C’est la seule façon de faire une gallerie imbriquée, pour avoir ça :

    La méthodologie est plus complexe, mais une fois mise en place, elle a des avantages :

    • Tu peux gérer dynamiquement des typologies de boites différentes, avec des nombres d’emplacements différents
    • Tu peux lister plus facilement le contenu complet d’une boite
    • De même plus facile de faire la recherche d’un item dans le stock de toutes les boites
    • Comme tu as une ligne de données par emplacement, tu peux retrouver l’historique des mouvements (qui, quand, quoi, etc)

    Si tu pars sur la solution avec ta liste “Boite” avec x colonnes dans ta liste “Boite” pour x emplacements, dans ce cas tu peux afficher tes items dans ton formulaire et les gérer directement dedans. Tu peux dans le formulaire parametrer le nombre de colonne (ici 3).

    Bon courage, car c’est un gros morceau pour un débutant, surtout vu les implications que ça peut avoir.

  • Elias

    Membre
    26 avril 2024 à 13h52

    Super!

    Oui je debute et je progresses bien en grande partie grâce à ce forum.

    Pour ma première app je souhaite aller le plus loin possible. Car comme tu l as vu dans les autres postes il y a des choses qui se recoupent.

    Je sais que cela est complexe c est justement ça qui est motivant. J espère arriver jusqu a ce point. Sur papier j ai mes listes, dans share point, J ai déjà des applications de base qui tournent avec quelques fonctions de powerfx. If, and, or, isblank, mise en forme de bouton conditionnel, lien entre les tables

    .La dernière chose que j ai intégrée c est les variable et les collections. Les prochaines étapes c est les fonction lookup et patch. Cet partie sur les boîtes me permet donc d intégrer ces fonctions.

    Encore merci pour ton input!

  • Elias

    Membre
    30 avril 2024 à 17h18

    Sur base de la proposition de Jeremy j’ai donc 2 listes:

    Boites80 avec la colonne titreBoiteNum (par exemple 2024-10) et son lieux de stockage.

    BoiteEmplacements avec 3 colonnes : titre, ID-mere qui est une colonne recherche dans ma liste sharepoint qui reprend l’info l’indetification de la boite qui se trouve dans titreBoiteNum de la liste Boits80

    Pour ma partie Power apps j’ai une appli classique avec un ecran d’accueil qui reprend une galerie et le détail du contenu et un écran d’édition.

    Dans mon ecran d’édition j’ai un bouton ‘Valider’ qui permet de valider une nouvelle entrée. Sur ce bouton j’ai mis le Onselect sur :

    <div>
    <div>SubmitForm(Form1_1);;</div>
    <div>Navigate(‘ecAcceuil-boite80’);;</div>
    <div>Set(</div>
    <div> varNouveau;</div>
    <div> false</div>
    <div>);;</div>
    <div>ForAll(Sequence(1,9);Patch(BoiteEmplacement;Defaults(BoiteEmplacement);{‘ID-mere’: DataCardValue31.Text; emplacement:Value}))</div>
    </div>

    La première partie soumet mon formulaire = crée la nouvelle boite dans ma liste “Boites80” : OK

    La seconde partie me fait retourner à mon ecran d’acceuil des boites80 : OK

    La variable VarNouveau et mise à false : ca me permet de remetre cette vraiable sur cette valeur et de différencier les modification des créations (…je pense..)

    Et donc vient ensuite la partie de Pactch pour créer dans ma table “BooiteEmplacement”.

    C’est là que ca merdouille..avec du bug :

    message 1 : “La fonction patch contient des arguments non valides”. voyez vous d ou vient le problème? j’ai essayé avec ‘ID-mere’ ou ID-mere sans les ”, ca ne change pas le problème.

    Message 2 : “Le type de cet argument ‘ID-x002d-mere’ ne correspond pas au type atendu ‘reccord’. Type trouvé ‘Text’. ici j’imagie que le problème vient du fait que j’ai utilisé le type text. comme expliqué plus haut, dans sharepoint le colonne ID-Mere est une colonne de type recherche. est ce que c’est ca qui pose problème?

    D’avance, merci

  • Elias

    Membre
    2 mai 2024 à 22h43

    Je pense que mon problème vient de ma liste sharepoint dans laquelle j ai une colonne de type Rechrche. Si je change le type de colonne comment pus je faire le lien dans powerApps?

  • DavidZed

    Membre
    3 mai 2024 à 9h36

    Hello,

    Garde la colonne recherche, c’est la best-practice 🙂

    Pour patcher une colonne lookup, tu dois fournir un enregistrement qui contient deux valeurs : Id et Value

    • Id correspond à la colonne ID de la liste parente (destination du lookup)
    • Value correspond à la colonne Title ou Titre de la liste parente

    Cette conversion rend le patch compliqué avec sharepoint (C’est beaucoup plus simple et intuitif avec Dataverse ! ), si tu as l’ID, tu peux reconstituer l’engistrement à fournir au patch de plusieurs manières :

    Patch( Source ; Record ; { BooiteEmplacement :{ Id: ID-mere ; Value : Lookup( 'Liste destination du lookup' ; ID=ID-mere ; Title ) } } )

    Ou alors en faisant un lookup sur la choicelist de la colonne recherche :

    Patch( Source ; Record ; { BooiteEmplacement : Filter( Choices([@'Liste des boites'].'Nom de la colonne recherche') ; Id = ID-mere } )

    en partant du principe que ID-mere est au format integer et non texte

    • Elias

      Membre
      13 mai 2024 à 15h00

      Un grand merci pour cette réponse!

      Je percois qu’il y a un truc que je ne comprends pas et j’aimerai vraiment arriver à mon objectif.

      Je vais reprendre ici ma situation. Dans Sharepoint j’ai 2 listes

      Boites80 avec les colonnes

      • titreBoiteNum (par exemple 2024-10), cette colonne est la colonne titre de cette liste
      • lieuStockage

      BoiteEmplacements avec 3 colonnes :

      • titre, (en fait pour linstnat cette colonne est vide dans shaerpoint car elle est apparue automatiquement à la création de ma liste)
      • ID-mere qui est une colonne recherche dans ma liste sharepoint qui reprend l’info l’indetification de la boite qui se trouve dans titreBoiteNum de la liste Boits80
      • Emplacement

      Tu indiques que “

      Pour patcher une colonne lookup, tu dois fournir un enregistrement qui contient deux valeurs : Id et Value

      • Id correspond à la colonne ID de la liste parente (destination du lookup).
        • Question 1a : dans mon cas la liste parante est Boite80. C’est bien cela?
        • Question 1b : dans ma liste Boite80 je n’ai pas de colonne qui s’appelle Id. j’ai uniquement la colonne titreBoiteNum et lieuStockage. De quel colonne s’agit il alors?
      • Value correspond à la colonne Title ou Titre de la liste parente. Question 2 C’est donc titreBoiteNum. C’est bien cela?

      Question 3 dans ta proposition :

      Patch( Source ; Record ; { BooiteEmplacement :{ Id: ID-mere ; Value : Lookup( 'Liste destination du lookup' ; ID=ID-mere ; Title ) } } )

      Source c’est la liste que je dois Patcher : donc dans mon cas c’est la liste BoiteEmplacement. ?

      Donc cela donne :

      Patch( BoiteEmplacement ; Record ; { BoiteEmplacement :{ Id: ID-mere ; Value : Lookup( 'Boite80' ; ID=ID-mere ; titreBoiteNum ) } } )

      C’est bien cela?

  • DavidZed

    Membre
    13 mai 2024 à 17h23
    • Question 1a : dans mon cas la liste parante est Boite80. C’est bien cela?
      • Exact
    • Question 1b: dans ma liste Boite80 je n’ai pas de colonne qui s’appelle Id. j’ai uniquement la colonne titreBoiteNum et lieuStockage. De quel colonne s’agit il alors?
      • La colonne ID est présente dans toute liste et tout bibliothèque, elle est générée automatiquement par Sharepoint, même si elle n’est pas affichée par défaut

    Donc cela donne :

    Patch( BoiteEmplacement ; Record ; { BoiteEmplacement :{ Id: ID-mere ; Value : Lookup( 'Boite80' ; ID=ID-mere ; titreBoiteNum ) } } )

    C’est bien cela?

    ça me paraît correct, si ce n’est qu’il y a peut être confusion avec la colonne ID-mere, il faut fournir l’ID de la colonne du même nom (encore une fois, pas une colonne que tu as créé, la colonne ID de la liste Boites80 qui a été générée par Sharepoint à la création de la liste )

  • DavidZed

    Membre
    13 mai 2024 à 17h36
    • Question 1a : dans mon cas la liste parante est Boite80. C’est bien cela?
      • Exact
    • Question 1b: dans ma liste Boite80 je n’ai pas de colonne qui s’appelle Id. j’ai uniquement la colonne titreBoiteNum et lieuStockage. De quel colonne s’agit il alors?
      • La colonne ID est présente dans toute liste et tout bibliothèque, elle est générée automatiquement par Sharepoint, même si elle n’est pas affichée par défaut

    Donc cela donne :

    Patch( BoiteEmplacement ; Record ; { BoiteEmplacement :{ Id: ID-mere ; Value : Lookup( 'Boite80' ; ID=ID-mere ; titreBoiteNum ) } } )

    C’est bien cela?

    ça me paraît correct, si ce n’est qu’il y a peut être confusion avec la colonne ID-mere, il faut fournir l’ID de la colonne du même nom (encore une fois, pas une colonne que tu as créé, la colonne ID de la liste Boites80 qui a été générée par Sharepoint à la création de la liste ) ID-mere n’étant pas un ID mais une colonne lookup.

    Admettons que tu as un ComboBox_1 qui te permet de choisir le lieu de stockage, donc qui dans Items : Boites80

    Ton patch devrait ressembler à :

    Patch( BoiteEmplacement ; Record ; { Titre: $"{ComboBox_1.Selected.titreBoiteNum} {Text(Now(),"yyyymmdd-hhmmss")}" ; // Titre est une colonne requise on peut y mettre un numéro de référence d'après le N° de boite et la date
    ID-mere:{ Id: ComboBox_1.Selected.ID ; Value : ComboBox_1.Selected.titreBoiteNum } ;
    Emplacement : 5 } )

Connectez-vous pour répondre.