#ibm-midrange #db2-400 #rpgle
#ibm-средний уровень #db2-400 #рпгл #rpgle
Вопрос:
Я смотрю на программу RPG. есть несколько подпрограмм, подобных этой: существуют ли какие-либо инструменты, которые создали бы это как процедуру, которую можно было бы использовать в отдельном процессе?
C Eval FinQty# = 0
C Eval OdCom# = OhCom#
C Eval OdOrd# = OhOrd#
C OdKey Setll OeOrd1
C OdKey Reade OeOrd1
C Dow %eof = *off
*
C If OdPrt# = OdAls# and
c %subst(odprt#:1:3) <> 'FRT'
C Eval FinQty# = OdQty#
C Endif
*
C OdKey Reade OeOrd1
C Enddo
*
Комментарии:
1. Запрос на инструмент не по теме, хотя я не знаю ни одного из них. Деконструкция полной цепочки из программы RPG была бы проблематичной — что происходит, когда такие вещи, как разделение таблицы, неизвестны до времени выполнения?. Для чего-то подобного я бы, вероятно, начал с представления в SQL. Вы имеете в виду процедуру RPG или хранимую процедуру SQL? Или служебная программа? Вероятно, вам больше повезет в определении цели исходного кода и воссоздании на его основе.
2. Я видел, что «запрос инструмента не по теме» выбрасывался раньше; И я обдумал это, прежде чем ответить. Насколько я могу судить, реальный запрет касается субъективного вопроса «какой инструмент лучше». Учитывая размер сообщества RPG здесь и тот факт, что рассматриваемые инструменты, по-видимому, не так хорошо известны или их не так легко найти, как следовало бы. Я чувствовал, что ответ был приемлемым.
3. Запрос инструмента не по теме, в то время как вопрос о проблеме, возникшей при использовании инструмента, вероятно, по теме. Но пример кода не похож на то, что хорошо преобразуется в процедуру как есть. Похоже, было бы лучше заменить его одним оператором SQL SELECT SUM() WHERE … и поместить это в процедуру.
Ответ №1:
Да, есть инструменты. Я бы не стал их использовать.
Возможно, ключевым преимуществом подпроцедур являются локальные переменные и параметризованный интерфейс. Ни один автоматизированный инструмент не сможет настроить интерфейс, и выяснить, какие глобальные переменные следует преобразовать в локальные переменные, является сложной задачей.
За мои деньги все, что сделает автоматизированный инструмент, — это преобразовать синтаксис из EXSR в CALLP. «Подпроцедура» по-прежнему использует глобальные переменные, а интерфейс по-прежнему скрыт от программиста. В чем смысл?
Комментарии:
1. 1 Автоматизированные инструменты для извлечения существующего кода и создания нового кода могут быть проблематичными, и они могут создавать его не самым эффективным способом. Напишите это самостоятельно, это не займет много времени (особенно если вы копируете и вставляете код).
2. Инструмент Linoma действительно просто преобразует EXSR в CALLP … Я утверждаю, что это, по крайней мере, разумный первый шаг. Кроме того, я думаю, что Arcad может пойти еще дальше, учитывая модуль observer. Я не понимаю, как вы могли бы преобразовать всю систему в разумные сроки без какого-либо инструмента … или армии консультантов; у которого есть свой собственный набор проблем.
3. Хотя я в целом предпочитаю решения ручной работы, инструмент, который преобразует подпрограмму в процедуру, является достаточно хорошим первым шагом. После преобразования подпрограммы вы можете вручную настроить ее, чтобы изолировать ее.
Ответ №2:
ДА
Мне особенно нравится RPG-мастер Linoma http://www.linomasoftware.com/products/rpgtoolbox/rpgwizard
У Arcad есть другой инструмент, но он обладает большей функциональностью и стоит дороже. http://www.arcadsoftware.com/products/arcad-transformer-ibm-i-refactoring-tools /
Обратите внимание, что Linoma преобразует синтаксис из внутренней подпрограммы во внутреннюю процедуру; но для перемещения процедуры извне потребуется выполнить ручной процесс.
В то время как я считаю, что набор инструментов Arcard может создавать внешнюю процедуру.