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

Newer Version Available

This content describes an older version of this product. View Latest

Session クラス

Cache.Session クラスを使用して、セッションキャッシュの値を追加、取得、および管理します。ユーザの Salesforce セッションが有効である限り (ユーザがログインした状態で、セッションの有効期限が切れていない)、セッションキャッシュは有効です。

名前空間

Cache

使用方法

キャッシュキー形式

次の表は、putgetcontains など、このクラスの一部のメソッドで取るキーパラメータの形式の一覧です。

キー形式 説明
namespace.partition.key 完全修飾されたキー名。
key namespace.partition プレフィックスが省略された場合、デフォルトとしてマークされたパーティションを参照します。
local.partition.key 組織に名前空間が定義されていない場合、local プレフィックスを使用して組織の名前空間を参照します。組織に名前空間が定義されている場合も、local プレフィックスはその組織の名前空間を参照します。
  • 組織にデフォルトパーティションが指定されていない場合、キー名を完全修飾せずにキャッシュメソッドをコールすると、​Cache.Session.SessionCacheException が発生します。
  • インストール済み管理パッケージの local プレフィックスは、パッケージの名前空間ではなく、登録者組織の名前空間を参照します。キャッシュの put コールは、呼び出し元のクラスが所有していないパーティションでは許可されません。
  • セッションキャッシュでは非同期 Apex はサポートされません。たとえば、future メソッドや Apex 一括処理をセッションキャッシュに使用することはできません。

メモ

このクラスは、サンプル Visualforce ページのコントローラです (後続のコードサンプルを参照)。Visualforce ページが action 属性によって読み込まれたときに呼び出す init() メソッドによって、キャッシュ値は最初にキャッシュに追加されます。キャッシュキーには、namespace.partition プレフィックスは含まれません。キーはすべて組織のデフォルトパーティションを参照します。Visualforce ページでは、myPartition という名前のパーティションが想定されています。このサンプルを実行するには、組織に myPartition という名前のデフォルトパーティションを作成します。

Visualforce ページには 4 つの出力コンポーネントが含まれます。最初の 3 つのコンポーネントは、コントローラの get メソッドをコールし、これらのメソッドがキャッシュから、日付、MyData 内部クラスに基づくデータ、カウンタの各値を返します。次の出力コンポーネントは $Cache.Session グローバル変数を使用して output という名前のキーのキャッシュ文字列値を取得します。次に、$Cache.Session グローバル変数を Visualforce ページで再度使用して、List 型のキャッシュ値の要素を反復処理します。リストのサイズも返します。

Visualforce ページには 2 つのボタンも含まれます。[Rerender (再表示)] ボタンはコントローラの go() メソッドを呼び出します。このメソッドは、キャッシュのカウンタとカスタムデータの値を増やします。[Rerender (再表示)] をクリックすると、毎回 2 つのカウンタが 1 ずつ増えます。go() メソッドは、キャッシュからこれらのカウンタの値を取得し、その値を 1 ずつ増やしてキャッシュに再度保存します。

[Remove (削除)] ボタンは、キャッシュから日時値を (キー datetime で) 削除します。その結果、ページ上の [Cached datetime: (キャッシュ日時:)] の横にある値がクリアされます。

1public class SessionCacheController {
2
3    // Inner class.
4    // Used as the data type of a cache value.
5    class MyData {    
6        public String value { get; set; }
7        public Integer counter { get; set; }
8        
9        public MyData(String value) {
10            this.value = value;
11            this.counter = 0;
12        }
13        
14        public void inc() {
15            counter++;
16        }
17        
18        override public String toString() {
19            return this.value + ':' + this.counter;
20        }    
21    }
22    
23    // Apex List.
24    // Used as the data type of a cached value.
25    private List<String> numbers = 
26            new List<String> { 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE' }; 
27               
28    // Constructor of the controller for the Visualforce page. 
29    public SessionCacheController() {  
30    }
31            
32    // Adds various values to the cache.
33    // This method is called when the Visualforce page loads.
34    public void init() {  
35        // All key values are not qualified by the namespace.partition
36        // prefix because they use the default partition.
37        
38        // Add counter to the cache with initial value of 0
39        //  or increment it if it's already there.
40        if (!Cache.Session.contains('counter')) {
41            Cache.Session.put('counter', 0);
42        } else {
43            Cache.Session.put('counter', getCounter() + 1);
44        }
45              
46        // Add the datetime value to the cache only if it's not already there.
47        if (!Cache.Session.contains('datetime')) {
48            DateTime dt = DateTime.now();
49            Cache.Session.put('datetime', dt);
50        }
51     
52        // Add the custom data to the cache only if it's not already there.
53        if (!Cache.Session.contains('data')) {
54            Cache.Session.put('data', new MyData('Some custom value'));
55        }
56                
57        // Add a list of number to the cache if not already there.
58        if (!Cache.Session.contains('list')) {                    
59            Cache.Session.put('list', numbers);
60        }
61                
62        // Add a string value to the cache if not already there.
63        if (!Cache.Session.contains('output')) {
64            Cache.Session.put('output', 'Cached text value');
65        }
66    }
67    
68    // Return counter from the cache.
69    public Integer getCounter() {
70        return (Integer)Cache.Session.get('counter');
71    }
72    
73    // Return datetime value from the cache.
74    public String getCachedDatetime() {
75        DateTime dt = (DateTime)Cache.Session.get('datetime');
76        return dt != null ? dt.format() : null;
77    }
78    
79    // Return cached value whose type is the inner class MyData.
80    public String getCachedData() {
81        MyData mydata = (MyData)Cache.Session.get('data');
82        return mydata != null ? mydata.toString() : null;
83    }
84    
85    // Method invoked by the Rerender button on the Visualforce page.
86    // Updates the values of various cached values.
87    // Increases the values of counter and the MyData counter if those 
88    //   cache values are still in the cache.
89    public PageReference go() {
90        // Increase the cached counter value or set it to 0 
91        //  if it's not cached.        
92        if (Cache.Session.contains('counter')) {
93            Cache.Session.put('counter', getCounter() + 1);
94        } else {
95            Cache.Session.put('counter', 0);
96        }        
97    
98        // Get the custom data value from the cache.
99        MyData d = (MyData)Cache.Session.get('data');
100        // Only if the data is already in the cache, update it.
101        if (Cache.Session.contains('data')) {
102            d.inc();
103            Cache.Session.put('data', d);            
104        }        
105
106        return null;
107    }
108    
109    // Method invoked by the Remove button on the Visualforce page.
110    // Removes the datetime cached value from the session cache.
111    public PageReference remove() {
112        Cache.Session.remove('datetime');
113
114        return null;
115    }
116}

これは、SessionCacheController クラスに対応する Visualforce ページです。

1<apex:page controller="SessionCacheController" action="{!init}">
2
3    <apex:outputPanel id="output">
4        <br/>Cached datetime: <apex:outputText value="{!cachedDatetime}"/>
5        <br/>Cached data: <apex:outputText value="{!cachedData}"/>
6        <br/>Cached counter: <apex:outputText value="{!counter}"/>
7        <br/>Output: <apex:outputText value="{!$Cache.Session.local.myPartition.output}"/>
8        <br/>Repeat: <apex:repeat var="item" value="{!$Cache.Session.local.myPartition.list}">
9            <apex:outputText value="{!item}"/>&nbsp;
10        </apex:repeat>
11        <br/>List size: <apex:outputText value="{!$Cache.Session.local.myPartition.list.size}"/>
12    </apex:outputPanel>
13    
14    <br/><br/>
15    <apex:form >
16        <apex:commandButton id="go" action="{!go}" value="Rerender" rerender="output"/>
17        <apex:commandButton id="remove" action="{!remove}" value="Remove datetime Key" rerender="output"/>
18    </apex:form>
19
20</apex:page>

これは [Rerender (再表示)] ボタンを 2 回クリックした後のページの出力です。このサンプルを実行する前に counter という名前のキーがすでにキャッシュにある場合は、カウンタ値が異なる可能性があります。

1Cached datetime:8/11/2015 1:58 PM
2Cached data:Some custom value:2
3Cached counter:2
4Output:Cached text value
5Repeat:ONE TWO THREE FOUR FIVE 
6List size:5

セッション定数

Time to Live (TTL) 値の設定時に使用可能な定数が Session クラスで提供されます。
定数 説明
MAX_TTL_SECS キャッシュ値をセッションキャッシュに保持しておく最大時間 (秒数) を表します。

Session のメソッド

Session のメソッドは次のとおりです。すべてのメソッドが静的です。

contains(key)

セッションキャッシュに指定したキーに対応するキャッシュ値が含まれる場合は true を返します。

署名

public static Boolean contains(String key)

パラメータ

key
型: String
キャッシュ値を一意に識別する文字列値 (大文字と小文字を区別)。 キー名の形式についての詳細は、「使用方法」を参照してください。

戻り値

型: Boolean

キャッシュエントリが見つかった場合は、true。それ以外の場合は、false

get(key)

セッションキャッシュから、指定したキーに対応するキャッシュ値を返します。

署名

public static Object get(String key)

パラメータ

key
型: String
キャッシュ値を一意に識別する文字列値 (大文字と小文字を区別)。 キー名の形式についての詳細は、「使用方法」を参照してください。

戻り値

型: Object

キャッシュ値が汎用オブジェクト種別として返されます。戻り値を適切な型にキャストしてください。

使用方法

Cache.Session.get() はオブジェクトを返すため、戻り値を使いやすいように特定の型にキャストすることをお勧めします。

1// Get a cached value
2Object obj = Cache.Session.get('ns1.partition1.orderDate');
3// Cast return value to a specific data type
4DateTime dt2 = (DateTime)obj;

Cache.Session.get() コールで参照されたキーが見つからない場合、null が返されます。

get(cacheBuilder, key)

セッションキャッシュから、指定したキーに対応するキャッシュ値を返します。キャッシュ値が、CacheBuilder インターフェースを実装するクラスの場合、このメソッドを使用します。

署名

public static Object get(System.Type cacheBuilder, String key)

パラメータ

cacheBuilder
型: System.Type
CacheBuilder インターフェースを実装する Apex クラス。
key
型: String
cacheBuilder パラメータに対応するクラス名と組み合せてキャッシュ値を一意に識別する文字列値 (大文字と小文字を区別)。

戻り値

型: Object

キャッシュ値が汎用オブジェクト種別として返されます。戻り値を適切な型にキャストしてください。

使用方法

Cache.Session.get(cacheBuilder, key) はオブジェクトを返すため、戻り値を使いやすいように特定の型にキャストしてください。

1return ((DateTime)Cache.Session.get(DateCache.class, 'datetime')).format();

getAvgGetTime()

セッションキャッシュからのキーの取得に要した平均時間 (ナノ秒) を返します。

署名

public static Long getAvgGetTime()

戻り値

型: Long

getAvgValueSize()

セッションキャッシュのキーの平均項目サイズ (バイト) を返します。

署名

public static Long getAvgValueSize()

戻り値

型: Long

getCapacity()

セッションキャッシュ容量の使用率を返します。

署名

public static Double getCapacity()

戻り値

型: Double

キャッシュの使用率をパーセント値で返します。

getKeys()

セッションキャッシュに保存され、かつ呼び出し名前空間から参照可能なすべてのキーを返します。

署名

public static Set<String> getKeys()

戻り値

型: Set<String>

すべてのキャッシュキーのセット。

getMaxGetTime()

セッションキャッシュからのキーの取得に要した最大時間 (ナノ秒) を返します。

署名

public static Long getMaxGetTime()

戻り値

型: Long

getMaxValueSize()

セッションキャッシュのキーの最大項目サイズ (バイト) を返します。

署名

public static Long getMaxValueSize()

戻り値

型: Long

getMissRate()

セッションキャッシュのミス率を返します。

署名

public static Double getMissRate()

戻り値

型: Double

getName()

デフォルトのキャッシュパーティションの名前を返します。

署名

public String getName()

戻り値

型: String

デフォルトのキャッシュパーティションの名前。

getNumKeys()

セッションキャッシュのキーの合計数を返します。

署名

public static Long getNumKeys()

戻り値

型: Long

getPartition(partitionName)

セッションキャッシュから、指定したパーティション名に対応するパーティションを返します。

署名

public static cache.SessionPartition getPartition(String partitionName)

パラメータ

partitionName
型: String
名前空間で修飾されたパーティション名 (namespace.partition など)。

戻り値

型: Cache.SessionPartition

セッションパーティションを取得したら、パーティションのキャッシュ値を追加および取得できます。

1// Get partition
2Cache.SessionPartition sessionPart = Cache.Session.getPartition('myNs.myPartition');
3// Retrieve cache value from the partition
4if (sessionPart.contains('BookTitle')) {
5    String cachedTitle = (String)sessionPart.get('BookTitle');
6}
7
8// Add cache value to the partition
9sessionPart.put('OrderDate', Date.today());
10
11// Or use dot notation to call partition methods
12String cachedAuthor = (String)Cache.Session.getPartition('myNs.myPartition').get('BookAuthor');

isAvailable()

セッションキャッシュが使用できる場合に true を返します。非同期 Apex や、非同期 Apex でコールされたコードなどで有効なセッションが存在しない場合には、セッションキャッシュを使用できません。たとえば、Apex 一括処理によって Apex トリガが実行された場合、このトリガは非同期コンテキストで実行されるためセッションキャッシュを使用できません。

署名

public static Boolean isAvailable()

戻り値

型: Boolean

セッションキャッシュを使用できる場合は、true。それ以外の場合は、false

put(key, value)

特定のキー/値ペアをキャッシュされたエントリとしてセッションキャッシュに保存します。put メソッドは、組織の名前空間のキャッシュにのみ書き込むことができます。

署名

public static void put(String key, Object value)

パラメータ

key
型: String
キャッシュする値を一意に識別する文字列。キー名の形式についての詳細は、「使用方法」を参照してください。
value
型: Object
キャッシュに保存する値。キャッシュ値は逐次化可能にする必要があります。

戻り値

型: void

put(key, value, visibility)

特定のキー/値ペアをキャッシュされたエントリとしてセッションキャッシュに保存し、キャッシュ値の表示を設定します。

署名

public static void put(String key, Object value, Cache.Visibility visibility)

パラメータ

key
型: String
キャッシュする値を一意に識別する文字列。キー名の形式についての詳細は、「使用方法」を参照してください。
value
型: Object
キャッシュに保存する値。キャッシュ値は逐次化可能にする必要があります。
visibility
型: Cache.Visibility
キャッシュ値を使用できるのが、同じ名前空間内で実行される Apex コードのみか、任意の名前空間から実行される Apex コードかを示します。

戻り値

型: void

put(key, value, ttlSecs)

特定のキー/値ペアをキャッシュされたエントリとしてセッションキャッシュに保存し、キャッシュ値の有効期限を設定します。

署名

public static void put(String key, Object value, Integer ttlSecs)

パラメータ

key
型: String
キャッシュする値を一意に識別する文字列。キー名の形式についての詳細は、「使用方法」を参照してください。
value
型: Object
キャッシュに保存する値。キャッシュ値は逐次化可能にする必要があります。
ttlSecs
型: Integer
キャッシュ値をセッションキャッシュに保持しておく時間 (秒数)。Salesforce セッションが期限切れにならない限り、キャッシュ値はキャッシュ内に保持されます。最大値は 28,800 秒 (8 時間) です。最小値は 300 秒 (5 分) です。

戻り値

型: void

put(key, value, ttlSecs, visibility, immutable)

特定のキー/値ペアをキャッシュされたエントリとしてセッションキャッシュに保存します。このメソッドはまた、キャッシュ値の有効期限、表示、および別の名前空間で上書きされるかどうかを設定します。

署名

public static void put(String key, Object value, Integer ttlSecs, cache.Visibility visibility, Boolean immutable)

パラメータ

key
型: String
キャッシュする値を一意に識別する文字列。キー名の形式についての詳細は、「使用方法」を参照してください。
value
型: Object
キャッシュに保存する値。キャッシュ値は逐次化可能にする必要があります。
ttlSecs
型: Integer
キャッシュ値をセッションキャッシュに保持しておく時間 (秒数)。Salesforce セッションが期限切れにならない限り、キャッシュ値はキャッシュ内に保持されます。最大値は 28,800 秒 (8 時間) です。最小値は 300 秒 (5 分) です。
visibility
型: Cache.Visibility
キャッシュ値を使用できるのが、同じ名前空間内で実行される Apex コードのみか、任意の名前空間から実行される Apex コードかを示します。
immutable
型: Boolean
キャッシュ値を別の名前空間によって上書きできるか (false)、否か (true) を示します。

戻り値

型: void

remove(key)

セッションキャッシュから、指定したキーに対応するキャッシュ値を削除します。

署名

public static Boolean remove(String key)

パラメータ

key
型: String
キャッシュ値を一意に識別する文字列値 (大文字と小文字を区別)。キー名の形式についての詳細は、「使用方法」を参照してください。

戻り値

型: Boolean

キャッシュ値が正常に削除された場合は true。それ以外の場合は、false

remove(cacheBuilder, key)

セッションキャッシュから、指定したキーに対応するキャッシュ値を削除します。キャッシュ値が、CacheBuilder インターフェースを実装するクラスの場合、このメソッドを使用します。

署名

public static Boolean remove(System.Type cacheBuilder, String key)

パラメータ

cacheBuilder
型: System.Type
CacheBuilder インターフェースを実装する Apex クラス。
key
型: String
cacheBuilder パラメータに対応するクラス名と組み合せてキャッシュ値を一意に識別する文字列値 (大文字と小文字を区別)。

戻り値

型: Boolean

キャッシュ値が正常に削除された場合は true。それ以外の場合は、false