Fonction Patch – Multiple Forms & Multiple Screen

Étiquetté : ,

  • Fonction Patch – Multiple Forms & Multiple Screen

    Posté par Sammy Rakotoarison sur 8 novembre 2022 à 11h05

    Bonjour à tous,

    Je suis en train de travailler sur la simplification d’un process. L’objectif est de créer une application qui regroupe 5 formulaires distinct avec pour certain des champs similaire et d’autre non.

    Les formulaires vont de 15 à 30 champs repartie sur plusieurs screen.

    Quelle que soit la fiche, les données iront se déversé dans une même base de donnée.

    Je suis donc passé par la fonction Patch pour chaque formulaire.

    Selon la sélection de la fiche la fonction Patch, qui est intégré sur un bouton dans mon dernier écran, évolue. Je souhaitais avoir votre avis sur mon raisonnement et ma formule savoir si c’est la bonne utilisation de la fonction Patch et si il y a moyen de l’optimiser ou pas. (Voici mon bout de code il n’y a pas tous les champs là 🙂

    n  Patch(n    Mabasededonnée;n    {n        sc1****: *****.Text;n        sc2****: *****.Text;n        sc3****: *****.Text;n        sc4****: Value(****.Text);n        sc5****: DD_**.Selectednn    }n);;nnIf(n    galFiche.Selected.Value = "Valeur 1";n        Patch(Mabasededonnée;n    {n     sc6****: *****.Text;n     sc7****: Value(****.Text)n     }n));;nnIf(n    galFiche.Selected.Value = "Valeur 2";n        Patch(Mabasededonnée;n    {n     sc8****: *****.Text;n     sc9****: Value(****.Text)n     }nnIf(n    galFiche.Selected.Value = "Valeur 3";n        Patch(Mabasededonnée;n    {n     sc10****: *****.Text;n     sc11****: Value(****.Text)n     }nn));;   nConcurrent(n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****)nn)n

    PostID=iT7eCrMygnU91UW

    Sammy Rakotoarison a répondu Il y a 7 mois, 3 semaines 1 Membre · 4 Réponses
  • 4 Réponses
  • DavidZed

    Membre
    8 novembre 2022 à 12h42

    Hello Sammy Rakotoarison ,

    Pour t’éviter d’avoir à enchaîner de multiples patchs, tu peux faire un seul patch avec une série d’updates imbriqués dans une condition, voici un exemple pour que tu voies la structure :

    Patch('Sample List';nLookUp('Sample List',ThisItem.ID=ID);n{Title:"New Title"};nIf(1=1{DateTime:Now()});nIf(1=2;{Number:10}))
    • 1er update (Title), pas de condition, la modif est appliquée

    • 2eme update (DateTime), la condition est vraie, la modif est appliquée

    • 3eme update (Number), la conditon est fausse, pas de modif, l’ancienne valeur est conservée

    CommentID=37OGIgN8DEoUFKL, PostID=iT7eCrMygnU91UW

    • Sammy Rakotoarison

      Membre
      9 novembre 2022 à 10h58

      Merci DavidZed ; après là c’est plus pour les modifications d’élément, moi c’est juste pour enregistré mais je vois l’idée. La fonction Patch c’est vraiment super, plus complexe à comprendre mais vraiment utile

      SubCommentID=sF8A6WlR7eg07Jb, CommentID=37OGIgN8DEoUFKL, PostID=iT7eCrMygnU91UW

  • Sebastien

    Membre
    8 novembre 2022 à 12h46

    Bonjour Sammy Rakotoarison

    Par habitude je ne référence pas de champs d’une page non active dans mes formules, car, apparemment, cela affecte lourdement les performances de l’app. Après cela dépend de la taille de l’app et de l’utilisation que l’on en a. Si c’est un problème c’est possible de mettre plusieurs formulaire sur une même page, et en jouant avec leur propriété ‘Visible’ de les afficher les un a la suite des autres, ou sous des conditions spécifiques.

    Par rapport à la formule :

    J’ai plus tendance à mettre des condition à l’intérieur de mon Patch(), plutôt que de lancer plusieurs patch() conditionnellement. Par exemple :

    n  Patch(n    Mabasededonnée;n    Defaults(Mabasededonnée);n    {n        sc1****: *****.Text;n        sc2****: *****.Text;n        sc3****: *****.Text;n        sc4****: Value(****.Text);n        sc5****: DD_**.Selectednn    //Si  ..**.. = "Valeur 1"n        sc6****:If(galFiche.Selected.Value = "Valeur 1"; *****.Text; Blank());n        sc7****: If(galFiche.Selected.Value = "Valeur 1"; *****.Text; Blank());nnn   //Si  ..**.. = "Valeur 2"n     sc8****: If(galFiche.Selected.Value = "Valeur 2";*****.Text; Blank());n     sc9****: If(galFiche.Selected.Value = "Valeur 2";Value(****.Text); Blank());nnn   //Si  ..**.. = "Valeur 3"n     sc10****: If(galFiche.Selected.Value = "Valeur 3";*****.Text; Blank());n     sc11****: If(galFiche.Selected.Value = "Valeur 3";Value(****.Text); Blank())n     }n));;   nConcurrent(n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****);n    Reset(*****)nn)n

    Et une dernière petite remarque : Attention à ne pas oublier le second paramètre de la fonction Patch(). A savoir, lorsqu’on veut créer un nouvel enregistrement ‘ Defaults(Masourcededonnée) ‘ ou lorsqu’on veut éditer un enregistrement éxistant ‘ LookUp(Masourcededonnée; …..) ‘

    En espérant que cela t’aide.

    Bonne journée !

    CommentID=57sPfbkzS0CkRkp, PostID=iT7eCrMygnU91UW

  • Sammy Rakotoarison

    Membre
    9 novembre 2022 à 11h06

    Bonjour Sébastien,

    Du coup ce que je fais pour ne pas faire référence à mon champs c’est que je lui affecte une variable comme ça je ne fais appel qu’a la variable du début et non pas au champs de la page non active. Avec les variables cela n’affecte pas la perf de l’app.

    Les formulaires sont quand même moins flexible c’est trop lourd du coup par rapport à ma problématique..

    Concernant la formule cela marche 👍 Je pense que je vais faire comme ça pour la suite avec des condition dans le Patch()

    Merci beaucoup pour ton aide et la petite astuce que j’avais zapper sur le ‘ Defaults(Masourcededonnée) ‘ ‘ LookUp(Masourcededonnée; …..) ‘ à mettre dans le second paramètre

    Bonne journée à toi

    CommentID=3XxiKZa0YUPYO9A, PostID=iT7eCrMygnU91UW

Connectez-vous pour répondre.