如何访问 apex web 服务模块响应正文中的 collection

How to access a collection in apex web service module response body

Objective:以交互式网格、报告、and/or 形式显示来自休息服务的 APEX Web 服务模块数据(http://dev.wealthbox.com/#activity-stream-retrieve-activity-stream-get 作为联系人数据的示例),其中包括 json collections。在引用的联系人示例中,重复数据,例如标签和 phone 号码。

环境:Oracle 云自治事务处理 19c APEX v20

问题 1:成功创建了一个 Web 服务模块,以及一个带有引用 Web 服务模块数据的交互式网格的页面。但是 IG 区域列不包括对 collection 数据的引用,例如标签和 phone 数字。数据确实出现在 Web 服务模块响应正文中,所以我知道它正在带回数据。

问题 2:当我尝试使用 PL/SQL 访问数据时,如下例所示,没有返回任何数据。

 Declare 
    l_Var  Varchar2(3000);
 Begin
 l_Var := apex_web_service.make_rest_request
    (
    p_url => 'https://api.crmworkspace.com/v1/contacts',
    p_http_method => 'GET',
    p_parm_name => apex_util.string_to_table('ACCESS_TOKEN'),
    p_parm_value => apex_util.string_to_table('NotMyRealToken')
    );
Dbms_output.put_line('*' || l_Var);

End;

我做错了什么?

谢谢 乔

“问题 1”的答案:

APEX 中的 Web 源模块始终将 REST API 的响应视为具有行和列的“table”——正如 APEX 组件所期望的那样。因此 Web 源模块可以处理响应中的 one 数组——它构成了行。在一行中,无法处理数组,因为这需要“嵌套”table。您可以手动修改您的网络源模块的数据配置文件并包含特定数组元素:

  • 编辑数据配置文件
  • 添加一列
  • 提供名称、数据类型和选择器。然后选择器使用 JSON 数组语法,例如orderItems[0]

您也可以在 PL/SQL 中使用 Web 源模块: https://blogs.oracle.com/apex/apex-181-early-adopter-2-rest-services-and-plsql

“问题 2”的答案:

如果没有返回数据,您可能会查看 HTTP 状态代码 (apex_web_service.g_status_code)。可能这是 400500 或其他错误响应。遍历响应数组 headers 也可以帮助

for h in 1 .. apex_web_service.g_response_headers.count loop
    dbms_output.put_line( apex_web_service.g_response_headers(h).name );
    dbms_output.put_line( apex_web_service.g_response_headers(h).value );
end loop;