位置情報アクションを使用してアダプティブ カード拡張機能を作成する
注:
このチュートリアルは、SPFx v1.14 がインストールされていることを前提としています。
SPFx v1.14 のインストールの詳細については、「SharePoint Framework v1.14 のリリース ノート」 を参照してください。
アダプティブ カード拡張機能プロジェクトをスキャフォールディングする
プロジェクトの新しいプロジェクト ディレクトリを作成し、現在のフォルダーをそのディレクトリに変更します。
作成した新しいディレクトリから Yeoman の SharePoint ジェネレーターを実行して、新しいプロジェクトを作成します。
yo @microsoft/sharepoint
プロンプトが表示されたら、以下の値を入力します (以下で省略されたすべてのプロンプトに対して既定のオプションを選択します):
- ソリューション名は何ですか? 地理位置情報チュートリアル
- どの種類のクライアント側コンポーネントを作成しますか? アダプティブ カード エディター
- どのテンプレートを使用しますか? プライマリ テキスト テンプレート
- アダプティブ カード拡張機能の名前は何ですか? 位置情報
この時点で、Yeoman は必須の依存関係をインストールし、ソリューション ファイルをスキャフォールディングします。 このプロセスには数分かかる場合があります。
プロジェクトのホストされたワークベンチの URL を更新します。
gulp タスク serve を使用すると、既定ではブラウザーを起動し、プロジェクトで指定された、ホストされたワークベンチ URL を開きます。 新しいプロジェクトでのホストされたワークベンチの既定の URL は、無効な URL を参照します。
プロジェクト内の ./config/serve.json ファイルを見つけて開きます。
プロパティ
initialPage
を見つけます。{ "$schema": "https://developer.microsoft.com/json-schemas/core-build/serve.schema.json", "port": 4321, "https": true, "initialPage": "https://enter-your-SharePoint-site/ _layouts/workbench.aspx" }
enter-your-SharePoint-site
ドメインをテストに使用する SharePoint テナントとサイトの URL に変更します。 例:https://contoso.sharepoint.com/sites/devsite/_layouts/workbench.aspx
。
この時点で、gulp serve
を実行すると、GeoLocation
カードが表示されます。
アダプティブ カード拡張機能に位置情報アクションを追加する
この時点で、すぐにスキャフォールディングされたコードを取得しました。 ここで、カード ビューとクイック ビューエクスペリエンスに位置情報アクションを追加してみましょう。
カード ビューとクイック ビューを含むカードを作成します。 カード ビューにボタンが表示され、ユーザーの現在の場所が表示され、カード ビュー自体をクリックするとクイック ビューが開きます。
クイック ビューでは、次の操作を実行する 3 つのボタンを提供します。
- ユーザーの現在の場所を取得する
- ユーザーがマップから場所を選択できるようにする
- マップ上の特定の場所を表示する
カードに表示されるラベルを更新する
アクションの追加を開始する前に、まずカードに表示される文字列を更新します。
このためには、プロジェクトで次のファイルを見つけて開きます。./src/adaptiveCardExtensions/geoLocation/loc/en-us.js
このファイルの内容を次のように置き換えます。
define([], function() {
return {
"PropertyPaneDescription": "Tutorial on geolocation action in ACE.",
"TitleFieldLabel": "Geolocation",
"Title": "GeoLocation",
"SubTitle": "GeoLocation Actions",
"PrimaryText": "Location Demo",
"Description": "Demonstrating GeoLocation Capabilities",
"ShowCurrentLocation": "My Location"
}
});
次に、プロジェクトで次のファイルを見つけて開きます: ./src/adaptiveCardExtensions/geoLocation/loc/mystring.d.ts
次を追加します。
ShowCurrentLocation: string;
IGeoLocationAdaptiveCardExtensionStrings
インターフェイスへ。
カード ビューにアクションを追加する
前述のように、カード ビューでボタンを追加します。ボタンを追加すると、ユーザーの現在の場所が表示され、カード ビューをクリックすると、クイック ビューエクスペリエンスが表示されます。
まず、カード ビューのボタンの機能を追加します。 このためには、プロジェクトで次のファイルを見つけて開きます。./src/adaptiveCardExtensions/geoLocation/cardView/CardView.ts
ここで、cardButtons
関数の定義を次のように置き換えます。
public get cardButtons(): [ICardButton] | [ICardButton, ICardButton] | undefined {
return [
{
title: strings.ShowCurrentLocation,
action: {
type: 'VivaAction.ShowLocation'
}
}
];
}
この変更により、ラベル My Location
のボタンが構成されました。クリック操作は VivaAction.ShowLocation
で、ユーザーの現在の場所が表示されます。
次に、onCardSelection
関数の内容を次のように置き換えます。
public get onCardSelection(): IQuickViewCardAction | IExternalLinkCardAction | undefined {
return {
type: 'QuickView',
parameters: {
view: QUICK_VIEW_REGISTRY_ID
}
};
}
この変更は、ユーザーがカード ビューをクリックすると、ユーザーのクイック ビューを開く必要があることを意味します。
これまでに行った変更により、カード ビューは次のようになります。
クイック ビューにアクションを追加する
クイック ビューでは、3 つのアクションのボタンを紹介します。
- ユーザーの現在の場所を取得する
- ユーザーがマップから場所を選択できるようにする
- マップ上の特定の場所を表示します (この例では、エベレスト山を示します)
これに加えて、Latitude
と Longitude
を表示するための 2 つのテキスト ブロックがあります。 これは、VivaAction.GetLocation
アクションが実行されるときにそれぞれの座標を表示します (詳細については後述します)。
まず、クイック ビューのテンプレートを定義します。 このためには、プロジェクトで次のファイルを見つけて開きます。./src/adaptiveCardExtensions/geoLocation/quickView/template/QuickViewTemplate.json
このファイルの内容を次のように置き換えます。
{
"schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.2",
"body": [
{
"type": "TextBlock",
"text": "${latitude}"
},
{
"type": "TextBlock",
"text": "${longitude}"
}
],
"actions": [
{
"title": "Choose location on map",
"type": "VivaAction.GetLocation",
"parameters": {
"chooseLocationOnMap": true
}
},
{
"title": "Get my location",
"type": "VivaAction.GetLocation"
},
{
"title": "Show custom location",
"type": "VivaAction.ShowLocation",
"parameters": {
"locationCoordinates": {
"latitude": 27.98884062493244,
"longitude": 86.9249751
}
}
}
]
}
これによって、VivaAction.GetLocation
経由で取得した位置の Latitude
と Longitude
を示す 2 つのテキストブロックを提供しています。 これらに加えて、3 つの位置情報アクションについて説明しました。
これらのアクションを追加すると、クイック ビューは次のようになります。
アダプティブ カード拡張機能の状態を設定する
ここまでは、カード ビューとクイック ビューを作成しました。 この時点で gulp serve
を実行すると、上記のアクションを実行できます。
しかし、ここで、さらに高いレベルにしましょう。
ここでは、ユーザーの現在位置またはユーザーが選択した位置の座標を、それぞれのアクションが実行されたときにクイック ビューに表示します。
ここでは、QuickViewTemplate.json ファイルで前に導入した 2 つのテキスト ブロックを活用します。
これを行うために、まず新しい状態を導入します。 まず、プロジェクトで次のファイルを見つけて開きます。./src/adaptiveCardExtensions/geoLocation/GeoLocationAdaptiveCardExtension.ts
ここで、次のstates
を IGeoLocationAdaptiveCardExtensionState
インターフェイスに追加します。
latitude: string;
longitude: string;
次に、onInit
関数で、this.state={}
を変更します
this.state = {
latitude: 'TBD',
longitude: 'TBD'
};
クイック ビューでも同様の変更を行います。
次のファイルを見つけて開きます: ./src/adaptiveCardExtensions/geoLocation/quickView/QuickView.ts
次に示すプロパティを IQuickViewData
インターフェイスに追加します。
latitude: string;
longitude: string;
次に、data
getter の返されたオブジェクトに次の 2 行を追加します。
latitude: "Latitude: " + this.state.latitude,
longitude: "Longitude: " + this.state.longitude
onAction 関数を実装する
ここまで、位置情報アクションと有線を定義しました。 これでようやく onAction
関数を実装することができます。この関数は、ユーザーが共有した位置座標に対して、サードパーティの開発者が何をしたいかを決定する機能を提供します。
この場合は、QuickView.ts ファイル (./src/adaptiveCardExtensions/geoLocation/quickView/QuickView.ts) を開き、次のように IGetLocationActionArguments
インターフェイスをインポートします。
import {IGetLocationActionArguments} from '@microsoft/sp-adaptive-card-extension-base';
最後に、QuickView クラスで次の onAction
関数を紹介します。
public onAction(action: IGetLocationActionArguments): void {
if (action.type === 'VivaAction.GetLocation') {
this.setState({
latitude: action.location.latitude.toString(),
longitude: action.location.longitude.toString()
});
}
}
そのため、クイック ビューから VivaAction.GetLocation
アクションがトリガーされるたびに、渡されたパラメーターに応じて、アダプティブ カード拡張フレームワークはユーザーの現在の座標またはユーザーが選択した座標を onAction
コールバックに渡します。 上で共有した実装では、action
型が VivaAction.GetLocation
型であるかどうかを確認します。 その場合は、setState
を実行してクイック ビューを再レンダリングします。これにより、latitude
と longitude
テキスト ブロックが更新されます。
この時点で、gulp serve を再度実行し、これまでに行ったすべての変更がどのように一緒に行われたかを確認できます。
そうなんです。 位置情報アクションを使用してアダプティブ カード拡張機能を正常に作成できました。