2016-03-21 7 views
1

私はSitecoreでカスタムバリデーターを作成しました。それは正しく実行され、私はそれをデバッグし、それを実行することができます。Sitecoreカスタムバリデーターは、コンテンツエディタで編集されたアイテムを読み込めないのはなぜですか?

BaseValidatorから順に、私のバリデーターをStandardValidatorに拡張しました。私のバリデータで

、私はアイテムを取得:

var item = GetItem(); 

GetItemBaseValidatorからの方法です。私の読書に基づいて、これはアイテムを検証する標準的な方法です。

問題:戻ったアイテムには、コンテンツエディタで編集された値は反映されません。代わりに、単にデータベースからのアイテムであるように見えます(コンテンツエディタに最初に読み込まれたときのように、変更を反映することなく)。

したがって、私は検証できません。コンテンツエディタでエディタが変更された可能性のあるデータを検証するには、その変更を確認する必要があります。アイテムがデータベースにどのように置かれているかを見ることは私には役立ちません。

私はしてもしなくてもよい役立つかもしれないいくつかの拡張デバッグをやった -

私はカーネルを逆コンパイル、およびStandardValidatorBaseValidatorの両方を通って歩きました。

メソッドBaseValidatorは、データベースからアイテムを取得します。しかし、UpdateItemというメソッドを実行すると、コンテンツエディタの入力値が格納された値の上にオーバーレイされるように見えます(したがって、現在エディタに座っているデータを正確に反映するオブジェクトが返されます)。これは明らかに私が望むものです。

ControlToValidateという名前のプロパティが...ある場合は、UpdateItemは何もオーバーレイしないように見えますが、それは決してありません。フィールドバリデータとアイテムバリデータの両方としてこのバリデータを試しました。私は、項目を保存して、フィールドからタブを外すことによってそれを開始しました。私はVisual StudioとブレークポイントをControlToValidateに置いています。一度(不可解)それはFIELD165901047の値を持っていました(これはコンテンツエディタのフィールドIDに対応していました)。それ以外の場合はnullです。

は、これが意味することはUpdateItemが効果的に何もしないということであり、それは現在解決しないデータベースに座っているようアイテムが返されるだけです - 私はコンテンツエディタに入力された値をバリしようとしている前に保存しますデータベースに転送します。

かかわらず、私の調査の(私はUpdateItemを理解すると思うが、私はそれをmisinterpetingかもしれないことを認める、と私は潜在的な逆コンパイル・エラーを考慮していないよ)、私はまだ、この基本的な問題があります。

var item = GetItem(); 

コンテンツエディタから値を返すようなことはありません。それはデータベースから直接アイテムを返しますが、それは私を助けません。私のバリデータ(フィールドタイプのバリデータ)で

+0

は、あなたがこのような何かを試してみましたhttp://blog.building-blocks.com/technical-tips/creating-a-custom-sitecore -field-validator-in-twenty-minutes? –

+0

バリデータはどこに割り当てられましたか?フィールドやテンプレートに? –

+0

@SitecoreClimber私は両方を試しました。テンプレートの場合は、テンプレートの標準値に割り当てました。 – Deane

答えて

0

私が検証するために、フィールドの新しい値を取得するために

var field = this.GetField(); 

を使用しました。フィールドバリデーターの場合も同様です。これはおそらくアイテムバリデータのために少し違うでしょうが、私はアイテムバリデータを書いたことがありません。

BaseValidatorの方法でもあり、Fieldの値を返します。これを目的のフィールドのタイプに直接割り当てることができます。 HtmlField(あなたがこれを行うことができますので、サイトコアは、キャスト演算子を実装しています):

HtmlField htmlField = field; 
関連する問題