Diese Seite ist noch in Bearbeitung. Die Informationen auf dieser Seite sind deshalb unvollständig und nicht verbindlich.
Die Migration von Cobol-Programmen nach C# erfolgt mit dem Werkzeug ExpEdge.
Das für die Migration verwendete Generierungsszenario heißt cob-cs. Dieses ist im ExpEdge-Aufruf mit der Option -gen
anzugeben.
Die Angabe der zu migrierenden Cobol-Sources erfolgt als Eingabedatei vom Typ COBL1) (für Programme) bzw. COBC2) (für CopyBooks mit Konstanten), COBS3) (für modifizierbare CopyBooks ) z.B.
PRIVAT.COBC."K:\Src\rewt\cpy\CXSND100.cpy" PRIVAT.COBS."K:\Src\rewt\cpy\CXSND650.cpy" PRIVAT.COBL."K:\SRC\REWT\PRIVAT\MODULE\CP85\Z0SNU7F3.CBL"
Alternativ kann auch der Baustein angegeben werden:
PRIVAT.EFUN.AF-BERECHNUNG-JP
ExpEdge sucht zum COBOL-Programm die zugehörige Schnittstellendefinition oder zum TAA-Modul die aktuell vorhandene COBOL-Implementierung.
Falls der Baustein angeben wird, werden der Verzeichnisname und der Modulname für die Cobol-Implementierung abgeleitet aus der Ispc-Angabe für das Modul sowie, falls der EDB-Zugriff erlaubt ist (SearchOrder > 0), der Konfig-Angabe „VssVerzeichnis“. Die Infos werden zusammengesetzt lt. Angabe in config/SourcePath in der TAA-Registry, Default „K:\\Src\\$V\\edb\\$A\\Module\\$D\\$I.$S“. Hierbei steht $D für den Verzeichnisnamen, die anderen Platzhalter entsprechen den in der mdb verwendeten Platzhaltern.
ExpEdge erzeugt für jede Quelle eine oder mehrere passende C#-Dateien sowie alle notwendigen Komponenten, um die erzeugten Code-Komponenten in eine C#-Assembly zu bündeln. Die Erstellung der Komponenten für die Erstellung einer Assembly kann mit der ExpEdge-Generator-Einstellung CreateProject=false
unterdrückt werden. Die Assembly wird unter dem mit der Option -proj
angegebenen Projektnamen in dem mit der Option -o
angegebenen Pfad mit der mit -rns
angegebenen Namespace erzeugt (zu den Optionen vgl. Generierung einer Assembly). Falls bei einer der zu migrierenden Komponenten die Option main=true
gesetzt ist, wird diese Komponente als Einstieg für ein ausführbares Programm angesehen und wird die Assembly als ausführbares Programm (EXE
) erzeugt. Sonst wird die Assembly als Klassenbibliothek (DLL
) angelegt.
Folgende Komponenten werden4) für die Assembly erzeugt:
csproj
-Datei mit allen notwendigen Einträgen und Referenzen um sämtliche erzeugte Komponenten in einer Assembly zu bündeln.AssemblyInfo.cs
Datei mit allen notwendigen Attributen für die Assembly.Startup.cs
Datei erzeugt, die die Ausführung der Einstiegskomponente veranlasst.Wenn ein TAA-Modul mit ExpEdge migriert wird, basiert die erzeugte C#-Implementierung auf der Basisklasse des Moduls, die von ExpEdge anhand der Modulschnittstelle erzeugt wird. Das bedeutet, dass diese Basisklasse zunächst in einer sogenannten Basis-Assembly zur Verfügung gestellt werden muss (→ Generierung einer Basis-Assembly).
Der Name der Basis-Assembly ist im ExpEdge-Aufruf anzugeben, z.B.
-opt baseassembly=c:\t\CP82\bin\Release\ALSNCP82.dll
ExpEdge bietet die Möglichkeit, einmalig aufgerufene Methoden mit einer festlegbaren Anzahl an C#-Codezeilen inline zu generieren.6) Standardmäßig ist der Wert 3, kann vom Nutzer aber angepasst werden:
-opt "inlineThreshold=3"
Vorher
… E1501AfAusstGrndPraemie(); ... // E 1 5 0 1 A f A u s s t G r n d P r a e m i e // --------------------------------------------- // ORIG: E15-01-AF-AUSST-GRND-PRAEMIE private void E1501AfAusstGrndPraemie() { // ------------------------------------------------------------- // // AUSSTEUERUNGSGRUENDE PRAEMIE (VORERST NUR IN SACH PRIVAT) // ORIG: EXEC TAA // ORIG: CALL EFUN SERVICE AF-AUSST-GRND // ORIG: IN PRIVAT.PRUEF-PME // ORIG: WITH LSNPME2 = LSNPME2 // ORIG: AND SIGABTS = SIGABTS // ORIG: AND SNLVMI = SNLVMI // ORIG: AND SNLPPME = SNLPPME // ORIG: AND Z0AAIVB = Z0AAIVB // ORIG: AND Z0AAPME = Z0AAPME // ORIG: AND SVLPPME = SVLPPME // ORIG: AND Z0AALUF = Z0AALUF // ORIG: END-EXEC this.Call.AfAusstGrnd.PruefPme.AssignMatchingArguments(); LastCall.AfAusstGrndState = this.Call.AfAusstGrnd.PruefPme.Run(); // ORIG: EXIT }
Inline
// MIG_NOTE: Inline E1501AfAusstGrndPraemie(); // E 1 5 0 1 A f A u s s t G r n d P r a e m i e // --------------------------------------------- // ------------------------------------------------------------- // // AUSSTEUERUNGSGRUENDE PRAEMIE (VORERST NUR IN SACH PRIVAT) // ORIG: EXEC TAA // ORIG: CALL EFUN SERVICE AF-AUSST-GRND // ORIG: IN PRIVAT.PRUEF-PME // ORIG: WITH LSNPME2 = LSNPME2 // ORIG: AND SIGABTS = SIGABTS // ORIG: AND SNLVMI = SNLVMI // ORIG: AND SNLPPME = SNLPPME // ORIG: AND Z0AAIVB = Z0AAIVB // ORIG: AND Z0AAPME = Z0AAPME // ORIG: AND SVLPPME = SVLPPME // ORIG: AND Z0AALUF = Z0AALUF // ORIG: END-EXEC this.Call.AfAusstGrnd.PruefPme.AssignMatchingArguments(); LastCall.AfAusstGrndState = this.Call.AfAusstGrnd.PruefPme.Run(); // ORIG: EXIT
# --------------- # general options # --------------- -gen cob-cs -lo cob-cs.log -a PRIVAT -s REWT -srch 0 -n ALSNCP85Cs -o D:\work\test\CP85Cs_ -v 085 -c AL -rns AL.PrivatPraemienBerechnungCs -proj AL.PrivatPraemienBerechnungCs -m TargetFrameworkVersion=v4.5 -opt baseassembly=c:\t\CP82\bin\Release\ALSNCP82.dll -opt basenamespace=AL.PrivatPraemienBerechnung # ------------------------ # global copies and consts #------------------------- PRIVAT.COBC."K:\Src\rewt\cpy\CXSND100.cpy" PRIVAT.COBC."K:\Src\rewt\cpy\CXSND200.cpy" # ------- # modules # ------- PRIVAT.COBL."K:\SRC\REWT\PRIVAT\MODULE\CP85\Z0SNU7F3.CBL" PRIVAT.COBL."K:\SRC\REWT\PRIVAT\MODULE\CP85\Z0SNU4J8.CBL"
Die erzeugte Projektdatei enthält