たまにGeneXusで作ったシステムでZip圧縮したいという要件をいただくことがあります。
ボタンを押すと、帳票やCSVを複数作成して、できたものをZip圧縮してダウンロードさせたいみたいな要件です。
実はGeneXusの標準機能にはZip圧縮機能はなく、MarketPlaceにある外部のオブジェクトを使用することにより可能となります。
今回はその外部のオブジェクトの使い方をご説明しようと思います。
事前準備
まず下記のサイトから「GeneXus Zip Tools」と言うxpzをダウンロードします。
(ダウンロードにはGeneXusアカウントが必要になります)
GeneXus Zip Tools
https://marketplace.genexus.com/product.aspx?genexusziptools,en
対応バージョンはGX15u3までと書いてありますが、GX18u12でも普通に使用できました。
ダウンロード後、KBにxpzをインポートします。
下記のような感じでインポートできればOK

今回Zip作成の前にCSVをいくつか作って、それをZip圧縮させます。
CSV作成処理実装
まずCSVファイルを作成します。
目的はCSVを複数作るだけなのですごく簡単に書きます。
ファイルパスも名前も固定です。
CSV作成プロシージャ

CSV作成プロシージャ呼出画面

画面の「CSV出力」ボタンを押したらプロシージャを呼んでCドライブのtempフォルダにCSVを5ファイル出力するだけ。
CSV作成処理動作確認
動作確認するまでもないですが、動きを見てみましょう。

ボタン押下でファイルが想定通りできてますね。

あとはこれを圧縮します。
Zip圧縮処理実装
先ほどのCSV作成処理の後に、Zip圧縮プログラムを追記します。

&ZipToolsと言う変数は、最初にインポートしたZipToolsと言う外部オブジェクトの型となります。
※同様の名前を付けて右クリックから変数追加で自動的にZipTools型になります。
引数は第一引数が圧縮したいフォルダで、第二引数がZip化したファイルのパスとなります。
Zip圧縮処理動作確認
またCSV出力ボタンを押します。

CSVが出力されます。

その後、ZipフォルダにZipファイルができます。

中身も入ってますね。

まとめ
外部のオブジェクトを使用するのは少し抵抗があるのですが、GeneXusの標準機能にないのでしょうがないですね。
また圧縮だけではなく解凍も同様の外部オブジェクトでできるようです。
Zip圧縮しない要件に持っていければそれが一番なのですが、どうしても必要な場合は自己責任と言うことで。