Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的TypeError:无法读取未定义的属性“retrieveMultiple”_Javascript_Dynamics Crm_Crm_Dynamics Crm 2016_On Prem - Fatal编程技术网

Javascript 未捕获的TypeError:无法读取未定义的属性“retrieveMultiple”

Javascript 未捕获的TypeError:无法读取未定义的属性“retrieveMultiple”,javascript,dynamics-crm,crm,dynamics-crm-2016,on-prem,Javascript,Dynamics Crm,Crm,Dynamics Crm 2016,On Prem,我试图在CRM 9.0中的HTML页面上运行JavaScript,这给了我以下错误 未捕获的TypeError:无法读取的属性“retrieveMultiple” 未定义 我刚刚将我的解决方案从CRM 8.2迁移到CRM 9.0,在CRM 8.2中一切都正常,即使我在CRM 8.2环境中运行同一页面,它也正常运行,但在CRM 9.0中,它给了我上述错误。 另外,当我从crm9.0内部运行同一个页面时,它工作正常。只有当我使用URL在web上运行此页面时,才会出现此错误。 我不明白为什么会出现这个

我试图在CRM 9.0中的HTML页面上运行JavaScript,这给了我以下错误

未捕获的TypeError:无法读取的属性“retrieveMultiple” 未定义

我刚刚将我的解决方案从CRM 8.2迁移到CRM 9.0,在CRM 8.2中一切都正常,即使我在CRM 8.2环境中运行同一页面,它也正常运行,但在CRM 9.0中,它给了我上述错误。 另外,当我从crm9.0内部运行同一个页面时,它工作正常。只有当我使用URL在web上运行此页面时,才会出现此错误。 我不明白为什么会出现这个错误

 XrmSvcToolkit.retrieveMultiple({
    entityName: SpecialOperationEntity,  //Update this code later
    odataQuery: Query,
    async: false,
    successCallback: successCallback,
    errorCallback: errorCallback
});
我在出错的地方使用下面的代码

 XrmSvcToolkit.retrieveMultiple({
    entityName: SpecialOperationEntity,  //Update this code later
    odataQuery: Query,
    async: false,
    successCallback: successCallback,
    errorCallback: errorCallback
});
编辑:

图像是从控制台拍摄的。为什么XrmSvcToolkit会出错?我不确定。有人能给我引路吗?因为参考在HTML页面中可用

编辑2:

对于所有建议我使用Web.API的人

当我使用Web Api并注释掉当前逻辑时,实际的js文件甚至没有加载到HTML中,HTML文件给出了一个错误,它说它找不到js文件中定义的函数,因为在这种情况下js文件没有加载

我使用下面的代码

 Xrm.WebApi.retrieveMultipleRecords(SpecialOperationEntity, "$select=vrp_Output&$filter=vrp_Operation eq '" + Operation + "' and vrp_Input eq '" + JsonInputParameter + "'";).then(
       successCallback
        ,errorCallback
    );
注:
successCallback和errorCallback是在此代码块下定义的两个函数

您正在使用9.0,为什么不直接移动到WebAPI。 我强烈建议使用WebAPI进行多次检索 使用Webapi非常简单,而且您也不需要任何外部第三方库进入系统。 看看构建Webapi查询是多么简单

RetreiveMultipe的示例代码

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/accounts?$select=accountclassificationcode,accountid&$filter=accountid eq 123456789", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
req.onreadystatechange = function() {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 200) {
            var results = JSON.parse(this.response);
            for (var i = 0; i < results.value.length; i++) {
                var accountclassificationcode = results.value[i]["accountclassificationcode"];
                var accountclassificationcode_formatted = results.value[i]["accountclassificationcode@OData.Community.Display.V1.FormattedValue"];
                var accountid = results.value[i]["accountid"];
            }
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send();

您正在使用9.0,为什么不直接转到WebAPI呢。 我强烈建议使用WebAPI进行多次检索 使用Webapi非常简单,而且您也不需要任何外部第三方库进入系统。 看看构建Webapi查询是多么简单

RetreiveMultipe的示例代码

var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/accounts?$select=accountclassificationcode,accountid&$filter=accountid eq 123456789", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
req.onreadystatechange = function() {
    if (this.readyState === 4) {
        req.onreadystatechange = null;
        if (this.status === 200) {
            var results = JSON.parse(this.response);
            for (var i = 0; i < results.value.length; i++) {
                var accountclassificationcode = results.value[i]["accountclassificationcode"];
                var accountclassificationcode_formatted = results.value[i]["accountclassificationcode@OData.Community.Display.V1.FormattedValue"];
                var accountid = results.value[i]["accountid"];
            }
        } else {
            Xrm.Utility.alertDialog(this.statusText);
        }
    }
};
req.send();

你应该考虑换Xrm.WebApi,因为XrmSvcToolkit是一个过时的第三方工具。这是自Dynamics 365 v9以来检索多条记录的方法:

        Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name").then(
            function success(result) {
                // perform additional operations on retrieved records
            },
            function (error) {
                // handle error conditions
            }
        );
你可以查阅官方文件

编辑

如果要在HTML IFRAME中调用Xrm WebApi,必须以window.parent作为前缀,因此对Xrm WebApi的任何调用都将以window.parent.Xrm.WebApi开头


如果要访问在HTML IFRAME外部定义的JS函数,必须在其前面加上parent.frames[0],因此对名为SomeFunction的函数的调用将是parent.frames[0].SomeFunction
        Xrm.WebApi.retrieveMultipleRecords("account", "?$select=name").then(
            function success(result) {
                // perform additional operations on retrieved records
            },
            function (error) {
                // handle error conditions
            }
        );
你可以查阅官方文件

编辑

如果要在HTML IFRAME中调用Xrm WebApi,必须以window.parent作为前缀,因此对Xrm WebApi的任何调用都将以window.parent.Xrm.WebApi开头


如果要访问在HTML IFRAME外部定义的JS函数,必须在其前面加上parent.frames[0],因此对名为SomeFunction的函数的调用将是parent.frames[0].SomeFunction

与推荐的其他答案一样,您必须切换到Xrm.Webapi方法进行异步处理,或者切换到XMLHttpRequest进行同步/异步调用。crmrestbuilder至关重要

我会回答你的问题:

只有当我使用URL在web上运行此页面时,才会出现此错误。我不明白为什么会出现这个错误

 XrmSvcToolkit.retrieveMultiple({
    entityName: SpecialOperationEntity,  //Update this code later
    odataQuery: Query,
    async: false,
    successCallback: successCallback,
    errorCallback: errorCallback
});
您可能已经在HTML页面中添加了脚本文件引用,如下所示:

<script type="text/javascript" src="vrp_franix_XrmSvcToolKit.js"></script>
如果在弹出窗口中打开HTML页面:

window.opener.Xrm.WebApi

与推荐的其他答案一样,您必须切换到Xrm.Webapi方法进行异步处理,或者切换到XMLHttpRequest进行同步/异步调用。crmrestbuilder至关重要

我会回答你的问题:

只有当我使用URL在web上运行此页面时,才会出现此错误。我不明白为什么会出现这个错误

 XrmSvcToolkit.retrieveMultiple({
    entityName: SpecialOperationEntity,  //Update this code later
    odataQuery: Query,
    async: false,
    successCallback: successCallback,
    errorCallback: errorCallback
});
您可能已经在HTML页面中添加了脚本文件引用,如下所示:

<script type="text/javascript" src="vrp_franix_XrmSvcToolKit.js"></script>
如果在弹出窗口中打开HTML页面:

window.opener.Xrm.WebApi

XrmSvcToolkit似乎没有定义。HTML页面中定义了编辑。您可以更新您的问题吗?在控制台中显示XrmSvcToolkit中的内容,并在XrmSvcToolkit初始化时通知我们只记录对象。然后查看retrieveMultiple属性是否在属性列表中。我刚刚在控制台中签入,它显示XrmSvcToolkit为undefinedXrmSvcToolkit似乎未定义。如果在HTML页面中定义了编辑,您可以更新您的问题吗?在控制台中显示XrmSvcToolkit中的内容,并在XrmSvcToolkit初始化时通知我们只记录对象。然后查看retrieveMultiple属性是否在属性列表中。我刚刚在控制台中签入,它显示XrmSvcToolkit为未定义。我像这样引用它。我阅读了社区线程,它说了同样的事情。惠尔
我错了吗?@FaranSaleem打开html页面时,右键单击查看源代码并单击源代码中html标题中的上述链接。。如果它不可访问-修复url。我像这样引用它,我读过社区线程,它说同样的事情。我哪里搞错了?@FaranSaleem打开html页面时,右键单击查看源代码并单击源代码中html标题中的上述链接。。如果无法访问,请修复url。你能检查我在问题中的最新编辑吗?你能检查我在问题中的最新编辑吗?你能检查我在问题中的最新编辑吗?你能检查我在问题中的最新编辑吗