IBM i RPG Код для процедуры

#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 может создавать внешнюю процедуру.