ビューを動的に変更する

フォルダーモードの場合、gcss:Spreadsheetコンポーネントの属性のFolderIdに固定のフォルダーID、ViewIdに固定のビューIDを設定すると、「どこでもView」は特定のビューを固定表示します。

「どこでもView」では動的にビューを変更できるJavaScript APIを公開しています。 ここでは、Visualforceページに埋め込んだ「どこでもView」のビューを選択リストで切り替える方法を例に、ビューを動的に変更する方法を説明します。

ここで説明する内容はフォルダーモードが前提です。オブジェクトモードの場合は、フォルダーモードへ移行するを参考にソースコードを書き換えてください。

フォルダーとビューの選択リストを追加する

ビューの選択リストで表示するリストビューを切り替えるとき、ページ全体ではなく、リストビューにレンダリングされたデータだけを再読み込みする必要があります。

この動作を実現するには、RaySheetが提供するJavaScript APIのgcbgメンバを使用します。gcbgメンバについてはリファレンスを参照してください。

ここでは、フォルダーとビューを切り替える選択リストを追加する手順例を紹介します。

1. Apexクラスを作成する

フォルダーとビューを切り替える選択リストに表示するリスト項目を取得するクラスを作成します。
例のApexクラスを作成する前に、下記二つフォルダーを作成し、フォルダーに任意ビューを作成する必要があります。
・予実管理
・商品

  1. Salesforce Classicの場合、「設定 > 開発 > Apex クラス」をクリックする。Lightning Experienceの場合、歯車アイコンをクリックした後「設定 > カスタムコード > Apex クラス」をクリックする。
  2. 「新規」ボタンをクリックし、「Apex Class」に次のコードを貼り付け、「保存」をクリックする。
public class ListViewDemo {
  public Map<String, List<gcss.Common.ViewItem>> viewItemsWithFolder{set;get;}
  public String updatedValue {get; set;}
  public String folderSelected{set;get;}
  public String viewSelected{set;get;}
  public List<SelectOption> folderItems{set;get;}
  public List<SelectOption> viewItems{set;get;}
    
  public ListViewDemo(){
    //フォルダーIDとフォルダー名を指定する
    Map<String, String> folderMap = new Map<String, String>{'a0E5g000004SZc5EAG'=> '予実管理', 'a0E5g000008BOsWEAW' => '商品'}; 
    List<String>folderIds=new List<String>(folderMap.keySet());
    //指定されたフォルダーIDと関連するビューリストの対応付けを取得する
    viewItemsWithFolder = gcss.Common.getFolderViewList(folderIds);
    //フォルダー選択リストに表示するリスト項目を取得する
    folderItems = new List<SelectOption>();
    for (String folderId: viewItemsWithFolder.keySet()) {
      folderItems.add(new SelectOption(folderId, folderMap.get(folderId)));
    }

    viewItems = new List<SelectOption>();         
    List<gcss.Common.ViewItem> views=viewItemsWithFolder.get(folderItems[0].getValue());
      if (views != null){
        for(gcss.Common.ViewItem viewItem : views) {
        viewItems.add(new SelectOption(viewItem.id, viewItem.name));
        }
      }
    updatedValue=folderItems[0].getValue();
  }
  public void updateViewList(){
    //ビュー選択リストに表示するリスト項目を取得する
    viewItems = new List<SelectOption>();   
    List<gcss.Common.ViewItem> views=viewItemsWithFolder.get(folderSelected);
    if (views != null){
      for(gcss.Common.ViewItem viewItem : views) {
        viewItems.add(new SelectOption(viewItem.id, viewItem.name));
      }
    }
  }    
}

オブジェクトモードの場合は、getFolderViewListの代わりにgetObjectViewListを使用します。

2. Visualforceページを作成する

フォルダーとビューを切り替える選択リストとRaySheetのビューを表示するためのVisualforceページを作成します。フォルダーとビューを切り替える選択リストにはJavaScript APIのgcbgメンバを使用し、RaySheetのビューはgcss:Spreadsheetコンポーネントを使用します。

  1. Salesforce Classicの場合、「設定 > 開発 > Visualforceページ」をクリックする。Lightning Experienceの場合、歯車アイコンをクリックした後「設定 > カスタムコード > Visualforceページ」をクリックする。
  2. 「新規」ボタンをクリックする。
  3. 「表示ラベル」と「名前」に「ListViewDemo」と記入する。
  4. 「Visualforce Markup」に次の内容を入力し、「保存」ボタンをクリックする。
<apex:page controller="ListViewDemo" id="pg">
  <div style="height:500px;width:100%;">
    <apex:form styleClass="slds-m-vertical_medium" id="form">
      <!-- フォルダーの選択リストを作成する -->
      <apex:outputLabel value="フォルダー: "/>
      <apex:selectList id="folderList" value="{!folderSelected}" size="1">
        <apex:selectOptions value="{!folderItems}"/>
        <apex:actionSupport event="onchange" action="{!updateViewList}" reRender="viewList,raysheet" oncomplete="reloadViewListCompleted()"/>
      </apex:selectList>
      <!-- ビューの選択リストを作成する -->
      <apex:outputLabel value="ビュー: "/>  
      <apex:selectList id="viewList" value="{!viewSelected}" onchange="showView(this.value);" size="1">
        <apex:selectOptions value="{!viewItems}"/>
      </apex:selectList>
    </apex:form>
      
    <!-- RaySheetコンポーネントを読み込む -->
    <gcss:Spreadsheet id="raysheet" FolderId="{!updatedValue}"/>
    
    <!-- RaySheetのJavaScript APIのgcbgインターフェースをコールする -->
    <script type="text/javascript">
      var reloadViewListCompleted = function(){
          var viewId =document.getElementById("pg:form:viewList").value;
          showView(viewId);
      }
      var showView = function (viewId) {
        var folderId =document.getElementById("pg:form:folderList").value;
        gcbg.getRaySheet().showFolderView(folderId,viewId);
      }     
    </script>  
  </div>
</apex:page>

3. Visualforceページのセキュリティを設定する

Visualforceページは、既定ではシステム管理者のプロファイルを割り当てられたユーザーだけが表示できます。システム管理者以外のプロファイルにも許可するには、Visualforceページのセキュリティを設定します。

  1. Salesforce Classicの場合、「設定 > 開発 > Visualforceページ」をクリックする。Lightning Experienceの場合、歯車アイコンをクリックした後「設定 > カスタムコード > Visualforceページ」をクリックする。
  2. 前項で作成した「ListViewDemo」を見つける。
  3. 「ListViewDemo」の左側に表示される「セキュリティ」をクリックする。
  4. 左のリストから割り当てるプロファイル、たとえば「標準ユーザー」をクリックして選択し、「>」ボタンをクリックして右のリストに追加する。
  5. 「保存」ボタンをクリックする。

4. 動作を確認する

作成したVisualforceページのタブを作成して動作を確認します。

  1. Salesforce Classicの場合、「設定 > ビルド > 作成 > タブ」をクリックする。Lightning Experienceの場合、歯車アイコンをクリックした後「プラットフォームツール > ユーザーインタフェース > タブ」をクリックする。
  2. 「Visualforceタブ」の「新規」ボタンをクリックする。
  3. 「Visualforceページ」に「ListViewDemo」を選択する。
  4. 「タブの表示ラベル」と「タブ名」に「ListViewDemo」を入力する。
  5. 「タブスタイル」に任意のスタイルを選択する。
  6. 「次へ」をクリックし、タブをプロファイルに割り当て、保存する。
  7. 追加したタブ「ListViewDemo」からVisualforceページを開く。
  8. 左上の「フォルダー」と「ビュー」の選択リストでRaySheetのビューが切り替わることを確認する。
Copyright © 2024 MESCIUS inc. All rights reserved.