Problème mis a jour liste sharepoint en utilisant le control timer

Étiquetté : 

  • Problème mis a jour liste sharepoint en utilisant le control timer

    Posté par Thika sur 7 décembre 2021 à 2h28

    Bonjour,

    je suis débutante en powerapps.

    Je voudrais créer plusiers enregistrements identiques dans une liste sharepoint mais avec des dates différentes en fonction des dates que j’inscris dans un formulaire.

    Ma liste sharepoint a 3 colonnes “GestionList” :

    Staff de type personne

    Assiduite de type choix

    DateP de type date.

    Pour mon besoin, j’ai rajouté un Datepicker1. Afin d’avoir la date de fin. Mais cette colonne n’existe pas dans ma liste sharepoint.

    Après plusieurs tentatives, j’ai appliqué cette solution

    https: //powerusers.microsoft.com/t5/Building-Power-Apps/Create-same-record-with-different-dates/td-p …

    Mais les résultats ne sont pas satisfaisants.

    Par exemple

    Staff : abmas

    Assiduite : Bureau

    DateP 06/12/2021 au Date : 08/12/2021.

    Je m’attend a avoir 3 enregistrements dans ma liste comme ceci :

    abmas | Bureau | 06/12/2021

    abmas | Bureau | 07/12/2021

    abmas | Bureau | 08/12/2021

    Mais j’ai au moins 9 enregistrements jusqu’au 14/12/2021.

    Je ne sais pas comment faire pour n’avoir que le nombre requis d’enregistrements.

    Voici mon set up

    Formulaire: Defaultmode : new

    le timer

    Text : ‘Submit’

    Duration : 0,01

    On select : Set(var;0)

    OntimerEnd :

    Patch(GestionList;Defaults(GestionList);

    {Staff: DataCardValue3.Selected ;

    Assiduite: DataCardValue4.Selected;

    DateP: DateAdd (DataCardValue5.SelectedDate;var;Days)

    } );; Set(var;var+1)

    Repeat : If ( var < DateDiff(DataCardValue5.SelectedDate; DatePicker1.SelectedDate);true;false)

    Votre aide serait grandement apprécier.

    Merci !

    PostID=wdLihsBfRSa3Svt

    Thika a répondu Il y a 4 mois, 3 semaines 1 Membre · 13 Réponses
  • 13 Réponses
  • Didier Gbenou

    Membre
    7 décembre 2021 à 6h02

    Salut @Thika,

    Cette solution ne marche pas tres bien avec la fonction Patch, tout simplement parce qu’un patch prends du temps pour creer un element dans SharePoint.

    Pour utiliser la meme solution et avoir ce que tu veux, procede comme ci-dessous:

    1) Dans ton Timer (Timer1), garde ce que t’as et change les details ci-dessous:

    OnSelect:

    Set(var,0); Clear(colDates)n

    OnTimerEnd:

    Collect(colDates,{date:DateAdd(DatePicker1.SelectedDate,var,Days)}); Set(var,var+1);n

    2) Cree un autre timer avec les details ci-dessous:

    Start:

    !Timer1.Repeat // Ce nouveau timer va demarrer tout seul quand l'autre timer finin

    OnTimerEnd:

    ForAll(colDates, Patch(GestionList, Defaults(GestionList), {Staff: cmbStaff.Selected, Assiduite: cmbAssiduite.Selected, DateP: ThisRecord.date} );)n// Pour chaque date enregistree dans colDates, on fait on Patch avec la valeur de staff et assiduiten

    Visible:

    false // Pour cacher ton timer si tu veuxn

    Exemple:

    CommentID=HmXrEBHsPpaEZO4, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      7 décembre 2021 à 15h29

      @Didier Gbenou

      Encore merci pour le code. Ca ne fonctionne pas exactement pour moi. Il ajoute bel et bien les record mais a partir de la date de fin.

      Par ex du 8 dec au 12 dec, Il commence au 12 déc jusqu au 16 déc.

      1)Timer 2

      Duration

      10n

      Onselect

      Falsen

      OnTimerEnd

      ForAll(colDates; n       Patch(GestionList; Defaults(GestionList); n       {Staff: DataCardValue3.Selected; n        Assiduite: DataCardValue4.Selected; n        DateP: ThisRecord.date} )n       )n

      Repeat

      !Timer1.Repeatn

      2)Timer 1

      Duration

      10n

      On select

      Set(var;0);; Clear(colDates);;n

      OntimerEnd /* J’ai essayé de modifier cette instruction en prenant la dateP(date de début) mais dans ce cas, il ne me donne qu’un seul record. Celui de la date de début

      Collect(colDates;{date : DateAdd (DatePicker1.SelectedDate;var;Days)});; Set(var;var+1);;n

      (Ou datePicker1 correspond a ma date de fin )

      Repeat (Est ce correct ?, je n’ai pas vu ton instruction repeat)

      If ( var < DateDiff(DataCardValue5.SelectedDate; DatePicker1.SelectedDate);true;false)n

      SubCommentID=EqsVS4TugPSvFxo, CommentID=HmXrEBHsPpaEZO4, PostID=wdLihsBfRSa3Svt

    • Didier Gbenou

      Membre
      7 décembre 2021 à 15h54

      @Thika DatePicker1 correspond plutôt a la date de debut.

      Pour le Timer1,

      Repeat:

      If(var<DateDiff(DatePicker1.SelectedDate,DatePicker2.SelectedDate), true , false )n

      DatePicker1 = Date de debut

      DatePicker2 = Date de fin

      Comme @R3dKap l’a dit plus bas, cette methode marche mais ce n’est pas la plus simple. Il serait bien que tu essaies sa methode. On te laisses choisir 😉

      SubCommentID=iXsyOfOEC1eG6tv, CommentID=HmXrEBHsPpaEZO4, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      7 décembre 2021 à 18h00

      @Didier Gbenou

      Encore une fois merci.

      Ca fonctionne très bien maintenant. Oui je vais essayé aussi l’autre solution. Ca me permet aussi d’apprendre.

      SubCommentID=lVo4jvTg6igD2gc, CommentID=HmXrEBHsPpaEZO4, PostID=wdLihsBfRSa3Svt

  • R3dKap

    Membre
    7 décembre 2021 à 10h00

    Bonjour @Thika,

    Voici mon avis… La solution avec le timer peut effectivement fonctionner, tel que le montre @Didier Gbenou.

    Cependant, il y a une solution beaucoup plus simple : construire une collection avec les enregistrements souhaités et faire un seul Patch(). En effet, la fonction Patch() est souvent utilisée pour créer ou mettre à jour UN enregistrement. Mais on oublie trop souvent qu’elle peut aussi être utilisée en lui fournissant un ensemble d’enregistrements dans une collection.

    Donc, en gros, ce que tu peux faire c’est quelque chose comme ceci :

    ClearCollect(colGestionList; {});;nClear(colGestionList);;nForAll(n    Sequence(n        DateDiff(n            DatePickerDebut.SelectedDate;n            DatePickerFin.SelectedDaten        ) + 1n    );n    Collect(n        colGestionList; n        {n            Staff: ComboBoxStaff.Selected;n            Assiduite: ComboBoxAssiduite.Selected;n            DateP: DateAdd(n                DatePickerDebut.SelectedDate;n                Value - 1n            )n        }n    )n);;nPatch(GestionList; Defaults(GestionList); colGestionList);; n

    Je te laisse remplacer les noms des contrôles que j’y ai mis par les tiens… 😉

    Autre remarque : je ne vois pas trop l’intérêt de ton formulaire ici puisque tu n’utilises pas le SubmitForm(). Tu pourrais tout aussi bien mettre sur ton écran :

    • une ComboBox pour le Staff avec Choices(GestionList.Staff) dans le Items (attention de bien positionner ensuite les propriétés DisplayFields et SearchFields)
    • une ComboBox pour l’Assiduité avec Choices(GestionList.Assiduite) dans le Items (attention de bien positionner ensuite les propriétés DisplayFields et SearchFields)
    • un DatePicker pour la date de début
    • un DatePicker pour la date de fin

    Et utiliser ensuite le code ci-dessus… 😊

    CommentID=95e9iLM4235LlRb, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      7 décembre 2021 à 18h02

      @R3dKap

      Je m’excuse si le message est repris deux fois. J’ai remarqué que je me suis taguée.

      Encore merci pour la solution. J’ai essayé.

      Mais j’ai un message d’erreur et pourtant j’ai déclaré les variables.

      Erreur : la fonction pacth contient des arguments non valides.

      Sur le bouton onSelect du bouton soumettre voici

      ClearCollect(colGestionList; {});;nClear(colGestionList);;nForAll(n    Sequence(n        DateDiff(n            DataCardValue5.SelectedDate;n            DatePicker1.SelectedDaten        ) + 1n    );n    Collect(n        colGestionList; n        {n            Staff: DataCardValue3.Selected;n            Assiduite:  DataCardValue4.Selected;n            DateP: DateAdd(n                DataCardValue5.SelectedDate;n                Value - 1n            )n        }n    )n);;nPatch(GestionList; Defaults(GestionList); colGestionList);; n

      SubCommentID=FFZldk5GW49WfP4, CommentID=95e9iLM4235LlRb, PostID=wdLihsBfRSa3Svt

  • Thika

    Membre
    7 décembre 2021 à 14h15

    Merci bpc pour le retour rapide. Je vais testé les deux méthodes aujourd’hui et je vous reviens.

    CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      7 décembre 2021 à 16h36

      @Thika

      Encore merci pour la solution. J’ai essayé.

      Mais j’ai un message d’erreur et pourtant j’ai déclaré les variables.

      Erreur : la fonction pacth contient des arguments non valides.

      Sur le bouton onSelect du bouton soumettre voici

      ClearCollect(colGestionList; {});;nClear(colGestionList);;nForAll(n    Sequence(n        DateDiff(n            DataCardValue5.SelectedDate;n            DatePicker1.SelectedDaten        ) + 1n    );n    Collect(n        colGestionList; n        {n            Staff: DataCardValue3.Selected;n            Assiduite:  DataCardValue4.Selected;n            DateP: DateAdd(n                DataCardValue5.SelectedDate;n                Value - 1n            )n        }n    )n);;nPatch(GestionList; Defaults(GestionList); colGestionList);; n

      SubCommentID=TdJWLCIVFwsLbLy, CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

    • R3dKap

      Membre
      8 décembre 2021 à 10h29

      @Thika Est-ce que tu peux m’envoyer une capture du code où on voit l’erreur soulignée en rouge ? Ca me permettra de voir quelle partie de la formule est en erreur. En général il y a une partie de la formule qui est un peu plus rouge que le reste. Si tu survoles avec ta souris cette partie très rouge pour voir le message qui s’affiche dans l’infobulle et me le transmettre également.

      Astuce : pense à renommer tes datacards pour qu’on puisse savoir ce qu’ils portent comme donnée… 😉

      SubCommentID=K12vBMSr0NmEi8g, CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      8 décembre 2021 à 16h33

      @R3dKap

      Merci.

      1) Pour les labels, je vais les modifier.

      Pour l’utilisation du form, je voulais d’abord faire fonctionner mon code et modifier après. Histoire de résoudre un problème a la fois.

      2)Hier Il n’y avait qu’une seule erreur, c était sur le patch. j’ai publié et j’ai aussi un message d’erreur sur le DatePicker.SelectedValue et aussi sur le form1″

      Voici les messages d’erreur :

      1. DatePicker1.SelectedDate : Utilisation non valide de ” .”
      2. Patch : La fonction Patch contient des arguments non valide.
      3. Form1 : la fonction attend un formulaire modifiable en entrée.

      Pour corriger j’ai remplacé form1 par @form1 , je n’ai plus de message d’erreur. Je sais que c’est en lien avec le default mode et comment j’initialise mon form. Je me dit que je vais résoudre ce problème en utilisant le control group come tu me l’a suggéré.

      staff est le nom d ‘un groupe 0365,

      Assiduité : Bureau ou Télétravail

      DateP : date de deb

      DatePicker1 : Date de fin. (ne fait pas partie de mon formulaire)

      SubCommentID=ZKLZWUkJp8YSZgQ, CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      8 décembre 2021 à 17h17

      @R3dKap

      J’ai résolu les autres erreurs mais j’ai tjr le probleme du patch

      SubCommentID=adr7leHjJNO35J6, CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

    • R3dKap

      Membre
      9 décembre 2021 à 10h32

      @Thika voici le code corrigé :

      ClearCollect(n    colGestionList; Defaults(GestionList)n);;nClear(colGestionList);;nForAll(n    Sequence(n        DateDiff(n            DatePickerDebut.SelectedDate;n            DatePickerFin.SelectedDaten        ) + 1n    );n    Collect(n        colGestionList;n        Defaults(GestionList)n    );;n    Update(n        colGestionList;n        Last(colGestionList);n        {n            Staff: ComboBoxStaff.Selected;n            Assiduite: ComboBoxAssiduite.Selected;n            DateP: DateAdd(n                DatePickerDebut.SelectedDate;n                Value - 1n            )n        }n    )n);;nPatch(GestionList; colGestionList);;n

      SubCommentID=XyUoFfJ9aDEfji3, CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

    • Thika

      Membre
      10 décembre 2021 à 19h51

      @R3dKap

      Merci, ca fonctionne.

      SubCommentID=j7ksreTN0mWkYFu, CommentID=zsuO6Z52HO0Vqef, PostID=wdLihsBfRSa3Svt

Connectez-vous pour répondre.