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.




laufende Nummer erzeugen

Geprüfte Antwort Dieser Beitrag hat 15 Antworten

Ohne Rang
113 Beiträge
Igor erstellt 7 Juli 2009 10:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Leute,

 

ich möchte gern eine eindeutige Nummer generieren die wie folgt aussieht:

Ort-Jahr-xxx

Ort und Jahr krieg ich hin..

 

Jetz soll in einer Spalte nach Ort-Jahr gesucht werden und bei dem Eintrag wo xxx(Zahl) am höchsten ist, in eine Variable geschrieben werden, die dann mit 1 erhöht wird.

 

Ich hoffe, ich hab das einigermassen verständlich erklärt!

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Juli 2009 12:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Reicht Dir nicht die ID, die jedes Element sowieso hat? Falls nicht, könntest Du eine separate Liste anlegen und einen Workflow, der für jedes Element in dieser Liste die letzte verwendete Nummer nachschlägt, um eins erhöht und das Ergebnis in die aktuelle Liste schreibt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
113 Beiträge
Igor Als Antwort am 7 Juli 2009 12:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

könnte man, dass nicht etwas eleganter gestallten ohne eine separte Liste?

Ohne Rang
183 Beiträge
Dominik Kovacic-Voß Als Antwort am 7 Juli 2009 13:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

nur wie Andi sagte, mit der ID eines Listenelementes

Ohne Rang
114 Beiträge
heile Als Antwort am 7 Juli 2009 13:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hey Igor,

wenn Du es ganz elegant haben willst dann programmiere Dir einen EventHandler der Dir beim Anlegen eines neuen Elements den gewünschten String zusammenbastelt.

Gruß Stefan :-)

ICQ 109723685

"Wir haben eine Verbesserung im Bereich des Nicht-mehr-Messbaren erzielt."

Ohne Rang
113 Beiträge
Igor Als Antwort am 7 Juli 2009 14:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Genau das will ich ja.. ;-) Ich hab ja die ersten beiden Teile für den String schon.. ich weiß nur nicht wie ich die größte Zahl einer Spalte mittels c# auslesen kann..

Ohne Rang
114 Beiträge
heile Als Antwort am 7 Juli 2009 15:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, jetzt verstehe ich Dein Problem.

In Pseudo-Code würde ich sagen:

Merker-Variable groessteZahl = 0 initialisieren.

Durchlaufe alle Elemente der Liste.
Für jeden Durchlauf
     Lese die Spalte mit der Zahl aus (bei Bedarf Zahl erst aus String rausschneiden und in int umwandeln) und speichere in Variable aktuelleZahl.

     If groessteZahl < aktuelleZahl Then
           groessteZahl = aktuelleZahl
     EndIf

Am Ende nachdem die ganze Liste durchlaufen wurde:
DeinString = DeinString + (groessteZahl+1)

Ist nicht unbedingt super-elegant aber so lange Du damit keine Performance-Probleme bekommst ist es so am einfachsten würde ich sagen.
Das SharePoint-Objektmodell bietet wunderbare Mechanismen, um die Liste zu durchlaufen, aber das kennst Du bestimmt schon. Oder liegt genau da das Problem, wie Du über die Listeneinträge iterieren kannst?

Am besten Du spezifizierst mal möglichst exakt was genau Du tun möchtest bzw. was Du schon hast, dann kann man mit der Hilfestellung genau dort ansetzen.

Gruß Stefan :-)

ICQ 109723685

"Wir haben eine Verbesserung im Bereich des Nicht-mehr-Messbaren erzielt."

Ohne Rang
113 Beiträge
Igor Als Antwort am 7 Juli 2009 15:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Genau das ist mein Problem, ich kenne das Objektmodell nicht. Den Code würde auch so gestallten, mein Problem ist es halt nur der Durchlauf der Liste.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 7 Juli 2009 15:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

SPList list = web.Lists["NameDerListe"];
foreach (SPListItem item in list.Items) {
// hier kannst Du mit den einzelnen Items irgendwas machen
// z.B. string value = item["Feldname"].ToString();
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
113 Beiträge
Igor Als Antwort am 8 Juli 2009 14:38
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andi Fandrich"]

SPList list = web.Lists["NameDerListe"];
foreach (SPListItem item in list.Items) {
// hier kannst Du mit den einzelnen Items irgendwas machen
// z.B. string value = item["Feldname"].ToString();
}

[/quote]

 

 

Wie krieg ich denn aus item die größte Zahl?!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 8 Juli 2009 15:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Igor"]Wie krieg ich denn aus item die größte Zahl?![/quote]

Das hat Stefan weiter oben in Pseudocode erklärt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
113 Beiträge
Igor Als Antwort am 9 Juli 2009 09:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ach na klar, sorry! Da war jetzt ein Denkfehler von mir gewesen. Klappt auch alles wunderbar. Genau so wie ich es mir vorgestallt habe. Vielen Dank für euere Hilfe!!

Ohne Rang
114 Beiträge
heile Als Antwort am 7 Juli 2009 15:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hier noch ein Code-Schnipsel wenn Du mal einen Rundumschlag über eine ganze Site-Collection machen möchtest:

// Wurzel-URL angeben:
string webURI = "https://intranet";
    // Seite verwenden
    using (SPSite logSite = new SPSite(webURI))
    {
        // alle Unterseiten auslesen und durchgehen
        SPWebCollection webCollection = logSite.AllWebs;
        foreach (SPWeb web in logSite.AllWebs)
        {
            // alle Listen durchgehen
            foreach (SPList list in web.Lists)
            {
                // Überprüfen, ob Liste eine Dokumentenbibliothek ist
                if (list.BaseType.ToString().Equals("DocumentLibrary"))
                {
                    // Alle Dokumenten-Elemente durchgehen
                    foreach (SPListItem docBibItem in list.Items)
                    {
                        // Datei-Element erstellen
                        SPFile fileDoc = docBibItem.File;
                        // Link auf Datei erstellen
                        String strLink = web.Url.ToString() + "/" + docBibItem.File.Url.ToString();
                        // Feld auslesen
                        String strFeld = fileDoc.Item.GetFormattedValue("Feldname");

ICQ 109723685

"Wir haben eine Verbesserung im Bereich des Nicht-mehr-Messbaren erzielt."

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 7 Juli 2009 15:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich würde wie weiter oben von Andi geschrieben mit einer weiteren Hidden Liste arbeiten und darauf ein Query setzen wenn die ID von einen bestimmten Typ abhängig ist.

Beispiel:

Typ    |     ID
XYZ   |    1
ABC  |    1
DEF  |    3

Dann kannst du ganz einfach per SPQuery auf die jeweilige ID zugreifen und auch erhöhen.

SPQuery query = new SPQuery();
query.Query = "<Where><Eq><FieldRef Name='Typ' /><Value Type='Text'>XYZ</Value></Eq></Where>";
SPList list = Web.GetList(Web.ServerRelativeUrl.TrimEnd('/')+"/Lists/MyHiddenIdList");
SPListItemCollection coll = list.GetItems(query);

Debug.Assert(coll.Count != 1, "Naja da ist wohl ein Fehler drin!");
SPListItem item = coll[0];
int id = (int)item["ID"]; // nur wenn feld vom typ Integer (nicht mit UI anlegbar!!!)
item["ID"] = id+1;
item.SystemUpdate();

Man muss bei solche Konstrukte aber immer bedenken das nicht garantiert werden kann das ID zu 100% eindeutig ist!!!!!! Dazu benötigt man einen WebService oder sonst was dediziertes bzw. in einer SingleFarm reicht auch ein Singleton IdGenerator der den Listen Zugriff kappselt und mit einer Sperre versieht. (lock)

 

Ohne Rang
113 Beiträge
Igor Als Antwort am 7 Juli 2009 16:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hmm... Da hätte ich noch 2 Frage..

1. Wie lege ich eine Hidden Liste an?

2. Wie erstelle ich ein Feldtypen Integer wenn nicht über UI? Über Stsadmin?

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 7 Juli 2009 16:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Option A: per Code = Objekt Model
Option B: per Feature (z.B. Visual Studio Extensions for SharePoint -> MS download)

SPListCollection.Add (MSDN)
SPList.Fields.Add (MSDN)