智能和高度自动化的跨平台数据库和应用程序迁移


从Progress 4GL到Java的转换

Ispirer MnMTK是一个支持从Progress 4GL到Java应用程序的迁移工具。


从Progress 4GL迁移到Java概观

我们使用面向客户的方法开发Ispirer MnMTK,以便满足您的所有的要求。 我们的技术专家在应用程序迁移方面拥有丰富的经验,我们的技术专家总能找到创新的解决方案,即使是复杂的问题。



为什么选择Ispirer MnMTK?

Ispirer MnMTK把您当前的Progress 4GL应用程序自动转换到Java。此外,使用Ispirer MnMTK您可以减少大部分的相关风险以及相当减少您所费的用力。这些好处的价格合理又竞争,大家真可以享受,这使Ispirer MnMTK更具吸引力的工具在类型项目中。

我们的转换的技术能够保证

  • 可读与可维护的代码
    产生可读与可维护的代码,代码有手动转换质量
  • 代码转换与重构
    转换代码时实施Java最佳做法,而不模拟老技术在新平台上
  • 最后的科技
  • 纯Java代码
    转换后不使用任何Ispirer库或IP

在转换包含代码的百万行的大型脚本Ispirer MnMTK很见效:

  • 自动解决依赖关系
    可以从依赖文件、数据库中等提取信息,以自动解决依赖关系与冲突
  • 配置
    可以从各种配置与项目文档(Ispirer MnMTK配置文件、.xml文件)读取信息
  • 快速又强大的自定义
    抽象层,可重复使用的转换模板,内部转换语言和工具允许快速的定制和复杂的代码转换。

评估过程

您可以使用我们的评估向导为搜集关于您的应用程序统计信息。

专为ISV公司Ispirer提供全面参与模式以转换有数百万行代码的应用程序。

现场演示

Ispirer转换解决方案

从Progress 4GL到Java

请求

请求报价

Ispirer转换解决方案

从Progress 4GL到Java

服务 工具

转换特征

从Progress数据库到Oracle/PostgreSQL/MySQL数据库


Migrate Progress databases to Oracle/PostgreSQL/MySQL databases

  • 将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代码


Convert Progress 4GL code to Java code

  • 将Progress 4GL程序文件(*.p)转换到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";
      }
   }
}
 
  • 将Progress 4GL包含文件 (*.i)转换到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;
      }
    }
  }
}
 
  • 将Progress 4GL Window程序文件(*.w)转换到Java UI Frameworks(Swing,SWT, Java FX等)
  • 将Progress ABL报表转换到Java Jasper报表或Crystal报表
  • 将数据访问转换到Java数据库访问框架(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>
 

联系我们

 
客户评价
2018年 5月 15日System Protocol Information, 马来西亚
Informix到Microsoft SQL Server数据库迁移

尊敬的先生们,

我们刚刚完成了到目前为止最大的从Informix到MS SQL Server迁移任务。这项运动是按计划按时完成的。这是成功的,感谢您工具做很大一部分。

...

2018年 5月 11日Bellnet (HAS), 日本
Delphi转成C#

我们的客户BELLNET是一家日本IT公司,它维护用于控制医疗设备的计算机软件。它需要把这样的医疗软件迁移从Delphi到C#,并联系我们要求转换工具。

...

2018年 4月 24日Steek-IT,荷兰
Progress迁移到SQLServer

Steek-IT是一家荷兰ICT公司,具有15年以上的数据迁移经验。除了我们专业的领域MSSQL、SSIS、SSAS,我们还创建网站、企业软件和iOS应用程序。

...

案例研究
2018年 4月 28日Informix 4GL转移到Microsoft SQL Server的解决方案, 美国

我们的客户是一家值得信赖的美国公司,为美国的100000多家中小企业提供人力资源服务和业务解决方案。

...

2018年 3月 26日Oracle Forms迁移到Java, 美国
用于Ispirer MnMTK的Oracle Forms自动化迁移到Java的可行性已被证明!

于2017年初,一家全球信息技术咨询公司联系Ispirer Systems。该公司与组织合作,制定技术战略并实现IT解决方案,增强公司的业务能力。

...

2018年 3月 23日IBM DB2 iSeries迁移到Microsoft SQL Server, 美国

来自美国的全方服务资讯科技公司,致力于软件和应用程序开发、再工程和维护。该公司提供Web服务,包括网站设计、网站托管和SEO。也从事CRM系统的实施、升级和管理。

...

客户的反馈
我们将研究你和其他人在接下来的一两周内发送的所有材料。几乎所有的竞争对手都无法为我们提供迁移代码的样本。你寄给我们的材料,包括迁移的代码,将把你的公司放在一个小的顶部。如果我们的客户应该决定实现迁移项目,我只能推荐你的公司,因为你除了沟通,显得非常高效和简单。



更多