GeneXusでトランザクションを作成する時、項目が多いと結構大変ですよね。
今回はExcelで項目を定義して、そのExcelからトランザクションが作れる機能があるのでそれを使ってみようと思います。
準備
まずは下記サイトで「エクセル変換ツール (ExcelToGX)」をダウンロードします。
https://www.genexus.jp/community-and-support-jp/downloads02
その後ダウンロードしてきたファイルを展開して、中身を確認します。
使い方は「ExcelToGXご利用方法.xlsx」に書いてありそうなので見てみます。
シートがいくつかありますね。
1,事前準備
こちらは既にConfigファイルに定義されているので、特に触ることはなさそう。
2,実行および取り込み方法
こちらがこのツールの使い方ですね。
イメージとしてはトランザクション、SDT、サブタイプをExcelで定義しておいて、それをコマンドプロンプト上でツールを実行することによって、ExcelからXmlに変換してくれるみたいです。
変換単位は下記の2種類あるみたいです。
・各オブジェクトのExcelファイルを単体で指定してXmlに変換する
・各オブジェクトのExcelが入っているディレクトリを指定して、ディレクトリ内のExcelをすべてXmlに変換する
基本的にはディレクトリ内のExcel指定で良さそうです。
そんな感じでXmlにしてしまえば、GeneXusのインポートから取り込めるってことですね。
余談ですが、GeneXusは基本的にはxpzと言う形式でのインポートになりますが、xpzも展開すると中身はXmlです。
もちろんXmlをxpzに圧縮しても取り込めますが、圧縮しなくても行けます。
3,トランザクションサンプル定義シート
こちらがトランザクションの基となるExcelのサンプルですね。
トランザクションで設定出来ることは一通りできそう。
そのままトランザクション定義書としても使えそうです。
ドメインを指定できるってことは、存在しないドメインは同時に作ってくれそう。
4,SDTサンプル定義シート
こちらも問題なく使えそうです。
ちょっと気になったのが、ドメインのところにあるアトリビュートを指定しているところですね。
アトリビュートの属性を継承する場合は、「att」と書かなければ行けないっぽいです。
データタイプと桁数が指定できるってことは、もし取り込み先のKBにない場合はアトリビュートも作ってくれそうです。
5,サブタイプグループサンプル定義シート
サブタイプも問題なく使えそうです。
こちらはサブタイプ項目属性とスーパータイプが存在しないKBだとエラーになりそうなので、予めトランザクションを作ってから取り込まないとダメそうですね。
一通り取り込むイメージが湧きましたので、実際に使っていきましょう。
トランザクションを定義
実例サンプルフォルダに既にAirportとFlightのトランザクション定義書があるので、今回はそれを取り込んで見ようと思います。
Airportトランザクション定義書
Flightトランザクション定義書
ひとまずこの2つをそのままXmlに変換します。
トランザクション定義をXmlへ変換
下記の「ExcelToGX.exe」をコマンドプロンプト上で実行します。
(コマンドプロンプトは管理者で実行してください)
コマンドプロンプト上で上記フォルダに移動して下記を実行
(TransactionsディレクトリとImportFile.xmlを作成するパスは環境に合わせて変えてください)
ExcelToGX.exe /d:C:\ExcelToGX\実例サンプル\Transactions /o:C:\ExcelToGX\実例サンプル\Transactions\xml\ImportFile.xml
指定した場所にxmlが出来てました。
ナレッジベースにトランザクションのxmlをインポート
GeneXusの上部、ナレッジマネージャ>インポートを選択
「…」を押下
開く形式をXMLエクスポートファイルに変更して、先程ツールから作成したxmlを選択
取り込むオブジェクトを確認してインポートを押下で正常にインポートできました。
トランザクションを確認
ではインポートされたトランザクションを見てみましょう。
AirPortトランザクション
Flightトランザクション
サブタイプをインポートしていないので、FlightにあるAirportIdは外部参照が貼られていませんが、特に問題なく出来てますね。
サブタイプを定義
今回もサンプルとしてあるサブタイプの定義をxmlに変換します。
DepartureAirportサブタイプ
ArrivalAirportサブタイプ
サブタイプ定義をXmlへ変換
トランザクション定義書からxmlを作ったときと同様に、コマンドプロンプトから行います。
コマンドプロンプト上で上記フォルダに移動して下記を実行
(SubtypesディレクトリとImportFile.xmlを作成するパスは環境に合わせて変えてください)
ExcelToGX.exe /d:C:\ExcelToGX\実例サンプル\Subtypes /o:C:\ExcelToGX\実例サンプル\Subtypes\xml\ImportFileGRP.xml /t:GRP
正常に出来ました。
ナレッジベースにサブタイプのxmlをインポート
GeneXusの上部、ナレッジマネージャ>インポートを選択、その後ファイルを選択してインポート
サブタイプ取込後、再度Flightトランザクションを開いてみます。
DepartureAirportIdとArrivalAirportIdがAirpotのAirportIdと参照整合性が付いており、期待通りの結果になってますね。
まとめ
今回SDTは取り込みませんでしたけど、トランザクションとサブタイプが簡単に出来るのは良いですね。
特にトランザクションは項目が多いと大変ですし、それを一括で作れるのはかなり便利だと思いました。
ただ1つのトランザクションやアトリビュートに対して、2回目以降のインポートは上書きになるので注意してください。
特にトランザクションはRulesとかEventsとか記載したあとに、再度インポートすると全て初期化されてしまいますのでご注意ください。
まぁ、インポートは最初の1回のみにして、それ以降は手動で修正するようにルール化すれば防げると思います。
あと、ドメインに関しては型の定義のみとなっており、値の設定とかは定義できないのでインポートしたあと修正することになりますね。
今回はサンプルのトランザクションとサブタイプの取込のみでしたが、また新たに定義したトランザクションでやってみて、何かあれば記載します。
皆さんも、ぜひ使ってみてください。