J'ai ouvert une ressource Web HTML dans une nouvelle fenêtre à l'aide de:
Xrm.Navigation.openWebResource(webResource, windowOptions, data);
Il s’agit d’une ressource Web HTML chargée de ClientObject dans la tête.
<script type="text/javascript" src="../../../ClientGlobalContext.js.aspx" ></script>
alors j'ai du JavaScript qui essaie de récupérer une Contact
var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`
mais c'est à défaut . J'ai suivi pas à pas dans la méthode Xrm.WebApi
et constaté que l'erreur survient lorsqu'il tente de résoudre "contact"
en Set Name
Code de Global.ashx
getEntitySetName: function(logicalName) { Mscrm.Utilities.addTelemetryLog("Xrm.Utility.getEntitySetName"); var $v_0 = window.ENTITY_SET_NAMES || window.top.ENTITY_SET_NAMES; if (IsNull(this.$5H_1) && !isNullOrEmptyString($v_0)) this.$5H_1 = JSON.parse($v_0); return this.$5H_1[logicalName.toLowerCase()] },
Pour une raison quelconque, l'objet window.ENTITY_SET_NAMES
est null et une erreur (référence null) se produit
J'ai essayé d'intégrer ma ressource Web dans une page CRM et le code fonctionne correctement. Le problème semble être lorsque la ressource Web est lancée via Xrm.Navigation.openWebResource
Quelqu'un a-t-il essayé d'utiliser Xrm.WebApi
dans le contexte d'une ressource Web ouverte avec Xrm.Navigation.openWebResource
? ou quelqu'un sait-il si des étapes supplémentaires sont nécessaires pour récupérer les données?
Mettre à jour
ENTITY_SET_NAMES
est initialisé dans main.aspx
. J'ai essayé d'incorporer ma ressource Web personnalisée directement dans une nouvelle section Main Form
et la méthode retrieveRecord
fonctionne.
Il semble que ce soit un problème uniquement lors de l'exécution de la ressource Web à partir d'une nouvelle page via Xrm.Navigation.openWebResource
Mise à jour 2 - Réponse à Aron
J'ai essayé d'utiliser window.parent
comme suggéré ci-dessous
var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = parent.Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`
et pour faire bonne mesure également essayé window.parent.top
var contactId = "8553DA63-11C9-E711-A824-000D3AE0CB84";
var promise = parent.top.Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");`
mais les deux ont entraîné la même erreur
Cela ressemble à un bogue de produit dans ClientGlobalContext.js.aspx
, car cela devrait vous permettre de travailler avec tout le contexte.
Vous pouvez probablement utiliser window.opener.Xrm
dans ce scénario, car cela a fonctionné pour window.opener.Xrm.Page.getAttribute
, cela devrait également fonctionner pour Xrm.WebApi
.
Vous pouvez essayer d'accéder à la variable depuis la fenêtre d'ouverture comme ceci:
window["ENTITY_SET_NAMES"] = window["ENTITY_SET_NAMES"] || window.opener.top.ENTITY_SET_NAMES;
Selon cet article , lorsque vous référencez le formulaire principal à partir d’une ressource Web, nous devons référencer la fenêtre parente. Bien qu'il fasse uniquement référence à Xrm.Page et Xrm.Utility, il devrait également fonctionner avec Xrm.WebApi ...
Une ressource Web HTML ajoutée à un formulaire ne peut pas utiliser les objets globaux définis par la bibliothèque JavaScript chargée dans le formulaire. Une ressource Web HTML peut interagir avec les objets Xrm.Page ou Xrm.Utility du formulaire à l'aide de parent.Xrm.Page ou parent.Xrm.Utility, mais les objets globaux définis par les scripts de formulaire ne seront pas accessibles via le parent.
S'il vous plaît essayer parent.Xrm.WebApi.retrieveRecord("contact", contactId, "$select=contactid,firstname,lastname");
Cet article montre également parent.Xrm.WebApi
Si vous envisagez d'utiliser des actions et des fonctions liées, vous devrez également ajouter une variable similaire pour mapper les entités sur leurs champs id principaux.
window["ENTITY_PRIMARY_KEYS"] = ['{"account":"accountid", "contact":"contactid"}'];