Visualforceページの自動保存でデータが取得されず、検証ルールに失敗しました。ただし、immediate = trueがオンの場合

私は自動保存される必要があるVisualforceページを持っています。現在、私のページに2つの問題があります。

  1. Visualforceページのいくつかのフィールドにいくつかの検証ルールがあります。即時属性をtrueに設定して自動保存で有効にならないように検証ルールを設定しました。保存ボタンを使用してページを保存しようとすると、いくつかの妥当性検査規則のエラーがあり、自動保存はまだページ上の妥当性検査規則のエラーメッセージの後に実行され、その後エラーが発生する
    “Update failed。id
    a1DK000000wpHVAASの行0の最初の例外;最初のエラー:FIELD_CUSTOM_VALIDATION_EXCEPTION車両は、
  2. すべてのフィールドが自動保存で保存されているわけではありません。自動保存によってすべての値を保存していない理由はわかりませんが、保存ボタンを押して保存するとすべての値が保存されます。以下は私のvisualforceページです。

ページ:


    
    
         

        
             Auto Saving....  
        
        
            
                
                
            
            
                
                
                
                    
                
                
                
                
                
                
            
            
               
               
            
            
                
            
            
                
            
                     
                     
             
                     
                     
              
        
        <script>
            window.setTimeout(recursivecall,20000);
            function recursivecall()
            {
                window.setTimeout(recursivecall,20000);
                autosave();
            }    
        </script>     
    

コントローラ:

public class newFRExtension
{
  public Report__c newFr;

  public newFRExtension(ApexPages.StandardController controller) {}

  public Report__c getNewFR()
  {
    if (newFR == Null)
      newFR = new Report__c();
    return newFR;
  }

  public pageReference saveFR()
  {
    try
    {
      if (newFR.Id == null)
      {
        Insert newFR;

      }
      else
        update newFR;

      pageReference newActionItem = new pageReference('/apex/FRView?id=' + newFR.id);
      newActionItem.setRedirect(true);
      return newActionItem;
    }
    catch (DMLException ex)
    {
      ApexPages.Message msg = new ApexPages.Message(Apexpages.Severity.ERROR, ex.getdmlMessage(0));
      ApexPages.addMessage(msg);
      return null;
    }

  }

  public pageReference cancelFR()
  {
    if (newFR.Id != null)
      delete newFR;
    pageReference cancelFR = new pageReference('/a1D/o');
    return cancelFR;
  }

  public void updateManager()
  {
    if (newFr.Employee_vod__c != null)
      newFr.Manager_vod__c = [Select u.Name, u.ManagerId, u.Id From User u where u.Id =  : newFr.Employee_vod__c].ManagerId;
  }
  public void autosave()
  {
    if (newFR.Id == null)
      Insert newFR;
    else
      update newFR;

  }
}
ベストアンサー

短い答え

即時に無効にし、検証ルールを調整または無効にする必要があります。

説明

両方の問題は、アクション関数の immediate = true
パラメータに関連しています。このパラメータは、(1)ゲッター/セッター、(2)フロントエンドの検証を実行せずに、アクション関数をすぐに実行させます。

(1)の場合、ゲッタとセッタは実行されていないので、フィールドの変更はコントローラに戻されません。したがって、保存しているレコードには新しい入力は含まれません。

(2)では、フロントエンド検証、特にVisualforceページで必須と指定したフィールドをバイパスするだけです。検証ルールは何に関係なく常に実行され、それらを無効にすることはできません。それを無効にするか、新しいレコードに適用されないように調整する必要があります。

コメントする

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