通过Javascript调用自定义操作时出现错误的请求错误

通过Javascript调用自定义操作时出现错误的请求错误,javascript,dynamics-crm,dynamics-crm-365,Javascript,Dynamics Crm,Dynamics Crm 365,我在CRM 365上创建了一个自定义操作,该操作有一个entity reference类型的输入参数,它引用用户实体,我尝试将输入参数更改为另一个类型,效果很好。所以我认为问题在于我传递实体引用值的方式,我试图改变它,但我没有任何运气,所以有人能告诉我下面代码中的错误是什么吗 函数CreateBlockHistory(){ var Id=Xrm.Page.data.entity.getId(); Id=Id.replace(“{,”).replace(“},”); 风险值数据={ “封锁者”:

我在CRM 365上创建了一个自定义操作,该操作有一个entity reference类型的输入参数,它引用用户实体,我尝试将输入参数更改为另一个类型,效果很好。所以我认为问题在于我传递实体引用值的方式,我试图改变它,但我没有任何运气,所以有人能告诉我下面代码中的错误是什么吗

函数CreateBlockHistory(){
var Id=Xrm.Page.data.entity.getId();
Id=Id.replace(“{,”).replace(“},”);
风险值数据={
“封锁者”:{
“ohd_blockedby”:Xrm.Page.context.getUserId().replace(“}”和“”).replace(“{”和“”),
@odata.type:“Microsoft.Dynamics.CRM.systemuser”
}
};
var serverURL=window.parent.Xrm.Page.context.getClientUrl();
var req=新的XMLHttpRequest();
请求打开(“POST”,serverURL+”/api/data/v8.1/new_units(“+Id+”)/Microsoft.Dynamics.CRM.ohd_ActionTest”,false);
请求setRequestHeader(“接受”、“应用程序/json”);
setRequestHeader(“内容类型”,“应用程序/json;字符集=utf-8”);
请求setRequestHeader(“OData MaxVersion”,“4.0”);
请求setRequestHeader(“OData版本”、“4.0”);
req.onreadystatechange=函数(){
如果(this.readyState==4/*请求已完成*/){
req.onreadystatechange=null;
if(this.status==200/*响应就绪*/){
var data=JSON.parse(this.response);
}
否则{
var error=JSON.parse(this.response).error;
}
}
};
请求发送(window.JSON.stringify(数据));
}
  • 400错误请求开始
    -这是一个非常普遍的无用错误,不要依赖于此-尝试在浏览器控制台或CRM REST Builder中运行相同的代码段,方法是传递硬编码的guid参数以查看执行状态。你也可以调试
  • 我看到您的
    XMLHttpRequest
    正在运行同步(bool param为false),请将其切换到Async&请参阅
  • 此外,我还看到您有时通过混合方法获得
    Xrm
    上下文,例如
    window.parent
    有时&有时直接
    window.JSON也可以。如果这是在web资源中执行的,而不是以任何实体形式执行的,那么请适当地修复它
  • 您可以在自定义操作消息profile/debug上注册插件&查看任何线索

  • 我看到您同时使用了Xrm和window.parent.Xrm—您能验证预期值是否会出现吗?还可以尝试使用单数实体名称new\u Unit您是否尝试过使用
    Xrm.WebApi
    ?我确保表单中的值正确无误,实体名称正确无误,因为当我尝试更改参数类型时,它运行良好,我建议您使用CRM REST Builder来构建查询、执行和测试。