(Any Website): File Download
Downloads a file and adds it to a File-type Data Item. The GET request to the URL is thrown and the response is saved as a file.
Configs: Common
  • Step Name
  • Note
Configs
  • C1: File URL *#{EL}
  • C2: Data Item to add the file (File) *
  • C3: Downloaded File Name *#{EL}
Script (click to open)

main();
function main() {
  //// == Config Retrieving / 工程コンフィグの参照 ==
  const fileUrl = configs.get( "conf_DataIdA" );
  const dataIdB = configs.get( "conf_DataIdB" );
  const saveAs  = configs.get( "conf_SaveAs" );

  //// == Data Retrieving / ワークフローデータの参照 == 
  let processFiles = engine.findDataByNumber( dataIdB );
  // java.util.ArrayList <com.questetra.bpms.core.event.scripttask.QfileView>
  if (processFiles === null) {
    processFiles = new java.util.ArrayList();
  }

  //// == Calculating / 演算 ==
  if( saveAs === "" ){
    throw "Downloaded File Name isn't set";
  }
  if ( ! fileUrl.startsWith('http') ) {
    throw "Invalid URL. URL must start with either http or https.";
  }
  const response = accessToTheUrl( fileUrl );

  const qfile = saveFile( saveAs, response );

  //// == Data Retrieving / ワークフローデータへの代入 == 
  updateData( processFiles, dataIdB, qfile )
}

/**
  * ダウンロードファイルの URL に GET リクエストを送信し、ファイルを取得する
  * @param {String} fileUrl  ダウンロードファイルの URL
  * @return {HttpResponseWrapper} response  レスポンス
  */
function accessToTheUrl( fileUrl ) {
  let httpRequest = httpClient.begin(); // HttpRequestWrapper
  // com.questetra.bpms.core.event.scripttask.HttpClientWrapper
  let response;
  try {
    response = httpRequest.get( fileUrl ); // HttpResponseWrapper
  } catch (e) {
    throw `Unable to access ${fileUrl}.`;
  }
  const httpStatus  = response.getStatusCode();
  engine.log( `STATUS: ${httpStatus}` );
  if (httpStatus >= 300) {
    engine.log( response.getResponseAsString() );
    throw `Failed to download. STATUS: ${httpStatus}`;
  }

  return response;
}


/**
  * ダウンロードしたファイルを名前を付けて保存する
  * @param {String} saveAs  保存する際のファイル名
  * @param {HttpResponseWrapper} response  レスポンス
  * @return {Qfile} qfile  ファイル
  */
function saveFile( saveAs, response ) {
  const qfile = new com.questetra.bpms.core.event.scripttask.NewQfile(
    saveAs, response.getContentType(), response.getResponse()
  );
  return qfile;
}

/**
  * ダウンロードしたファイルをデータ項目に出力する
  * @param {Array<Qfile>} processFiles  ファイルの配列
  * @param {String} dataIdB  ダウンロードファイルを追加保存するデータ項目のデータ定義番号
  * @param {Qfile} qfile  ファイル
  */
function updateData( processFiles, dataIdB, qfile ) {
  processFiles.add( qfile );
  engine.setDataByNumber( dataIdB, processFiles );
}

Capture

See also

Appendix

  • any-website-file-download.xml (C) Questetra, Inc. (MIT License)
    • If you are using Professional, you can modify the contents of this file and use it as your own add-on

2 thoughts on “(Any Website): File Download”

  1. Pingback: HTTP Files Retrieve – Questetra Support

  2. Pingback: File-Type – Questetra Support

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: