私はSitecoreでカスタムバリデーターを作成しました。それは正しく実行され、私はそれをデバッグし、それを実行することができます。Sitecoreカスタムバリデーターは、コンテンツエディタで編集されたアイテムを読み込めないのはなぜですか?
BaseValidator
から順に、私のバリデーターをStandardValidator
に拡張しました。私のバリデータで
、私はアイテムを取得:
var item = GetItem();
GetItem
はBaseValidator
からの方法です。私の読書に基づいて、これはアイテムを検証する標準的な方法です。
問題:戻ったアイテムには、コンテンツエディタで編集された値は反映されません。代わりに、単にデータベースからのアイテムであるように見えます(コンテンツエディタに最初に読み込まれたときのように、変更を反映することなく)。
したがって、私は検証できません。コンテンツエディタでエディタが変更された可能性のあるデータを検証するには、その変更を確認する必要があります。アイテムがデータベースにどのように置かれているかを見ることは私には役立ちません。
私はしてもしなくてもよい役立つかもしれないいくつかの拡張デバッグをやった -
私はカーネルを逆コンパイル、およびStandardValidator
とBaseValidator
の両方を通って歩きました。
メソッドBaseValidator
は、データベースからアイテムを取得します。しかし、UpdateItem
というメソッドを実行すると、コンテンツエディタの入力値が格納された値の上にオーバーレイされるように見えます(したがって、現在エディタに座っているデータを正確に反映するオブジェクトが返されます)。これは明らかに私が望むものです。
ControlToValidate
という名前のプロパティが...ある場合は、UpdateItem
は何もオーバーレイしないように見えますが、それは決してありません。フィールドバリデータとアイテムバリデータの両方としてこのバリデータを試しました。私は、項目を保存して、フィールドからタブを外すことによってそれを開始しました。私はVisual StudioとブレークポイントをControlToValidate
に置いています。一度(不可解)それはFIELD165901047
の値を持っていました(これはコンテンツエディタのフィールドIDに対応していました)。それ以外の場合はnull
です。
は、これが意味することはUpdateItem
が効果的に何もしないということであり、それは現在解決しないデータベースに座っているようアイテムが返されるだけです - 私はコンテンツエディタに入力された値をバリしようとしている前に保存しますデータベースに転送します。
かかわらず、私の調査の(私はUpdateItem
を理解すると思うが、私はそれをmisinterpetingかもしれないことを認める、と私は潜在的な逆コンパイル・エラーを考慮していないよ)、私はまだ、この基本的な問題があります。
var item = GetItem();
を
コンテンツエディタから値を返すようなことはありません。それはデータベースから直接アイテムを返しますが、それは私を助けません。私のバリデータ(フィールドタイプのバリデータ)で
は、あなたがこのような何かを試してみましたhttp://blog.building-blocks.com/technical-tips/creating-a-custom-sitecore -field-validator-in-twenty-minutes? –
バリデータはどこに割り当てられましたか?フィールドやテンプレートに? –
@SitecoreClimber私は両方を試しました。テンプレートの場合は、テンプレートの標準値に割り当てました。 – Deane