0

在 CRM Dynamics 中,我正在执行以下代码。我试图将它放在一个try-catch语句中以捕获据称未捕获的异常,但这没有任何区别。我猜它发生CRM 服务器、C# 代码或类似的东西中。

var temp = OData.read({
  urlOrRequest: "https://myurl/2011/OrganizationData.svc/crmk_CustomEntitySet",
  success: function(dataSet) { alert("Yippi!"); },
  error: function(errorMessage) { alert("Buuuu..."); },
  handler: null,
  httpClient: null,
  metaData: null
});

当然,我已经测试过执行https://myurl/2011/OrganizationData.svc/crmk_CustomEntitySet调用,它会按预期返回数据,所以显然我已经按顺序获得了连接和访问权限。

但是,我没有执行任何回调。一切都只是幽灵般的安静。但是,当我尝试关闭或重新加载页面时,我从 CRM Dynamics 收到一条错误消息,其部分内容如下所列。

<ScriptErrorDetails>
  <Message>Exception thrown and not caught</Message>
  <Line>13</Line>
  <URL>/%7B634854498230000000%7D/WebResources/crmk_MyResourceWithDataJS</URL>
  <PageURL>/userdefined/edit.aspx
    ?etc=10008&pagemode=iframe&preloadcache=1349853066209</PageURL>
 <Function></Function>
 <CallStack></CallStack>
</ScriptErrorDetails>

鉴于我在 CRM Dynamics(低)和 DataJS 包(loooow)方面的能力水平,我不知道为什么它不起作用,也不知道如何解决它。

我已经检查了我可以在他们的页面上找到的每个示例

4

1 回答 1

0

你没有得到回调执行,因为你没有发送一个。你认为你有,但你没有。您正在使用 JSON 语法将属性(或任何名称)放入对象中。您打算使用以下输入列表。

  1. 组织数据的 URL。
  2. 一个函数,告诉如果成功该做什么。
  3. 一个告诉如果失败该怎么办的函数。
  4. 一堆nulls。

但是由于您将其打包成一个结构,CRM 会看到以下内容(关于odata.read(...)源文件中看到的函数的完整签名..

  1. 一个包含一些东西的对象,不构成可解析的 URL。
  2. 什么都没有,意思是null,而 CRM 想要看到一个功能(成功)。
  3. 什么都没有,意思是null,而 CRM 想要看到一个功能(失败)。
  4. 什么都没有,意思是null,而 CRM 想要看到一个功能(序列化)。
  5. 什么都没有,意思是null,虽然 CRM 希望看到 HTTP 客户端层(无论那可能是什么)。
  6. 什么都没有,意思是nullCRM 想要查看一些元数据。

然后 CRM 服务器内部发生崩溃(因为您未能为您尝试读取的组织数据提供可解析的 URL)并引发异常。但是您还没有提供一个回调函数来接收此类错误的通知,也就是您提到的消息。

try-catch没有捕获任何东西,因为没有例外可以捕获。它已经被CRM Dynamics 服务器捕获。您看到的是它抱怨没有调用函数来通知您。

尝试执行与此代码等效的代码,看看您是否成功(或至少收到另一条错误消息)。

var temp = OData.read(
  "https://myurl/2011/OrganizationData.svc/crmk_CustomEntitySet",
  function(dataSet) { alert("Data retrieval successful."); },
  function(errorMessage) { alert("Operation failure!"); }
});

我假设您使用的 URL 不是您在代码示例中向我们展示的 URL。这只是一个例子,对吧?您可以测试将 URL 粘贴到 IE 中,看看您是否会收到回复以及其中包含的内容。

于 2012-10-10T10:15:49.480 回答