OutSystemsでファイルを扱う際の注意点とは?(vol.5)

  • 公開日:2022年06月06日(月)

OutSystems(アウトシステムズ)は、豊富な標準部品を利用することで超高速開発を実現できるローコード開発プラットフォームとして知られています。OutSystemsにより簡単にアプリケーション開発が可能となりますが、実装が複雑になるにつれてプログラミングスキルや業務経験も必要となります。

本ブログでは、OutSystems開発においてファイルアップロード/ダウンロード機能を実装する際の注意点を、実体験を交えて解説します。

OutSystemsでファイルを扱う際のポイント(標準機能で実装)

OutSystemsのファイルアップロードの標準機能として、File Upload UIパターン(Traditional Webのみ)が挙げられます。これは、ユーザーが画面上からファイルをアップロードするための機能です。実装はいたって容易で、Service StudioでFile Upload ウィジェットを画面上にドラッグ&ドロップするだけで実装することが可能です。

ご参考:https://success.outsystems.com/ja-jp/Documentation/11/Developing_an_Application/Design_UI/Patterns/Using_Traditional_Web_Patterns/Controls/File_Upload

また、OutSystemsのファイルダウンロードの標準機能としては、Download Tool(Traditional Webのみ )が挙げられます。これは、ユーザーのローカル端末へのファイルダウンロードを可能とする機能です。こちらに関しても実装はいたって容易であり、Service StudioでDownload ウィジェットを該当するUIフローにドラッグ&ドロップするだけで実装することが可能です。

ご参考:https://success.outsystems.com/ja-jp/Documentation/11/Developing_an_Application/Use_Data/Download_a_file_through_browser

OutSystemsでファイルを扱う際のポイント(Forgeで実装)

前章の通り、OutSystemsの標準機能を用いてバイナリファイルをDBに格納すると、ファイルディレクトリを指定する操作等も必要なく、DBのクエリのみでバイナリファイルの取得ができます。
しかし、業務要件やシステム要件によっては、別途ファイルサーバーなどを立ててバイナリファイルを格納し、DBにはそのファイルディレクトリ情報のみを格納する仕組みを検討するケースがあります。
この場合は、以下2点を実現可能なForgeであるFileSystemが有用です。

  • ファイルディレクトリの作成、削除等
  • ファイルの存在確認、作成、削除、コピー等

ご参考:https://www.outsystems.com/forge/component-overview/68/filesystem

以下に、既存フォルダにバイナリファイルを作成する処理の一例を示します。
実装手順は以下の通りです。

  1. ファイル書き込み先サーバーのドメイン情報、OSユーザー情報(Username, Password)を確認する。
  2. Interfaceタブの画面にFile Upload ウィジェット、Uploadボタンを準備する。
  3. Uploadボタンの画面アクションにFileSystemのFile WriteBinaryを配置し、上記1.で確認したサーバー情報及び、2)で配置したFile Upload ウィジェットから取得する値を設定する。
  4. Publishを行う。

以上で、アップロードファイルのサーバーへの格納が可能です。これに加えて、サーバーに格納したファイルディレクトリの情報をDBに登録する処理等を加えることにより、アップロード後のファイル操作(サーバー内の実ファイルのRead等)が可能となります。

OutSystemsで複数ファイルアップロード機能構築時のポイント

次に、複数のファイルをアップロードする処理を実現するために、リストレコード(List Records)と組み合わせてFile Upload ウィジェットを利用する際のポイントを解説します。

リストレコードとFile Upload ウィジェットを組み合わせる際には、リストレコード内にFile Upload ウィジェットを配置するのではなく、リストレコードとFile Uploadウィジェットを切り離して配置します。この時、Upload Fileウィジェットにファイルがアップロードされるたびに、On Changeイベントで[NonDisplayUploadBtn]ボタンが押下される処理を組み込みます。

次に、[NonDisplayUploadBtn]ボタンが押下されたときに、以下の処理が実行されるようにします。

  1. ファイル名やファイルデータを取得し、ファイル名とファイルデータを一時テーブルに登録します。
  2. 画面上のリストレコードに、アップロードされたファイル名と1.で取得した一時テーブルの識別子を格納します。

なお、ユーザーによりこの処理が繰り返された場合の画面は、以下のような表示となります。
※この時、ファイル名をリンクにすることで、アップロードされたファイルのダウンロード処理を実装可能です。

最後に、複数のファイルが画面上にアップロードされた後、[Upload]ボタン押下によるサーバーへのファイルアップロード時には以下の処理を実行します。

  1. 一時テーブルに格納された複数のファイル情報を取得します。
  2. 上記1.で取得した複数のファイルをファイルサーバー又は、ファイル格納テーブルへアップロードします。
  3. 一時テーブルに格納されたファイル情報を削除します。

なお、[Upload]ボタン押下によるサーバーへのファイルアップロードが実行されない場合には、一時テーブルにファイルサーバー又は、ファイル格納テーブルにアップロードされなかったファイルが残る可能性があります。この対策として、バッチ(タイマー)で一時テーブル内の該当ファイルを定期的に削除する処理を組み込むことも検討すべきです。

ご参考:https://success.outsystems.com/ja-JP/documentation/best_practices/architecture/data_purging

以上の方法により、複数のファイルのアップロード処理の実現が可能です。

OutSystemsでファイルダウンロード機能が動作しない場合の対応方法について

最後に、2章「OutSystemsでファイルを扱う際のポイント(Forge部品)」でご紹介した、「DBにファイルディレクトリ情報を格納し、ファイルサーバーに実ファイルを格納する構成」でファイルダウンロード機能が動作しないケースの対応方法について紹介します。

ファイルダウンロード機能を構築して、ダウンロードファイルを開くと以下のようなエラーメッセージが表示されるケースがあります。

上記メッセージは、一見、“ファイルダウンロードは成功しているが、ファイルを開くことに失敗している”ように見受けられますが、実際はダウンロード処理自体が失敗している場合に発生します。
そのため、本問題が発生した際には、まずは基本に忠実に、以下3点を確認する必要があります。

  1. DB格納時のファイルディレクトリ情報やファイル名が正しく(「文字化け」等が無い状態で)DBに格納されていること
  2. DBに格納されたファイルディレクトリ情報やファイル名が実際のファイルと一致していること
  3. アップロード処理は正常に実行されていること

まとめ

今回は、OutSystems開発におけるファイルアップロード/ダウンロード機能を実装する際の注意点を、実体験を交えて解説して参りました。
OutSystems開発において、ウィジェットを組み合わせての実装や、業務要件に合わせた実装を行う際には工夫が必要になるケースもありますが、基本的には標準機能やForgeにより容易にファイルを扱うことができることをご理解いただけたかと思います。
本ブログが、皆さまのOusSystems開発の一助になりましたら幸いです。

本ブログは、2022年4月8日時点の情報をもとに作成しています。
OusSystemsに関する詳しいお問い合わせは、弊社Webサイトからお問い合わせください。
https://itsol.dentsusoken.com/outsystems/inquiry/