OpenEdge ABL 保留关键字作为 temp-table 字段名称(从 JSON 数据推断)

OpenEdge ABL reserved keyword as temp-table field name (inferred from JSON data)

我遇到以下情况:

我的方法收到来自外部 REST API 调用的响应。 JSON 响应结构如下:

{
"members": [
    {
        "email_address": "random@address.org",
        "status": "randomstatus"
    },
    ...etc... 
]}

我正在使用 READ-JSON(从 JSON 数据推断 ABL 模式)将此读到 temp-table,并尝试处理 temp-table。这就是我被困的地方: 当我尝试将包含 temp-table 字段 "status" 的查询放在一起时,出现错误。 示例:

hQuery:QUERY-PREPARE('FOR EACH ' + httSubscriber:NAME + ' WHERE ' + hBuffer:BUFFER-FIELD(iStatus):NAME + ' = "randomstatus"').

给出:

**Unable to understand after -- "members WHERE".(247)

我也试过直接按名字引用,结果一样。

可能 "status" 是 ABL 中的保留关键字。可能是这样吗?我怎样才能解决这个问题以引用 "status" 字段?

不幸的是,JSON 响应的格式和键名不在我的控制之下,我必须使用它。

众所周知,我会做这样的傻事:

JSONData = replace( JSONData, '"status":', '"xstatus":' ).

您可以在 temp-table 定义中使用 SERIALIZE-NAME 在内部重命名相关字段。然后你将不得不用另一个名称引用该字段,但在它的序列化形式中它仍然被称为 status.

这里是 status 字段重命名为 exampleStatus 的示例。

DEFINE TEMP-TABLE ttExample NO-UNDO
    FIELD exampleStatus AS CHARACTER SERIALIZE-NAME "status".

/* Code to read json goes here... */

/* Access the field */
FOR EACH ttExample:
    DISPLAY ttExample.exampleStatus.
END.

尝试命名 temp-table(硬编码或通过字符串附加)+ '.' + hBuffer:BUFFER-FIELD(iStatus):NAME (...)

它应该可以帮助编译器理解您在谈论该字段。既然没有限制,这应该是强制其手,让你查询。