2016-06-19 21 views
3

Dynamics CRM 2013では、ビジネスプロセスエラーが発生したときにフォーム上で変更されたフィールドを元に戻すことができますか?例外が発生したときにフォームを元に戻す

For example: 
1. User changes a text field on a form from 'abc' to 'xyz' 
2. User clicks save 
3. CRM pre-operation plugin validates field, 'xyz' not allowed, exception thrown 
4. CRM displays business process error to user, 'xyz' is not allowed 
5. The value 'xyz' is still shown in the form 

は、私たちが望む希望の動作は、ステップ5.あなたが最初のデータをキャッシュする必要があります

+0

プラグインがエラーをスローすると、値が保存されないため自動的に元の値に戻ります カスタムエンティティかデフォルトエンティティかどうかを教えてください。 –

答えて

2

に「ABC」に戻す「XYZ」です。あなたはこのOnLoadを行うことができます。エンティティの属性値を記憶することによって:

function GetInitialAttributeState() { 
    var preImage = {}; 

    Xrm.Page.data.entity.attributes.forEach(function(field) { 
     // TODO: for lookup attributes you need to do extra work in order to avoid making merely a copy of an object reference. 
     preImage[field.getName()] = field.getValue(); 
    }); 

    return preImage; 
} 

window.preImage = GetInitialAttributeState(); 

は、その後、あなたはXrm.Page.data.save方法で保存操作を実行する必要があります。コールバック関数を渡してエラーを処理し、フィールドをリセットします。

Xrm.Page.data.save().then(
    function() { 
     /* Handle success here. */ 
     window.preImage = getInitialAttributeState(); 
    }, 
    function() { 
     /* Handle errors here. */ 
     Xrm.Page.data.entity.attributes.forEach(function(field) { 
     if (field.getIsDirty()) { 
      field.setValue(preImage[field.getName()]); 
     } 
     }); 
    }); 

それは決してそれの後に、実際の保存操作の前で蹴るので、saveイベントを使用してこのようフォームのフィールドをリセットすることはできません。

0

なぜユーザーがレコードを保存させるのですか?

ビジネスルーエルを使用してフィールドを検証し、「好き」でない値のフィールドに対してエラー条件を設定することができます。エラー状態は持続し、値を変更するまでレコードを保存できなくなります。エラーメッセージは、なぜそれらの値が有効でないのかに関するいくつかの説明を与えることができます。

明らかに、ビジネスルールで実行できる検証は限られていますが、あなたの例では「xyz」を「悪い」値としてどのような基準で一致させるのか明確にはなりません。

+0

この例は、問題の単純化です。つまり、上記のヘンクの答えはまさに私が必要としていたものでした。 – user329847

関連する問題