PowerApps

PowerApps Functions

On 30/09/2022

PowerApps functions

Parse text to number

    Filter('Workflow Tasks'; ID = Value(txtId.Text))

Add datas (listItem)

    Patch(NewVoie;Defaults(NewVoie);{Num_x00e9_rovoie:"0"&LookUp(NewVoie;ID=1).Num_x00e9_rovoie}))

Update context, and forms datas

    SubmitForm(FormBeneficiaires);;ResetForm(FormBeneficiaires);; NewForm(FormBeneficiaires);; UpdateContext({showPopup:false});

        If(IsBlankOrError(SubmitForm(Form1)), Set(saveStatus, "An error occured" & Form1.Error), Set(saveStatus, "Operation succeded"))

Navigate to another form

    Navigate(Page_infos_enregistrements)

Get query string parameter and set a variable

    Set(InitiativeId; Param("ID"))

Getquerystringparam

 

Get a field from your datasource by ID

    First(Filter(Initiatives; ID=1)).Nom

 

And Or Not

Or(And(Radio1.Selected.Value=4; !IsBlank(txtComment.Text));Radio1.Selected.Value<4)

 

Update Lookup Field

Patch(
        ResultatAnalyses;
        First(//here item to update
            Filter(
                ResultatAnalyses;
                Affaire.Id = currentAffaire.ID And Analyse.Id = ThisItem.ID
            )
        );
        {
            Title: "notused";
            Commentaires: txtGalComment.Text;
            Gravite: Rating1.Value;
            Affaire: {//lookup field name
                Id: currentAffaire.ID;//id of lookup
                Value: LookUp(
                    Affaires;//list who contains lookup value
                    ID = currentAffaire.ID;//id of lookup
                    currentAffaire.Title//title of lookup value
                )
            }
        }
    )

Patch Choice

TypeIntervention: {Value: dtvTypeIntervention.Selected.Value}

Execute automate with json

'My workflow'.Run(
	JSON(
		{
			SolutionId: selectedSolution.ID,
			ImageContent: UploadedImage14.Image
		},
		JSONFormat.IncludeBinaryData
	)
);

Reg ex to get cleaned string

Clear(AttachmentsCollection);
ForAll(
      RenameColumns(DataCardValue91.Attachments, "Name", "Name1"),
      Collect(
             AttachmentsCollection,
             Name1
      )
);Set(Title1, First(AttachmentsCollection).Value);Set(FileName1, Concat( Split(First(AttachmentsCollection).Value, "" ), If( IsMatch(Result, "([^A-Za-z0-9\.\-])" ), "",Result ) ))

Save Form

SubmitForm(Form1);;If(!IsBlankOrError( Form1.Error); Notify("Une erreur est survenue lors de la sauvegarde " & Form1.Error; NotificationType.Error);Notify("La savegarde a réussi";NotificationType.Information);;Set(currentElement; Form1.LastSubmit))

 

Sort columns


Set(Month, Distinct(SortByColumns(CurrentMonthMails, "Year", Ascending, "Month", Ascending), Month))

Set date


Set(StartDate, DateAdd(DateTimeValue( Day(Today) &"/"& Month(Today) &"/"& Year(Today) &" 00:00:00"), -30));

Sum


Sum(Filter(CurrentMonthMails, Month = ThisItem.Result ), uniqMails)

 

Power Apps Send JSON to Power Automate

On 31/10/2024

Use JSON to set your object or array

And in your power automate use ParseJSON

Powerappsjson

Optimisation de la connexion à des listes SharePoint de grande taille dans PowerApps

On 06/09/2024

L'optimisation de la connexion à des listes SharePoint de grande taille dans PowerApps est cruciale pour assurer des performances fluides, surtout lorsque vous travaillez avec un grand volume de données. Voici quelques bonnes pratiques et techniques pour optimiser cette connexion.

 1. Limiter les enregistrements récupérés avec des filtres

Lorsque vous travaillez avec des listes SharePoint volumineuses (plus de 5000 éléments), il est essentiel de limiter le nombre d’enregistrements récupérés à l’aide de filtres.

- Utilisez des filtres spécifiques dans votre source de données pour limiter le nombre d'enregistrements. PowerApps applique une limite de 500 enregistrements par défaut (modifiable jusqu’à 2000), donc réduire la quantité de données à charger via des filtres est un bon point de départ.
  
Exemple : Filtrer les éléments à récupérer en fonction d'une condition.

powerapps


Filter(SharePointList, Status = "Active")


 2. Utiliser les fonctions déléguées

PowerApps utilise un concept appelé délégation pour gérer les grandes quantités de données en SharePoint. Lorsqu'une opération est déléguée, elle est effectuée côté serveur, ce qui permet de récupérer uniquement les données pertinentes.

- Utiliser des fonctions déléguées comme `Filter()`, `Sort()`, `LookUp()` qui sont prises en charge par SharePoint.
  
Exemple : Déléguer une opération de filtrage.

 


Filter(SharePointList, Created > Today() - 30)

Cela récupérera uniquement les éléments créés au cours des 30 derniers jours, tout en déléguant l'opération au serveur SharePoint.

 

 3. Éviter les fonctions non déléguées

Certaines fonctions dans PowerApps ne prennent pas en charge la délégation, ce qui signifie que l'application devra d'abord récupérer toutes les données côté client avant de pouvoir traiter la requête, ce qui ralentit considérablement l'application.

- Exemple de fonctions non déléguées : `Len()`, `StartsWith()`, `Mid()`, etc. Évitez-les dans vos requêtes si vous travaillez avec des listes de grande taille.

Mauvais exemple (non délégué) :


Filter(SharePointList, Len(Title) > 10)


 4. Limiter les colonnes récupérées (fonction `ShowColumns`)

Si vous n'avez pas besoin de toutes les colonnes de la liste SharePoint, utilisez la fonction `ShowColumns()` pour ne récupérer que les colonnes nécessaires, réduisant ainsi la charge sur le réseau et la performance.

Exemple :


ShowColumns(SharePointList, "Title", "Status", "DueDate")


Cela récupère uniquement les colonnes `Title`, `Status`, et `DueDate` de votre liste SharePoint.

 5. Pagination pour charger les données par lot

Pour des listes de très grande taille, vous pouvez implémenter une pagination dans PowerApps, en chargeant les données par lots pour éviter de récupérer un trop grand volume de données d'un coup.

Exemple de pagination (en fonction d'un ID de liste) :


ClearCollect(colPagedItems, Filter(SharePointList, ID > Last(colPagedItems).ID))

Cela permet de récupérer les éléments par lots en fonction de l'ID et d'ajouter chaque lot aux données précédentes.

 6. Utiliser des index de colonnes SharePoint

SharePoint permet d’indexer les colonnes dans les listes pour améliorer la performance des requêtes. Si vous effectuez des filtres sur une colonne particulière dans PowerApps, assurez-vous que cette colonne est indexée dans SharePoint.

- Exemple de colonnes à indexer : Colonnes souvent filtrées comme `Created`, `Modified`, ou des colonnes personnalisées.

Pour ajouter un index, dans la liste SharePoint :
- Allez dans Paramètres de la liste > Colonnes indexées > Créer un index.

 7. Utiliser des collections temporaires

Lorsque vous travaillez avec des données statiques ou peu modifiées, vous pouvez stocker temporairement les données SharePoint dans des collections PowerApps pour éviter de faire plusieurs appels réseau.

Exemple :


ClearCollect(TempCollection, SharePointList)


Une fois les données chargées dans la collection `TempCollection`, vous pouvez manipuler ces données localement sans avoir à refaire des requêtes vers SharePoint.

 8. Éviter les contrôles de galerie chargés de manière excessive

Lorsque vous utilisez des galeries pour afficher des données provenant de SharePoint, essayez de limiter le nombre d’enregistrements chargés simultanément. Trop de données affichées à la fois peut entraîner des ralentissements, surtout si chaque élément de la galerie a plusieurs contrôles.

- Conseil : Affichez une quantité limitée d’éléments et ajoutez une pagination ou un bouton "Charger plus".

 9. Désactiver l’actualisation automatique

Par défaut, certaines actions ou modifications dans PowerApps provoquent une actualisation automatique des données. Cela peut entraîner des ralentissements si de grandes quantités de données sont régulièrement rafraîchies.

- Conseil : Désactivez l’actualisation automatique pour les sources de données non essentielles et effectuez des rafraîchissements manuels uniquement lorsque nécessaire.


Refresh(SharePointList)


 10. Utiliser Power Automate pour des tâches complexes

Si vous avez besoin de traiter de grandes quantités de données ou d’exécuter des tâches complexes, envisagez d’utiliser Power Automate (anciennement Microsoft Flow) pour traiter ces opérations en arrière-plan, puis renvoyer les résultats dans PowerApps.

Exemple : Utilisez Power Automate pour rechercher et filtrer des éléments dans une liste SharePoint volumineuse, puis retournez uniquement les données filtrées à PowerApps.

 

 Conclusion

En suivant ces bonnes pratiques, vous pouvez optimiser la connexion de vos applications PowerApps à des listes SharePoint de grande taille. L'utilisation de filtres délégués, la limitation des colonnes récupérées, l’indexation des colonnes, et la pagination vous permettront de maintenir des performances optimales tout en améliorant l'expérience utilisateur.