Creer un fichier PDF a partir d'un élément d'une liste sharepoint

Étiquetté : , ,

  • Creer un fichier PDF a partir d'un élément d'une liste sharepoint

    Posté par MaXime sur 16 mai 2023 à 18h21

    Bonjour à tous.

    Je demande votre aide afin de me débloquer sur un point.

    J’ai créé une application powerapps pour mon entreprise, en mobilité, mes collaborateurs saisissent des formulaires, les données apparaissent dans leur liste sharepoint correspondante.

    J’aurais souhaité qu’à chaque nouvelle ligne créé sur la liste sharepoint ( donc un formulaire rempli sur powerapps), un fichier PDF avec les données soit automatiquement créé dans un dossier one drive.

    Actuellement la seule solution que j’ai trouvé avec power automate, est la suivante, la liste sharepoint est exportée en excel. Je choisis la ligne sur excel et lance le flux, ce flux me rempli un modèle Word et me l’enregistre sur mon dossier one drive. Puis, je le passe en pdf. Cela représente beaucoup de manipulations.

    Je voudrais qu’un fichier PDF soit créé automatiquement dès qu’une ligne est créé sur ma liste sharepoint. Soit en remplissant un modèle Word ou simplement une page blanche avec les données, peu importe, le temps que cela se fait automatiquement.

    Merci d’avance pour votre aide

    PostID=tJsdq6QrQlQn3Gj

    Geoffroy a répondu Il y a 11 mois, 3 semaines 1 Membre · 13 Réponses
  • 13 Réponses
  • DavidZed

    Membre
    16 mai 2023 à 19h54

    Bonjour MaXime ,

    Pour te donner les grandes lignes :

    Il te faut partir du déclencheur Sharepoint : “quand un nouvel élément est créé”

    Ensuite, à l’aide d’une action Message / Compose, agencer les données dans un tableau HTML :

    <html><head><style>table {n  font-family: arial, sans-serif;n  border-collapse: collapse;n  width: 100%;n}ntd, th {n  border: 1px solid #dddddd;n  text-align: left;n  padding: 8px;n}ntr:nth-child(even) {n  background-color: #dddddd;n}n</style></head><body>n<h2>Nouvel item enregistré :</h2>n  <table><tr>    <th>Attribut</th>    <th>Valeur</th>  </tr>n<tr><td>ID</td><td>@{triggerOutputs()?['body/ID']}</td></tr>n<tr><td>Titre</td><td>@{triggerOutputs()?['body/Title']}</td></tr>n<tr><td>Date</td><td>@{triggerOutputs()?['body/DateTime']}</td></tr>n<tr><td>Choix</td><td>@{triggerOutputs()?['body/Choice/Value']}</td></tr>n<tr><td>Email</td><td>@{triggerOutputs()?['body/Email']}</td></tr>nn</table></body></html>

    et enfin la partie OneDrive, un peu fastidieuse : On crée un fichier temporaire, on le converti en PDF, on crée le fichier pdf et on efface le html temporaire :

    et voilà le résultat dans le dossier onedrive :

    CommentID=VYJFN0bTvvB2ckp, PostID=tJsdq6QrQlQn3Gj

  • Geoffroy

    Membre
    16 mai 2023 à 20h14

    Bonjour MaXime

    En complément de la solution proposée par DavidZed , si tu disposes d’un accès aux connecteurs Premium de Power Automate, tu peux utiliser les deux connecteurs Word Online ci-dessous.

    En insérant des contrôles de texte brut dans ton fichier word, tu peux leur attribuer les valeurs des champs de ton enregistrement SharePoint.

    CommentID=XcZIeW1zHZR08XN, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    17 mai 2023 à 10h00

    Merci beaucoup. Cela fonctionne, le seul problème que j’ai c’est pour les réponses à choix multiple dans ma liste en sélectionnant l’item correspondant se terminant par “value” cela me renvoi un ” appliquer a chacun” .

    CommentID=iVO9FqIFB8gfP0d, PostID=tJsdq6QrQlQn3Gj

  • DavidZed

    Membre
    17 mai 2023 à 10h05

    alors il faut les concatener avec l’expression concatenante([ColonneValue],'Séparateur')

    CommentID=JP3wvvQDpjPgqZO, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    17 mai 2023 à 20h31

    Un grand merci pour le coup de pouce

    CommentID=IgkC8PAQd00x03u, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    22 mai 2023 à 19h15

    Merci DavidZed pour votre coup de main, garce a vous j’ai réussi à créer mes flux sur la plupart de mes listes. Sauf quelques unes où lorsque je choisis la formule “concat” je ne retrouve pas ma sélection avec la terminaison “Value” pourtant c’est bien le libellé d’une colonne à choix multiple

    CommentID=19sGDhNTy9t6uXH, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    24 mai 2023 à 10h36

    Bonjour, je ne sais pas si je me trompe et si cela peux se contourner mais j’ai l’impression que lorsqu’une colonne de ma liste sharepoint comporte une possibilité de selectionner plusieurs choix, sur power automate pour faire apparaitre les différentes sélections, je ne retrouve pas le contenu dynamique le “nom de colonne Value” ( après avoir choisi l’expression concat()) je ne trouve que “Nom de colonne” sans la terminaison Value, et dès que le fichier HTML et le PDF se créent cela ne me reporte pas les valeurs sélectionnées mais plutot ceci :

    CommentID=nVuW47WqacZEuAF, PostID=tJsdq6QrQlQn3Gj

  • DavidZed

    Membre
    24 mai 2023 à 12h17

    Hello MaXime , voici un exemple pour bien comprendre comment est structurée la donnée sur une colonne à choix multiple :

    En 1, c’est l’item de ta liste, ma colonne de choix multiples se nomme “Choices”

    En 2, on peut voir que la donnée est stockée dans 2 collections (ou tables), une simple avec seulement les ID des choix, l’autre plus complexe avec un enregistrement qui contient le odata.type, l’Id et la Valeur (le point 3) qui nous intéresse

    Je t’ai induit en erreur avec l’expression concat(), c’est une confusion de ma part avec la même expression dans Power Apps qui permet de l’utiliser avec une table : Concat( Source,’Nom de colonne’, “Séparateur”) or dans power automate, l’expression concat() ne permet que de concaténer des strings de texte.

    Il y a donc deux solutions :

    • La plus simple, mais moins optimisée :

    Initialiser une variable string, mettre un for each et ajouter à la variable chaque valeur, précédée du spérateur. Exemple

    • la seconde, plus complexe, mais plus efficace, utiliser la fonction xpath(), par exemple dans un compose/message :

    join(xpath(xml(json(concat('{"body":{"value":', item()?['NOM_DE_LA_COLONNE'] , '}}'))), '/body/value/Value/text()'), ', ')

    ce qui donne :

    Si tu n’es pas dans une boucle for each (si tu récupères seulement une ligne) , il faudra remplacer le item()?['NOM_DE_LA_COLONNE'] par la valeur dynamique de la colonne

    CommentID=MHsVsTBmhwIBiE8, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    24 mai 2023 à 18h20

    Bonjour DavidZed encore une fois merci beaucoup pour ta précision. J’ai choisi la seconde solution et cela fonctionne parfaitement.

    CommentID=cz1n39OTeJkoYa8, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    31 mai 2023 à 21h14

    Bonjour DavidZed

    J’ai besoin d’un coup de pouce, j’essaie tant bien que mal de “customiser” le fichier html ( je n’y connais rien en html) afin que le pdf final soit un peu plus sexy, j’essaie déja de mettre un logo, j’arrive à intégrer une photo qui apparait bien sur le fichier html, mais pas de chance, lorsque celui-ci est converti en PDF, l’image disparait. En le convertissant en PDF à la mano sur un site web cela fonctionne, j’en déduit que ça vien probablement de power automate..

    Si ça peut aider voici l’image, elle est stockée sur Cloudinary

    Le flux powerautomate

    Voici comment l’image apparait sur le PDF :

    CommentID=V7rSic1wapiDi09, PostID=tJsdq6QrQlQn3Gj

  • Geoffroy

    Membre
    31 mai 2023 à 21h47

    Bonjour MaXime

    J’ai été confronté au même problème et j’avais trouvé cette astuce sur le net.

    Je remplace l’adresse de l’image dans mon texte html par le mot ‘logo’ comme ci-dessous. Dans mon flux, le texte html arrive dans le corps d’un email qui déclenche le flux.

    Je commence par créer une variable de type chaine avec la fonction dataUri, que j’appelle logo.

    Ensuite, le flux va remettre le contenu de la variable logo à la place du mot ‘logo’ dans le texte html, à l’aide de la fonction split.

    J’espère que c’est compréhensible et que ça pourra t’aider.

    CommentID=RjdzqzBHfDuv3hb, PostID=tJsdq6QrQlQn3Gj

  • MaXime

    Membre
    1 juin 2023 à 6h34

    Bonjour Geoffroy WAGNER Merci pour la réponse, j’ai juste un doute sur une chose, à quelle étape de mon flux dois-je réaliser cette procédure ?

    CommentID=Yi18Dhu0IZw7esV, PostID=tJsdq6QrQlQn3Gj

  • Geoffroy

    Membre
    1 juin 2023 à 9h23

    Juste avant de créer le fichier html. Dans mon flux, ma variable txtHTML devient le contenu du fichier créé.

    CommentID=UCkcdL1YgIggmWN, PostID=tJsdq6QrQlQn3Gj

Connectez-vous pour répondre.