本教程迄今为止,讨论的绝大多数都是 OData 服务数据实现类(Data Provider Class) 的实现。而要讨论 OData 服务的元数据话题,就得去 MPC 类研究。

MPC 类的 define 方法,负责生成 OData metadata 元数据:

Postman 里请求元数据:

/iwcor/cl_ds_svc_proc 的 get_supported_formats, 对于不同类型的请求,返回不同的支持的格式列表.

对于 metadata 元数据请求,只支持 xml 格式:

从配置表里读取缓存是否激活:

-
代表 abap_false


要读取 HTTP 请求标头 if-modified-since,应用程序开发人员可以使用方法 /IWBEP/CL_MGW_REQUEST=>GET_IF_MODIFIED_SINCE()。
例子代码:
DATA lv_if_modified_since TYPE tzntstmps.
lv_if_modified_since = io_tech_request_context->get_if_modified_since( ).
如果导出参数 ES_RESPONSE_CONTEXT-MAX_AGE 设置为一个值,则 SAP Gateway 将生成带有 max-age 指令的 HTTP 响应标头缓存控制。
请注意,如果导出参数 ES_RESPONSE_CONTEXT-MAX_AGE 设置为一个值,则还必须将导出参数 ES_RESPONSE_CONTEXT-DO_NOT_CACHE_ON_CLIENT 设置为 -
(意思是 可以缓存
)。
默认行为:如果导出参数 ES_RESPONSE_CONTEXT-DO_NOT_CACHE_ON_CLIENT 未定义(即设置为 ``),则系统会自动将 ES_RESPONSE_CONTEXT-DO_NOT_CACHE_ON_CLIENT 的默认值设置为值“X”,SAP Gateway 将生成以下 HTTP 响应标头:
cache-control: no-store, no-cache
导出参数 ES_RESPONSE_CONTEXT-LAST_MODIFIED 应填充时间戳,指示相关业务数据的最后一次更改发生的时间。 如果 ES_RESPONSE_CONTEXT-LAST_MODIFIED 填充了时间戳,则 SAP Gateway 将生成具有相关日期的最后修改的 HTTP 响应标头:
last-modified: Tue, 27 Nov 2012 09:41:40 GMT
此外,如果导出参数 ES_RESPONSE_CONTEXT-LAST_MODIFIED 包含的时间戳早于 HTTP 请求标头 if-modified-since,则 SAP Gateway 将发送 HTTP 304 响应(“未修改”)。在这种情况下,将不会发送最后修改的 HTTP 响应标头。
导出参数 ES_RESPONSE_CONTEXT-IS_NOT_MODIFIED 仅在应用程序数据的 LAST_MODIFIED 早于 HTTP 请求标头 if-modified-since 中的时间戳的情况下才可以设置为 ABAP_TRUE。 在这种情况下,相关的申请数据是最新的,根本不需要发送。 然后 SAP Gateway 将生成 HTTP 304 响应(“未修改”)。
网友评论