Google カレンダー: 予定追加 (Google Calendar: Insert Event)
Google カレンダーに予定を追加します。
https://support.questetra.com/ja/addons/services/googlecalendar-insertevent/
2019-01-18 (C) Questetra, Inc. (MIT License)
Configs
  • C1: Google カレンダー に接続するユーザ *
  • C2: Calendar ID(空白の場合プライマリのカレンダーに追加されます)
  • I1: 予定タイトル * #{EL}
  • I2: 予定開始時刻が格納されている日時型データを選択してください *
  • I3: 予定終了時刻が格納されている日時型データを選択してください(未設定の場合、+1:00)
  • I4: 場所情報 #{EL}
  • I5: 説明情報 #{EL}
Script
//// == 工程コンフィグの参照 / Config Retrieving ==
var userId = configs.get( "conf_User" );
var quser = quserDao.findById(parseInt(userId));
if (quser == null) {
  throw "User not found:" + userId;
}
var dataIdB = configs.get( "conf_DataIdB" );
var dataIdC = configs.get( "conf_DataIdC" );
if (dataIdC == "" ||dataIdC == null) {
    throw "Event Title is blank";
  }
var dataIdD = configs.get( "conf_DataIdD" );
var dataIdE = configs.get( "conf_DataIdE" );
var dataIdF = configs.get( "conf_DataIdF" );
var dataIdG = configs.get( "conf_DataIdG" );
//var eventSource = configs.get( "conf_EventSource" ) + "";
//var eventSourceUrl = configs.get( "conf_EventSourceUrl" ) + "";

//// == ワークフローデータの参照 / Data Retrieving ==
var calendarId = "";
if(dataIdB instanceof java.util.ArrayList ){
  calendarId = dataIdB.get(0).getValue() + "";
}else if( dataIdB instanceof java.lang.String ){
  calendarId = dataIdB+ "";
}
if (calendarId == "" ||calendarId == null) {
  calendarId = "primary";
}
if (calendarId.search(/[^\w\.@]/) !== -1){
  throw "Invalid Calendar ID";
}
var eventSummary =dataIdC + "";
if (dataIdD == "" || engine.findDataByNumber( dataIdD ) == null) {
  throw "Event Start Date is blank";
}else{
  var eventStart = engine.findDataByNumber( dataIdD ).toString() + "";
}
eventStart = eventStart.replace(" ", "T") + ":00";
if( dataIdE !== "" && engine.findDataByNumber( dataIdE ) !== null ){
  var eventEnd = engine.findDataByNumber( dataIdE ).toString() + "";
  eventEnd = eventEnd.replace(" ", "T") + ":00";
}else{
  var eventEnd = engine.findDataByNumber( dataIdD ).addHours(1).toString() + "";
  eventEnd = eventEnd.replace(" ", "T") + ":00";
}
//日時の検証
var sdf = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
var startDate = sdf.parse(eventStart);
var endDate = sdf.parse(eventEnd);
if (endDate.before(startDate)){
  throw "Event End Date comes before Event Start Date";
}
var eventLocation = "";
if( dataIdF !== "" && dataIdF !== null ){
  eventLocation = dataIdF + "";
}
var eventDescription = "";
if( dataIdG !== "" && dataIdG !== null ){
  eventDescription =dataIdG + "";
}

var timeZone = engine.getTimeZoneOffsetInMinutes()/60;
if (timeZone > 0){
  timeZone = "+" + timeZone
}
var eventTimeZone = "GMT" + timeZone + ":00";
//// == 演算 / Calculating ==
var accessLog = "";
var token;
try{
    token = httpClient.getGoogleOAuth2Token(quser, "Calendar");
  }catch(e){
    throw "This User has not connected with Google Calendar."
  }
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 = eventTimeZone;
myObj.end = {};
myObj.end.dateTime = eventEnd;
myObj.end.timeZone = eventTimeZone;
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 );
var status = response.getStatusCode();
accessLog += "---POST request--- " + status + "\n";
accessLog += response.getResponseAsString() + "\n";

//// == ログの出力 / Log Output ==
if (status >= 300) {
    throw accessLog;
}
engine.log(accessLog);

Download

google-calendar-event-insert.xml

Capture

Notes

  1. C1 のユーザは、[アカウント設定]>[Google 連携]にて、Google カレンダーと連携済みである必要があります
  2. カレンダーIDは次のページを参照します。[カレンダー設定](Calendar Settings)>[カレンダーのアドレス](Calendar Address)
  3. 開始時刻と終了時刻を持つ予定(イベント)が追加されます (”終日予定” は追加できません)
  4. 終了時刻のデータ項目が無い場合や終了時刻が未入力状態の場合、開始時刻+60分がセットされます
  5. 終了時刻が開始時刻よりも過去となるような予定は、カレンダー追加されません

See also