該当箇所:外部ライブラリ(MSAL.js)内のアクセストークン保存部分
このカスタマイズで利用している kintone JS SDK は現在推奨されていません。今後は kintone JavaScript Client (@kintone/rest-api-client) を利用するように書き換えてください。
Index
はじめに
kintoneからOutlookのスケジュールを登録できるサンプルです。
Outlookスケジュールの「イベントタイトル」「開始日時」「終了日時」「詳細内容」「添付ファイル」をkintoneから登録することが出来ます。
また、kintoneのレコードを変更した場合や、レコードを削除した場合にも、Outlookのイベントも更新されます。
Outlookのイベントを変更した場合は、kintoneのレコードには反映されません。
メリットとしては、kintoneに登録したレコードに基づいたイベントをOutlookのスケジュールに登録して共有することができます。
また、kintoneのプロセス管理機能を使用してステータスの管理を行うことができます。
Outlook側への認証にOAuth2.0を利用しています。少し敷居が高く感じられるかもしれませんが、
詳しい手順の解説とサンプルコードを公開しておりますのでぜひ参考にしてください。
サンプルコードは GitHub上に公開しています。
概要
Microsoftが提供している MSAL.js (外部サイト) を利用することで、Outlook(Microsoftアカウント)とのOAuth2.0を利用した認証をkintone上で行うことができます。
連携の流れは以下となっています。
- kintoneからOAuth認証を用いてAzure AD V2 Endpoint へサインイン
- kintoneからAzureへアクセストークンを取得
- アクセストークンを使って Graph API を叩く
- kintoneからデータをOutlookスケジュールに登録
Graph APIはMicrosoft Cloudサービスリソースへのアクセスを可能にするAPIです。
kintone アプリの作成
kintoneアプリストア にある「To Do」アプリを使います。
アプリに以下のフィールドを追加してください。
フィールド名 | フィールドタイプ | フィールドコード |
---|---|---|
イベントID | 文字列(1行) | EventId |
また、アプリストアの「To Do」アプリは「開始日」「終了日」が「日付」フィールドとなっているため、「日時」フィールドに変更してください。
フィールド名 | フィールドタイプ | フィールドコード |
---|---|---|
開始日時 | 日時 | From |
終了日時 | 日時 | To |
こちらがアプリの配置したフィールドのフォーム画面です。
Azure Active Directory アプリケーションの登録
事前準備
Outlookとkintoneを連携させるために、Azure Active Directory へアプリケーションを登録する必要があります。
事前に以下を行ってください。
- Microsoft アカウントの取得
- 1. で取得したアカウントで Azure Portal へログイン
アプリケーションの登録
こちらの記事の「Azure Active Directory アプリケーションの登録」を参考に作成します。
プログラムの説明
今回使用するプログラム
- SAMPLE-kintone-connect-azure
サンプルプログラム一式です。- 入手方法
- https://github.com/kintone-samples/SAMPLE-kintone-connect-azure/releases/tag/1.1.0 へアクセスします。
- [Assets] の 「Source code(zip)」をクリックし、zip ファイルをダウンロードします。
- ファイルを解凍します。利用するプログラムファイルは下記をご参照ください。
- 利用するプログラムファイル
- common-js-functions.min.js
- 共通処理を記述するプログラムです。
- common ディレクトリ内にあります。
- kintone-connect-outlook-schedule-common.js
- kintoneアプリ/Microsoftアプリの設定を記述するプログラムです。
- 環境に合わせて修正する部分があります(後述)
- outlook-schedule ディレクトリ内にあります。
- oauth.js
- OAuth2.0を利用してAzureへの認証処理を行うプログラムです。
- common ディレクトリ内にあります。
- kintone-connect-outlook-schedule.js
- アクセストークンを用いてOutlookへスケジュールデータの登録/更新/削除するプログラムです。
- outlook-scheduleディレクトリ内にあります。
- common-js-functions.min.js
- 入手方法
- kinotne JS SDK v0.7.0
kintone REST API を便利に扱うことができるライブラリです。詳しくはコチラの紹介記事をご覧ください。- 入手方法
- https://github.com/kintone-labs/kintone-js-sdk にアクセスします。
- [Clone or download]ボタンをクリックし、zip ファイルをダウンロードします。
- ファイルを解凍し、「dist」下の「kintone-js-sdk.min.js」を利用します。
- 入手方法
- kintone UI Component v0.4.2
kintone ライクなUIパーツをかんたんに作成できるライブラリです。詳しくは、コチラの紹介記事を御覧ください。- 入手方法
- https://github.com/kintone-labs/kintone-ui-component/releases/tag/v0.4.2 にアクセスします。
- 「Assets」の [Source code]をクリックし、zip ファイルをダウンロードします。
- ファイルを解凍し、「dist」下の「kintone-ui-component.min.js」「kintone-ui-component.min.css」を利用します。
- 入手方法
また、今回は上記プログラム以外にライブラリとして以下を利用します。
- MSAL.js
AzureからOAuth認証でアクセストークンを取得するプログラムです。- https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/msal.js
- jQuery v3.4.1
- https://js.cybozu.com/jquery/3.4.1/jquery.min.js
- Sweet Alert2 v8.17.6
- https://js.cybozu.com/sweetalert2/v8.17.6/sweetalert2.min.js
- https://js.cybozu.com/sweetalert2/v8.17.6/sweetalert2.min.css
プログラムの修正
kintone-connect-outlook-schedule-common.js を修正します。
- Microsoftアプリの設定でメモしておいたアプリケーションID(7行目)を変更してください。
- kintone アプリのフィールドコードが kintone アプリの作成 に記載したフィールドコードと異なる場合には、25行目〜41行目を修正してください。
プログラムの配置
これらのプログラムを「アプリの設定>JavaScript/CSSでカスタマイズ」下に配置します
プログラムの解説
Azureへの認証処理 (oauth.js )
Azureとの認証部分の処理をまとめています。
kintoneイベントの処理 ( kintone-connect-outlook-schedule.js )
kintoneの各イベント処理は以下となっています。
レコード一覧画面表示イベント
レコード詳細画面表示イベント
レコード作成/編集画面表示イベント
レコード保存成功後イベント
レコード削除前イベント
Outlookモジュール ( kintone-connect-outlook-schedule.js)
kintoneとOutlookのコネクション部分を一部抜粋して説明します。
MSAL.jsのインスタンス化
userAgentApplicationとしてインスタンス化し、以降の処理に利用します。
「oauth.js」の処理を呼び出しています。
Azureからトークンを取得する
サインイン処理では、まずAzureからIDトークンを取得します。
「oauth.js」の処理を呼び出しています。
そして取得したIDトークンを用いてアクセストークンを取得します。
取得したアクセストークンを用いてスケジュールデータを登録する
GraphAPIをkintone上で叩いてOutlookのスケジュールデータを登録しています。
外部APIをkintone上で叩く方法はコチラのAPIドキュメントをご覧ください。
動作確認
kintoneアプリのレコード一覧画面に『Outlookにログイン』というボタンが表示されるので、ボタンをクリックします。
OAuth認証画面が表示されるので、 Microsoftアプリの設定で準備したMicrosoftアカウントでログインします。
メールアドレスを入力したあとにエラーが表示される場合、Microsoftアプリの設定が間違っている場合があります。もう一度設定内容をご確認ください。
ログインに成功した場合、先ほどまで『Outlookにログイン』だったボタンが『Outlookからログアウト』に変わります。
kintoneのレコードを追加します。
レコードを保存すると、レコード詳細画面の上部に『予定を登録』というボタンが表示されるので、ボタンをクリックすればイベントを登録することができます。
無事、kintoneのレコードの内容がOutlookのスケジュールに登録されました。
変更履歴
- 2019/11/18
- 以下の変更に伴い、ソースコードを修正しました。
- 利用ライブラリの変更
kintone Utility Library for JavaScript -> kintone JS SDK
kintone UI Component を追加 - jQuery v3.2.1 から v3.4.1 に変更
- SweetAlert2 v6.10.1 から v8.17.6 に変更
- Microsoft Graph v1 から v2 に変更
- 利用ライブラリの変更
- 以下の変更に伴い、ソースコードを修正しました。
このTipsは、2019年10月版 kintoneで確認したものになります。
お世話になっております。
上記のサンプルをもとに日時を追加して登録したところoutlookの予定表にスケジュール登録することができました。
ですが、予定の詳細を開くとタイムゾーンがUTCとなっており、日時が9時間マイナスとなって表示されています。
kintone-connect-outlook-schedule.js内のTimeZoneもUTC+9:00などいろいろ試したのですが変わらず。
対応方法がありましたら、ご教示いただけないでしょうか。
※outlookの予定表のタイムゾーンは(UTC+9:00)であり、webのoutlookでは問題なく、outlookアプリの時に起こります。
hondah 様
お世話になっております。cybozu developer network 運営局です。
返信が遅くなってしまいました。すでに解決済みでしたらご容赦ください。
>※outlookの予定表のタイムゾーンは(UTC+9:00)であり、webのoutlookでは問題なく、outlookアプリの時に起こります。
outlook アプリというのは、デスクトップのアプリ(PCにインストールすことで利用できるアプリ)で合っていますでしょうか?
手元の環境で確認しましたが、本記事の記載内容で(kintone-connect-outlook-schedule.js内のTimeZoneをUTCにすることなく)
Webアプリおよびデスクトップアプリにおいて、日本時間で表示されておりました。
デスクトップアプリ自体でも、タイムゾーンの設定があるようです。
https://support.office.com/ja-jp/article/-5ab3e10e-5a6c-46af-ab48-156fedf70c04
この設定が日本時間「(UTC+09:00)大阪、札幌、東京」になっているか、お手数おかけしますがご確認いただけないでしょうか?
よろしくお願いいたします。
お世話になっております。
こちらのサンプルを適用し、挙動を確認したところ、
Microsoft Edgeでは一覧画面でのOutlookへのサインインが成功しませんでした。
こちらはMicrosoft Edgeは非対応のカスタマイズとなるのでしょうか。
よろしくお願いいたします。
naka様
お世話になっております。
cybozu developer network 運営局です。
こちらでも動作検証を行なった結果、Microsoft Edge最新版から正常にサインインすることができました。
>Microsoft Edgeでは一覧画面でのOutlookへのサインインが成功しませんでした。
どのタイミング(メールアドレス入力時、など)で、どのように失敗するか、(「このユーザー名は間違っている可能性があります。」と警告が出る、など)
より詳細にご記載いただけますでしょうか?
また、他のブラウザからのサインインは試されましたか?
もし、他のブラウザからも正常にサインインできないようでしたら、Azure Active Directory のアプリケーションの登録などの段階で、問題がある可能性があります。
今一度、本記事の手順に沿っているかご確認いただければと思います。
ご確認よろしくお願いいたします。
お世話になっております。
Microsoft Edgeでも利用可能とのこと、ご案内ありがとうございます。
再度確認してもMicrosoft Edgeではログインできなかったのですが、
他ブラウザからのログインを試したところ、こちらでログインできたため、
こちらで運用していくことになりました。
Microsoft Edgeの利用が必要となった際は再度こちらの記事の手順等確認させていただきます。
Outlook連携 - kintoneからOutlookスケジュールを登録しよう!!
すべて本記事の通り設定しました(したつもり)
が「outlookにログイン」のボタンが表示されません。
すべての設定画面の保存ボタンは押していますし
アプリの変更もしました。
デバッグしたいのですが、まずどこからどのように確認すればよいでしょうか?
よろしくお願いいたします。
KKunio 様
お世話になっております。
cybozu developer network 運営局です。
こちらでも動作検証を行なった結果、
プログラムの配置の順番が記事と異なる場合に、
「outlookにログイン」のボタンが表示されない状況を再現できました。
理由として、ボタンの表示に関係する「kintone-connect-outlook-schedule.js」から、
他にファイルの処理を呼び出す内容があり、
それらのファイルの前に「kintone-connect-outlook-schedule.js」が呼び出される場合、
「kintone-connect-outlook-schedule.js」から処理の呼び出しが正常に行えず、
ボタンの表示に影響が出てしまいます。
※その場合に、一例ですが、
ブラウザのコンソールからこういったエラーメッセージを確認できます。
「Uncaught TypeError: Cannot read property 'kintone' of undefined」
KKunio 様のプログラムの配置順番を、一度ご確認頂いてもよろしいでしょうか?
また、上記と異なる状況である場合、デバッグの方法は下記の記事が参考になります。
動かない?そんな時はデバッグをしてみよう!入門編を参考にし、
コンソール上にエラーが表示されているか、ご確認いただけますでしょうか。
どうぞよろしくお願いいたします。
早速のご回答感謝いたします。
kintone-connect-outlook-schedule.jsはPC向けJSの一番最後においてあるのを確認しました。jsの並び全体を確認しましたが全く本記載と同じでした。
ご案内いただいているようなデバッグの手法でどのようにエラーが出ているのか
確認いたします。ありがとうございました。
コンソールのメッセージについて
Windos10 Pro 64bit
Google Chrome
バージョン: 84.0.4147.105(Official Build) (64 ビット)
で本記事の内容を実行すると
コンソールに
Uncaught SyntaxError: Unexpected token '<'
Uncaught ReferenceError: kintoneJSSDK is not defined
at download.do?・・・・・・・
at download.do?・・・・・・・
と表示されます。
「JavaScript / CSSでカスタマイズ」の設定を確認しましたが、本記事と全く同じでした。
どのあたりからデバックをすすめればよろしいいでしょうか?
KKunio 様
お世話になっております。
cybozu developer network 運営局です。
KKunio 様と全く同じ環境で、正常に動作していることを確認しました。
kintone-js-sdk.min.jsをアップロードされているのでしょうか?
(こちらでJS SDKを削除して確認してみたら、同じエラーが出ました)
全てのファイル/リンクを追加している場合は次の通りになります。
お手数をおかけしまして申し訳ありませんが、もう一度ご確認いただけますでしょうか。
cybozu developer network 運営局様
SDKを再度サイトからダウンロードしアプリにアップロードして
「OUTLOOKにログイン」のボタンが表示できるようになりました。
ありがとうございました。
「OUTLOOKにログイン」のボタンを押すとサインインのダイアログが表示されず
(若干ネゴシエーションしているような間があって)
Error!サインインできませんでした
のダイアログがでます。
kintone-connect-outlook-schedule-common.jsへのアプリケーションIDの設定は確認しました。
何かヒントをいただければありがたいです。
よろしくお願いいたします。
ご返信ありがとうございます。
上記少し状況が変わりました。
「OUTLOOKにログイン」を押すと
「組織のサインインページに移動します」
と出てサイインインの画面は出ました、
ただ
サインインすると同じアプリの画面がポップアップし背後にError!のダイアログが出ます。
認証で失敗しているようですが各種設定、JSのソースで確認する箇所があるでしょうか?
KKunio 様
お世話になっております。
cybozu developer network 運営局です。
こちらで現象を再現していないので、何とも言えないですが、
サインインしてOutlookアプリの画面が表示されているのであれば、
認証の問題ではないと思います。Microsoft アカウント側の設定に問題があるかもしれません。
認証の問題を疑っているのであれば次のいくつかをご確認いただけますでしょうか?
1.kintone-connect-outlook-schedule-common.js 中の、clientIdが正しく記載されているか
config: {
auth: {
clientId: '####################',
authority: 'https://login.microsoftonline.com/common'
},
2.MSAL.jsが正しくアップロードされているか(ファイルの順位も記事と同じなのか)
3.「Azure Active Directory アプリケーションの登録」は記事通りに設定されているか
4.Consoleにエラーが出ていないか
後、Microsoft アカウントは個人のアカウントを使えませんので、ご注意ください。
ご迷惑おかけしますが、よろしくお願いいたします。
cybozu developer network 運営局様
ご指摘の様に「Azure Active Directory アプリケーションの登録」の手順で
「サポートされているアカウントの種類」の設定が本記事と異なっている
個所がありました。記事通りにするとchromeの環境で動作するようになりました。
IE11では一回目ログイン失敗しerrorのポップアップが出ます、ポップアップを閉じてもう一回ログインの
ボタンを押すとログインできました。ブラウザ事に何らかの解釈の違いがあるということでしょうか。
いろいろとご対応いただき、ありがとうございました。
私のような初心者でもなんとか動かく事ができるようになりました。
cybozu developer network 運営局様
本記事非常に参考になりました。
ありがとうございます。
少しカスタマイズをしたく思っております。
Outolookカレンダーは新規スケジュール登録時、「終日」という設定がありますが
本記事の内容に「終日」の設定を加えたく思います。
修正を加えるJavaScriptなど何かヒント、注意事項等ありましたらお願いします。
基本、こういったことは自力で解決すべきとは思いますので、何かお気づきのことが
あればおねがいします。
KKunio 様
お世話になっております。cybozu developer network 運営でございます。
申し訳ありませんが、個別のカスタマイズの質問につきましては、
コミュニティをご活用いただきますようお願いいたします。
よろしくお願いいたします。
cybozu developer network 運営局様
本記事を参考にして、Outlookのスケジュールとの連携を行っています。
kintone上でOutlookにログインして、レコードを追加するところまでは大丈夫なのですが
追加したレコードの内容をスケジュールに登録しようとすると、エラーウィンドウが出てきてしまいます。
しかし、kintone上でエラーウィンドウが出ているものの、Outlook側ではスケジュールが登録されているように見えます。
このような現象が起こる原因に思い当たる節はございますでしょうか?
Tsubasa 様
お世話になっております。cybozu developer network 運営でございます。
追加したレコードの内容をスケジュールに登録する際に表示されたエラーウィンドウには、
どのようなエラーメッセージが記載されていますでしょうか。
また、kintoneカスタマイズの基本的なデバッグの流れの操作のように、
もしブラウザ開発者ツールのコンソール画面に何か出力されいましたら、
ご教示いただけますでしょうか。
どうぞよろしくお願いいたします。
cybozu developer network 運営局 様
お世話になっております。
スケジュール登録処理時に表示されるエラーポップアップは添付画像の通りになります。
また、Chromeでデバッグしてみた結果
「Invalid Authentication Token」というエラーが吐き出されていました。
以上、宜しくお願いします。
Tsubasa 様
お世話になっております。cybozu developer network 運営局です。
回答遅くなり申し訳ございません。
こちら確認してみたのですが、当方の環境では現象を再現できませんでした。
原因箇所の特定はできておりませんが、Tsubasa 様の環境で以下の点をご確認いただけないでしょうか。
よろしくお願いいたします。
SADAYUKI 様
お世話になっております。cybozu developer network 事務局です。
恐れ入りますが、こちらのコメント欄は記事内容のフィードバック目的となっているため、
記事から派生した技術的なご質問などは cybozu developer コミュニティをご活用ください。
お手数をおかけいたしますが、どうぞよろしくお願いいたします。