開発者視点で見たCloud Scheduler（新規ミーティング要請）の仕様メモ

# はじめに

Salesforceにログインした時に表示される「新規ミーティング要請」というボタンの機能についてです。
Summer'10からリリースされているそうなんですが、最近まで全く触ったことがなかった。。。


![SS_2014-04-26_9_52_17.png](https://qiita-image-store.s3.amazonaws.com/0/36518/516dd8fe-e4e0-0a56-6f77-b73d1275d588.png)

なお、前半は基本的な使い方ですが、後半は主に開発者目線で仕様をメモってます。

あと、最初「ミーティング　要請」とかでググってましたがCloudSchedulerという機能のようですね。。。

### 「そんなボタンねーぞ！」という場合
たまに、上の「新規ミーティング要請」というボタンが表示されていない時があります。
その場合は設定から「カスタマイズ」＞「活動」＞「活動設定」を表示し、
「[ホーム]タブの[カレンダー]セクションの[要請済みミーティングを表示]」にチェックを入れましょう。

![SS_2014-04-26_10_01_13.png](https://qiita-image-store.s3.amazonaws.com/0/36518/8738fa70-d518-1604-a83e-9a3448ee8910.png)




# CloudSchedulerって何？

この後使い方を一通り紹介してますが、以下のサイトあたりを見ていただければ、何となくイメージがつかめると思います。
組織内のユーザや取引先責任者とのミーティング時間を決める際の手助けとなるものです。

http://help.salesforce.com/HTViewHelpDoc?id=meeting_new.htm&language=ja
http://www.satoshitakezawa.com/2010/06/summer10-cloud-scheduler.html



# CloudSchedulerを使ってみる

では、さっそく使ってみて基本的な機能を理解しましょう。

## ミーティングを要請する側の操作
### 「新規ミーティング要請」画面を表示する

ホーム画面に表示されている「新規ミーティング要請」ボタンをクリックすると、次のような画面が表示されます。

![SS 2014-04-26 10.16.53.png](https://qiita-image-store.s3.amazonaws.com/0/36518/77df9d6e-a6fe-5542-64d6-2ff7de7c2c4d.png)

### 宛先・件名・場所を設定
「宛先」には組織内のユーザだけでなく、リードや取引先責任者も選べるみたいですね。
（カレンダーの参加者と同じです）

![SS 2014-04-26 10.20.20.png](https://qiita-image-store.s3.amazonaws.com/0/36518/f711535e-7e1a-f093-490e-07274b33ff7d.png)
はい、入れました。

### 提案する日時を選ぶ
左下のカレンダーからクリックで、ミーティングの候補日時を選択します。
![SS 2014-04-26 10.23.19.png](https://qiita-image-store.s3.amazonaws.com/0/36518/687cf20b-8eb4-d2d2-94ae-73302c91f224.png)
候補は5つまで選択することができ、また、自分の予定が入っている時間帯はグレーで塗りつぶされているので空き時間が把握しやすいです。
ただこの画面、Googleカレンダーと同じノリでドラッグしたり時間の長さを変更したりしようとしましたが、そーゆーのには対応してません。

### メッセージを記入して、送信

「次へ」ボタンをクリックするとメッセージ入力画面に遷移するので、
最後に「送信」を押すと完了です。

![SS 2014-04-26 10.27.55.png](https://qiita-image-store.s3.amazonaws.com/0/36518/1aefbe63-14d3-4ea9-d834-6b5baa7da3a4.png)

## ミーティングを要請される側の操作
### 受信メールを開く
要請する側が「送信」ボタンをクリックすると、参加者にはメールが通知されます。
「この要請に返答」をクリックします。
![SS 2014-04-26 10.32.34.png](https://qiita-image-store.s3.amazonaws.com/0/36518/8053f3bb-dc00-f191-88f5-2fb991bb229f.png)

### 候補日時の中から、都合の良いものを選ぶ
クリックして表示される画面には、ミーティングを要請した人が候補に挙げた日時が並んでます。
要請された側はここから、都合のよい日を選択して返答してあげます。
![SS 2014-04-26 10.36.04.png](https://qiita-image-store.s3.amazonaws.com/0/36518/c44574e9-f9bd-78f5-8802-29165bc32e41.png)

これだけ。
ちなみに、返答するとミーティングの要請者にはメールで通知されます。
![SS 2014-04-26 10.39.26.png](https://qiita-image-store.s3.amazonaws.com/0/36518/ea83c649-6b49-de24-7e8e-42abaa89d9c6.png)


## 再度、要請する側の操作
### 最終的な日時を決定する
さて、参加者が全員返答を済ませたものとしましょう。
この時、ミーティングの要請者のカレンダーから「要請済みミーティング」タブを開くと

![SS 2014-04-26 10.40.52.png](https://qiita-image-store.s3.amazonaws.com/0/36518/deb29f2a-af85-3afb-405a-927c17518d98.png)

件名をクリックしましょう。

![SS 2014-04-26 10.42.12.png](https://qiita-image-store.s3.amazonaws.com/0/36518/81af77e2-9896-07bc-981c-b5c027f4e2b7.png)
ミーティング参加者が返答した日時が反映されています。
ここから、最適な日時を決定するわけですね。

最後に、必要であればメッセージを記入して、確定します。
![SS 2014-04-26 10.44.32.png](https://qiita-image-store.s3.amazonaws.com/0/36518/984594c5-494a-4b36-7784-ceb37f308ed1.png)

# 開発者視点で見た、この機能の特徴
さて、前置きが長くなりましたが、ここから本題です。
このミーティング要請の機能の特徴を、開発者目線でいくつか挙げていきます。

### 特徴1：作成した「ミーティング要請」は、Eventオブジェクトとして扱われる
新規ミーティング要請を送信したタイミングで、Eventオブジェクトのレコードが1つ新規作成されます。
### 特徴2：上記のEventオブジェクトはStartDateTimeがない特殊なレコードになっている
下の画像は、開発者コンソールでこのEventオブジェクトを表示したものです。

![SS_2014-04-26_10_35_03.png](https://qiita-image-store.s3.amazonaws.com/0/36518/397036c9-517a-a00f-4fd9-1673fd70d12c.png)

### 特徴3：上記のEventオブジェクトは（日時が確定するまで）Apexや開発者コンソールから操作することができない
ためしに開発者コンソールで件名を編集して、保存しようとすると...
![SS 2014-04-26 10.53.46.png](https://qiita-image-store.s3.amazonaws.com/0/36518/424542a7-fb4d-e779-4df9-8f04ade9a822.png)
というように、怒られます。

### 特徴4：日時が確定すると、上記のEventオブジェクトは通常のグループ予定に変換される
下の画像は、日時が確定した直後のEventオブジェクトの様子です。
![SS 2014-04-26 10.49.04.png](https://qiita-image-store.s3.amazonaws.com/0/36518/7a10513f-15e1-3b0d-1d73-d26239c60c55.png)

- StartDateTimeに値が入っている
- 参加者の分のレコードも作成されている
- IsGroupEventがtrueになっている

あたりが主な変更点ですかね。
通常のグループ予定と同じレコードになったので、Apexでも操作ができます。

### 特徴5：全員の返答を待たずに、日時を確定することができる
その場合も、特徴4で述べたのと同じグループ予定に変換されます。

### 特徴6：要請を出したミーティングをキャンセルした場合、Eventのレコードは削除される
例のStartDateTimeがない特殊なレコードは自動的に削除されます。

### 特徴その他
以下は細かい点です。

- ミーティング要請時の「場所」項目は、確定後もLocation項目に値が入る
- ミーティング確定時のメッセージは、確定後のEventのDescription項目に値が入る

# おわりに

機能がリリースされてから4年も経っているので今さら感はありますが、
なかなか内部のデータのことまで触れている情報がなかったため、まとめてみました。

特に確定するまではStartDateTimeがなく、しかもSOQLで取得できちゃうのにApexでは更新できないあたり
気をつけたいところですね。