Получение данных XML в Temp-Table в Progress 4GL / OpenEdge ABL - PullRequest
0 голосов
/ 05 ноября 2019

так что это должно быть довольно просто. Я пытаюсь получить данные из XML-файла по URL-адресу и анализировать их во временной таблице, чтобы я мог использовать данные в остальной части моей программы. Я написал код, но в конце DISPLAY PAPEL DESCRICAO. ничего не показывает. Я делаю что-то неправильно? Весь код со ссылкой XML:

DEF TEMP-TABLE CMA NO-UNDO
    FIELD PAPEL       AS CHAR
    FIELD DESCRICAO   AS CHAR
    FIELD ULTIMO      AS  DEC
    FIELD DIFERENCIAL AS  DEC
    FIELD VARIACAO    AS  DEC
    FIELD FECHANT     AS  DEC
    FIELD COMPRA      AS  DEC
    FIELD MINIMA      AS  DEC
    FIELD MAXIMA      AS  DEC
    FIELD VENCIMENTO  AS  INT
    FIELD HORA        AS CHAR
    FIELD DATA        AS DATE.

DEF VAR cSourceType             AS CHAR    NO-UNDO.
DEF VAR cFile                   AS CHAR    NO-UNDO.
DEF VAR cReadMode               AS CHAR    NO-UNDO.
DEF VAR cSchemaLocation         AS CHAR    NO-UNDO.
DEF VAR lOverrideDefaultMapping AS LOGICAL NO-UNDO.
DEF VAR cFieldTypeMapping       AS CHAR    NO-UNDO.
DEF VAR cVerifySchemaMode       AS CHAR    NO-UNDO.
DEF VAR lReturn                 AS LOGICAL NO-UNDO.

ASSIGN
    cSourceType             = "FILE"
    cFile                   = "http://sfeed-cot01.cma.com.br/clientes/cocamar/cbot.xml"
    cReadMode               = "EMPTY"
    cSchemaLocation         = ?
    lOverrideDefaultMapping = ?
    cFieldTypeMapping       = ?
    cVerifySchemaMode       = ?. 

lReturn = TEMP-TABLE CMA:READ-XML(cSourceType, cFile, cReadMode, 
    cSchemaLocation, lOverrideDefaultMapping, cFieldTypeMapping,
    cVerifySchemaMode).
IF lReturn THEN
FOR EACH CMA NO-LOCK:
    DISPLAY CMA.PAPEL CMA.DESCRICAO.
END.

Любая помощь очень ценится.

1 Ответ

3 голосов
/ 05 ноября 2019

Супер близко. CMA соответствует не таблице, а тегу контейнера, который в этом случае может быть представлен набором данных Prodataset. Вместо этого просто используйте «QUOTES».

Я бы не использовал xml, подобный этому, на производстве, у вас может не быть никакого способа помешать работе, если источник не работает и т. Д. Я бы потянул xml вниз другим способом, а затем загрузил бы его,

Но это другая история ...

DEF TEMP-TABLE QUOTES NO-UNDO
    FIELD PAPEL       AS CHAR
    FIELD DESCRICAO   AS CHAR
    FIELD ULTIMO      AS  DEC
    FIELD DIFERENCIAL AS  DEC
    FIELD VARIACAO    AS  DEC
    FIELD FECHANT     AS  DEC
    FIELD COMPRA      AS  DEC
    FIELD MINIMA      AS  DEC
    FIELD MAXIMA      AS  DEC
    FIELD VENCIMENTO  AS  INT
    FIELD HORA        AS CHAR
    FIELD DATA        AS DATE.

DEF VAR cSourceType             AS CHAR    NO-UNDO.
DEF VAR cFile                   AS CHAR    NO-UNDO.
DEF VAR cReadMode               AS CHAR    NO-UNDO.
DEF VAR cSchemaLocation         AS CHAR    NO-UNDO.
DEF VAR lOverrideDefaultMapping AS LOGICAL NO-UNDO.
DEF VAR cFieldTypeMapping       AS CHAR    NO-UNDO.
DEF VAR cVerifySchemaMode       AS CHAR    NO-UNDO.
DEF VAR lReturn                 AS LOGICAL NO-UNDO.

ASSIGN
    cSourceType             = "FILE"
    cFile                   = "http://sfeed-cot01.cma.com.br/clientes/cocamar/cbot.xml"
    cReadMode               = "EMPTY"
    cSchemaLocation         = ?
    lOverrideDefaultMapping = ?
    cFieldTypeMapping       = ?
    cVerifySchemaMode       = ?. 

lReturn = TEMP-TABLE QUOTES:READ-XML(cSourceType, cFile, cReadMode, 
    cSchemaLocation, lOverrideDefaultMapping, cFieldTypeMapping,
    cVerifySchemaMode).

DISP lReturn.
IF lReturn THEN
FOR EACH QUOTES NO-LOCK:
    DISPLAY QUOTES.PAPEL QUOTES.DESCRICAO.
END.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...