Réponses céées sur le Forum

Page 76 sur 84
  • R3dKap

    Membre
    9 février 2022 à 9h05 en réponse à: Au secours…

    Je vois… Essaie le truc suivant :

    • déplace le Set() qui définit la valeur de varFirstDayOfMonth dans le OnStart de l’application

    Parce-que comme il est utilisé sur l’écran dans le Items de la galerie et que parfois les traitements se parallélisent, peut-être parfois n’est-il pas initialisé que le ForAll() s’exécute déjà… Mais bon, j’y crois pas trop.

    Autre chose aussi : dans mes formules j’essaie de faire en sorte d’être certains de ne pas me mélanger les pinceaux dans les noms des variables ou des champs qui auraient le même nom. Dans ton ForAll(), le champ Value est à la fois celui renvoyé par le Sequence() et le nom de la colonne de ton record retourné par le ForAll(). Donc, essaie plutôt ceci :

    ForAll(n    Sequence(35) As LoopItem;n    {n        CalendarValue: varFirstDayOfMonth+LoopItem.Value-1-Weekday(varFirstDayOfMonth;StartOfWeek.Sunday)+1;n        NextDay:varFirstDayOfMonth+LoopItem.Value-1-Weekday(varFirstDayOfMonth;StartOfWeek.Sunday)+2n    }n)

    Et autre chose aussi… Pour avancer et reculer dans les mois tu peux plus facilement le faire ainsi :

    Set(n    varFirstDayOfMonth; n    DateAdd(varFirstDayOfMonth; 1; Months)n)

    Et :

    Set(n    varFirstDayOfMonth; n    DateAdd(varFirstDayOfMonth; -1; Months)n)

    CommentID=QPSS5knL0Ocur84, PostID=QtQF113kinM7ZMG

  • R3dKap

    Membre
    8 février 2022 à 21h22 en réponse à: Mise à jour données

    Salut @Alain,

    Tu peux nous mettre une capture du Patch() que tu fais pour alimenter ta colonne TOTAL ?

    CommentID=eya1Q0q24FAtNZM, PostID=L7zl88l0GW9cuxO

  • R3dKap

    Membre
    7 février 2022 à 10h43 en réponse à: Modifier la colonne ‘type de contenu’ de SharePoint via Power Apps

    Au passage, si tu veux voter pour ce besoin : https://powerusers.microsoft.com/t5/Power-Apps-Ideas/SharePoint-Content-Types-PowerApps-integration/idi-p/91791

    CommentID=eIhsWX3U9hCXIEe, PostID=5H1kXS8TkPKPaEU

  • R3dKap

    Membre
    7 février 2022 à 10h40 en réponse à: Modifier la colonne ‘type de contenu’ de SharePoint via Power Apps

    Salut @Didier,

    J’ai une mauvaise nouvelle pour toi : Power Apps ne supporte pas les types de contenus SharePoint à ce jour… 😌

    En attendant, je suppose que la seule solution de contournement consisterait à passer par un flow Power Automate. Mais je n’ai jamais testé de mon côté, donc aucune garantie de réussite. A tester…

    CommentID=a5FXg0jYCLTLOAg, PostID=5H1kXS8TkPKPaEU

  • Tu peux me montrer une capture de ton flux (avec le déclencheur et ses paramètres au début) ?

    CommentID=exVTiXojzuYNWI8, PostID=u54hfey5xkPGthq

  • R3dKap

    Membre
    2 février 2022 à 16h19 en réponse à: Export d'un Power BI avec Power Apps custom visual via Power Automate

    Bonjour @Swan,

    Je m’y connais pas particulièrement sur ton cas de figure, mais par habitude je sais que les actions fournies par les connecteurs dans Power Automate ne vont pas forcément disposer de la totalité des fonctionnalités que tu pourrais avoir dans le produit lui-même lorsque tu fais l’opération manuelle… Donc, comme ça au premier abord je dirais que l’export de la Power Apps intégrée vers un PDF n’est peut-être pas supportée par Power Automate.

    @J peut-être tu aurais plus d’éléments là-dessus pour @Swan ?

    CommentID=3JkhO13JqWRJxwj, PostID=ZHJZfyLJk5xHd7s

  • R3dKap

    Membre
    2 février 2022 à 16h10 en réponse à: Deep linking to specific screen

    Mmmmh… Etrange. Car l’application recharge la liste des admins à chaque fois qu’elle se lance. Donc entre 2 lancement si tu retires une personne de la liste je ne vois pas pourquoi elle aurait encore accès à l’écran Admin. Peut-être faut-il vérifier le test qui détermine si tu vas sur l’écran utilisateur ou l’écran admin…

    Peut-être si tu peux me mettre une capture du code que tu as dans ton App.StartScreen

    CommentID=jmlCC8UGxnp0xlq, PostID=PUQn5fvB5eZ9EWm

  • R3dKap

    Membre
    2 février 2022 à 15h46 en réponse à: Au secours…

    @Karlemagne lorsqu’une application se comporte de manière complètement erratique comme ça, j’ai tendance à fermer le studio, le redémarrer, faire une modif bidon dans l’application, la republier puis retester tout ça…

    Passk’effectivement je vois pas où pourrait être le problème au vu de tes formules, surtout que je vois que ce sont celles qui viennent de l’écran modèle d’agenda fournit par Power Apps…

    Mais peut-être as-tu déjà tenté ça… Essaie surtout de republier l’app… parfois, le processus de publication ne fonctionne pas bien et l’app peut avoir des comportements étranges…

    CommentID=8GbBImaecZDvn8a, PostID=QtQF113kinM7ZMG

  • Salut @Jesp, il semble y avoir un souci avec ton déclencheur de flux.

    Quel est le déclencheur de ton flux ? Est-ce que tu as mis des conditions sur ton trigger ?

    CommentID=kwxUcFwR5QgN0qj, PostID=u54hfey5xkPGthq

  • R3dKap

    Membre
    2 février 2022 à 15h01 en réponse à: Colonne inexsitante pour colonne calculée

    @Philippe CULOT j’ai réussi à reproduire ton erreur et à la corriger en mettant la formule ainsi :

    =scDateDebutCampagne

    scDateDebutCampagne étant le nom interne de ta colonne…

    CommentID=4i9CW0shzOvABCr, PostID=xzHIOqVIlwj3bKA

  • R3dKap

    Membre
    1 février 2022 à 17h51 en réponse à: Colonne inexsitante pour colonne calculée

    @Philippe CULOT sauf erreur de ma part, je crois qu’en fait il te manque le “=” en début de formule, comme sur l’exemple à la fin du post de @Didier… 😉

    CommentID=iFNHDYGrF41JZ0O, PostID=xzHIOqVIlwj3bKA

  • R3dKap

    Membre
    1 février 2022 à 17h49 en réponse à: COMBOBOX interdépendants

    Quelques explications donc sur cette formule qui s’occupe de faire le filtrage sur les pilotes :

    Clear(colSaaraData);nForAll(n    cbxPilotes.SelectedItems As SelItem,n    ForAll(n        Filter(n            AddColumns(n                SAARA,n                "PilotesClaims",n                PILOTEAD.Claimsn            ),n            (IsBlank(cbxProcessus.Selected) || CODEPROCESSUS.Value = cbxProcessus.Selected.Value) && SelItem.Claims in PilotesClaimsn        ) As PiloteItem,n        If(n            Not(PiloteItem.ID in colSaaraData.ID),n            Collect(n                colSaaraData,n                PiloteItemn            )n        )n    )n)

    C’est le filtre sur les pilotes est à choix multiples qui complique tout évidemment. Cela nous oblige à boucler sur la liste des cbxPilotes.SelectedItems pour commencer.

    Pour chaque pilote qui figure dans cette table, il faut aller chercher les données correspondantes dans la liste, soit quelque chose comme ceci :

    ForAll(n    cbxPilotes.SelectedItems As SelItem,n    Filter(n        AddColumns(n            SAARA,n            "PilotesClaims",n            PILOTEAD.Claimsn        ),n        SelItem.Claims in PilotesClaimsn    )n...

    Remarque : la structure des données de la combo box cbxPilotes étant complexe (type Personne) à plusieurs colonnes on ne peut pas utiliser l’opérateur IN, ça ne marche pas :

    ForAll( // ### Ceci ne marche pas !!!n    cbxPilotes.SelectedItems As SelItem,n    Filter(n        SAARA,n        SelItem in PILOTEADn    )n...

    C’est pour cette raison qu’on est obligé de rajouter à la source de données SAARA une colonne PilotesClaims avec le AddColumns() pour n’avoir dans cette colonne que les valeurs de Claims pour les pilotes sélectionnés :

    AddColumns(n    SAARA,n    "PilotesClaims",n    PILOTEAD.Claimsn)

    En imaginant que pour une ligne de SAARA j’ai 3 pilotes Pilote1, Pilote2 et Pilote3 dans la colonne PILOTEAD, la formule ci-dessus produit ce résultat :

    Et du coup, là sur la colonne PilotesClaims je peux utiliser l’opérateur IN. Et donc je peux écrire ceci :

    ForAll(n    cbxPilotes.SelectedItems As SelItem,n    Filter(n        AddColumns(n            SAARA,n            "PilotesClaims",n            PILOTEAD.Claimsn        ),n        SelItem.Claims in PilotesClaimsn    )n...

    ATTENTION : le AddColumns() va faire appel au connecteur SharePoint pour ramener les données de la liste SAARA avant de lui ajouter la colonne. Or, quelque soit le connecteur, Power Apps ne ramènera jamais plus de 2000 lignes (paramètre de ton application qu’il faut passer de 500 à 2000). Conséquence : tout ce qu’on a construit depuis le début pour faire ce filtrage ne fonctionnera que si ta liste SAARA a moins de 2000 lignes.

    Bref… La problématique suivante à laquelle on est confronté c’est qu’un pilote peut être sur plusieurs lignes de la liste SAARA. Ca veut que lors d’un premier passage du ForAll() ci-dessous je vais ramener les lignes 12, 27, 349 et 618 ; et lors d’un 2è passage je vais ramener une deuxième fois la ligne 349. Je me retrouve donc avec des doublons dans le résultat de mon filtrage !!!

    Conséquence, il faut que je conditionne l’ajout d’une ligne à ma collection colSaaraData au fait qu’elle n’y est pas déjà. Je suis donc obligé de faire une 2è boucle à l’intérieur de la première pour que je puisse mettre en place cette condition :

    ForAll(n    cbxPilotes.SelectedItems As SelItem,n    ForAll(n        Filter(n            AddColumns(n                SAARA,n                "PilotesClaims",n                PILOTEAD.Claimsn            ),n            SelItem.Claims in PilotesClaimsn        ) As PiloteItem,n        If(n            Not(PiloteItem.ID in colSaaraData.ID),n            Collect(n                colSaaraData,n                PiloteItemn            )n        )n    )n)

    Et pour terminer, il ne faut pas oublier qu’il se peut que j’ai sélectionné un filtre dans la combo box cbxProcessus avant de filtrer sur les pilotes. Il faut donc que j’en tienne compte que je fais mon filtre ici sur les pilotes, d’où l’ajout de la partie :

    (IsBlank(cbxProcessus.Selected) || CODEPROCESSUS.Value = cbxProcessus.Selected.Value)

    Et donc, la formule globale :

    Clear(colSaaraData);nForAll(n    cbxPilotes.SelectedItems As SelItem,n    ForAll(n        Filter(n            AddColumns(n                SAARA,n                "PilotesClaims",n                PILOTEAD.Claimsn            ),n            (IsBlank(cbxProcessus.Selected) || CODEPROCESSUS.Value = cbxProcessus.Selected.Value) && SelItem.Claims in PilotesClaimsn        ) As PiloteItem,n        If(n            Not(PiloteItem.ID in colSaaraData.ID),n            Collect(n                colSaaraData,n                PiloteItemn            )n        )n    )n)

    Voilou… Je me rends compte que c’est très compliqué à expliquer comme ça par écrit.

    NOTE IMPORTANTE : si jamais ta liste dépasse les 2000 lignes, la seule solution pour s’en sortir c’est d’obliger l’utilisateur à filtrer D’ABORD sur le processus AVANT de filtrer sur les pilotes, tout en s’assurant que le premier filtrage sur le processus ne ramène pas plus, quant à lui, de 2000 lignes.

    CommentID=UDFzTeuzTofokdW, PostID=OwMnA3HFeAv42u0

  • R3dKap

    Membre
    1 février 2022 à 17h10 en réponse à: COMBOBOX interdépendants

    @S petit retard dans la livraison… 🙏

    Alors voilà les instructions…

    Pour faire mon test j’ai créé des listes qui ont exactement les mêmes colonnes que toi. Mes 2 listes déroulantes s’appellent cbxProcessus et cbxPilotes. Ma galerie s’appelle galSaara et j’ai aussi un toggle nommé togFilterData.

    Pour commencer, les 2 listes déroulantes sont alimentées comme ceci :

    cbxProcessus.Items = Choices(SAARA.CODEPROCESSUS)nncbxPilotes.Items = Choices(SAARA.PILOTEAD)

    Pour rappel, la structure d’un champ de type Personne est la suivante :

    {n    DisplayName: Blank();n    Claims: "i:0#.f|membership|" & Lower(User().Email);n    Department: Blank();n    Email: Blank();n    JobTitle: Blank();n    Picture: Blank()n}

    Pour la combo box cbxPilotes, j’affiche le champ DisplayName :

    cbxPilotes.DisplayFields = ["DisplayName"]ncbxPilotes.SearchFields = ["DisplayName"]

    Et bien sûr j’y ai activé la sélection multiple :

    cbxPilotes.SelectMultiple = true

    Ensuite, pour différentes raison que je vais essayer d’expliquer plus loin, je ne filtre pas la galerie directement sur la combo box des pilotes. Au lieu de cela, lorsque je change ma sélection de pilotes, je construis une collection colSaaraData avec les données filtrées.

    Cette collection je la remplis dans l’événement OnChange du toggle togFilterData :

    Clear(colSaaraData);nForAll(n    cbxPilotes.SelectedItems As SelItem,n    ForAll(n        Filter(n            AddColumns(n                SAARA,n                "PilotesClaims",n                PILOTEAD.Claimsn            ),n            (IsBlank(cbxProcessus.Selected) || CODEPROCESSUS.Value = cbxProcessus.Selected.Value) && SelItem.Claims in PilotesClaimsn        ) As PiloteItem,n        If(n            Not(PiloteItem.ID in colSaaraData.ID),n            Collect(n                colSaaraData,n                PiloteItemn            )n        )n    )n)

    Et donc sur la combo box cbxPilotes, dès lors qu’il y a un changement, je bascule une variable locale locFilterData qui va elle-même déclencher le OnChange du toggle togFilterData :

    cbxPilotes.OnChange = UpdateContext({locFilterSaara: Not(locFilterSaara)})nntogFilterData.Default = locFilterSaara

    Le OnChange tu toggle togFilterData qui filtre les données doit également être déclenché si je change de processus dans la liste déroulante cbxProcessus :

    If(n    Not(n        IsEmpty(cbxPilotes.SelectedItems)n    ), n    UpdateContext({locFilterSaara: Not(locFilterSaara)})n)

    On peut maintenant définir les éléments de la galerie. Pour cela, on considère 2 cas de figure : il n’y a aucun critère sur les pilotes et je filtre uniquement sur le processus ; dans tous les autres cas je dois filtrer à la fois sur les processus et les pilotes. Dans ce dernier cas, comme le travail est fait par le toggle, je me contente d’utiliser la collection qui en résulte.

    Voici donc le code du Items de la galerie :

    If(n    IsBlank(cbxPilotes.Selected), n    Filter(n        SAARA, n        IsBlank(cbxProcessus.Selected) || CODEPROCESSUS.Value = cbxProcessus.Selected.Value),n    colSaaraDatan)

    Voilà ce que ça donne au final :

    Je te mets ci-joint le package de l’application que j’ai faite. Comme j’ai utilisé les mêmes colonnes que toi, il devrait te suffire de supprimer mes 2 listes et que tu mettes les 2 tiennes pour que l’appli marche de ton côté. Sinon, n’hésite pas à revenir vers moi.

    Je vais expliquer dans un autre post ci-dessous la formule de filtrage du toggle…

    CommentID=MSZ0BZgSh1PIafy, PostID=OwMnA3HFeAv42u0

  • R3dKap

    Membre
    30 janvier 2022 à 20h31 en réponse à: COMBOBOX interdépendants

    Cher client,

    Votre commande est prête et sa livraison est cours…

    Livraison prévue le 31/01 dans la journée…

    😉

    CommentID=5eZYqWYAH7u4H7n, PostID=OwMnA3HFeAv42u0

  • R3dKap

    Membre
    28 janvier 2022 à 20h32 en réponse à: Deep linking to specific screen

    D’accord… Alors à ce moment-là la solution décrite par @Pierre Bourdial était la bonne : utiliser le StartScreen pour définir quel est le premier écran que l’application doit afficher.

    Mais avant ça il faut que tu aies un moyen pour ton application de différencier un admin d’un utilisateur classique. Par exemple tu peux avoir une liste SharePoint appelée Administrateurs dans laquelle tu as une colonne Admin de type Personne où tu renseigneras les utilisateurs qui sont des administrateurs pour cette application.

    A ce moment-là, sur l’objet App de ton application, tu choisis la propriété StartScreen :

    Et tu y mets ce code :

    If(n    IsBlank(n        LookUp(n        Administrateurs; n        Admin.Email = User().Emailn    )n    'Ecran Formulaire'n    'Ecran Admin';n)

    En gros, avec le LookUp() on recherche dans la liste des Administrateurs s’il y a un utilisateur qui correspond à l’utilisateur actuellement connecté, identifié avec la fonction User(). Si on n’en trouve pas (IsBlank()), c’est que l’utilisateur connecté n’est pas un administrateur et donc le premier écran que l’application va afficher c’est celui du formulaire. Dans le cas contraire, on a trouvé un administrateur dans la liste et donc c’est l’écran des admins qui est affiché.

    Est-ce que cela réponds à ton besoin ?

    Dis-nous si tu y arrives ou pas… Si tu bloques, pense à nous mettre une capture d’écran du problème en nous donnant le maximum d’informations.

    CommentID=6PBeTSfAQeCJ1xF, PostID=PUQn5fvB5eZ9EWm

Page 76 sur 84