この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

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

テンプレートを作成する前に、テンプレートにどの値を設定し、テンプレートからアクションリンクグループをインスタンス化するときにバインド変数にどの値を設定するかを検討します。

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

[設定] に次のようなアクションリンクグループテンプレートが表示されます。
アクションリンクグループテンプレートの編集
各アクションリンクグループに、少なくとも 1 つのアクションリンクが必要です。この例のアクションリンクテンプレートには、[アクション URL] 項目に API バージョン番号、[HTTP リクエストボディ] 項目にアイテム番号、[HTTP ヘッダー] 項目に OAuth トークン値の 3 つのバインド変数があります。
アクションリンクテンプレートの編集
アクションリンクグループをインスタンス化して、バインド変数の値を設定する Chatter REST API 要求は、次のとおりです。
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}
次は、テンプレートからアクションリンクグループをインスタンス化して、バインド変数の値を設定する Apex コードです。
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 を指定せず、テンプレートで [有効期限までの時間] を指定した場合は、新しいアクションリンクグループで [有効期限までの時間] の値が使用されます。
  • expirationDate[有効期限までの時間] も指定しない場合は、テンプレートからインスタンス化されたアクションリンクグループに有効期限が設定されません。

バインド変数の定義

テンプレートでバインド変数を定義し、アクションリンクグループをインスタンス化するときにその値を設定します。

テンプレートに機密情報を保存しないでください。機密情報はバインド変数を使用して実行時に追加します。バインドの値が設定されている場合は、Salesforce に暗号化形式で保存されます。

重要

バインド変数は、アクションリンクテンプレートの [アクション URL][HTTP リクエストボディ]、および [HTTP ヘッダー] 項目で定義できます。テンプレートを公開後、これらの項目を編集することや項目間でバインド変数を移動させること、バインド変数を削除することができます。ただし、新しいバインド変数を追加することはできません。

テンプレートでバインド変数のキーを定義します。アクションリンクグループをインスタンス化するときに、キーとその値を指定します。

バインド変数キーは {!Bindings.key} の形式です。

key は、事前に定義された \w 文字クラスの [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}]Unicode 文字をサポートします。

次の [アクション URL] 項目には 2 つのバインド��数があります。
1https://www.example.com/{!Bindings.ApiVersion}/items/{!Bindings.ItemId}
次の [HTTP ヘッダー] 項目には 2 つのバインド変数があります。
1Authorization: OAuth {!Bindings.OAuthToken}
2Content-Type: {!Bindings.ContentType}
アクションリンクグループを Chatter REST API でインスタンス化するときにキーとその値を指定します。
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}
Apex にバインド変数キーを指定して、その値を設定します。
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);

アクションリンクテンプレートでは同じバインド変数を複数回使用でき、インスタンス化のときに値を 1 回だけ指定します。たとえば、あるアクションリンクテンプレートの [HTTP リクエストボディ] 項目で {!Bindings.MyBinding} を 2 回使用し、同じアクションリンクグループテンプレート内の別のアクションリンクテンプレートの [HTTP ヘッダー] 項目でもう一回使用することができますが、この場合、テンプレートからアクションリンクグループをインスタンス化するときにこの共有変数の値を 1 回のみ指定します。

ヒント

アクションリンクを表示できるユーザの設定

[ユーザ表示設定] ドロップダウンリストから値を選択して、アクションリンクがフィード要素に関連付けられた後にそのアクションリンクを表示できるユーザを決定します。

使用可能なオプションに [カスタムユーザのみに表示] と [カスタムユーザ以外の全員に表示] があります。このいずれかの値を選択して、アクションリンクを特定のユーザのみが表示できるようにするか、特定のユーザが表示できないようにします。次に、[カスタムユーザ(別名)] 項目に値を入力します。この値はバインド変数キーです。アクションリンクグループをインスタンス化するコードで、キーを使用して、バインド変数の場合と同じように値を指定します。

次のテンプレートは、[カスタムユーザ(別名)] の値に 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 オブジェクトの actionUrlheaders、および 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]{!userId} コンテキスト変数が含まれます。
[設定] の [アクション URL] 項目のコンテキスト変数

バインド変数とコンテキスト変数は同じ項目で使用できます。たとえば、アクション URL https://www.example.com/{!Bindings.apiVersion}/doSurvey?salesforceUserId={!userId} にはバインド変数とコンテキスト変数が含まれています。

ヒント