2016-03-21 2 views
1

Ich habe einen benutzerdefinierten Validator in Sitecore erstellt. Es wird korrekt ausgeführt, und ich kann es debuggen und durchlaufen.Warum kann mein benutzerdefinierter Validator von Sitecore das Element nicht lesen, da es im Inhalts-Editor bearbeitet wurde?

Ich erweiterte meine Validator von StandardValidator, die wiederum von BaseValidator erstreckt.

In meinem Validator, erhalte ich die Artikel:

var item = GetItem(); 

GetItem ein Verfahren aus BaseValidator ist. Basierend auf meiner Lektüre ist dies die Standardmethode, um den Artikel zu validieren.

Das Problem: das Element, das ich zurückgehe, spiegelt nicht die Werte wider, die im Inhalts-Editor bearbeitet wurden. Stattdessen scheint es einfach das Element aus der Datenbank zu sein (also, wie es aussah, als es zum ersten Mal in den Inhaltseditor geladen wurde, ohne irgendwelche Änderungen widerzuspiegeln, die daran vorgenommen wurden).

So kann ich nicht validieren. Um die Daten zu überprüfen, die ein Editor möglicherweise im Inhalts-Editor geändert hat, muss ich diese Änderungen sehen können. Zu sehen, wie der Artikel gerade in der Datenbank sitzt, hilft mir nicht.

Ich habe einige erweiterte Debugging, die nicht hilfreich sind oder nicht -

ich den Kernel dekompilierten und ging sowohl durch StandardValidator und BaseValidator.

Die GetItem Methode von BaseValidator tut was ich vermute - es erhält das Element aus der Datenbank. Aber dann läuft es durch eine Methode namens UpdateItem, die dazu gedacht ist, die eingegebenen Werte aus dem Inhaltseditor über den gespeicherten Werten zu überlagern (wodurch ein Objekt zurückgegeben wird, das genau die Daten wiedergibt, die gerade im Editor sitzen). Das ist eindeutig was ich will.

Allerdings scheint UpdateItem nur etwas zu überlagern, wenn eine Eigenschaft mit dem Namen ControlToValidate einen Wert hat ... und das tut es nie. Ich habe diesen Validator sowohl als Field Validator als auch als Item Validator ausprobiert. Ich habe es initiiert, indem ich sowohl ein Element gespeichert habe als auch ein Feld ausgeblendet habe. Ich habe einen Haltepunkt in Visual Studio und eine Uhr auf ControlToValidate gesetzt. Einmal (unerklärlicherweise) hatte es einen Wert von FIELD165901047 (was einer Feld-ID im Inhaltseditor entsprach), aber in allen anderen Fällen war es null.

Was dies bedeutet, ist, dass UpdateItem effektiv nichts tut, und das Element wird einfach zurückgegeben, wie es zur Zeit in einer Datenbank sitzt, die nicht hilft - ich versuche Werte in Content Editor vor eingegeben Validator Speichern zur Datenbank.

Unabhängig von meiner Untersuchung (ich glaube, ich verstehe UpdateItem, aber ich zugeben, dass ich es könnte misinterpeting, und ich bin Buchhaltung nicht für mögliche Fehler Dekompilierung), ich habe immer noch dieses grundlegende Problem:

var item = GetItem(); 

Das scheint niemals die Werte aus dem Inhalts-Editor zurückzugeben. Es gibt den Artikel direkt aus der Datenbank zurück, was mir nicht weiterhilft.zu validieren

+0

haben Sie so etwas wie dies versucht http://blog.building-blocks.com/technical-tips/creating-a-custom-sitecore -field-validator-in-zwanzig Minuten? –

+0

Wo haben Sie den Validator zugewiesen? zu einem Feld oder zu einer Vorlage? –

+0

@SitecoreClimber Ich habe beide ausprobiert. Für eine Vorlage habe ich sie den Standardwerten der Vorlage zugewiesen. – Deane

Antwort

0

In meinem Validator (ein Feldtyp-Validator) Ich habe

verwendet
var field = this.GetField(); 

auf den neuen Wert des Feldes zu erhalten. Das gleiche sollte für einen Feldvalidator funktionieren. Es ist wahrscheinlich etwas anders für einen Item-Validator, aber ich habe noch nie einen Item-Validator geschrieben.

Es ist auch eine Methode der BaseValidator und gibt einen Wert des Typs Field zurück. Sie können dies direkt dem Typ des gewünschten Zielfeldes zuweisen, z. HtmlField (Sitecores hat die Casting-Betreiber implementiert, so können Sie dies tun):

HtmlField htmlField = field; 
Verwandte Themen