Google Drive ファイルコピー

Google Drive 上のファイルを指定のディレクトリにコピーして保存します。 テンプレートとなるファイルを準備しておき、新規案件開始時に自動的にコピーするような用途で活用できます。
Google Drive ファイルコピー
GoogleDrive-filesCopy-20171126-addonxml.txt
(md5:4a8b2fb389ac8c82ce55619cd5b4d2b7)

    • B’: Bで選択したデータ項目に格納されているコピー元ファイルのファイルID *
    • C’: Cで選択したデータ項目に格納されている保存先フォルダのフォルダID **
    • D’: Dで選択したデータ項目に格納されている生成ファイルのファイル名
    • ファイルID B’ のファイルを元に新しいファイルがコピー生成され、 フォルダID C’ のフォルダに保存されます
    • 生成ファイルのファイルIDが E で選択したデータ項目に格納されます
    • 生成ファイルの MimeType が F で選択したデータ項目に格納されます
    • 通信ログが X で選択したデータ項目に格納されます
    • 事前に Google API Manager にてProject登録をしておく必要があります
    • 指定のファイルIDやフォルダIDが無い場合はエラーとなります
    • ファイル名が未指定の場合 “元ファイル名 のコピー” となる場合があります
    • ファイルID は共有メニュー詳細設定にある共有リンクから取得します
    • * https://drive.google.com/file/d/023W9z6__EXAMPLE__D45EFmY1E/view
    • ** https://drive.google.com/drive/folders/0_example_EXAMPLE_example_dvamc

    A. OAuth2通信許可の設定名 (←[OAuth 2.0 設定]における設定名)単一行記述必須
    B. ファイル ID が格納されている文字列型or選択肢型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    C. 保存先フォルダ ID が格納されている文字列型or選択肢型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    D. 新しいファイルのファイル名が格納されている文字列型データを選択してくださいデータ項目選択文字列型(単一行)
    E. 新しいファイルの ID が格納される文字列型データを選択してください (更新)データ項目選択文字列型(単一行)
    F. 新しいファイルの MimeType が格納される文字列型データを選択してください (更新)データ項目選択文字列型(単一行)
    X. 通信ログが格納される文字列型データを選択してください (更新)データ項目選択文字列型(複数行)
    -設定変数名設定ラベル
    Aconf_OAuth2OAuth2通信許可の設定名 (←[OAuth 2.0 設定]における設定名)
    Bconf_DataIdBファイル ID が格納されている文字列型or選択肢型データを選択してください
    Cconf_DataIdC保存先フォルダ ID が格納されている文字列型or選択肢型データを選択してください
    Dconf_DataIdD新しいファイルのファイル名が格納されている文字列型データを選択してください
    Econf_DataIdE新しいファイルの ID が格納される文字列型データを選択してください (更新)
    Fconf_DataIdF新しいファイルの MimeType が格納される文字列型データを選択してください (更新)
    Xconf_DataIdX通信ログが格納される文字列型データを選択してください (更新)
    // Google Drive Files Copy (ver. 20171126)
    // (c) 2017, Questetra, Inc. (the MIT License)
    // by Google Drive APIs Files get
    // https://developers.google.com/drive/v3/reference/files/copy
    
    // OAuth2 config sample at [OAuth 2.0 Setting]
    // - Authorization Endpoint URL: https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force
    // - Token Endpoint URL: https://accounts.google.com/o/oauth2/token
    // - Scope: "https://www.googleapis.com/auth/drive" or "https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.appdata"
    // - Consumer Key: (Get by Google Developers Console)
    // - Consumer Secret: (Get by Google Developers Console)
    
    
    //// == Config Retrieving / 工程コンフィグの参照 ==
    var oauth2 = configs.get( "conf_OAuth2" ) + "";
    var dataIdB = configs.get( "conf_DataIdB" ) + "";
    var dataIdC = configs.get( "conf_DataIdC" ) + "";
    var dataIdD = configs.get( "conf_DataIdD" ) + "";
    var dataIdE = configs.get( "conf_DataIdE" ) + "";
    var dataIdF = configs.get( "conf_DataIdF" ) + "";
    var dataIdX = configs.get( "conf_DataIdX" ) + "";
    // convert 'java.lang.String' to 'javascript string'
    
    
    //// == Data Retrieving / ワークフローデータの参照 ==
    var fileId = "";
    if( engine.findDataDefinitionByNumber( dataIdB ).matchDataType( "SELECT_SINGLE" ) ){
        fileId = engine.findDataByNumber( dataIdB ).get(0).getValue() + "";
    }else{
        fileId = engine.findDataByNumber( dataIdB ) + "";
    }
    var folderId = "";
    if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "SELECT_SINGLE" ) ){
        folderId = engine.findDataByNumber( dataIdC ).get(0).getValue() + "";
    }else{
        folderId = engine.findDataByNumber( dataIdC ) + "";
    }
    var newFileName = "";
    if ( dataIdD !== "" ){ 
      if ( engine.findDataByNumber( dataIdD ) !== null ){ 
        newFileName = engine.findDataByNumber( dataIdD ) + "";
      }
    }
    
    
    //// == Calculating / 演算 ==
    // preparing for API Request
    var apiRequest = httpClient.begin(); // HttpRequestWrapper
    // com.questetra.bpms.core.event.scripttask.HttpClientWrapper
    
    // Request HEADER (OAuth2 Token, HTTP Basic Auth, etc)
    var token  = httpClient.getOAuth2Token( oauth2 );
    apiRequest = apiRequest.bearer( token );
    
    // Request PATH (https://example.com/abc/def/)
    var apiUri = "https://www.googleapis.com/drive/v3/files/";
        apiUri += fileId;
        apiUri += "/copy";
    
    // Request QUERY (?a=b)
    apiRequest = apiRequest.queryParam( "supportsTeamDrives", true );
    
    // Request BODY (JSON, Form Parameters, etc)
    var requestObj = {};
      requestObj.parents = [];
      requestObj.parents[0] = folderId;
      if ( newFileName !== "" ){ 
        requestObj.name = newFileName;
      }
    apiRequest = apiRequest.body( JSON.stringify( requestObj ), "application/json" );
    
    // Access to the API (POST, GET, PUT, etc)
    var response = apiRequest.post( apiUri ); // HttpResponseWrapper
    var httpStatus = response.getStatusCode() + "";
    var accessLog = "---POST request--- " + httpStatus + "\n";
    accessLog += response.getResponseAsString() + "\n";
    var responseObj = JSON.parse( response.getResponseAsString() );
    
    // Retrieve Properties from Response-JSON
    var newFileId = responseObj.id;
    var newFileMimetype = responseObj.mimeType;
    
    // Error Handling
    // (no set)
    
    //// == Data Updating / ワークフローデータへの代入 ==
    if ( dataIdE !== "" ){ engine.setDataByNumber( dataIdE, newFileId ); }
    if ( dataIdF !== "" ){ engine.setDataByNumber( dataIdF, newFileMimetype ); }
    if ( dataIdX !== "" ){ engine.setDataByNumber( dataIdX, accessLog ); }