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.




Listenansicht + 1 Extra-Spalte

Dieser Beitrag hat 10 Antworten

Ohne Rang
242 Beiträge
Peter Oswald erstellt 4 Sept. 2013 10:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

ich frage mich gerade, wie man folgende Anforderung am besten umsetzt:

  • zu einer Standard-Listenansicht soll eine zusätzliche, berechnete Spalte hinzugefügt werden, deren Berechnung allerdings nicht über eine calculated column umgesetzt werden kann.

Bzgl. Entwicklungstools ist von SPD bis Visual Studio alles vorhanden.

Nun möchte ich extra wegen einer einzigen Besondersspalte kein Visuelles Webpart bauen. Wie erreiche ich es, dass ich eine Standard-Listenansicht benutzen kein (und so auch keine Filter- oder Sortierfunktion verliere) und trotzdem eine zusätzliche Spalte einprogrammieren kann?

Klonen einer ListView à la http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spview.clone.aspx ?

VG

P.

Alle Antworten

Ohne Rang
391 Beiträge
Frank Daske Als Antwort am 4 Sept. 2013 11:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Peter,

vielleicht in einem List Workflow oder Event berechnen und den Wert setzen? Custom Columns kann ich nicht wirklich empfehlen, da dies andere Einschränkungen nach sich zieht.

MfG, Frank

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 4 Sept. 2013 13:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Öffne die Ansicht in SharePoint Designer und editiere dort das zugrundeliegende XSL. Du kannst z.B. einfach eine zusätzliche Spalte einfügen, die Du bisher nicht verwendet hast. Dann auf einen Wert dieser Spalte klicken und in die Codeansicht umschalten. Du landest an der passenden Stelle im XSL und kannst es nach Belieben verändern. Per XSL kann man sehr viel mehr erreichen, als in einer berechneten Spalte.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 4 Sept. 2013 14:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"] und kannst es nach Belieben verändern[/quote]

ok, aber leider ich keinen Plan wie ich in dem xsl-Gewusel irgendetwas berechnen können könnte....!?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 4 Sept. 2013 15:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das setzt natürlich mindestens Grundkenntnisse in XSL voraus ;-)

Was hast Du denn vor? Vielleicht kann ich es aus der Ferne erklären...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 4 Sept. 2013 16:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nun, was ich vor habe, steht ja bereits oben. Es würde mir sicher schon weiterhelfen, wenn ich nur den Weg gezeigt bekomme, wie man in xsl arithmetische Operationen durchführen kann, nach dem Motto: "nehme das Feld xy und addiere etwas dazu und teile es durch x" oder ähnliches.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 4 Sept. 2013 16:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Mit @Fieldname kommst Du i.d.R. an den Wert eines Feldes. Als Fieldname mußt Du dabei immer den internen Namen verwenden, nicht den sichtbaren. Also z.B. @Title wenn Du das Titelfeld möchtest. Den internen Namen siehst Du, wenn Du z.B. in den Listeneinstellungen auf eine Spalte klickst. In der Adresszeile des Browsers steht dann &Field=Title. Achtung: Groß-/Kleinschreibung ist zu beachten.

Mit diesen Werten kannst Du jetzt "ganz normal" rechnen, also z.B. (@Field1 + @Field2) * @Field3. Plus, Minus und Mal also mit den gewohnten Zeichen. Zum Dividieren mußt Du aber div verwenden, weil der Schrägstrich eine besondere Bedeutung hat. Falls @Field1 + @Field2 nicht wie erwartet funktioniert, sondern der Inhalt als Zeichenketten aneinandergehängt wird (3+4 ergibt also 34 statt 7), dann machei ein number() drumrum. Also number(@Field1)+number(@Field2).

Wenn Du eine Ausgabe erzeugen möchtest, kannst Du das mit <xsl:value-of select="<Hier die Formel>" /> erreichen. Du kannst auch Variablen verwenden: <xsl:variable name="Var"><xsl:value-of select="..." /></xsl:variable> und sie später über $Var wieder ansprechen.

Das war jetzt aber genug XSL-Grundkurs. Ich hoffe, Du kommst damit weiter.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 5 Sept. 2013 09:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

vielen Dank für den Grundkurs ;-) So in etwa weiß ich jetzt etwas mehr, auch zusammen mit http://www.w3schools.com/xsl/default.asp, sowie dem XPath-Tutorial.

Allerdings, wenn ich in meiner Standard-Ansicht im SPD den xsl-Code anschaue, sieht das wesentlich komplizierter aus mit

<xsl:stylesheet...

<xsl:template...

und nach 50 Zeilen finde ich dann

      <xsl:apply-templates select="." mode="PrintFieldWithECB">
        <xsl:with-param name="thisNode" select="$thisNode"/>
      </xsl:apply-templates>

was scheinbar relevant für die Anzeige ist. Allerdings manipulieren kann ich da formelmäßig nix. Meine stümperhaften Versuche machen die Ansicht gleich kaputt. Da muss ich wohl noch mehr recherchieren bis ich so etwas wie "<xsl:value-of select="..." " einbauen kann ;-)

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Sept. 2013 10:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da hast Du einfach noch nicht die richtige Stelle gefunden. Ich gebe aber zu, daß das nicht immer ganz einfach ist. Du kannst aber immer versuchen in der Designansicht etwas zu markieren und dann in die Codeansicht umschalten. Dort ist dann das zugehörige XSL markiert. Man muß es evtl. mehrmals versuchen...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 5 Sept. 2013 11:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]Da hast Du einfach noch nicht die richtige Stelle gefunden.[/quote]

Das denke ich nicht, denn die Ausgabe des Wertes bezieht sich eindeutig auf den <td>-Tag der Ausgabe-Tabelle:

<xsl:template name="FieldRef_printTableCell_EcbAllowed.MeinFeld" match="FieldRef[@Name='MeinFeld']" mode="printTableCellEcbAllowed"
     ddwrt:dvt_mode="body" ddwrt:ghost="" xmlns:ddwrt2="urn:frontpage:internal">
   <xsl:param name="thisNode" select="."/>
   <xsl:param name="class" />
<td style="width: 92px">
  <xsl:apply-templates select="." mode="PrintFieldWithECB">
 <xsl:with-param name="thisNode" select="$thisNode"/>
  </xsl:apply-templates>
</td>
</xsl:template>

Und das mit dem Mehrmalsprobieren ist ja auch lustig. Mache ich eine Änderung im SPD, speichere sie ab und aktualisiere danach den Browser, wird zuerst ein Webpart-Fehler angezeigt. Nach erneuter Aktualisierung erscheint die View aber wieder. Nun gut, egal, muss man halt ein paar Mal herumklickern. Aber eine Lösung für die manipulierte Ausgabe habe ich leider noch nicht :-/.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 5 Sept. 2013 11:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nö, das ist noch nicht die Stelle, an der die eigentliche Ausgabe erzeugt wird. Das Standard-XSL ist leider ziemlich komplex und verschachtelt. Durch das <xsl:apply-templates> wird ein anderes Template aufgerufen und das erzeugt dann die Ausgabe. Ich kann Dir aber auch nicht sagen, wie Du es finden kannst (außer dem Tip von oben).

Viele Grüße
Andi
af @ evocom de
Blog