В чем суть W-, P- и I-файлов?

Я работаю с appBuilder и редактором процедур в Progress Release 11.6.

Как упоминалось в некоторых предыдущих вопросах, у меня регулярно возникают проблемы с appBuilder, я не хочу открывать файлы, повреждая их (удаляя части исходного кода), ..., одна из причин теперь кажется ограничением того, что процедура не может превышать 32 КБ, включая комментарии.

Сначала я подумал: Неужели мы снова в каменном веке?, простите за мою реакцию.

Но теперь я начинаю думать, что мы полностью злоупотребляем всей концепцией, поэтому я хотел бы показать свой взгляд на W-, P- и I-файлы, подтвердите (или исправьте):

W-файлы предназначены только для того, чтобы содержать определения графического интерфейса, такие как форма с некоторыми фреймами, кнопками, полями для заполнения, ..., любое реальное программирование должно выполняться в P-файлах.
P-файлы содержат настоящий интеллект: здесь разрабатываются процедуры и функции, которые могут использоваться остальными P-файлами или, наконец, W-файлами.
I-файлы предназначены только для включения общего поведения.

Позвольте мне привести Вам пример:

W-файл:

DEFINE VARIABLE combo_information VIEW-AS COMBOBOX /* with some information on the content, if this is static */
...
ON CHOOSE OF combo_information DO:
  RUN very_large_procedure.
END.
...
{about.i} /* see here-after */
...

P-файл:

PROCEDURE very_large_procedure:
DO /* a lot */
END.

I-файл (about.i):

/* Describes the help-about menu item */

При такой работе (помещая только элементы, относящиеся к графическому интерфейсу пользователя, в W-файл и позволяя выполнять реальное программирование в P-файлах), упомянутый предел в 32 КБ никогда не будет достигнут. Кроме того, добавить процедуру можно легко, appBuilder не удалит ее, поскольку appBuilder никогда не откроет P-файл.

Верно ли мое мнение (и как насчет I-файлов)?
Если да: один технический вопрос: как я могу запустить процедуру из P-файла внутри W-файла? (Очевидно, что упомянутый пример не может работать, поскольку в W-файле я не упомянул, где искать very_large_procedure)


person Dominique    schedule 09.02.2021    source источник
comment
Ограничение в 32 КБ не в самих программах, а в поле временной таблицы (именно так был написан AppBuilder много лет назад). Вместо этого используйте IDE на основе Eclipse (PDSOE), и у вас не будет этого ограничения.   -  person nwahmaet    schedule 10.02.2021
comment
Действительно, процедуры записываются во временную таблицу _TRG, она содержит разные поля, такие как _tEvent (имя процедуры) и _tCode (код, включая комментарии). Если содержимое поля _tCode превышает 32К, возникает проблема.   -  person Dominique    schedule 10.02.2021
comment
да. AppBuilder - это каменный век. Или, возможно, юрскую эру. Студия разработчиков!   -  person Jensd    schedule 11.02.2021


Ответы (1)


Именование произвольное, иногда вы можете встретить использование других расширений. Было сказано, что:

W для окна, он должен содержать код, связанный с работой графического интерфейса. Очень часто злоупотребляют тем, что содержат какой-либо код. Обычно этим злоупотребляют люди, которые научились программировать в конструкторе приложений или никогда не кодировали ничего, кроме Windows.

P означает "Прогресс" и переведено в "Процедуру". Это было стандартом еще до появления кода графического интерфейса Windows. Любой код без заголовка или код символьного режима обычно помещается в файл dot-p.

Я за включение. Это очень старый способ создания фрагментов кода многократного использования и общих файлов заголовков. Включаемые файлы обычно параметризованы. Возможно с именованными или позиционными аргументами.

Еще одно важное расширение - это файлы .cls. Это для классов OO4GL (OpenEdge 10 и выше).

Запуск процедур осуществляется путем их запуска:

RUN myproc.p.

or

RUN guiproc.w.

Или, если под запуском вы имеете в виду запуск сеанса, вы используете параметр запуска -p имя_процедуры вместе с prowin32.exe или prowin.exe для кода графического интерфейса Windows или _progres.exe для пакетного или символьного кода.

person Tom Bascom    schedule 09.02.2021
comment
Кроме того, вы можете включить любую из программ, не относящихся к OOABL, в любую другую. Файлы OOABL - единственные, у которых требуется расширение .cls. - person nwahmaet; 10.02.2021
comment
Спасибо за быстрый ответ, но что касается запущенных процедур, вы упускаете суть: у меня есть разные процедуры внутри одного P-файла, и я хотел бы знать, как запустить одну процедуру (скажем, P1) внутри P-файла (скажем F1.p). Это просто RUN F1.P1 (а как насчет возможных параметров, которые необходимо передать)? - person Dominique; 10.02.2021
comment
Извините за мой последний комментарий. Тем временем я обнаружил, что это можно просто сделать, используя RUN P1 (...) с простой передачей параметров. Однако теперь это приводит к новой проблеме: у меня есть фрагмент кода, содержащий RUN P1, но как я могу узнать, где этот PROCEDURE P1 определен? (Я уже проверял листинг компиляции, его там нет). - person Dominique; 10.02.2021
comment
Я думаю, вы, возможно, захотите задать новый вопрос, чтобы продолжить следующие вопросы. - person Tom Bascom; 10.02.2021
comment
Также посмотрите мой ответ на свой предыдущий вопрос по теме stackoverflow.com/questions/65409516/ - person Tom Bascom; 10.02.2021