SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Frage zu SPField - Anzeige in SPContext.Current.FormContext.FormMode = Invalid

Unbeantwortet Dieser Beitrag hat 6 Antworten

Ohne Rang
58 Beiträge
Rolf Schneider erstellt 9 Feb. 2010 19:09
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich habe ein Custom Field geschrieben (kann von SPField, SPFieldText oder SPFieldLookup erben, mehr habe ich nicht getestet). Die Klasse beinhaltet zwei Konstruktoren und die Readonly-Property "FieldRenderingControl". Letztere wird auch brav in allen Modi ausser Invalid aufgerufen.

FieldRenderingControl gibt ein Control zurück, das von BaseFieldControl geerbt hat. Dort wird in  CreateChildControls die entsprechende Darstellung des Controls behandelt (funktioniert auch alles in den Modi "New" und "Edit").

Ich frage mich, wie ich im Modus "Invalid" den angezeigten Text "verändern" kann. Was funktioniert ist, dass man in der fldtype....xml ein Tag

<RenderPattern Name="DisplayPattern" DisplayName="DisplayPattern">

hinzufügt. Schön und gut, dort kann man dann auch HTML einschleussen um ein IMG- oder A HREF-Tag zu erzeugen. Ich müsste aber die Felddaten nochmal mit Programmcode bearbeiten.

Wie geht sowas? Wo muss ich ansetzen? Welche Möglichkeiten gibt es an dieser Stelle?

Was mich etwas ärgert ist, dass ich in diesem Invalid-Modus (der übrigens bei der Anzeige von Dokumenten in einer Bibliothek genutzt wird) nicht mal die Readonly-Property aus meiner von SPField abgeleiteten Klasse aufgerufen wird. Da kann ich in CreateChildControls machen was ich will, dieses Objekt wird in diesem Modus ja überhaupt nicht instantiiert!

Weiss jemand weiter?

Gruß, Rolf

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 10 Feb. 2010 08:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Basisklasse SPField hat dafür die Methoden GetFieldValueAsHtml bzw. GetFieldValueAsText, die Du überschreiben kannst.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 10 Feb. 2010 11:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Methoden kenne ich. Beim Debuggen sehe ich aber, dass keine einzige davon aufgerufen wird. Habe diese und die weiteren Funktionen bereits überschrieben. Die Rückgabewerte kommen auch nicht bei der Anzeige im Browser an, beim Debuggen scheint also alles "korrekt". Dort steht dann nach wie vor der Wert als SPFieldMultiColumnValue.

Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 10 Feb. 2010 19:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielleicht zum verdeutlichen, was ich anpassen möchte:

Wie man sieht ist der Wert alles andere als "human readable" :)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 11 Feb. 2010 09:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also ich hätte schwören können, daß dafür GetFieldValueAsText herangezogen wird. Vermutlich hast Du da irgendwo ein Durcheinander an Methodenüberschreibungen und RenderPattern.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 11 Feb. 2010 12:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

RenderPattern hab ich jetzt rausgeschmissen. Bringt mir wohl eh nichts, da ich dort kein Code-Behind haben kann und ich das ja für eine Webservice-Anfrage etc. benötige.

Warum ich in SPControlMode.Invalid keinen Aufruf von FieldRenderingControl hinbekomme bleibt mir erst mal ein Rätsel. Ich habe mal im entsprechenden MSDN-Forum gefragt. Wenn was bei rauskommt schreibe ich hier gerne dortige Lösungen.

Wenn euch noch was einfällt: bin für alles offen.

Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 31 Mai 2010 16:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

RenderPattern ist wohl der einzige Weg die Werte eines SPField in der List View einer Document Library zu manipulieren.

Es muss doch einen Weg geben, wie man in der List View komplette Spaltenwerte "nachbearbeiten" kann. Ich kann mir einfach nicht vorstellen, dass keiner dieses Problem kennt...

"Nachbearbeiten" meint in diesem Fall, dass ich in den Metadaten der Datei einen MultiColumn-Wert speichere, ihn aber "human readable" in der List View darstelle.

Kann man im Renderpattern (Dislaypattern) auf Programmcode zugreifen? Irgendwie? Notfalls per JavaScript, das den Spaltenwert als Übergabeparameter bekommt und dann (durch Programmcode verändert) einen String zurückgibt?

Man könnte auch noch eine SubColumn (einer MultiColumn) beim Speichern des Dokuments mit dem entsprechenden Stringwert belegen und nur den in der List View anzeigen. Das ist aber unpraktisch, weil in dem String ein berechnetes Datum enthalten ist. Und das wäre dann erst mal "statisch" festgelegt. Wird das Datum ohne Änderung des Dokuments geändert (Programmlogik), dann wird eben dieser String nicht verändert. Was dann zur unterschiedlichen Darstellung zwischen List View und den restlichen Ansichten führt.