Служба OpenEdge 4GL REST: вычисление значений временных таблиц с ошибками - PullRequest
0 голосов
/ 22 января 2019

У меня есть прогресс 4gl rest webservice.Метод Create принимает набор данных, из которого я извлекаю его базовую временную таблицу

METHOD PUBLIC VOID Createprices(INPUT-OUTPUT DATASET dsprices):
        DEFINE VARIABLE hT AS HANDLE.
        ht = DATASET dsprices:GET-BUFFER-HANDLE(TEMP-TABLE ttprices:NAME).
        ht = ht:DEFAULT-BUFFER-HANDLE.
        PreTransactionValidate(INPUT-OUTPUT TABLE-HANDLE ht).

Затем я передаю буфер временной таблицы другому методу (pretransactionvalidateate), где я вычисляю значения для пары полей.Метод PretransactionValidate с присвоением фиктивных значений -

METHOD  PUBLIC VOID PreTransactionValidate( INPUT-OUTPUT table-handle ttprices):
FOR EACH ttprices:
ASSIGN    
            ttprices.PricesId  = NEXT-VALUE(SeqPricesId)                
            ttprices.AddedDate = TODAY
            ttprices.AddedTime = TIME.
END. 

При вызове метода PretransactionValidate мой метод Create завершается с ошибкой.Если я закомментирую звонок, я могу успешно создать запись.Я новичок в Progress и не могу найти много материала в сети, поэтому стоит попробовать любую помощь.

Приветствия

1 Ответ

0 голосов
/ 22 января 2019

В вашем методе Createprices ht назначается дескриптору буфера, но ваша процедура PreTransactionValidate ожидает дескриптор набора данных.

Поскольку оба метода находятся в одном и том же модуле компиляции (классе), в любом случае не обязательно передавать временную таблицу в качестве параметра. Temp-таблицы в ABL (к сожалению) всегда глобальны по классам.

Если бы оба метода были в разных единицах компиляции, вы могли бы напрямую передать временную таблицу:

<some_object_reference>:PreTransactionValidate (INPUT-OUTPUT TABLE ttprices).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...