通过Excel OData访问ABAP CDS报'STRING_SIZE_TOO_LARGE'错误咨询
问题根因
- STRING_SIZE_TOO_LARGE 报错核心原因:你新增的
UTCDATETIME字段由DATS_TIMS_TO_TSTMP函数生成,默认返回abap.dec(15,0)类型,CDS暴露为OData服务时,若未显式指定类型注解,SAP网关会将该DEC类型时间戳默认映射为超长字符串,Excel OData解析器对字符串长度有严格校验,超过阈值就触发报错;浏览器OData客户端对字符串长度容错性更高,所以访问正常。 - 本机额外报property does not exist 原因:你本机Excel缓存了旧版本的OData元数据(EDMX),旧元数据中没有新增的
UTCdatetime字段,加载时无法匹配到对应属性。
另外你提供的CDS代码存在语法疏漏:ZTV_I_AH_02视图的定义末尾缺少闭合大括号},请先修正避免服务发布异常。
修复步骤
- 显式指定
UTCDATETIME字段的OData映射类型,避免默认生成超长字符串,修改ZTV_I_AH_02视图的对应字段定义:
define view ZTV_I_AH_02 as select from ZTV_I_AH_01 { key poid_id, key timestamp, key ChangedBy, ChangedFrom, ChangedTo, FieldChanged_code, CaseId, timestamp_date, ChangedDate, ChangedTime_ts, // 新增以下3行注解 @EndUserText.label: 'UTC时间戳' @Semantics.systemDateTime.utcTimestamp: true @OData.propertyType: 'Edm.DateTimeOffset' DATS_TIMS_TO_TSTMP(timestamp_date, ChangedTime_ts,abap_system_timezone( $session.client,'NULL' ), $session.client, 'NULL' ) as UTCTDATETIME, time_char, time_char2, case when HOURS_1 < '12' then 'AM' else 'PM' end as SCHEDULED } // 补全缺失的闭合大括号
- 清理SAP网关端的元数据缓存:事务码输入
/IWFND/CACHE_CLEANUP,选择对应OData服务的系统别名,执行全量缓存清理。 - 清理Excel端缓存:所有测试设备操作路径为「数据>获取数据>查询选项>数据加载>清除缓存」,本机需要额外删除旧的OData连接,重新新建连接加载数据。
- 验证服务元数据:浏览器访问OData服务的
$metadata路径,确认UTCdatetime字段的类型已经映射为Edm.DateTimeOffset,且长度属性符合预期。
内容的提问来源于stack exchange,提问作者Arun Kamath
相关产品推荐
相关产品推荐

