サポート > リポジトリ > スクリプト > 環境タブで設定できる共通スクリプト スクリプト

環境タブに用意されたスクリプト「共通関数」「ファイル項目ダウンロード」「ファイル項目アップロード」を説明します。8.3.0

"環境 > スクリプト" では「共通関数」「ファイル項目ダウンロード」「ファイル項目アップロード」の実行タイミングで呼び出されるスクリプトを用意することができます。

図1 環境>スクリプトの定義

共通関数定義

"生成されるスクリプトファイルの詳細 > 共通して利用できる関数" をお読みください。

ファイル項目ダウンロード

(後述)

ファイル項目アップロード

(後述)

リポジトリで定義したモデル内に存在するすべてのファイル型項目のダウンロード時に共通で呼び出されるスクリプトです。この実体は WEB-INF/script/DownloadFile_beforeDownload.js です。

利用できる暗黙変数

スクリプトでは次の暗黙変数を利用できます。各変数は参照のみの利用となります。

変数名 説明
filename ダウンロードするファイルの名前です。
path ダウンロードするファイルの実体を示すパスです。"ファイル型項目名_jshfilename" の値になります。
modelId 対象モデルのIDです。
pkey 対象モデルの主キーです。
modelitemName 対象モデルの項目名です。
p.user.getUsername() ログオンアカウントの名前です。

次のスクリプトは、すべての暗黙条件の値を表示するものです。

print("DownloadFile_beforeDownload variables.");
print("filename="+filename);
print("path="+path);
print("modelId="+modelId);
print("pkey="+pkey);
print("modelitemName="+modelitemName);
print("userid="+p.user.getUsername());

ダウンロード処理を中止する

スクリプトで何らかの文字列を return で返した場合、このダウンロード処理は中止されます。return で返された文字列はエラーメッセージとして画面に表示されます。

リポジトリで定義したモデル内に存在するすべてのファイル型項目のアップロード時に共通で呼び出されるスクリプトです。この実体は WEB-INF/script/UpdateFile_afterUpload.js です。

利用できる暗黙変数

スクリプトでは次の暗黙変数を利用できます。各変数は参照のみの利用となります。

変数名 説明
filename ダウンロードするファイルの名前です。
path ダウンロードするファイルの実体を示すパスです。"ファイル型項目名_jshfilename" の値になります。
modelId 対象モデルのIDです。

次のスクリプトは、すべての暗黙条件の値を表示するものです。

print("UpdateFile_afterUpload")
print("filename="+filename);
print("path="+path);
print("modelId="+modelId);

アップロード処理を中止する

スクリプトで何らかの文字列を return で返した場合、このアップロード処理は中止されます。return で返された文字列はエラーメッセージとして画面に表示されます。

すべてのファイルのダウンロード時およびアップロード時に、ウィルスチェックを行うという要件を想定します。ウィルスチェックサービスはネットワーク上に REST API のサービスとして提供されているものとします。同サービスが不適切と判断した場合、エラーメッセージを表示してダウンロード(およびアップロード)を中止します。

ダウンロードスクリプト

次のようにします。

return checkFile(filename, path);

アップロードスクリプト

次のようにします。

return checkFile(filename, path);

共通関数

ダウンロード処理およびアップロード処理から呼び出される関数 checkFile を定義します。

function checkFile(filename, filepath) {
  if (filename === null || filepath === null
      || filename.length === 0 || filepath.length === 0) {
      return null;
  }
    
  var url = "http://localhost:18080/serv/check.php";//ダミーのサービスとして。
  var file = new java.io.File(filepath);
  if (! file.canRead()) {
    print("Can not read file "+file);
    return "ファイルの読み込みができません";
  }
  print("file size "+file.length());
    
  var client = new org.apache.commons.httpclient.HttpClient();
  var post = new org.apache.commons.httpclient.methods.PostMethod(url);
  var parts = [ new org.apache.commons.httpclient.methods.multipart.FilePart("file", filename, file) ];
  post.setRequestEntity(new org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity(parts, post.getParams()));
    
  try {
    print("send file");
    var code = client.executeMethod(post);
    print("response code "+code);
    if (code >= 400) {
      return "不正なファイルです。";
    }
  } catch (e) {
    print("failed, file "+e);
    return "ファイルの送信に失敗しました。";
  }
  return null;
}
  • このスクリプトでは、ダミーのサービス(URL)に Apache Commons HttpClient を使ってファイルを(マルチパートリクエストで)送信しています。そのレスポンスコードが400以上なら不正なファイルとしてエラーとしています。