Progress 4GL:不能READ-JSON写入的JSON

时间:2017-07-19 19:32:51

标签: json openedge progress-4gl

我遇到了Progress READ-JSON的问题,它不接受WRITE-JSON输出的JSON。我们正在使用具有嵌套数据关系的数据集进行跟踪更改。

stack

此示例生成以下输出:

OUTPUT TO "debug.txt".

DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
DEFINE VARIABLE hdsBox AS HANDLE NO-UNDO.
DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.

DEFINE TEMP-TABLE ttEmployee NO-UNDO
    BEFORE-TABLE ttEmployeeBefore
    FIELD eid AS INTEGER
    FIELD empname AS CHAR.
DEFINE TEMP-TABLE ttBox NO-UNDO
    BEFORE-TABLE ttBoxBefore
    FIELD eid AS INTEGER SERIALIZE-HIDDEN
    FIELD boxid AS INTEGER
    FIELD boxdesc AS CHAR.
DEFINE DATASET dsBox FOR ttEmployee, ttBox
    DATA-RELATION relat1 FOR ttEmployee, ttBox RELATION-FIELDS (ttEmployee.eid, ttBox.eid) NESTED.

CREATE ttEmployee.
CREATE ttBox.
ASSIGN ttEmployee.eid = 1
    ttEmployee.empname = "Ian"
    ttBox.eid = 1
    ttBox.boxid = 10
    ttBox.boxdesc = "Ians box".
    hdsBox = DATASET dsBox:HANDLE.

ASSIGN TEMP-TABLE ttEmployee:TRACKING-CHANGES = YES
    TEMP-TABLE ttBox:TRACKING-CHANGES = YES.

CREATE ttBox.
ASSIGN ttBox.eid = 1
    ttBox.boxid = 11
    ttBox.boxdesc = "Stewarts box"
    /*ttEmployee.empname = "Stewart"*/ .

ASSIGN lOk = hdsBox:WRITE-JSON("LONGCHAR", lcString,FALSE , "UTF-8", FALSE, FALSE, TRUE).

ASSIGN TEMP-TABLE ttEmployee:TRACKING-CHANGES = NO
    TEMP-TABLE ttBox:TRACKING-CHANGES = NO.

MESSAGE lOk ERROR-STATUS:GET-MESSAGE(1) SKIP.
MESSAGE STRING(lcString) SKIP.

ASSIGN lOk = hdsBox:READ-JSON("LONGCHAR":U, lcString, "EMPTY":U) NO-ERROR.

MESSAGE lOk ERROR-STATUS:GET-MESSAGE(1) SKIP.

如果我在第35行发表评论,那么它会起作用,这让我相信这是一个进步错误。

我正在使用OpenEdge 11.4。

1 个答案:

答案 0 :(得分:1)

这是一个进步错误。要修复,我需要在JSON的before-table中插入一个无意义的字段。

"prods:before":{"Progress11.4bug":"Need this string or Progress will barf"}

由于某种原因,进度不喜欢前表是空的。