SharePoint ホスト型の SharePoint アドインにカスタムのクライアント側レンダリングを追加する

これは、SharePoint ホスト型の SharePoint アドインの開発の基本に関する記事のシリーズの 8 番目です。SharePoint アドインとこのシリーズの前の記事 (「SharePoint ホスト型の SharePoint アドインの作成を始める | 次の手順」にある記事) をよく理解しておいてください。

注:

SharePoint ホスト型アドインに関するこのシリーズを続けて学習してきた方は、このトピックでも引き続き使用できる Visual Studio ソリューションをお持ちです。 また、SharePoint_SP-hosted_Add-Ins_Tutorials でリポジトリをダウンロードし、BeforeClientRenderedControl.sln ファイルを開くこともできます。

重要

JSLink ベースのカスタマイズ (クライアント側のレンダリング) は最新のエクスペリエンスではサポートされていません。 これには、最新のページのリスト ビュー Web パーツでの JSLink サポートなど、最新のリストとライブラリが含まれます。 クライアント側のレンダリングは、SharePoint Online またはオンプレミスの従来のエクスペリエンスではサポートされています。

クライアント側の小さい JavaScript を使用して、Web パーツ、ほとんどの種類のフィールド (列)、その他のコントロールのレンダリングをカスタマイズすることができます。それには SPField.JSLink のように、コントロールの JSLink プロパティに JavaScript ファイルを割り当てます。 このようにしてクライアント側の検証ロジックを追加することもできます。 この記事では、クライアント側のレンダリングを利用して従業員オリエンテーション用 SharePoint アドインのリスト内のフィールドのレンダリングをカスタマイズします。

注:

  • エンドユーザーのブラウザーで JavaScript が無効になっている場合、SharePoint はサーバー側のレンダリングと検証にフォールバックします。
  • JSLink プロパティは、アンケートの一覧またはイベントの一覧ではサポートされていません。 SharePoint の予定表はイベント リストです。

JavaScript を作成し、登録する

  1. ソリューション エクスプローラーで、[スクリプト] ノードを右クリックし、[追加]>[新しいアイテム]>[Web] を選択します。

  2. [JavaScript ファイル] を選択して、OrientationStageRendering.js という名前を付けます。

  3. フィールドのカスタム レンダリングが自動的に行われる必要があるため、次のコードを使用して、ファイルが読み込まれるときに自動的に実行される匿名メソッドを JavaScript に追加します。

    (function () {
    
    })();
    
  4. このメソッドの本文 ({ } 文字の間) で、次のコードを追加し、レンダリング上書きコンテキストの JSON (Javascript Object Notation) オブジェクト、コンテキストのテンプレート、フィールドのテンプレートを作成します。

    var customRenderingOverride = {};
    customRenderingOverride.Templates = {};
    customRenderingOverride.Templates.Fields = {
    }
    
  5. Fields テンプレート オブジェクトの本体に、次の JSON を追加します。

    "OrientationStage": { "View": renderOrientationStage }
    
    • プロパティ名 OrientationStage は、レンダリングをカスタマイズしたフィールドを識別します。
    • プロパティの値は、別の JSON オブジェクトです。
    • View プロパティは、カスタム レンダリングが適用されているページ コンテキストを識別します。 この場合は、オブジェクトは、リスト ビューでカスタマイズされたレンダリングを使用するように SharePoint に指示しています。 (その他のオプションは、Edit、New、Display フォーム用です。)
    • プロパティ renderOrientationStage の値は、後の手順で作成するカスタム レンダリング メソッドの名前です。
  6. 匿名メソッドが実行すべき最後の処理は、SharePoint のテンプレート マネージャーへのレンダリングの上書きについての通知です。 次の行をメソッドの本文の終わりに追加します。

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(customRenderingOverride);
    

    メソッドは、次のようになります。

    (function () {
      var customRenderingOverride = {};
      customRenderingOverride.Templates = {};
      customRenderingOverride.Templates.Fields = {
          "OrientationStage": { "View": renderOrientationStage }
      }
    
      SPClientTemplates.TemplateManager.RegisterTemplateOverrides(customRenderingOverride);
    })();
    
  7. 次に示すメソッドをファイルに追加します。 値が Not Started の場合は [オリエンテーション ステージ] 列値の色を赤に設定し、値が Completed の場合は緑に設定します。 (ctx オブジェクトは、組み込みの SharePoint スクリプトで宣言されたクライアントのコンテキスト オブジェクトです。)

    function renderOrientationStage(ctx) {
      var orientationStageValue = ctx.CurrentItem[ctx.CurrentFieldSchema.Name];
      if (orientationStageValue == "Not Started")  {
          return "<span style='color:red'>" + orientationStageValue + "</span>"
      }
      else if (orientationStageValue == "Completed") {
          return "<span style='color:green'>" + orientationStageValue + "</span>"
      }
      else {
          return orientationStageValue;
      }
    }
    
  8. ソリューション エクスプローラーで、[サイト列]、次に [オリエンテーション ステージ] を展開し、elements.xml ファイルを開きます。

  9. SharePoint にカスタム JavaScript を使用するよう指示するには、新しい属性 JSLinkField 要素に追加して、次の URL をその値として割り当てます: ~site/Scripts/OrientationStageRendering.js

    注:

    JSLinkプロパティはメソッドではなく、常にファイルです。 SharePoint にどのメソッドを実行するかを指示する方法はありません。そのため、自動的に動作するメソッドがファイルに含まれます。

    Field 要素の開始タグは、次のようになります。

    <Field
          ID="{some_guid_here}"
          Name="OrientationStage"
          Title="OrientationStage"
          DisplayName="Orientation Stage"
          Description="The current orientation stage of the employee."
          Type="Choice"
          Required="TRUE"
          Group="Employee Orientation"
          JSLink="~site/Scripts/OrientationStageRendering.js">
    <!-- child elements and end tag omitted -->
    
  10. Default.aspx ページを開き、 ContentPlaceHolderIDPlaceHolderMain に設定されている asp:Content 要素の最後の子として次のコードを追加します。

    <p><asp:HyperLink runat="server" NavigateUrl="JavaScript:window.location = _spPageContextInfo.webAbsoluteUrl + '/Lists/NewEmployeesInSeattle/AllItems.aspx';"
          Text="List View Page for New Employees in Seattle" /></p>
    

アドインを実行してテストする

  1. F5 キーを使用して、アドインを展開して実行します。 Visual Studio が、テスト用 SharePoint サイトにアドインを一時的にインストールして、すぐにアドインを実行します。

  2. 設定したクライアント側レンダリングは、ホーム ページに配置したリスト ビュー Web パーツにあるもののレンダリングには影響せず、リスト ビュー ページにあるフィールドのレンダリングにのみ影響します。 これは、Web パーツが既定でサーバー側レンダリングに設定されるためです。 これを反対にする方法はありますが、この簡単な例では高度すぎる内容です。 そのため、クライアント側レンダリングの動作を確認するために、シアトルの新入社員のリスト ビュー ページの下にあるリンクを選択します。

  3. リスト ビュー ページが開いたら、いくつかの項目の [ オリエンテーション ステージ] の値を [ 未開始] に設定し、他の値を [ 完了] に設定して、カスタム カラー レンダリングを確認します。

    図 1. カスタムのクライアント側レンダリングのリスト

    「未開始」のオリエンテーション ステージ値が赤で「完了」の値が緑の「シアトルの新入社員」一覧。その他の値は黒です。

  4. デバッグ セッションを終了するには、ブラウザー ウィンドウを閉じるか、Visual Studio でデバッグを停止します。 F5 を選択するたびに、Visual Studio によって、以前のバージョンのアドインが取り消され、最新のバージョンがインストールされます。

  5. このアドインおよび他の記事の Visual Studio ソリューションを操作し、ひととおり操作を終了したら前回のアドインを取り消すとよいでしょう。 ソリューション エクスプローラーでプロジェクトを右クリックして、[取り消し] を選択します。

次の手順

このシリーズの次の記事では、SharePoint アドインのホスト Web にカスタムのリボン ボタンを作成します