Google Calendar 予定追加

日時型データ項目で指定した期間に、文字列型データ項目で指定した予定をGoogle Calendarに追加し、通信ログを文字列型データ項目に格納します

    A. OAuth2通信許可設定名 (←[OAuth 2.0 設定])単一行記述必須
    B. Calendar ID が格納されている文字列型データor選択肢型データを選択してください(存在しない場合、エラー)データ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)必須
    C. 予定タイトルが格納されている文字列型データを選択してくださいデータ項目選択文字列型(単一行)必須
    D. 予定開始時刻が格納されている日時型データを選択してくださいデータ項目選択日時型必須
    E. 予定終了時刻が格納されている日時型データを選択してください(未設定の場合、+1:00)データ項目選択日時型
    F. 場所情報が格納されている文字列型データを選択してくださいデータ項目選択文字列型(単一行)
    G. 説明情報が格納されている文字列型データを選択してくださいデータ項目選択文字列型
    H. デフォルトTimeZoneをセットしてください ("GMT+9:00" "America/New_York")単一行記述必須
    I. 開始時刻のTZが格納されている文字列or選択肢型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)
    J. 終了時刻のTZが格納されている文字列or選択肢型データを選択してくださいデータ項目選択文字列型(単一行)or選択型(ラジオ/セレクト/検索)
    K. 情報元のタイトルをセットしてください (例 "BPMS" "#{processInstanceTitle}")単一行記述EL式挿入も可
    L. 情報元のURLをセットしてください (例 "${var[applicationRoot]}")単一行記述EL式挿入も可
    X. 通信ログが格納される文字列型データを選択してください (更新)データ項目選択文字列型(複数行)
    -設定変数名設定ラベル
    Aconf_OAuth2OAuth2通信許可設定名 (←[OAuth 2.0 設定])
    Bconf_DataIdBCalendar ID が格納されている文字列型データor選択肢型データを選択してください(存在しない場合、エラー)
    Cconf_DataIdC予定タイトルが格納されている文字列型データを選択してください
    Dconf_DataIdD予定開始時刻が格納されている日時型データを選択してください
    Econf_DataIdE予定終了時刻が格納されている日時型データを選択してください(未設定の場合、+1:00)
    Fconf_DataIdF場所情報が格納されている文字列型データを選択してください
    Gconf_DataIdG説明情報が格納されている文字列型データを選択してください
    Hconf_EventTimeZoneデフォルトTimeZoneをセットしてください ("GMT+9:00" "America/New_York")
    Iconf_DataIdI開始時刻のTZが格納されている文字列or選択肢型データを選択してください
    Jconf_DataIdJ終了時刻のTZが格納されている文字列or選択肢型データを選択してください
    Kconf_EventSource情報元のタイトルをセットしてください (例 "BPMS" "#{processInstanceTitle}")
    Lconf_EventSourceUrl情報元のURLをセットしてください (例 "${var[applicationRoot]}")
    Xconf_DataIdX通信ログが格納される文字列型データを選択してください (更新)
    // Insert Event to Google Calendar via Calendar API v3 (ver. 20161025)
    // (c) 2016, Questetra, Inc. (the MIT License)
    
    //// == 工程コンフィグの参照 / Config Retrieving ==
    var oauth2 = configs.get( "conf_OAuth2" );
    var dataIdB = configs.get( "conf_DataIdB" ); // (returns Number)
    var dataIdC = configs.get( "conf_DataIdC" ); // (returns Number)
    var dataIdD = configs.get( "conf_DataIdD" ); // (returns Number)
    var dataIdE = configs.get( "conf_DataIdE" ); // (returns Number)
    var dataIdF = configs.get( "conf_DataIdF" ); // (returns Number)
    var dataIdG = configs.get( "conf_DataIdG" ); // (returns Number)
    var eventStartTimeZone = configs.get( "conf_EventTimeZone" ) + ""; //default
    var eventEndTimeZone = configs.get( "conf_EventTimeZone" ) + ""; //default
    var dataIdI = configs.get( "conf_DataIdI" ); // (returns Number)
    var dataIdJ = configs.get( "conf_DataIdJ" ); // (returns Number)
    var eventSource = configs.get( "conf_EventSource" ) + "";
    var eventSourceUrl = configs.get( "conf_EventSourceUrl" ) + "";
    var dataIdX = configs.get( "conf_DataIdX" ); // (returns Number)
    
    //// == ワークフローデータの参照 / Data Retrieving ==
    var calendarId = "";
    if( data.get( dataIdB ) instanceof java.util.ArrayList ){
      calendarId = data.get( dataIdB ).get(0).getValue() + "";
    }else if( data.get( dataIdB ) instanceof java.lang.String ){
      calendarId = data.get( dataIdB ) + "";
    }
    var eventSummary = data.get( dataIdC ) + "";
    var eventStart = data.get( dataIdD ).toString() + "";
    eventStart = eventStart.replace(" ", "T") + ":00";
    if( dataIdE !== "" && data.get( dataIdE ) !== null ){
      var eventEnd = data.get( dataIdE ).toString() + "";
      eventEnd = eventEnd.replace(" ", "T") + ":00";
    }else{
      var eventEnd = data.get( dataIdD ).addHours(1).toString() + "";
      eventEnd = eventEnd.replace(" ", "T") + ":00";
    }
    var eventLocation = "";
    if( dataIdF !== "" && data.get( dataIdF ) !== null ){
      eventLocation = data.get( dataIdF ) + "";
    }
    var eventDescription = "";
    if( dataIdG !== "" && data.get( dataIdG ) !== null ){
      eventDescription = data.get( dataIdG ) + "";
    }
    if( dataIdI !== "" ){
      if( data.get( dataIdI ) instanceof java.util.ArrayList ){
        eventStartTimeZone = data.get( dataIdI ).get(0).getValue() + "";
        eventEndTimeZone = data.get( dataIdI ).get(0).getValue() + "";
      }else if( data.get( dataIdI ) instanceof java.lang.String ){
        eventStartTimeZone = data.get( dataIdI ) + "";
        eventEndTimeZone = data.get( dataIdI ) + "";
      }
    }
    if( dataIdJ !== "" ){
      if( data.get( dataIdJ ) instanceof java.util.ArrayList ){
        eventEndTimeZone = data.get( dataIdJ ).get(0).getValue() + "";
      }else if( data.get( dataIdJ ) instanceof java.lang.String ){
        eventEndTimeZone = data.get( dataIdJ ) + "";
      }
    }
    
    //// == 演算 / Calculating ==
    var accessLog = "";
    var token = httpClient.getOAuth2Token( oauth2 );
    
    var uri = "https://www.googleapis.com/calendar/v3/calendars/";
    uri += calendarId;
    uri += "/events";
    
    var myObj = {};
    myObj.summary = eventSummary;
    myObj.location = eventLocation;
    myObj.description = eventDescription;
    myObj.start = {};
    myObj.start.dateTime = eventStart;
    myObj.start.timeZone = eventStartTimeZone;
    myObj.end = {};
    myObj.end.dateTime = eventEnd;
    myObj.end.timeZone = eventEndTimeZone;
    myObj.source = {};
    if( eventSource !== "" ){
      myObj.source.title = eventSource;
    }
    if( eventSourceUrl !== "" ){
      myObj.source.url = eventSourceUrl;
    }
    //debug
    //accessLog += JSON.stringify( myObj ) + "\n"; 
    
    var response = httpClient.begin()
      .bearer( token )
      .body( JSON.stringify( myObj ), "application/json" )
      .post( uri );
    accessLog += "---POST request--- " + response.getStatusCode() + "\n";
    accessLog += response.getResponseAsString() + "\n";
    
    //// == ワークフローデータへの代入 / Data Updating ==
    if( dataIdX !== "" ){
      retVal.put( dataIdX, accessLog );
    }
    

    • B’: Bで選択したデータ項目に格納されている Google Calendar ID *
    • C’: Cで選択したデータ項目に格納されている予定タイトル
    • D’: Dで選択したデータ項目に格納されている予定開始時刻
    • E’: Eで選択したデータ項目に格納されている予定終了時刻
    • F’: Fで選択したデータ項目に格納されている場所情報
    • G’: Gで選択したデータ項目に格納されている予定の詳細説明
    • I’: Iで選択したデータ項目に格納されている開始時刻のTimeZone
    • J’: Jで選択したデータ項目に格納されている終了時刻のTimeZone
    • D’ に始まり E’ に終わる「予定 C’」が Google Calendar B’ に追加されます
    • 通信ログが X で選択したデータ項目に格納されます
    • *カレンダーIDは次のページを参照します
      • [カレンダー設定](Calendar Settings)>[カレンダーのアドレス](Calendar Address
    • 事前に Google API Manager にてProject登録をしておく必要があります (Scope: “https://www.googleapis.com/auth/calendar”)
    • 開始時刻と終了時刻を持つ予定(イベント)が追加されます (”終日予定” は追加できません)
    • 終了時刻のデータ項目が無い場合や終了時刻が未入力状態の場合、開始時刻+60分がセットされます
    • 終了時刻が開始時刻よりも過去となるような予定は、カレンダー追加されません
    • 開始終了時刻のための TimeZone 項目が無い場合や未入力状態の場合、デフォルト TimeZone (コンフィグHの値)がセットされます
    • TimeZone の書式は IANA Database Name に習います (例 “GMT+9:00” “America/New_York”)
    • カレンダー側に Questetra の案件詳細への直接リンクを貼るには、コンフィグ K の値を “#{processInstanceTitle}” とセットし、コンフィグ L の値を “${var[applicationRoot]}OR/ProcessInstance/listView?processInstanceId=#{processInstanceId}” とセットします