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に関する内容はここでどうぞ!こちらのリンク
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レスポンスにファイル名やファイルデータを設定し、ユーザーのブラウザでそのファイルをダウンロードできるようにしているよ。
👤
平間
            なるほどなるほど。
        
ファイルを実際に出力してみよう!
👤
陶
            ファイルを出力するための準備はできたよ!
実際に画面でファイルを出力してみよう!
準備はいい??
👤
平間
            はい🙆
        
👤
陶
            まずは画面を開いて…
        
    
👤
陶
            ファイル出力ボタンを押すと…
        
    
👤
平間
            わわっ。陶さん、ファイルがダウンロードされましたよ😲
        
👤
陶
            ちゃんと動いたようだね。
では中身も確認しましょうか。
では中身も確認しましょうか。
    
👤
平間
            一行目に「あいうえお」が出力されて、ちゃんと改行もされているよ!!
        
👤
陶
            完璧ですね👓
        
おわりに
今回は、ファイル出力の基本的な流れについてご紹介しました🌻
今回の内容が、皆さんの開発に役立つ一助となれば幸いです。
最後までお読みいただき、ありがとうございました!
 
                                 
                                 
                                 
                                 
                                