Конвертация Progress 4GL в Java
Ispirer MnMTK автоматизирует вемь процесс конвертации приложений Progress 4GL в Java любой сложности.
Обзор конвертации приложений Progress 4GL в Java
Ispirer Systems стремиться к предоставлению высококачественных услуг в сфере конвертации приложений и миграции баз данных. Мы вносим дополнительные настройки в программу, чтобы кастомизированная специально под ваш проект версия учитывала все его тонкости и особенности, а конечный результат соответствовал вашим требованиям и ожиданиям.
Почему Ispirer MnMTK?
Ispirer MnMTK автоматизирует весь процесс миграции Вашего текущего OpenEdge приложения в Java. Более того, с помощью Ispirer MnMTK Вы избежите большинство сопутствующих рисков и значительно снизите усилия, затраченные на выполенение данной задачи. Все эти преимущества доступны по разумной цене, что делает Ispirer MnMTK еще более привлекательным инструментом для данного типа проектов.
Наша технология конвертации гарантирует:
- Читабельный и легко обслуживаемый код
Генерация читабельного и лекго обслуживаемого кода с качеством ручной конвертации
- Трансформация и рефакторинг кода
Трансформация кода с применением наилучших практик Java вместо эмуляции старой технологии на новой платформе
- Новейшие технологии
- Чистый Java код
Никакие библиотеки или IP Ispirer не используются после конвертации
Ispirer MnMTK эффективно конвертирует большие скрипты, содержащие тысячи или миллионы строчек кода:
- Автоматически решает зависимости
Может извлечь информацию из зависимых файлов, баз данных и т.д. и автоматически решить зависимости и конфликты
- Конфигурации
Может читать информацию из различных конфигурационных и проектных файлов (конфигурационные файлы Ispirer MnMTK, .xml файлы)
- Быстрая и гибкая кастомизация
Абстрактные слои, универсальные конвертационные шаблоны, а также внутренние конвертационные языки и программы позволяют производить быструю кастомизацию и сложные трансформации кода.
Наш подход
Пожалуйста, заполните опросник для того, чтобы начать обсуждение Вашего проекта или получить его грубую оценку:
Для ISV компаний Ispirer предлагает комплексную процесс взаимодействия в случае конвертации приложений с миллионами строчек кода.
Ispirer Migration Solution
Progress 4GL в Java Заказать
Если Вас заинтересовала наша программа и услуги по миграции, пожалуйста, свяжитесь с нами для получения более детальной информации.
Характеристики конвертации
Базы данных Progress в базы данных Oracle/PostgreSQL/MySQL

- Конвертирует таблицы/представления/последовательности Progress в таблицы/представления/последовательности Oracle/PostgreSQL/MySQL
Например,
Progress 4GL:
ADD TABLE "TB_DATATYPES" AREA "Schema Area" DUMP-NAME "tb_datat" ADD FIELD "c1" OF "TB_DATATYPES" AS CHARACTER FORMAT "X(8)" INITIAL "" POSITION 2 SQL-WIDTH 16 ORDER 10 ADD FIELD "c4" OF "TB_DATATYPES" AS INTEGER FORMAT "->,>>>,>>9" INITIAL "0" POSITION 5 SQL-WIDTH 4 ORDER 20 ADD FIELD "c5" OF "TB_DATATYPES" AS logical FORMAT "yes/no" INITIAL "no" POSITION 6 SQL-WIDTH 1 ORDER 30 . PSC cpstream=ISO8859-1 . 0000000976
Oracle:
CREATE TABLE TB_DATATYPES ( c1 CHAR(16), c4 NUMBER(10,0), c5 NUMBER(1,0) );
- Конвертирует триггеры Progress 4GL в триггеры/процедуры Oracle/PostgreSQL/MySQL или классы Java:
Progress 4GL:
TRIGGER PROCEDURE FOR DELETE OF gsinvhd. FIND distribution WHERE distribution.company = gsinvhd.company NO-LOCK NO-ERROR.
Oracle:
CREATE OR REPLACE TRIGGER SWT_Delete_gsinvhd AFTER DELETE ON gsinvhd DECLARE v_distribution_company VARCHAR2(255); BEGIN SELECT company INTO v_distribution_company FROM distribution WHERE (distribution.company = gsinvhd.company) AND ROWNUM <=1; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END;
Более подробно Вы найдете на следующих страницах:
Миграция базы данных Progress в Oracle
Миграция базы данных Progress в PostgreSQL
Миграция базы данных Progress в MySQL
Конвертирует код Progress 4GL в код Java

- Конвертирует файлы Procedure (*.p) из Progress 4GL в Java пакеты с классами
Progress 4GL:
DEF VAR w_ail AS CHAR NO-UNDO. PROCEDURE act_InitValues. IF w_ ail EQ "ac21" OR w_ ail EQ "first" THEN DO: ASSIGN w_ ail ="first". END. ELSE IF w_ ail EQ "ac50" THEN DO: ASSIGN w_ ail ="second". END. ELSE DO: ASSIGN w_ ail ="third" END. END PROCEDURE.
Java:
package ispirer; public class If_statement { private String w_ ail = null; public void act_InitValues() { if((w_ ail.equals("ac21")) ||( w_ ail.equals("first"))) { w_ ail = "first"; } else if(w_ ail.equals("ac50")) { w_ ail = "second"; } else { w_ ail = "third"; } } }
- Конвертирует файлы Include (*.i) из Progress 4GL в Java пакеты с классами
Progress 4GL:
FUNCTION days-in-MONTH RETURNS INTEGER ( INPUT pmonth AS INTEGER, INPUT pyear AS INTEGER ) : DEFINE VARIABLE idays AS INTEGER EXTENT 12 INITIAL [31,28,31,30,31,30,31,31,30,31,30,31]. IF pmonth NE 2 THEN DO: RETURN idays[pmonth]. END. ELSE DO: IF INTEGER(pyear / 4) * 4 = pyear THEN DO: IF INTEGER(pyear / 100) * 100 = pyear THEN DO: IF INTEGER(pyear / 400) * 400 = pyear THEN RETURN 29. ELSE RETURN 28. END. ELSE RETURN 29. END. ELSE RETURN 28. END. END FUNCTION.
Java:
package ispirer; public class Daymonth { public final int Days_in_month(int pmonth, int pyear) { int[] idays = new int[] {31,28,31,30,31,30,31,31,30,31,30,31}; if (pmonth != 2) { return idays[pmonth - 1]; } else { if ((int)(pyear / 4) * 4 == pyear) { if ((int)(pyear / 100) * 100 == pyear) { if ((int)(pyear / 400) * 400 == pyear) { return 29; } else { return 28; } } else { return 29; } } else { return 28; } } } }
- Конвертирует файлы Window Procedure (*.w) из Progress 4GL в Java UI Фреймворки (Swing, SWT, Java FX, и т.д.)
- Конвертирует отчеты Progress ABL в отчеты Java Jasper или отчеты Crystal reports
- Конвертирует Data Access в Фреймворки Java Database Access (JDBC, Hibernate, Torque, и т.д.)
Ispirer MnMTK может автоматически генерировать карты Hibernate и Torque XML в соответствии с таблицами базы данных.
Например, Progress 4GL:
DEF BUFFER buf_LogOverview FOR test_table. PROCEDURE test_proc. FIND FIRST buf_LogOverview NO-LOCK WHERE buf_LogOverview.col1 EQ "1" AND buf_LogOverview.col2 EQ 2 NO-ERROR. END PROCEDURE. CREATE TABLE test_table ( col1 VARCHAR, col2 INTEGER PRIMARY KEY );
Java:
package buffer_migration; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import util.HibernateUtil; public class Find_stmt { private Test_table buf_LogOverview; public void test_proc() { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); buf_LogOverview =((List< Test_table >) session.createQuery("from Test_table WHERE col1 = '1' "+ " AND col2 = 2").list()).get(0); session.getTransaction().commit(); } } import java.util.Set; import java.util.HashSet; public class Test_table { private String col1; private Integer col2; private Set test_tables = new HashSet(); public Test_table() { } public void setCol1(String col1) { this.col1=col1; } public String getCol1() { return col1; } public void setCol2(Integer col2) { this.col2=col2; } public Integer getCol2() { return col2; } } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Test_table" table="test_table"> <property column="col1" name="col1" type="java.lang.String"/> <id column="col2" name="col2" type="java.lang.Integer"/> </class> </hibernate-mapping>
|