Google Drive アップロード

ファイル型データ項目で指定されたファイルを Google Drive の指定のディレクトリにアップロードし、ファイル ID を文字型データ項目に格納します。通信ログはテキスト型データ項目に格納します。
Google Drive アップロード
GoogleDrive-simpleUpload-20171127-addonxml
(md5:372b89966fb220f00791003932653ccc)

    • B’: Bで選択したデータ項目に格納されているファイル
    • C’: Cで選択したデータ項目に格納されている Google Drive フォルダ ID *
    • ファイル群 B’ が、指定のディレクトリ C’ にアップロードされます
    • アップロードしたファイル群の ID が D で選択したデータ項目に格納されます(カンマ区切り)
    • 通信ログが X で選択したデータ項目に格納されます
    • G Suite ユーザは[サービスタスク(Googleドライブ)](M229)の利用をご検討ください
    • 事前に Google API Manager にてProject登録をしておく必要があります
    • 指定のフォルダIDが無い場合はエラーとなります
    • ファイル名が競合(コンフリクト)する場合は同名で複数保存されます
    • * https://drive.google.com/drive/folders/0BexampleEXAMPLEexampledvamc
    • 20171127版は「チームドライブ」対応版となります

    A. OAuth2通信許可の設定名 (←[OAuth 2.0 設定]における設定名)単一行記述必須
    B. アップロードファイルが格納されているファイル型データを選択してくださいデータ項目選択ファイル型必須
    C. フォルダ ID が格納されている文字列型or選択肢型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    D. ファイル IDs が格納される文字列型データを選択してください (更新)データ項目選択文字列型(単一行)
    X. 通信ログが格納される文字列型データを選択してください (更新)データ項目選択文字列型(複数行)
    -設定変数名設定ラベル
    Aconf_OAuth2OAuth2通信許可の設定名 (←[OAuth 2.0 設定]における設定名)
    Bconf_DataIdBアップロードファイルが格納されているファイル型データを選択してください
    Cconf_DataIdCフォルダ ID が格納されている文字列型or選択肢型データを選択してください
    Dconf_DataIdDファイル IDs が格納される文字列型データを選択してください (更新)
    Xconf_DataIdX通信ログが格納される文字列型データを選択してください (更新)
    // Google Drive Simple Uploads (ver. 20171127)
    // (c) 2017, Questetra, Inc. (the MIT License)
    // by Google Drive APIs Files get
    // https://developers.google.com/drive/v3/web/simple-upload
    // https://developers.google.com/drive/v3/reference/files/update
    
    // 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 https://www.googleapis.com/auth/drive.metadata"
    // - 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 dataIdX = configs.get( "conf_DataIdX" ) + "";
    // convert 'java.lang.String' to 'javascript string'
    
    
    //// == Data Retrieving / ワークフローデータの参照 ==
    var uploadFiles = engine.findDataByNumber( dataIdB );
    // java.util.ArrayList 
    if (uploadFiles === null) {
      throw new Error("No Files attached in this Process");
    } // error
    var folderId = "";
    if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "SELECT_SINGLE" ) ){
        folderId = engine.findDataByNumber( dataIdC ).get(0).getValue() + "";
    }else{
        folderId = engine.findDataByNumber( dataIdC ) + "";
    }
    
    
    //// == Calculating / 演算 ==
    var fileIds = "";
    var accessLog = "";
    var token  = httpClient.getOAuth2Token( oauth2 );
    var numOfFiles = uploadFiles.size() - 0;
    
    for( var i = 0; i < numOfFiles; i++  ){
      var uri = "https://www.googleapis.com/upload/drive/v3/files";
      var response = httpClient.begin()
        .bearer( token )
        .queryParam( "uploadType", "media" )
        .body( uploadFiles.get(i) )
        .post( uri );
      accessLog += "---POST request--- " + response.getStatusCode() + "\n";
      accessLog += response.getResponseAsString() + "\n";
      var responseObj = JSON.parse( response.getResponseAsString() );
    
      var uri2 = "https://www.googleapis.com/drive/v3/files/";
        uri2 += responseObj.id;
      fileIds += responseObj.id;
      if( i !== numOfFiles - 1 ){ fileIds += ","; }
      var request2Obj = {};
        request2Obj.name = uploadFiles.get(i).getName() + "";
      var response2 = httpClient.begin()
        .bearer( token )
        .queryParam( "addParents", folderId )
        .queryParam( "removeParents", "root" )
        .queryParam( "supportsTeamDrives", true )
        .body( JSON.stringify( request2Obj ), "application/json" )
        .patch( uri2 );
      accessLog += "---PATCH request--- " + response2.getStatusCode() + "\n";
      accessLog += response2.getResponseAsString() + "\n";
    }
    
    
    //// == Data Updating / ワークフローデータへの代入 ==
    if ( dataIdD !== "" ){ engine.setDataByNumber( dataIdD, fileIds ); }
    if ( dataIdX !== "" ){ engine.setDataByNumber( dataIdX, accessLog ); }