Cumul de ligne de table enfant depuis la table parent
-
Cumul de ligne de table enfant depuis la table parent
Posté par Djamchid sur 27 mai 2024 at 17h30Hello la communauté,
Je cherche à pallier à l’inconvenient de la colonne de cumul calculée sur Dataverse qui s’éxécute selon une fréquence planifiée.
L’idéale serait que ma colonne de cumul de la table parente (liées à une table enfant par une colonne de recherche) qui calcule la somme des valeurs d’une colonne de la table enfant s’éxécute à chaque fois la table enfant est modifiée.
J’ai tenté de pallier au problème via un flux power automate mais j’ai été limité par le fait qu’il est impossible d’utiliser les valeurs de la colonne de recherche pour filtrer les données récupérées dans la table enfant.
Comment gérez vous cette problématique ? J’ai suis preneur des bonnes pratiques et des retours d’expérience.
Djamchid a répondu 5 months, 2 weeks ago 2 Membres · 17 Réponses -
17 Réponses
-
Je ne suis pas certain de comprendre la limitation dont tu parles.
Peux tu expliciter?
-
Concernant le flux automate, il s’avère que pour l’action lister lignes, je peux récupérer des valeurs de la table enfant dans les colonnes de mon souhait sauf pour la colonne de recherche. Quand je lui indique le nom de la colonne de recherche en sélection ou en filtre (j’ai éffectué plusieurs tests), il me renvoi un message d’erreur indiquant que la colonne est introuvable sur le type
Microsoft.Dynamics.CRM.
.Pour plus d’information,
J’ai deux tables, “Devis clients” relié par sa colonne iddevis à la table “Ligne de devis” par une colonne de recherche nommé iddevisclient.
Dans la table “Ligne de devis” figure une colonne montanthtlignededevis.
Dans la table “Devis clients” figure une colonne montanthtdevis, dont la valeur doit être la somme de montanthtlignededevis pour chaque iddevis.
La colonne de calcul cumulée remplirai bien cette tache mais le montant total d’un devis dois s’afficher à la modification du devis et non selon une fréquence horaire.
Un flux power automate permet de renseigner la colonne montanthtdevis en calculant la somme de la colonne montanthtlignededevis, le seul incovénient et que je ne peux pas filtrer ces valeurs sommées par la colonne iddevisclient car power automate n’arrive pas à appeler une colonne de recherche dans l’action “List row” (lister les lignes).
-
Alors en fait, ça n’est pas une limitation mais pour les colonnes de recherche, il faut utiliser _nom-du-champ_value au lieu de nom-du-champ
je pense que tu réussiras à faire ce que tu veux une fois cette notation utilisée
-
Chatgpt4 m’a dit la même chose avant de me retourne vers la communauté😅, ça n’as pas marché.
-
Affirmatif, mon erreur était sur l’absence du “_” en début d’écriture.
Mon problème n’est pas résolu pour autant. Dans ma colonne iddevisclient (colonne recherche), les valeurs sont les suivants :
Sur un simple flux automate pour tester la récupération de ces valeurs, le résultat est différent, au lieu d’avoir des numéros de devis, je retrouve des numéros qui ressemblent typiquement à des GUID.
-
Il faut rajouter un $expand qui va permettre de récupérer la donnée de la table liée OU utiliser la notation pour afficher la valeur formatée de la colonne de recherche qui contiendra le libellé attendu.
je te précise tout ça demain si nécessaire
-
De retour!
Donc, pour afficher la valeur du champ principal de la table issue de la colonne de recherche, tu peux faire:
items('Apply_to_each')?['_cr3d3_iddevisclient_value@OData.Community.Display.V1.FormattedValue']
ou alors, tu peux rajouter un expand dans ta requête, qui devrait ressembler à peu près à ça:
cr3d3_iddevisclient($select=cr3d3_name)
Et pour la récupération, ca donnerait:
items('Apply_to_each')?['cr3d3_iddevisclient/cr3d3_name']
A noter, que le terme pour l’expand doit être le nom de schéma de la colonne de recherche (qui respecte la casse, donc). Ca peut être un truc du genre
cr3d3_IDDevisClient
, faut que tu regardes dans les personnalisations pour avoir le bon terme -
Bonjour,
J’ai testé la première solution (select columns = items(‘Apply_to_each’)?[‘_cr3d3_iddevisclient_value@OData.Community.Display.V1.FormattedValue’])et reçu le message d’erreur suivant,
Ensuite j’ai testé la deuxième solution. Les informations que je cherche se trouvant dans la colonne cr3d3_iddevis de la table associée à celle de la colonne de recherche, j’ai essayé les paramètres suivant sans succès pour l’Expand Query (toujours avec le paramétrage select columns = _cr3d3_iddevisclient_value):
cr3d3_iddevisclient($select=cr3d3_iddevis)
_cr3d3_iddevisclient_value($select=cr3d3_iddevis)
_cr3d3_iddevisclient_($select=cr3d3_iddevis)
_cr3d3_iddevisclient($select=cr3d3_iddevis)
J’’ai toujours un message du style
-
Je ne reconnais pas les écrans qui présentent les messages d’erreur (c’est copilot?)
Mais je suis certain de mon coup, le @OData.Community.Display.V1.FormattedValue devrait fonctionner, je l’utilise régulièrement…
Peux tu montrer une capture d’écran du List Rows?
Pour l’expand, il faut utiliser le nom de schéma qui est sensible à la casse. Regarde dans les propriétés de la colonne pour trouver le nom de schéma. C’est lui qu’il faut utiliser dans l’Expand.
-
Je te réponds ASAP pour le @OData.Community.Display.V1.FormattedValue.
Pour l’Expand Query, en effet, il faut utiliser utiliser le nom du schéma, mon erreur a était l’utilisation du nom logique.
-
Affirmatif pour le message d’erreur, c’est bien une capture du Copilot.
-
-
L’Odata aussi fonctionne.
J’ai retenu cette méthode pour mettre à jour mon flux permettant de sommer le montant des lignes de devis.
Je peux maintenant incrémenter les sommes dans une variable et envoyer un mail pour chacun des résultats, grâce aux paramétrages ci-dessous, et comme j’ai deux devis, je reçois mes deux mails avec mes deux sommes correctes. Il me reste un dernier point de blocage qui est la mise à jour des deux lignes de la table “Devis client” grâce à cette variable qui somme les montant de la table “Lignes de devis”.
En ajoutant une action Update a row pour la table ligne de devis, je peux spécifier le Row ID avec triggerBody()?[‘_cr3d3_iddevisclient_value’] mais ce n’est pas ce que je veux, car cela mettrais à jour uniquement la ligne avec l’ID devis correspondant à l’ID devis du déclencheur. Il serait plus approprié d’utiliser items(‘Apply_to_each’)?[‘_cr3d3_iddevisclient_value’] à mon sens mais cela ne fonctionne pas.
Que puis-je faire ?
-
Bonjour,
Je reste disposé à vous fournir toute information nécéssaire à la résolution de la problématique évoqué dans mon dernier message.
Agréable après-midi à vous,
Djamchid
-
items(‘Apply_to_each’)?[‘_cr3d3_iddevisclient_value’] est l’identifiant du devis, pas de la ligne que tu souhaites mettre à jour.
il faudrait mettre items(‘Apply_to_each’)?[‘<nom du champ primaire de la ligne de devis>4’]
-
Bonjour,
En effet :
1. la table que je souhaite mettre à jour est bien “Devis client” (clés primaire : cr3d3_iddevis) et non la table “Ligne de devis” (table enfant qui sert aussi de déclencheur au flux).
2. les valeurs de la colonne cr3d3_iddevis sont récupéré par le 1er List rows et utiliser à la suite par le Foreach et non le Apply to each (celui-ci utilise les valeurs de cr3d3_iddevisclients de la table “Ligne de devis”).3. Au regard de ces informations, j’ai tenté les inscriptions suivantes dans le champ Row ID de l’Update a row, sans succès :
items(‘Foreach’)?[‘cr3d3_iddevis’]
items(‘Foreach’)?[‘cr3d3_iddevis_value’]
items(‘Foreach’)?[‘cr3d3_iddevis4’]
items(‘Foreach’)?[‘<cr3d3_iddevis>4’]
La logique m’échappe d’autant plus que le flux accepte pour le Row ID l’utilisation d’un @triggerBody()?[‘_cr3d3_iddevisclient_value’] issue du déclencheur ce qui n’est pas adapté pas à mon cas (la ligne qui doit être mis à jours doit avoir l’id devis correspondant à celui de la boucle Foreach en cours pour un résultat conforme).
A dispo.
Connectez-vous pour répondre.