主な編集1以下は私の元の問題の説明ですが、ChromeとFirefoxの両方がライブラリを正しくロードしていることを発見しました。繰り返し更新してもまったく機能しないのはIE9/10 です。ただし、開発者コンソールを開いてリロードすると、すべて正常に機能します。
私はこの問題についてこの投稿を読み、概説された手順に従いました。問題は、jQueryがIE 9/10、Chrome、またはFirefoxで確実に/一貫して読み込まれないことです。
また、100%の信頼性で、問題を繰り返すこともできません。ただし、通常は、カスタムWebリソースで変更を公開し、フォームをリロードすると、開発者コンソールに「jQueryisundefined」が表示されます。その後のリロードではエラーは表示されず、リロードする前にキャッシュをクリアするかどうかにかかわらず、動作に違いはないようです。
これが私の実装のいくつかの詳細です:
- jQueryに依存するCrmFetchKitライブラリを使用しています。
- この作業を行うために、2つのライブラリを1つのWebリソースに結合しました。この背後にある考えは、エラーは常にCrmFetchKitから発生し、そのファイルが適切に含まれていても問題がないことを示しているということです。
- 以下の私のコード。
- 私の関数'genericFetch()'は、実験フォームのルックアップ属性のonChangeイベントハンドラーに設定されています。
- jQueryが利用可能な場合、すべてが期待どおりに機能します(jsが非常に醜い場合でも)。
リクエストがあれば、詳細情報やスクリーンショットを提供させていただきます。
// Fetch XML generic fetch format
function genericFetch(entity, targetField, returnFields, searchSource)
{
returnFields = returnFields.split('|');
var searchValue = Xrm.Page.getAttribute(searchSource).getValue();
if(searchValue)
{
searchValue = searchValue[0]['values'][1]['value'];
}
else
{
return false;
}
function onFetchError(xhr, status, errorThrown)
{
var errormsg = $(xhr.responseXML).find('Message').text();
alert('CrmFetchKit-Error occured: ' + errormsg);
}
var fetchXml = ['<fetch version="1.0" output-format="xml-platform" mapping="logical">'];
fetchXml.push('<entity name="' + entity + '">');
var len = returnFields.length;
for(i=0; i<len; i++)
{
fetchXml.push('<attribute name="' + returnFields[i] + '" />');
}
fetchXml.push('<filter type="and">');
fetchXml.push('<condition attribute="' + returnFields[0] + '" operator="eq" value="' + searchValue + '" />');
fetchXml.push('</filter>');
fetchXml.push('</entity>');
fetchXml.push('</fetch>');
fetchXml = fetchXml.join('');
CrmFetchKit.Fetch(fetchXml).then(function (results) {
/* success handler */
console.log("results: " + JSON.stringify(results, null, 4));
Xrm.Page.getAttribute(targetField).setValue(results[0]['attributes']['productnumber']['value']);
}, onFetchError);
}