Progress 4GLからC#.NETへの移行
アプリケーション移行ツールIspirer MnMTKはProgress 4GLをC#.NETに変換する事が出来ます。
Progress 4GLからC#.NETへの移行の概要
Ispirer MnMTKは、現行OpenEdgeアプリケーションからC#.NETへの移行作業を自動化することができ、移行作業に伴うリスクと必要な内部作業を大幅に削減することが出来ます。Ispirer MnMTKはこれらの利点と共にお手頃な価格でデータベースおよびアプリケーションの変換を行う事ができるため、このような移行プロジェクトにとりとても魅力的なツールです。
このデモでIspirer MnMTKによるProgress 4GLからC#.NETへの変換を見ることができます:
Progress 4GLからC#.NETへの移行にIspirer MnMTK 2017を使う理由
Ispirer Systemsの主な目標は、高度で一線級のデータベース移行を実行することです。移行ツールIspirer MnMTKは、様々な個別のビジネス要件に応えることができる費用対効果の高い製品です。
- 良質で経験豊富なサポート:私たちのテクニカルチームは絶大経験のおかげで、最も複雑なタスクの解決策を見つけることをお約束します
- 迅速なカスタマイズ:修正、カスタム変換、最適化(ほとんどの要件は 1~2 日で対応);
- 検討段階での共同作業:お客様の検討期間中に変換のデモをお見せすることができます;
- 柔軟な価格設定:広範囲オプションのご提供;
- 最適化された変換:インテリジェントで保守し易いコードを生成します。
変換後特別なIspirerのミドルウェア等は必要ありません。
見積のための情報収集
Ispirerでは、ツールを使用したアプリケーション移行プロジェクトのIspirer/お客様による共同作業モデルを用意しています。お見積に必要な情報は、下記のフォームを参照いただくと揃えることができます:
Ispirer Toolkit 10Progress 4GLからC#.NETへ ダウンロード
変換機能
Progress 4GLからC#.NETへのアプリケーション移行の一部として、ProgressデータベースがMicrosoft SQL Serverデータベースに変換されます:
- Progress のテーブル、ビュー、シークェンスをMicrosoft SQL Serverのテーブル、ビュー、シークェンスへ:
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
)
- Progress 4GLのトリガをMicrosoft SQL Serverのトリガ/プロシージャ、またはC#のクラスへ:
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コードを.NET コードへ:
- Progress 4GLのプロシージャファイル(*.p) をC#クラスへ変換
- Progress 4GLのインクルード ファイル (*.i) をC#クラス/コードへ変換
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;
}
}
}
}
-
Progress 4GLのウィンドウプロシージャ(*.w) ファイルを以下に変換:
- Windows Forms
- Windows Presentation Foundation (WPF)
例WinFormsへ:
Ispirer MnMTKはProgress 4GLのウィンドウ(*.w)ロジックを自動的にセパレート:
- UIロジックを“.Designer.cs”へ
- ONトリガロジックをソースコード “.cs”へ
-
データアクセスを以下に変換:
&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();
}
}
}
}
}
- Progress 4GLのウェブサービスマッピングファイル(*.wsm) をXMLウェブサービス (*.asmx.cs)へ変換
Progress 4GLのソースコードのサンプルと変換の結果をダウンロードすることができます:
詳細はお問い合わせください。
|