アクションリンクテンプレートの設計
アクションリンクテンプレートの概要


1POST /connect/action-link-group-definitions
2
3{
4 "templateId":"07gD00000004C9r",
5 "templateBindings":[
6 {
7 "key":"ApiVersion",
8 "value":"v1.0"
9 },
10 {
11 "key":"ItemNumber",
12 "value":"8675309"
13 },
14 {
15 "key":"BearerToken",
16 "value":"00DRR0000000N0g!ARoAQMZyQtsP1Gs27EZ8hl7vdpYXH5O5rv1VNprqTeD12xYnvygD3JgPnNR"
17 }
18 ]
19}1// Get the action link group template Id.
2ActionLinkGroupTemplate template = [SELECT Id FROM ActionLinkGroupTemplate WHERE DeveloperName='Doc_Example'];
3
4// Add binding name-value pairs to a map.
5Map<String, String> bindingMap = new Map<String, String>();
6bindingMap.put('ApiVersion', '1.0');
7bindingMap.put('ItemNumber', '8675309');
8bindingMap.put('BearerToken', '00DRR0000000N0g!ARoAQMZyQtsP1Gs27EZ8hl7vdpYXH5O5rv1VNprqTeD12xYnvygD3JgPnNR');
9
10// Create ActionLinkTemplateBindingInput objects from the map elements.
11List<ConnectApi.ActionLinkTemplateBindingInput> bindingInputs = new List<ConnectApi.ActionLinkTemplateBindingInput>();
12for (String key : bindingMap.keySet()) {
13 ConnectApi.ActionLinkTemplateBindingInput bindingInput = new ConnectApi.ActionLinkTemplateBindingInput();
14 bindingInput.key = key;
15 bindingInput.value = bindingMap.get(key);
16 bindingInputs.add(bindingInput);
17}
18
19// Set the template Id and template binding values in the action link group definition.
20ConnectApi.ActionLinkGroupDefinitionInput actionLinkGroupDefinitionInput = new ConnectApi.ActionLinkGroupDefinitionInput();
21actionLinkGroupDefinitionInput.templateId = template.id;
22actionLinkGroupDefinitionInput.templateBindings = bindingInputs;
23
24// Instantiate the action link group definition.
25ConnectApi.ActionLinkGroupDefinition actionLinkGroupDefinition =
26ConnectApi.ActionLinks.createActionLinkGroupDefinition(Network.getNetworkId(), actionLinkGroupDefinitionInput);テンプレート設計の考慮事項
- アクションリンクグループの有効期限を決定します。
「アクションリンクグループの有効期限の設定」を参照してください。
- テンプレートにバインド変数を定義して、���ループをインスタンス化するときの値を設定します。テンプレートに機密情報を保存しないでください。機密情報はバインド変数を使用して実行時に追加します。
「バインド変数の定義」を参照してください。
- アクションリンクがフィード要素に関連付けられているときに、アクションリンクを表示できるユーザを決定します。
- アクションリンクの実行コンテキストに関する情報を取得するためには、テンプレートのコンテキスト変数を使用します。
アクションリンクの実行時に、Salesforce が値を入力し、HTTP 要求で送信します。「コンテキスト変数の使用 」を参照してください。
アクションリンクグループの有効期限の設定
テンプレートからアクションリンクグループを作成するときに、テンプレートに指定された期間に基づいて有効期限を計算することも、アクションリンクグループに有効期限を設定しないことも可能です。
テンプレートに有効期限までの時間を設定するには、アクションリンクグループテンプレートの [有効期限までの時間] 項目に値を入力します。この値は、アクションリンクグループがインスタンス化されてから、関連付けられたフィード要素から削除され実行できなくなるまでの時間数です。最大値は 8760 で、365 日に相当します。
アクションリンクグループをインスタンス化するときに有効期限を設定するには、Action Link Group Definition リクエストボディ (Chatter REST API) または ConnectApi.ActionLinkGroupDefinition 入力クラス (Apex) のいずれかの expirationDate プロパティを設定します。
有効期限のないアクションリンクグループを作成するには、テンプレートの [有効期限までの時間] 項目に値を入力せず、アクションリンクグループをインスタンス化するときに expirationDate プロパティにも値を入力しません。
- expirationDate を指定すると、新しいアクションリンクグループでその値が使用されます。
- expirationDate を指定せず、テンプレートで [有効期限までの時間] を指定した場合は、新しいアクションリンクグループで [有効期限までの時間] の値が使用されます。
- expirationDate も [有効期限までの時間] も指定しない場合は、テンプレートからインスタンス化されたアクションリンクグループに有効期限が設定されません。
バインド変数の定義
テンプレートでバインド変数を定義し、アクションリンクグループをインスタンス化するときにその値を設定します。
バインド変数は、アクションリンクテンプレートの [アクション URL]、[HTTP リクエストボディ]、および [HTTP ヘッダー] 項目で定義できます。テンプレートを公開後、これらの項目を編集することや項目間でバインド変数を移動させること、バインド変数を削除することができます。ただし、新しいバインド変数を追加することはできません。
テンプレートでバインド変数のキーを定義します。アクションリンクグループをインスタンス化するときに、キーとその値を指定します。
バインド変数キーは {!Bindings.key} の形式です。
key は、事前に定義された \w 文字クラスの [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}] で Unicode 文字をサポートします。
1https://www.example.com/{!Bindings.ApiVersion}/items/{!Bindings.ItemId}1Authorization: OAuth {!Bindings.OAuthToken}
2Content-Type: {!Bindings.ContentType}1POST /connect/action-link-group-definitions
2
3{
4 "templateId":"07gD00000004C9r",
5 "templateBindings" : [
6 {
7 "key":"ApiVersion",
8 "value":"1.0"
9 },
10 {
11 "key":"ItemId",
12 "value":"8675309"
13 },
14 {
15 "key":"OAuthToken",
16 "value":"00DRR0000000N0g_!..."
17 },
18 {
19 "key":"ContentType",
20 "value":"application/json"
21 }
22 ]
23}1Map<String, String> bindingMap = new Map<String, String>();
2bindingMap.put('ApiVersion', '1.0');
3bindingMap.put('ItemId', '8675309');
4bindingMap.put('OAuthToken', '00DRR0000000N0g_!...');
5bindingMap.put('ContentType', 'application/json');
6
7List<ConnectApi.ActionLinkTemplateBindingInput> bindingInputs =
8 new List<ConnectApi.ActionLinkTemplateBindingInput>();
9
10for (String key : bindingMap.keySet()) {
11 ConnectApi.ActionLinkTemplateBindingInput bindingInput = new ConnectApi.ActionLinkTemplateBindingInput();
12 bindingInput.key = key;
13 bindingInput.value = bindingMap.get(key);
14 bindingInputs.add(bindingInput);
15}
16
17// Define the action link group definition.
18ConnectApi.ActionLinkGroupDefinitionInput actionLinkGroupDefinitionInput =
19 new ConnectApi.ActionLinkGroupDefinitionInput();
20actionLinkGroupDefinitionInput.templateId = '07gD00000004C9r';
21actionLinkGroupDefinitionInput.templateBindings = bindingInputs;
22
23// Instantiate the action link group definition.
24ConnectApi.ActionLinkGroupDefinition actionLinkGroupDefinition =
25ConnectApi.ActionLinks.createActionLinkGroupDefinition(Network.getNetworkId(), actionLinkGroupDefinitionInput);アクションリンクを表示できるユーザの設定
[ユーザ表示設定] ドロップダウンリストから値を選択して、アクションリンクがフィード要素に関連付けられた後にそのアクションリンクを表示できるユーザを決定します。
使用可能なオプションに [カスタムユーザのみに表示] と [カスタムユーザ以外の全員に表示] があります。このいずれかの値を選択して、アクションリンクを特定のユーザのみが表示できるようにするか、特定のユーザが表示できないようにします。次に、[カスタムユーザ(別名)] 項目に値を入力します。この値はバインド変数キーです。アクションリンクグループをインスタンス化するコードで、キーを使用して、バインド変数の場合と同じように値を指定します。
次のテンプレートは、[カスタムユーザ(別名)] の値に Invitee を使用します。
1POST /connect/action-link-group-definitions
2
3{
4 "templateId":"07gD00000004C9r",
5 "templateBindings" : [
6 {
7 "key":"Invitee",
8 "value":"005D00000017u6x"
9 }
10 ]
11}テンプレートで [作成者のマネージャのみに表示] を使用する場合にユーザにマネージャがいなければ、テンプレートからアクションリンクグループをインスタンス化するときにエラーが表示されます。この場合のマネージャは、インスタンス化の時点のマネージャです。インスタンス化した後にユーザのマネージャを変更した場合、この変更は反映されません。
コンテキスト変数の使用
コンテキスト変数を使用して、アクションリンクを実行したユーザとアクションリンクが呼び出されたコンテキストに関する情報を、アクションリンクの呼び出しによって実行された HTTP 要求に渡すことができます。コンテキスト変数は、Action Link Definition Input リクエストボディまたは ConnectApi.ActionLinkDefinitionInput オブジェクトの actionUrl、headers、および requestBody プロパティで使用できます。コンテキスト変数はまた、アクションリンクテンプレートの [アクション URL]、[HTTP リクエストボディ]、および [HTTP ヘッダー] 項目でも使用できます。テンプレートの公開後も、これらの項目は編集 (コンテキスト変数の追加と削除を含む) できます。
| コンテキスト変数 | 説明 |
|---|---|
| {!actionLinkId} | ユーザが実行したアクションリンクの ID。 |
| {!actionLinkGroupId} | ユーザが実行したアクションリンクが含まれるアクションリンクグループの ID。 |
| {!communityId} | ユーザがアクションリンクを実行したコミュニティの ID。内部組織の場合、値は空のキー "000000000000000000" になります。 |
| {!communityUrl} | ユーザがアクションリンクを実行したコミュニティの URL。内部組織の場合、値は空の文字列 "" になります。 |
| {!orgId} | ユーザがアクションリンクを実行した組織の ID。 |
| {!userId} | アクションリンクを実行したユーザの ID。 |
たとえば、Survey Example という会社に勤務していて、「Survey Example for Salesforce」というアプリケーションを Salesforce AppExchange 用に作成したとします。会社 A には「Survey Example for Salesforce」がインストールされています。会社 A の誰かが surveyexample.com にアクセスしてアンケートを作成します。Survey Example のコードは、Chatter REST API を使用して、会社 A の Salesforce 組織に本文テキスト [調査を実行] と、表示ラベル [OK] のアクションリンクを含むフィード項目を作成します。
この UI アクションリンクをクリックすると、ユーザが Salesforce からアンケートに回答する surveyexample.com の Web ページに移動します。
そのアクションリンクの [HTTP リクエストボディ] または [アクション URL] に {!userId} コンテキスト変数が含まれる場合、ユーザがフィードのアクションリンクをクリックすると、Salesforce はクリックしたユーザの ID を、作成した HTTP 要求に含めてサーバに送信します。
アクションリンクを作成する Survey Example のサーバ側コードに {!actionLinkId} コンテキスト変数が含まれる場合は、Salesforce がアクションリンクの ID を含む HTTP 要求を送信するため、この ID をデータベースに保存できます。
![[設定] の [アクション URL] 項目のコンテキスト変数](https://developer.salesforce.com/docs/resources/img/ja-jp/212.0?doc_id=images%2Factionlinks_contextvariables.png&folder=chatterapi)