Vous êtes un développeur de solutions Low-Code sur la Microsoft Power Platform utilisant l’outil Microsoft Power Apps pour créer des applications qui suivent un processus métier défini, vous utilisez Microsoft SharePoint pour la sauvegarde permanente de vos données, il vous est probablement arrivé de vouloir pour une étape donnée du processus enregistrer des fichiers depuis votreapplication pour la liste SharePoint correspondante mais PROBLÈME : vous ne parvenez pas à afficher des fichiers en particulier, tous le fichiers sont affichés au même moment 😭.

Pas de panique, ne changez pas votre besoin, changez d’approche 😉 !

Alors comment grouper les pièces-jointes à une liste SharePoint par catégories sur une application Canvas PowerApps?

Commençons par parlez de l’upload des fichiers sur PowerApps

Sur PowerApps l’une des méthodes pour travailler avec des fichiers c’est d’utiliser le champs Attachments (Pièces-jointes en français) qui ne nous offre pas de grandes possibilités autres que l’upload des fichiers et la suppression des fichiers. Les fichiers contenus dans le ce champ seront attachés à un élément de la liste SharePoint utilisée pour la sauvegarde. Ceci est son fonctionnement classique pour un usage basique. Alors vous voulez par exemple ne pas afficher certains fichiers dans ce champ, voici l’une des limites du champ Attachment.

Comment filtrer les fichiers dans le champ Attachments de PowerApps ?

L’application que nous souhaitons réaliser est la suivante :

1 : Le camp principal qui nous permet d’uploder des fichiers

2, 3, 4 : Le champs qui nous permet d’afficher des fichiers d’une catégorie particulière

5 : Champs de sélection qui nous permet de sélectionner la catégorie du fichier à importer

Application objective

1.     Créons une application canvas PowerApps

2.     Créons une liste SharePoint pour le stockage de nos données

La structure de notre liste (EmployeeList) sera pour la suivante

3.     Créons sur notre application PowerApps un formulaire basé sur notre liste SharePoint

4. Ajoutons notre liste aux sources de données de notre application

EmployeeList

 

Par la suite ajoutons notre formulaire et à sa source de donnée ajoutons notre liste SharePoint créée.
Ajoutons quatre cartes contenant des champs de type Attachments sur notre application dont un pour la sélection et les trois autres pour l’affichage par catégorie.

5. Ajoutons à notre application le champ de sélection de catégories que nous spécifions dans la propriété items.

SortByColumns(
    ["CV";"Personal";"Receipt"];
    "Value";
    Ascending
)

 

6. Par la suite nous allons définir une collection dans la propriété OnStart de l’application

Cette collection doit contenir nos fichier joint (on verra plus en détail 😉)

ClearCollect(

  colAttachments;

  Defaults(EmployeeList).'Pièces jointes'

)

 

Par défaut cette collection prend une ligne vide de notre liste SharePoint en conséquence, nous risquons très peux d’avoir de problèmes.

Sur la notre champ qui nous permet d’ajouter les pièces-jointes, ajoutons les configurations suivantes

7. Sur la propriété OnAddFile Ajoutons ce code :

//Define the collection with principal file picker contol
ClearCollect(
    colAttachments;
    Self.Attachments
);;

//Update the file collection if the current added file dont have the name which start with the value of a filter
UpdateIf(
    colAttachments;
    !(First(
        Split(
            DisplayName;
            "-"
        )
    ).Result in ["CV" ;"Personal";"Receipt"]);
    {
        Name: ddlFilter.Selected.Value & "-" & Name;
        DisplayName: ddlFilter.Selected.Value & "-" & DisplayName
    }
)

Dans ce code nous disons à PowerApps d’ajouter le fichier si sn nom d’affichage ne commence pas par un de nos filtres. Si e n’est pas le cas alors, on ajoute le fichier dans la collection de fichiers en préfixant son nom et son nom d’affichage de la valeur du filtre sélectionné.

8. Sur la propriété OnRemoveFile, faisons :

//Define the collection with principal file picker contol
ClearCollect(
    colAttachments;
    Self.Attachments
);;
//Remove the file in the collection if the name look like the name with filter value
RemoveIf(
    colAttachments;
    ddlFilter.Selected.Value & "-" & Name = Name
)

Dans ce code nous disons à PowerApps de retirer de notre collection le fichier si son nom correspond au nom préfixé de la valeur du filtre sélectionné.

9. Les éléments de ce champ sont donc « la collection de fichiers colAttachments »

//Collection of PJ
colAttachments

Maintenant que tout est fait sur ce champ, ainsi configurons ceux qui doivent afficher chaque catégorie de fichiers.

10. La configuration à faire est de filtrer la collection de fichiers en fonction d’une catégorie précise. Comme ceci :

Filter(
    colAttachments;
    (First(
        Split(
            DisplayName;
            "-"
        )
    ).Result = "Personal")
)

« Personal » étant le libellé d’une catégorie définie.

Filter(
    colAttachments;
    (First(
        Split(
            DisplayName;
            "-"
        )
    ).Result = "CV")
)

« CV » étant le libellé d’une catégorie définie.

Filter(
    colAttachments;
    (First(
        Split(
            DisplayName;
            "-"
        )
    ).Result = "Receipt")
)

« Receipt » étant le libellé d’une catégorie définie.

En plus de la propriété Items, il faut rendre ce champ on éditable pour éviter des confusions.

Le résultat doit être similaire à ceci

Tout est configuré, vous pouvez juste tester et profiter de l’astuce😊

 

Pourquoi utiliser un tel filtre ?

Pour quelles raisons pouvons-nous utiliser cette astuces🤔❓

  • Une liste SharePoint ne possède qu’une seule colonne pour l’enregistrement des Pièces-jointes, cependant dans votre application métier vous avez besoin de récupérer les fichiers à plusieurs niveaux d’utilisation ce qui pose comme problème qu’un utilisateur peut supprimer le fichier uploadé par un autre.
  • Vous souhaitez envoyer par mail certains fichiers uplodés depuis PowerApps mas ce n’est pas quand vous mettez en place le flux il devient difficile à implémenter
  • Vous êtes juste un CURIEUX qui souhaite apprendre de nouvelles astuces😁

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.