LoginSignup
1
2

More than 5 years have passed since last update.

JSForceでリストビューのメタ情報操作してみた

Posted at

JSforceを使ってみたのでメモ。φ( ̄ー ̄ )メモメモ

リストビューのメタ情報を取得を取得したい

JSForceでは、フルネームでの参照になります。
メタデータなので当然ですが、ID での参照はできません
また、リストビューの ID の取得もできませんでした。
どうしても ID が必要な場合は本記事下部を参照。

リストビューのメタ情報を取得
<apex:page controller="CustomController">
    <script src="//cdnjs.cloudflare.com/ajax/libs/jsforce/1.7.0/jsforce.min.js"></script>
    <button onclick="readListView();"> ビュー表示 </button>
    <script>   
        function readListView(){
            var conn = new jsforce.Connection({ accessToken: '{!$Api.Session_Id}' });
            var fullNames = [ 'Contact.All' ]; // オブジェクト名.対象ビューのAPI名
            conn.metadata.read('ListView', fullNames, function(err, metadata) {
                if (err) { 
                    console.error(err); 
                } else {
                    console.log(metadata);
                }
            });
        }
    </script>
</apex:page>

リストビューのメタ情報を更新したい

リストビューの作成・更新は、メタ情報を設定する必要があります。
更新の場合、必須項目以外は設定しなければ前の情報が引き継がれるようです。

リストビューのメタ情報を更新
<apex:page controller="CustomController">
    <script src="//cdnjs.cloudflare.com/ajax/libs/jsforce/1.7.0/jsforce.min.js"></script>
    <button onclick="createListView();"> ビュー更新 </button>
    <script>   
    function createListView(){
        var conn = new jsforce.Connection({ accessToken: '{!$Api.Session_Id}' });
        var metadata = [{
            booleanFilter: '1 AND 2',
            columns:       ['FULL_NAME', 'CONTACT.EMAIL', 'CONTACT.BIRTHDATE', 'CustomField__c'],
            filterScope:   'Everything',
            filters:       [{ field : 'FULL_NAME', operation: 'contains', value: 'WEA' },
                            { field : 'CONTACT.EMAIL', operation: 'contains', value: '@gmail.com' }],
            sharedTo :     {}, // 自分だけに表示
            fullName:      'Contact.CustomView', // オブジェクト名.対象ビューのAPI名
            label:         'カスタムビュー',
            language:      'ja'
        }];        
        conn.metadata.update('ListView', metadata, function(err, metadata) {
            if (err) { 
                console.error(err);
            } else {
                console.log(metadata);
            }
        });
    }
  </script>
</apex:page>

ListView Meta情報の定義はこちらを参照
Metadata API Developer Guide - ListView

リストビューのIDを取得したい

絶対欲しくなるので、JS Remotingで実装しました(Visualforce上で実装に限る)
幸いリストビューのAPI名がわかるので、ListView.objDeveloperNameに当ててIDを引っ張り出します。

IDを取得するjs
function getListViewId(listViewName){
    Visualforce.remoting.timeout = 120000;
    Visualforce.remoting.Manager.invokeAction(
        '{!$RemoteAction.DemCustomViewController.getListView}',
        listViewName, // 
        function(result, event){
            if (event.status) {
                console.log(result.Id);
            } 
        },
        {escape: true}
    );
}
上記jsで呼び出されるApexコード
@RemoteAction
global static ListView getListView(String listViewName) {
    return [SELECT Id, DeveloperName FROM ListView WHERE SobjectType = 'Contact' and DeveloperName = :listViewName][0];
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2