【Salesforce】System.SerializationException: Not Serializable: Map

【Salesforce】System.SerializationException: Not Serializable: Map

Visualforceで暇つぶし用に画面を作っていたところ、こんなエラーが出ました。

[cope language=”text”]
System.SerializationException: Not Serializable: Map<String,Schema.DescribeSObjectResult>」
[/code]

シリアライズできないですとのことです。

シリアライズって何ぞやと調べてみると、IT用語辞典様に書いてありました。

http://e-words.jp/w/%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%A9%E3%82%A4%E3%82%BA.html

データ構造をインスタンス化して保持し続けようとしたのが原因のようです。

public with sharing class SchemaPageController{

    private Map<String, Schema.DescribeSObjectResult> sObjectDetailMap;
    
    /**
     * コンストラクタ
     */
    public SchemaPageController(){
    
        this.sObjectDetailMap = new Map<String, Schema.DescribeSObjectResult>();
    }
}

このコントローラを使用したVisualforceページを作成すると、エラーとなります。

保持し続けなければ良いようなので、transientを付けると解決しました。

public with sharing class SchemaPageController{

    transient private Map<String, Schema.DescribeSObjectResult> sObjectDetailMap;
    
    /**
     * コンストラクタ
     */
    public SchemaPageController(){
    
        this.sObjectDetailMap = new Map<String, Schema.DescribeSObjectResult>();
    }
}

毎回取得するのはちょっと面倒ですけどね。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です