Power PlateForm
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
Power Automate Add Field To ContentType
On 03/10/2024
Power Automate Add Field To ContentType (reference Microsoft)
Note the following restrictions on adding a field (column) to a content type using the REST service:
- Site Columns cannot be added to a content type using the REST service.
- You can add a field to a site content type only if the field already exists on the parent content type.
- You can add a field to a content type associated with a list only if the field already exists on the list. To add a completely new field to a list content type, you have to first add it to the list and then add it to the content type in a separate call to the REST service.
Invalid - Must not be used. The value = 0.
Integer - Specifies that the field contains an integer value. The value = 1.
Text - Specifies that the field contains a single line of text. The value = 2.
Note - Specifies that the field contains multiple lines of text. The value = 3.
DateTime - Specifies that the field contains a date and time value or a date-only value. The value = 4.
Counter - Specifies that the field contains a monotonically increasing integer. The value = 5.
Choice - Specifies that the field contains a single value from a set of specified values. The value = 6.
Lookup - Specifies that the field is a lookup field. The value = 7.
Boolean - Specifies that the field contains a Boolean value. The value = 8.
Number - Specifies that the field contains a floating-point number value. The value = 9.
Currency - Specifies that the field contains a currency value. The value = 10.
URL - Specifies that the field contains a URI and an optional description of the URI. The value = 11.
Computed - Specifies that the field is a computed field. The value = 12.
Threading - Specifies that the field indicates the thread for a discussion item in a threaded view of a discussion board. The value = 13.
Guid - Specifies that the field contains a GUID value. The value = 14.
MultiChoice - Specifies that the field contains one or more values from a set of specified values. The value = 15.
GridChoice - Specifies that the field contains rating scale values for a survey list. The value = 16.
Calculated - Specifies that the field is a calculated field. The value = 17.
File - Specifies that the field contains the leaf name of a document as a value. The value = 18.
Attachments - Specifies that the field indicates whether the list item has attachments. The value = 19.
User - Specifies that the field contains one or more users and groups as values. The value = 20.
Recurrence - Specifies that the field indicates whether a meeting in a calendar list recurs. The value = 21.
CrossProjectLink - Specifies that the field contains a link between projects in a Meeting Workspace site. The value = 22.
ModStat - Specifies that the field indicates moderation status. The value = 23.
Error - Specifies that the type of the field was set to an invalid value. The value = 24.
ContentTypeId - Specifies that the field contains a content type identifier as a value. The value = 25.
PageSeparator - Specifies that the field separates questions in a survey list onto multiple pages. The value = 26.
ThreadIndex - Specifies that the field indicates the position of a discussion item in a threaded view of a discussion board. The value = 27.
WorkflowStatus - Specifies that the field indicates the status of a workflow instance on a list item. The value = 28.
AllDayEvent - Specifies that the field indicates whether a meeting in a calendar list is an all-day event. The value = 29.
WorkflowEventType - Specifies that the field contains the most recent event in a workflow instance. The value = 30.
MaxItems - Must not be used. The value = 31.
Power Apps Limit 500 WorkArround
On 25/09/2024
Power Apps Limit WorkArround 500
The column Id hit type is counter, we cannot use it to filter if we have more than 500 items with "<" ou ">"
But with created we can use delegation with > and <
You can build a pagination with date filtering
App loading
button next
button previous
Restreindre les accès dans PowerApps
On 06/09/2024
Restreindre l'accès à certaines sections d'une application PowerApps en fonction des groupes SharePoint permet de s'assurer que seules les personnes ayant les bonnes autorisations peuvent accéder à certaines fonctionnalités ou à des informations sensibles. PowerApps permet d'utiliser des groupes SharePoint pour personnaliser l'interface utilisateur en fonction des autorisations des utilisateurs.
Voici les étapes pour configurer ces restrictions en fonction des groupes SharePoint :
1. Utiliser une connexion à SharePoint pour vérifier les groupes
Tout d'abord, vous devez ajouter la liste des groupes SharePoint à PowerApps. Vous pouvez utiliser la source de données SharePoint pour récupérer les groupes auxquels un utilisateur appartient.
# Étapes :
- Créez une liste SharePoint qui contient les informations des groupes SharePoint, ou utilisez la connexion directe à votre site SharePoint.
- Ajoutez SharePoint en tant que source de données dans PowerApps :
1. Dans PowerApps Studio, allez dans l'onglet Data.
2. Cliquez sur Add data.
3. Sélectionnez SharePoint et connectez-vous à votre site.
4. Choisissez une liste ou connectez-vous directement à votre site.
2. Utiliser la fonction `User()` pour identifier l'utilisateur courant
PowerApps fournit la fonction `User()` qui permet d'identifier l'utilisateur actuellement connecté et obtenir son adresse e-mail.
User().Email
3. Récupérer les groupes SharePoint d'un utilisateur
Pour vérifier si un utilisateur fait partie d'un groupe spécifique, vous pouvez utiliser la liste des groupes ou une connexion à SharePoint pour filtrer les groupes auxquels il appartient.
# Exemple de méthode :
Si vous avez une liste SharePoint appelée GroupesSharePoint avec une colonne `Title` (nom du groupe) et une colonne `Email` (adresse e-mail des membres du groupe), vous pouvez utiliser cette liste pour vérifier l'appartenance à un groupe.
If(
CountRows(
Filter(GroupesSharePoint, Email = User().Email && Title = "NomDuGroupe")
) > 0,
true,
false
)
Cela retourne `true` si l'utilisateur fait partie du groupe "NomDuGroupe", et `false` sinon.
4. Utiliser des conditions pour afficher/masquer des sections
Une fois que vous avez vérifié si un utilisateur appartient à un groupe spécifique, vous pouvez utiliser cette logique pour afficher ou masquer certaines sections ou contrôles de l'application PowerApps.
# Exemple :
Supposons que vous ayez une section de formulaire (par exemple un conteneur, une galerie, ou un bouton) que vous souhaitez rendre visible uniquement pour les membres du groupe "Administrateurs".
- Sélectionnez le contrôle que vous souhaitez masquer.
- Allez dans la propriété Visible du contrôle.
- Utilisez une expression conditionnelle basée sur l'appartenance au groupe SharePoint.
If(
CountRows(
Filter(GroupesSharePoint, Email = User().Email && Title = "Administrateurs")
) > 0,
true,
false
)
Cela rend le contrôle visible uniquement si l'utilisateur fait partie du groupe Administrateurs.
5. Restreindre l'accès à plusieurs groupes
Si vous souhaitez accorder l'accès à plusieurs groupes, vous pouvez ajuster la logique pour vérifier si l'utilisateur appartient à l'un des groupes autorisés.
# Exemple :
If(
CountRows(
Filter(GroupesSharePoint, Email = User().Email && (Title = "Administrateurs" || Title = "Managers"))
) > 0,
true,
false
)
Ici, l'utilisateur peut voir la section s'il fait partie soit du groupe Administrateurs soit du groupe Managers.
6. Alternatives sans liste SharePoint - Utiliser des groupes Office 365
Si vous ne voulez pas créer une liste SharePoint pour gérer les autorisations, vous pouvez également utiliser des groupes Office 365 auxquels les utilisateurs sont déjà associés. PowerApps peut récupérer les informations sur les groupes Office 365 à l’aide du connecteur Office 365 Groups.
# Étapes :
1. Ajoutez la source de données Office 365 Groups à PowerApps.
2. Utilisez la fonction `Office365Groups.ListGroupMemberships()` pour obtenir les groupes dont l'utilisateur fait partie.
# Exemple :
If(
CountRows(
Filter(Office365Groups.ListGroupMemberships().value, displayName = "NomDuGroupe" && userPrincipalName = User().Email)
) > 0,
true,
false
)
7. Masquer des Éléments de Menu ou des Boutons
Vous pouvez également utiliser cette logique pour masquer des boutons d'action ou des éléments de menu spécifiques pour des groupes d’utilisateurs.
# Exemple pour un bouton :
If(
CountRows(
Filter(GroupesSharePoint, Email = User().Email && Title = "Editeurs")
) > 0,
true,
false
)
Cela masque ou affiche le bouton uniquement si l'utilisateur appartient au groupe Editeurs.
Conclusion
En utilisant les listes SharePoint ou les groupes Office 365, vous pouvez facilement restreindre l'accès à certaines sections d'une application PowerApps en fonction des autorisations de l'utilisateur. Cela permet d'assurer un contrôle d'accès flexible et sécurisé sans dupliquer les informations d'authentification. En configurant les sections de votre application avec des contrôles conditionnels, vous pouvez personnaliser l'expérience utilisateur en fonction des rôles et des groupes définis dans SharePoint.
Power Automate Update ListItem ContentType
On 06/05/2024
Power Automate Update ListItem ContentType
With "Send an HTTP request to SharePoint"
Headers :
{
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose",
"X-HTTP-Method": "MERGE",
"If-Match": "*"
}
Power Automate We are unable to find the site address. Please try selecting a site address from the dropdown.
On 24/10/2023
Power Automate, cannot access to my site
We are unable to find the site address. Please try selecting a site address from the dropdown.
If you don't found your site in dropDown list or your site cannot be used
you can add you url manually in custom value, then you cannot select a list, but you can set id id of the list and it will work
get the id in your list when you navigate in your list setting
SKIP %7B and %7D
Save and it should be ok
The list ID should be replaced by the correct list title
Prevent Recursive Update
On 24/10/2023
How to prevent recursives update on trigger "When an item is created or modified"
add this in trigger settings, set your email (a service account) thaht will not launch the trigger
@not(equals(toLower(triggerOutputs()?['body/Author/Email']), 'service_account@test1.com'))
so with this settings you can perform an update in your flow without recursive trigger
PowerAutomate history Unexpected Error Unable To Fetch
On 21/04/2023
PowerAutomate history - Unexpected error. Unable to fetch
I my case to solve this issue, i press "ctrl + R" then "ctrl + F5", then i should wait a few minutes before opening les boxes and it's ok
If this error persists, you can download, full history in a csv file that you can analize, yes you need to rean JSON code and Sharepoint http requests
in your flow error message copy le run ID to seek it in your csv file in url
https://make.powerautomate.com/environments/Default-d035406542/solutions/b03b5e55-c8d9-ed11-a7c7-000d3a2726a5/flows/21fb6dc1-0412-3540684-f0a6881c120f/runs/08585210145218379217946437495CU195
Power Automate add line to Excel
On 29/03/2023
Copy an Excel file from a template with an Sharepoint Http request
/_api/web/getFileByServerRelativeUrl('/sites/test@{variables('TemplateFileName')}')/copyTo(strNewUrl='/sites/test@{variables('ExportFolder')}/@{variables('ExportFileName')}',bOverWrite=true)
Header
{
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose",
"X-HTTP-Method": "PATCH",
"If-Match": "*"
}
Create An Excel Table
Add your Datas in an Excel line
Line :
@{items('Appliquer_à_chacun_2')}
PowerAutomate Add Folder
On 10/02/2023
Powerautomate get folder by url
/_api/web/GetFolderByServerRelativeUrl('@{variables('WebserverRelativeUrl')}/@{variables('DoclibUrl')}/Fiche_@{variables('FicheId')}')
Verify status (exists = 200, does not exists = 404)
@{outputs('HttpGetFolder')['statusCode']}
{
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose" "If-Match": "*"
}
Create folder
/_api/web/folders/add('@{variables('DoclibUrl')}/Fiche_@{variables('FicheId')}')
PowerAutomate Try Catch
On 06/12/2022
Try catch in power automate
{
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"startTime": {
"type": "string"
},
"endTime": {
"type": "string"
},
"trackingId": {
"type": "string"
},
"clientTrackingId": {
"type": "string"
},
"clientKeywords": {
"type": "array",
"items": {
"type": "string"
}
},
"code": {
"type": "string"
},
"status": {
"type": "string"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
},
"required": [
"name",
"startTime",
"endTime",
"trackingId",
"clientTrackingId",
"clientKeywords",
"code",
"status",
"error"
]
}
}
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"location": {
"type": "string"
},
"tags": {
"type": "object",
"properties": {
"flowDisplayName": {
"type": "string"
},
"environmentName": {
"type": "string"
},
"logicAppName": {
"type": "string"
},
"environmentWorkflowId": {
"type": "string"
},
"xrmWorkflowId": {
"type": "string"
},
"environmentFlowSuspensionReason": {
"type": "string"
},
"sharingType": {
"type": "string"
}
}
},
"run": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
concat('https://emea.flow.microsoft.com/manage/environments/', body('Analyser_JSON')?['tags']?['environmentName'], '/flows/', body('Analyser_JSON')?['name'], '/runs/', body('Analyser_JSON')?['run']?['name'])
a href="@{outputs('LinkToWfHisto')}">@{workflow()?['tags']?['flowDisplayName']} a
PowerAutomate Date Format
On 30/09/2022
formatDateTime('2009-06-15T13:45:30', 'M/dd/yyyy h:mm tt') 6/15/2009 1:45 PM
formatDateTime('2009-06-15T13:45:30', 'dd/MM/yyyy') 15/06/2009
formatDateTime('2009-06-15T13:45:30', 'd/M/yyyy') 15/6/2009
formatDateTime('2009-12-15T13:45:30', 'dddd/MMMM/yyyy') Tuesday/December/2009
formatDateTime('2009-12-15T13:45:30', 'ddd/MMM/yyyy') Tue/Dec/2009
PowerAutomate Functions
On 21/04/2022
Concat
concat(outputs('Compose'),'test')
Get user mail in REST results
items('Appliquer_à_chacun')?['MyUser']?['EMail']
Add 10 Days
addDays(utcNow(),10)
Get JSON data
body('parameterJSON')?['Relaunch1nbDays']
body('myGet')?['value']
Get variable value
variables('RelaunchDate1')
Check data is empty
if(empty(variables('userMail')), null, variables('userMail'))
Date formatting
formatDateTime(your-value, 'dd/MM/yyyy hh:mm tt')
image base64 to <img>
Get_file_content_using_path_2')['$content'] //the $ is important
<img class="logo" src="data:image/jpeg;base64, @{body('Get_file_content_using_path_2')['$content']}" alt="My Image" />
Power Automate Check User Exists
On 24/01/2022
/_api/web/ensureuser
content-type application/json; odata=verbose
{'logonName': '@{variables('userMailToCheck')}'}
@{outputs('Send_an_HTTP_request_to_SharePoint')['statusCode']}
PowerApps Build String To Link
On 31/05/2021
Powerapps build your string to creae an html link
<div style="background-color:#000000;width:100%;"><code><a href="https://mySP.sharepoint.com/sites/DfSite/Lists/Initiatives/DispForm.aspx?ID="; InitiativeId; "" style="color:#FFFFFF;height:100px">";SelectedInitiative.Titre;"</a></code></div>
Powerautomate Add Comment To ListItem
On 27/05/2021
Add comment to ListItem with powerautomate (http Sharepoint request)
{
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose"
}
PowerAutomate Update ListItem HTTP REST
On 27/05/2021
Update a list item with http request with powerautomate
{
"Accept": "application/json; odata=verbose",
"content-type": "application/json; odata=verbose",
"X-HTTP-Method": "MERGE",
"If-Match": "*"
}
Powerautomate Extract Data From Json Array
On 31/03/2021
Powerautomate Extract Data From Json Array
{
"fieldsMapping":[
{
"sourceFieldName": "Title2",
"sourceFieldTypeAsString": "Text",
"targetFieldName": "Title",
"targetFieldTypeAsString": "Text"
},
{
"sourceFieldName": "Title",
"sourceFieldTypeAsString": "Text",
"targetFieldName": "OtherTexteField",
"targetFieldTypeAsString": "Text"
}
]
}
items('Appliquer_à_chacun')?['sourceFieldName']
this command above will put sourceFieldName value in CurrentDataName variable
this command above will put sourceFieldName value in CurrentDataName variable