Lotus Notes CalendarからGoogle Calendarへイベントを登録する

【注 意】
こちらのエントリーのコードは、そのまま実行すると"Bad Request Error 400"というエラーが発生するケースがあったため、修正しています。
最新のコードはこちらに掲載しています。

Google Calendarが発表されてから、自分のスケジュール管理をどうするかいろいろ悩んでいたんだけれど、会社のグループウェアであるLotus NotesからスケジュールデータをGoogle Calendarへ登録できないか悩むこと数日。
昨日になってこのページを見つけてから、ごにょごにょと...。

で、できたのが以下のコード。なんだか美しくないコードで恥ずかしいんだけど...。(^^ゞ

NotesのメールDBをデザイナーで開いて、"Appointment"フォームにでもアクションを追加して、以下のコードを貼り付けてください。
登録済みのNotesカレンダーイベントを開いて作成したアクションボタンを押すと、ブラウザが起動して、Google Calendarへのイベント登録画面にNotesカレンダーに登録したデータが埋められた状態で開きます。
保存する前にイベントのステータスを"Private"にしないと、他の人から見られちゃうのでご注意ください。

ちなみにテストした環境は、Lotsu Notes Client R7.0 HF144 と会社標準のメールテンプレートです。
フィールド名が違ったりしたら、ごにょごにょと直しちゃってください。

REM {リッチテキストのBodyフィールドをテキストタイプに変換};
details := @Trim(@Text(Body));

REM {@TimeMerge()で、Googleタイムゾーンにあわせる};
gtimezone := "Z=7$DO=1$DL=4 1 1 10 -1 1";
gStartDateTime := @TimeMerge( StartDateTime; StartDateTime ; gtimezone );
gEndDateTime := @TimeMerge( EndDateTime; EndDateTime ; gtimezone );

REM {月、日、時、分、秒の1桁を@Replace()で2桁に変換するためのリスト。};
short := "0" :"1" :"2" : "3" : "4" : "5" : "6" : "7" : "8" : "9";
long := "00" :"01" :"02" :"03" :"04" :"05" :"06" :"07" :"08" :"09";

REM {開始年月日と時刻をフォーマット};
syear := @Text(@Year(gStartDateTime));
smonth := @Replace(@Text(@Month(gStartDateTime)); short; long);
sday := @Replace(@Text(@Day(gStartDateTime)); short; long);
shour := @Replace(@Text(@Hour(gStartDateTime)); short; long);
sminute := @Replace(@Text(@Minute(gStartDateTime)); short; long);
ssecond := @Replace(@Text(@Second(gStartDateTime)); short; long);

startDate := syear + smonth + sday;
startTime := shour + sminute + ssecond;

REM {終了年月日と時刻をフォーマット};
eyear := @Text(@Year(gEndDateTime));
emonth := @Replace(@Text(@Month(gEndDateTime)); short; long);
eday := @Replace(@Text(@Day(gEndDateTime)); short; long);
ehour := @Replace(@Text(@Hour(gEndDateTime)); short; long);
eminute := @Replace(@Text(@Minute(gEndDateTime)); short; long);
esecond := @Replace(@Text(@Second(gEndDateTime)); short; long);

endDate := eyear + emonth + eday;
endTime := ehour + eminute + esecond;


REM {@URLOpen()でHTTP(S)リクエストを作成};
REM {@If()でアポイントメントタイプがAnniversary、All Day Eventは時間指定なしでリクエスト};
@URLOpen(
"https://www.google.com/calendar/event?action=TEMPLATE&" +
"text=" + @URLEncode ("Domino"; Subject) +
@If(
AppointmentType="1" | AppointmentType="2" ;
"&dates=" + startDate + "/" + endDate ;
"&dates=" + startDate +"T" + startTime + "Z/" + endDate + "T" + endTime +"Z"
) +
"&location=" + @URLEncode ("Domino"; Location) +
"&trp=true&sprop=&sprop=name:" +
"&details=" + @URLEncode("Domino"; details )
)