DXブログ

TOP > DXソリューション > DXブログ

GeneXusでのテキストファイル出力の方法

はじめに

こんにちは🌷

GeneXus開発者の平間と陶です👩👨

今回のブログでは、テキスト出力の方法について解説します。

環境:GeneXus18、WorkWithPlus(WWP)、Tomcat 10.1使用

ファイル出力画面の作成

👤

平間

じゃあ早速ユーザーが画面上でボタンを押下することで、ダウンロードフォルダにテキストファイルを出力する機能を実装してみよう!

まずは、ユーザーがファイル出力を行うための画面を作成していきます。

テキストファイル出力

👤

シンプルな画面ができましたね。

👤

平間

シンプルイズベストってことよ😎

ファイル出力プロシージャの作成

👤

平間

画面の作成ができたのでファイル出力のプロシージャを作っていこう!

👤

そうだね。まずは一時ファイルを格納するフォルダパスを取得しよう!

👤

平間

ふむふむ。

/*ファイルパスの取得処理*/
    /*ファイルパスの取得処理*/
    /* Tempファイル(Blob)をPublicTempStorageディレクトリに作成し、作成後のファイルパスを取得する
       ※PublicTempStorageディレクトリ:Tomcatサーバー上で動作しているGeneXusアプリケーションの一時ファイルが保存される場所 */
    
        // (1)Blob を作成
    &Blob.FromBase64String("MA==")
     
        // (2)Blob のパスを取得
    &File.Source = &Blob.ToString()
     
        // (3)ファイルの存在を確認
    If &File.Exists()
        // ファイルが存在する場合
        // (4)ファイルのパスを取得
	    &Out_Path = &File.GetPath() + &File.Separator
     
        // (5)ファイルを削除
	    &File.Delete()
    Else
        // ファイルが存在しない場合
	    &Out_Path = ""
    EndIf

👤

この処理は、一時的なファイル(Tempファイル)を生成し、

そのファイルのパスを取得するために行うよ!

👤

平間

なんとな~くイメージできたけど、要するに一時的に格納するってことだよね。

👤

その通り。

次はここ!ファイルの設定だ。

/*ファイルの設定*/
    
        // ファイル名の設定
    &FileName = !'ファイル書き込み'
     
        // ファイル拡張子設定
    &FileExtension = !'txt'
    
        // ファイルパスの定義
    &OutFilePathName = &FilePath + &File.Separator + &FileName + !'.' + &FileExtension
👤

平間

ファイル名と拡張子とファイルパスを設定しているね。

👤

そうそう!

それじゃあ次はファイルの書き込みの処理を書いていくね。

/*ファイルへの書き込み*/
    
        // ファイルを開く
    &fHandle = DFWOpen(&OutFilePathName,',','',0,'Windows-31J')
        // 文字列
    &TxtFileWrite = !'あいうえお'
        // 書込み
    &fHandle = DFWPTxt(&TxtFileWrite)
        // 改行処理
    &fHandle = DFWNext()
        // ファイルを閉じる
    &fHandle = DFWClose()
    

👤

平間

ふむふむ。流れとしては、

1. ファイルを開く。

2. 変数 &TxtFileWrite に、文字列 ‘あいうえお’ をセットする。

3. 文字列’あいうえお’をファイルに書き込む。

4. 改行する。

5. ファイルを閉じる。

って感じかな?

👤

その通り!

👤

平間

なぜ一度変数に文字列を格納しているの??

DFWOpen関数も初めて見たよ。

👤

変数に格納することで文字化けを防いでいるよ!
DFWOpenに関する内容はここでどうぞ!こちらのリンク

👤

平間

ふむふむ。

👤

最後にファイルのダウンロード処理を書いていくよ。

/*作成したファイルをダウンロード*/
    
    &File.Source = &FilePathName
    &Blob = &File.GetAbsoluteName()
    
    &file_name_and_extension = trim(&file_name)+'.'+trim(&file_extension)
    &httpresponse.AddHeader('Content-Disposition','attachment; filename='+&file_name_and_extension)
    &httpresponse.AddFile(&file_blob.ToString())
👤

この処理では、サーバー上にあるファイルをダウンロード可能にするために

HTTPレスポンスにファイル名やファイルデータを設定し、ユーザーのブラウザでそのファイルをダウンロードできるようにしているよ。

👤

平間

なるほどなるほど。

ファイルを実際に出力してみよう!

👤

ファイルを出力するための準備はできたよ!

実際に画面でファイルを出力してみよう!

準備はいい??

👤

平間

はい🙆

👤

まずは画面を開いて…

ファイル出力画面

👤

ファイル出力ボタンを押すと…

ダウンロード成功

👤

平間

わわっ。陶さん、ファイルがダウンロードされましたよ😲

👤

ちゃんと動いたようだね。
では中身も確認しましょうか。

書き出したファイル

👤

平間

一行目に「あいうえお」が出力されて、ちゃんと改行もされているよ!!

👤

完璧ですね👓

おわりに

今回は、ファイル出力の基本的な流れについてご紹介しました🌻

今回の内容が、皆さんの開発に役立つ一助となれば幸いです。

最後までお読みいただき、ありがとうございました!

Tag Icon GeneXus, ローコード開発