Überprüfung von benutzerdefinierten Felddaten
Letzte Änderung: Samstag, 13. März 2010
Gilt für: SharePoint Foundation 2010
Die benutzerdefinierte Feldklasse kann die Datenüberprüfung enthalten. Jeder benutzerdefinierte Feldtyp kann die Überprüfung von der übergeordneten Feldklasse erben, er kann die Überprüfung der übergeordneten Klasse außer Kraft setzen oder sogar die Überprüfung der übergeordneten Klasse als Teil der eigenen Überprüfungslogik aufrufen. Sie geben die benutzerdefinierte Datenüberprüfung und die Verarbeitungslogik vor dem Update für die benutzerdefinierte Feldklasse in einer Außerkraftsetzung der GetValidatedString-Methode an. (Bei der Standardimplementierung wird einfach die ToString-Methode der Wertklasse aufgerufen. Wenn die Feldklasse direkt von SPField erbt oder von einer abgeleiteten Klasse, die selbst nicht die GetValidatedString-Methode außer Kraft setzt, müssen Sie daher GetValidatedString außer Kraft setzen, um bei Bedarf Überprüfungslogik bereitzustellen.)
Durchführen einer Datenüberprüfung
Sie können zwar eine Datenüberprüfung an mehreren Stellen im Code, einschließlich Formularsteuerelementen, durchführen, es wird jedoch dringend empfohlen, dass Sie serverseitige benötigte Datenüberprüfungslogik der GetValidatedString-Methode der benutzerdefinierten Feldklasse hinzufügen. Dadurch wird sichergestellt, dass die erforderliche Datenüberprüfung auf die Daten im Feld und auf die Daten in der Inhaltsdatenbank angewendet wird.
In Fällen, in denen Daten über eine der folgenden Arten aktualisiert werden:
mithilfe des Formularsteuerelements
über die Benutzeroberfläche oder
programmgesteuert über das Objektmodell,
ruft SharePoint Foundation die GetValidatedString-Methode auf, sobald Daten in einer SPField-Klasse oder einer abgeleiteten Klasse gespeichert wird. Beispielsweise ruft SharePoint Foundation die GetValidatedString-Methode auf, wenn ein Feldwert in einem SPListItem-Objekt mithilfe der SPListItem.this["field name"]-Methode festgelegt wird.
Hinweis |
---|
Benutzer können die Daten in einem Feld in einer Art aktualisieren, bei der die GetValidatedString-Methode nicht aufgerufen wird und daher auch keine in der Methode enthaltene Datenüberprüfungslogik aufgerufen wird. Dazu gehört die Verwendung von nicht verwaltetem Code oder von Webdienstmethoden, die das SPListItem-Objekt nicht aufrufen, um die Felddaten zu aktualisieren. Wenn ein Benutzer z. B. mithilfe der Datenblattansicht Listenelementdaten aktualisiert, werden die Listenelemente ohne Aufrufen der GetValidatedString-Methode aktualisiert. |
Mit der GetValidatedString-Methode können Sie darüber hinaus Fehlermeldungen als Zeichenfolgen an die aufrufende Anwendung oder das Formular zurückgeben, sodass Sie Datenüberprüfungsfehler für die Feldklasse ordnungsgemäß anzeigen und behandeln können.
Zum Zurückgeben einer Fehlermeldung sollte die GetValidatedString-Methode eine SPFieldValidationException als Fehler ausgeben. Sie können die entsprechende Fehlermeldung als Zeichenfolgenparameter für den SPFieldValidationException-Konstruktor bereitstellen. Wenn der Benutzer in SharePoint Foundation einen ungültigen Wert in das Formular eingibt und auf OK klickt, wird die Meldung als roter Text neben dem Feld in den Standardformularen Neu und Bearbeiten (Listenelement) angezeigt.
Im folgenden Beispiel wird eine außer Kraft gesetzte Version von GetValidatedString gezeigt, mit der überprüft wird, dass das Feld einen Wert besitzt, wenn es sich um ein Pflichtfeld handelt, und dass die Zeichenfolgenversion des Werts einen angegebenen Grenzwert nicht übersteigt. (Mit der Required-Eigenschaft wird erfasst, ob das Feld erforderlich ist.)
public override String GetValidatedString(Object value)
{
if ((this.Required == true) && (value.ToString() == ""))
{
throw new SPFieldValidationException(this.Title
+ " must have a value.");
}
else if (value.ToString().Length > MAXLENGTH)
{
throw new SPFieldValidationException(this.Title
+ " cannot be longer than " + MAXLENGTH.ToString());
}
return base.GetValidatedString(value);
}
Public Overrides Function GetValidatedString(ByVal value As Object) As String
If (Me.Required = True) AndAlso (value.ToString() = "") Then
Throw New SPFieldValidationException(Me.Title & " must have a value.")
ElseIf value.ToString().Length > MAXLENGTH Then
Throw New SPFieldValidationException(Me.Title & " cannot be longer than " & MAXLENGTH.ToString())
End If
Return MyBase.GetValidatedString(value)
End Function
Überprüfung auf der Benutzeroberfläche
Wenn Benutzer den Wert des Felds auf einer Benutzeroberfläche festlegen anstatt in den Standardformularen Neu oder Bearbeiten (Listenelement), sollten Sie auch Daten überprüfen, die Benutzer in das Benutzeroberflächen-Steuerelement des Felds eingeben. Es wird insbesondere empfohlen, dass diese Anforderung bei einem erforderlichen Feld auf der Ebene der Benutzeroberfläche erzwungen wird. Wenn Sie eine der integrierten SharePoint Foundation-Klassen verwenden, die von BaseFieldControl zum Rendern des Felds abgeleitet werden, dann können Sie auf die interne Überprüfung zum Erzwingen von Required vertrauen. Wenn Sie ein eigenes Steuerelement von BaseFieldControl oder einer abgeleiteten Klasse ableiten und die Methode Validate oder CreateChildControls außer Kraft setzen, dann müssen Sie die Erzwingung von Required und jeder anderen gewünschten Überprüfung auf Ebene der Benutzeroberfläche bereitstellen.
Die Benutzeroberflächen-Überprüfungslogik kann entweder in der Validate-Methode oder der CreateChildControls-Methode oder in einer Kombination der beiden enthalten sein. Das Platzieren der Überprüfungslogik in der CreateChildControls-Methode besitzt den Nachteil, dass die Methode nur aufgerufen wird, wenn das Feld in einem Formular gerendert wird, sodass die Überprüfung nicht auftritt, wenn der Wert im Objektmodell aktualisiert wird.
Eine Außerkraftsetzung der Validate-Methode sollte das Ergebnis melden, indem die IsValid-Eigenschaft auf true oder false festgelegt wird. Und im letzteren Fall sollte dann ErrorMessage auf eine entsprechende Meldung festgelegt sein.
Es folgt ein Beispiel für eine Außerkraftsetzung der Validate-Methode. Es wird zunächst überprüft, ob der aktuelle Steuerelementmodus auf den Anzeigemodus festgelegt ist, wobei es dann keine Rolle spielt, ob das Feld ungültig ist, da es nicht geändert werden kann. Von der Methode wird auch überprüft, ob die Value-Eigenschaft bereits als ungültig bekannt ist, indem die IsValid-Eigenschaft überprüft wird. Falls eine der Überprüfungen True ergibt, wird keine Aktion ausgeführt. Wenn keine der beiden Überprüfungen True ergibt, wird von der Methode die Standardmethode Validate aufgerufen, mit der IsValid auf false festgelegt wird, falls mit der Value-Eigenschaft etwas nicht stimmt. Dann wird ein entsprechender ErrorMessage-Wert festgelegt. (Von der BaseFieldControl.Validate-Methode wird keine Aktion ausgeführt, wenn also die Klasse, deren Validate-Methode außer Kraft gesetzt ist, direkt von BaseFieldControl abgeleitet ist, dann kann der Aufruf der Validate-Standardmethode übersprungen werden.) Schließlich wird von der Methode der Wert von Required überprüft und dieser Wert erzwungen.
public override void Validate()
{
if (ControlMode == SPControlMode.Display || !IsValid)
{
return;
}
base.Validate();
if (Field.Required &&
(Value == null || Value.ToString().Length == 0))
{
this.ErrorMessage = Field.Title + " must have a value."
IsValid = false;
return;
}
}
Public Overrides Sub Validate()
If ControlMode = SPControlMode.Display OrElse (Not IsValid) Then
Return
End If
MyBase.Validate()
If Field.Required AndAlso (Value Is Nothing OrElse Value.ToString().Length = 0) Then
Me.ErrorMessage = Field.Title & " must have a value."
IsValid = False
Return
End If
End Sub
Hinweis |
---|
Verwenden Sie die RenderValidationMessage-Methode zum Rendern von ErrorMessage. |
Siehe auch
Aufgaben
Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Feldtyps