Intelligent, Custom and Highly Automated Cross Platform Database and Application Migration

Progress 4GL to C#.NET Migration

Ispirer MnMTK is the application migration tool, which supports Progress 4GL to C# .NET conversion of any complexity.


Progress 4GL to C#.NET Migration Overview

We develop our conversion tool using a customer-oriented approach so as we do our best in order to satisfy all your project requirements. Our technical experts have great experience in application migrations and always find innovative solutions even to the most complicated migrations from Progress 4GL to C#.

The demos below show how Ispirer MnMTK converts Progress 4GL to C#.NET:






Why Ispirer MnMTK 2015 for Progress 4GL to C#.NET Conversion?

The main purpose of Ispirer Systems is to carry out a high-grade and top-of-the-line database migration. We personalize our migration tool Ispirer MnMTK in such a way that a customized version can fully satisfy a client's business requirements.

Our main benefits:

  • Highly qualified and experienced technical support: our technical team has a tremendous experience in migration projects of different levels of complexity.
  • Customer-oriented approach and Fast Customization: we personalize our migration tool in such a way that a customized version can fully satisfy our client’s business needs, custom conversions and optimizations are made within 1-2 business days;
  • Pre-Sales Engagement: we demonstrate a full conversion during the evaluation before you make a decision.
  • Flexible pricing: we can offer you a wide range of options, among which you will definitely find the one which suits you;
  • Optimized Conversion: after the conversion you get an intelligent and maintainable code, without using any Ispirer's middleware.

Assessment Process

The assessment of your migration project could definitely help to weigh up efforts and the approximate cost of your migration. In order to facilitate the process, you're welcome to fill in our:

Live Presentation

Ispirer Migration Solution

Progress 4GL to C#.NET

Request

Request a Quote

Ispirer Migration Solution

Progress 4GL to C#.NET

Service Toolkit

Conversion Features

As part of Progress 4GL to C# .NET application migration Progress databases are converted to Microsoft SQL Server databases. Ispirer MnMTK also allows to:

  • Convert Progress tables/view/sequences to Microsoft SQL Server tables/views/sequences:
    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
     
    TO:
     
    CREATE TABLE TB_DATATYPES
    (
       c1 CHAR(16)   NULL,
       c4 INT   NULL,
       c5 BIT   NULL
    )
  • Convert Progress 4GL triggers to Microsoft SQL Server triggers/procedures or C# classes:
    TRIGGER PROCEDURE FOR DELETE OF gsinvhd.
    FIND distribution 
    WHERE distribution.company = gsinvhd.company NO-LOCK 
    NO-ERROR.
     
    TO:
     
    CREATE TRIGGER SWT_Delete_gsinvhd
    ON gsinvhd
    AFTER DELETE
                AS
                DECLARE @distribution_company VARCHAR(255)
                SELECT    @distribution_company = company FROM distribution   
                WHERE   distribution.company = gsinvhd.company

  • Progress 4GL code to .NET code:



  • Convert Progress 4GL Procedure Files (*.p) to C# classes
  • Convert Progress 4GL Include Files (*.i) to C# classes/code
    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.
     
    using System;
    using System.Collections.Generic;
    namespace Ispirer.Services.Source
    {
                public class TestClass
                {
                static TestClass()
                {
                }
                public 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 (Convert.ToInt32(pyear / 4) * 4 == pyear)
                {
                if (Convert.ToInt32(pyear / 100) * 100 == pyear)
                {
                if (Convert.ToInt32(pyear / 400) * 400 == pyear)
                return 29;
                else
                return 28;
                }
                else
                return 29;
                }
                else
                return 28;
                }
                }
                }
    }
  • Convert Progress 4GL Window Procedure (*.w) Files to:
    • Windows Forms
    • Windows Presentation Foundation (WPF)




    • For example, to WinForms:



    Ispirer MnMTK automatically separates logic of Progress 4GL window (*.w):
    • UI logic to “.Designer.cs”
    • ON triggers logic to source code “.cs”
  • Convert Data Access to:
    • ADO.NET
    • LINQ
    &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE generate-data Procedure 
    PROCEDURE generate-data :
    DEFINE VARIABLE i            AS INTEGER NO-UNDO.
    DEFINE VARIABLE gc-company AS CHARACTER NO-UNDO.
     
    FIND company WHERE company.company = gc-company NO-LOCK NO-ERROR.
     
                find budget where budget.company = gc-company no-lock no-error.
     
                Do while avail budget:
                Do i = 0 to company.num-periods:  
        find budget-analysis where 
          budget-analysis.user-id = company.gc-user-id and 
          budget-analysis.company = gc-company and
          budget-analysis.pc-center = "ALL" and
          budget-analysis.acct-period = i
          no-error.   
    End.
    End.
    END PROCEDURE.
    &ANALYZE-RESUME
     
    TO:
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    namespace Ispirer.Services.Source
    {
                public class Gn_Data
                {
     
                #region Implicit buffers
     
      Data.Tables.company company;
      Data.Tables.budget budget;
      Data.Tables.budget_analysis budget_analysis;
     
                #endregion
     
                public Gn_Data()
                {
                }
                public void Generate_data()
                {
                int i = 0;
                string gc_company = string.Empty;
        company = (from company_Row in Db.company
             where company_Row.company == gc_company
             select company_Row).FirstOrDefault();
        budget = (from budget_Row in Db.budget
             where budget_Row.company == gc_company
             select budget_Row).FirstOrDefault();
                while (budget != null)
                {
                for (i = 0; i <= company.num_periods; i++)
                {
           budget_analysis = 
                (from budget_analysis_Row in Db.budget_analysis
             where budget_analysis_Row.user_id == company.gc_user_id &&
             budget_analysis_Row.company == gc_company &&
             budget_analysis_Row.pc_center == "ALL" &&
             budget_analysis_Row.acct_period == i
             select budget_analysis_Row).FirstOrDefault();       
                }
                }
                }
                }
    }
  • Convert Progress 4GL Web Service Mapping Files(*.wsm) to XML Web service (*.asmx.cs)

You can download Progress 4GL source code samples and the results of conversion:


You can also reach us via Contacts page.

 
.NET Versions

Microsoft .NET 4.6.1 and earlier

Testimonials
December 3, 2012Epicor Software Corporation, United States
Progress 4GL to C# .Net Migration

"Epicor has engaged with the Ispirer team to create and refine prototype techniques for migrating certain parts of the Epicor Progress ABL code to well...

...

Case Studies
May 26, 2014COBOL to .NET Conversion, United States

Our client was a major player in market-driven innovation and science. For more than two hundred years, it has been presenting world-class science and engineering to the global marketplace...

...

September 12, 2014Delphi to C# .NET, United States

Our client was a U.S.-based health insurance company providing care services since six decades through its extensive network of hospitals and other institutions.

...

Feedback

Thank you for your prompt replies and support. I'll definitely suggest your migration software to any colleague faced with a similar task.

Read more
Industry Events