2017-09-14 9 views
3

Cela peut sembler un peu bizarre, alors je vais essayer d'offrir un peu de contexte. J'ai une fonction sur mon CRM qui exige que l'utilisateur puisse filtrer une vue et enregistrer les enregistrements résultants de sorte qu'un processus séparé puisse les ramasser et les traiter périodiquement par exemple. du quotidien.Récupérer le fetchxml dans la grille via javascript

Maintenant, voici la capture, ils veulent que ce processus pour actualiser les données avant de le traiter, donc fondamentalement ce qui devrait être sauvegardé est la requête ou les filtres plutôt que les données dans la vue.

Ayant déjà écrit un code javascript qui définit dynamiquement le FetchXML sur un sous-maille comme si

Subgrid.getGrid().setParameter("fetchXml", fetchxml); 

Je pensais qu'il devrait être assez simple pour récupérer potentiellement le FetchXML dans la grille

Subgrid.getGrid().getParameter("fetchXml"); 

Cependant, cela ne fonctionne pas et je n'arrive pas à trouver de documentation ou quoi que ce soit qui puisse me diriger dans la bonne direction. J'ai utilisé des outils de développement pour inspecter les propriétés de Mscrm.XrmControlGridWrapper mais je ne trouve rien d'utile.

Si quelqu'un sait comment récupérer le fetchxml qui alimente un sous-réseau en utilisant javascript, cela serait extrêmement utile?

EDIT

Je viens de trouver que je peux le faire

Subgrid.getGrid().getFilter().$3_1.GetParameter("fetchXml") 

et qui retourne exactement ce que je veux, mais ce que des cris de aki et non pris en charge. $3_1 a un type de [object (Mscrm.TurboGridControl)]

Est-il possible d'accéder à cet objet de manière supportée?

Répondre

0

Quelques réflexions sur ce point:

  1. Vous pouvez récupérer l'enregistrement de Systemform, alors le parser FormXml pour obtenir le viewId. Vous pouvez ensuite récupérer la vue à partir de l'entité SavedQuery et obtenir le FetchXML. Voici un exemple de viewId dans le FormXml: enter image description here

  2. Vous pouvez ajouter un champ booléen à l'entité et lorsque l'utilisateur enregistre le jeu qu'ils veulent traiter vous pouvez signaler ces enregistrements pour le traitement par lots plus tard pour récupérer. Lorsque l'utilisateur identifie l'ensemble qu'il souhaite traiter, vous pouvez temporairement créer une vue (SystemQuery ou UserQuery) avec le FetchXML en utilisant l'opérateur "in" avec la liste de Guid pour identifier les enregistrements exacts à traiter. Après avoir utilisé la vue pour récupérer et traiter les enregistrements, le traitement par lots peut supprimer la vue. Je serais probablement à l'aise avec cette approche jusqu'à quelques dizaines de disques.

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> 
    <entity name="account"> 
    <filter type="and"> 
     <condition attribute="accountid" operator="in"> 
     <value>{A1CC84F2-BE0D-E711-8104-00155D6FD705}</value> 
     <value>{A3CC84F2-BE0D-E711-8104-00155D6FD705}</value> 
     <value>{A5CC84F2-BE0D-E711-8104-00155D6FD705}</value> 
     </condition> 
    </filter> 
    </entity> 
</fetch> 
  1. Si vous voulez éviter de modifier les informations modifiées en définissant un indicateur booléen sur les enregistrements à traiter, vous pouvez créer un N: N entité de liaison et associer les enregistrements sélectionnés à une instance de cette entité.