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.




Datei hochladen mit Eigenschaften

Geprüfte Antwort Dieser Beitrag hat 9 Antworten

Ohne Rang
82 Beiträge
Tim K. erstellt 31 Aug. 2010 16:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

ich habe noch ein Problem mit der Adressierung eines Spalteneintrags: sieheFabian's Blog

http://sharepointcommunity.de/blogs/fabianm/archive/2010/05/03/sharepoint-2010-client-objektmodell-erweiterte-anwendungsbeispiele.aspx

            ListItemCollection allItems = list.GetItems(new CamlQuery()
            {
                ViewXml = @" <View>
                                <Query>
                                    <Where>
                                        <Geq>
                                            <FieldRef Name='Kunde'/>
                                            <Value Type='String'>Peter</Value>
                                        </Geq>
                                    </Where>
                                </Query>
                               <RowLimit>100</RowLimit>
                            </View>"
            });

Bin mir sehr sicher, dass es am string liegt, da es z.B. über

<FieldRef Name='Kundennummer'/>

     <Value Type='Integer'>10</Value> problemlos funktioniert -Die Frage lautet daher:

Wie kann ich da nach einem Textwert "Peter" (string) fragen lassen ? ^^ -Anfängerfrage- ^^

Danke !

 

Alle Antworten

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 31 Aug. 2010 16:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

ValueType=Text

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
82 Beiträge
Tim K. Als Antwort am 1 Sept. 2010 07:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Gut Danke :)

Ich möchte letztlich eine Datei hochladen mit gewissen Eigenschaften - dazu dachte ich mir man könnte die Datei normal hochladen und dann den Listeneintrag editieren. Jedoch erscheint mir das ganze etwas lang und kompliziert - geht das eventuell über Microsoft.SharePoint.Client.FileCreationInformation etwas einfacher ? Das klingt ja so ähnlich wie ListItemCreationInformation, mit dem man Listeneinträgen Eigenschaften zuordnet. Leider habe ich dafür kein Beispiel gefunden - kennt sich jemand damit aus ?

 

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
82 Beiträge
Tim K. Als Antwort am 1 Sept. 2010 15:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die meisten Spalteneinträge lassen sich leicht adressieren und bearbeiten, nur den namen der dateien, die ich hochladen möchte, lassen sich einfach nicht ansprechen. Theoretisch müsste es doch so aussehen:

//ich lade die Datei hoch

ClientContext clientContext = new ClientContext("http://meinServer");
            using (FileStream stream = new FileStream(@"C:\test2.txt", FileMode.Open))
            {
                Microsoft.SharePoint.Client.File.SaveBinaryDirect(
                    clientContext,
                    "/test/test4/test2.txt",
                    stream,
                    true);
            }

Stimmt soweit auch - Datei wird im angegebenen Verzeichnis hochgeladen. Nun das Bearbeiten der Eigenschaften:
            Web web = clientContext.Web;
            List list = web.Lists.GetByTitle("test4");
           
            ListItemCollection allItems = list.GetItems(new CamlQuery()
            {
                ViewXml = @" <View>
                                <Query>
                                    <Where>
                                        <Geq>
                                            <FieldRef Name='Title'/>
                                            <Value Type='text'>test2.txt</Value>
                                        </Geq>
                                    </Where>
                                </Query>
                               <RowLimit>100</RowLimit>
                            </View>"
            });

            clientContext.Load(allItems,
            items => items.IncludeWithDefaultProperties(
                i => i["Title"])
            );

            clientContext.ExecuteQuery();

            if (allItems != null && allItems.Count > 0)
            {
                ListItem item = allItems[0];
                item["Kunde"] = "Testkunde";
                item.Update();

                clientContext.ExecuteQuery();

            }

Was passiert: Code läuft ohne fehler durch, Datei wird erstellt, aber der Eintrag in die Spalte "Kunde" fehlt.

Das stimmt irgendwas mit dem Aufrufen des Eintrages nicht - hat jemand eine Idee ?

LG

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 1 Sept. 2010 15:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wird dieser Code überhaupt ausgeführt?
ListItem item = allItems[0];
item["Kunde"] = "Testkunde";
item.Update();

Ich vermute nein. Der Dateiname steht nicht in der Spalte Title. Ich glaube die Spalte heißt FileLeafRef, aber das mußt Du selbst rausfinden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 1 Sept. 2010 15:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

nein, ich lasse mir extra das item in die console schreiben, wenn es vorhanden ist, aber der itemcount hat auch 0 drinne

das FileLeafRef könnte ein guter hinweis sein - probiere ich dann mal aus

Danke

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
82 Beiträge
Tim K. Als Antwort am 2 Sept. 2010 08:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

jetzt läuft es super:

            ClientContext clientContext = new ClientContext("http://meinServer/test");

            List sharedDocumentsList = clientContext.Web.Lists.GetByTitle("test4");
            CamlQuery camlQuery = new CamlQuery();
            camlQuery.ViewXml =
                @"<View>
                <Query>
                  <Where>
                    <Eq>
                      <FieldRef Name='FileLeafRef'/>
                      <Value Type='Text'>testjpg0.jpg</Value>
                    </Eq>
                  </Where>
                  <RowLimit>100</RowLimit>
                </Query>
              </View>";
            ListItemCollection listItems = sharedDocumentsList.GetItems(camlQuery);
            clientContext.Load(sharedDocumentsList);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();


            if (listItems != null && listItems.Count > 0)
            {
                ListItem item = listItems[0];
                Console.WriteLine(item["FileLeafRef"]);
                item["Kunde"] = "Ingo";
                item.Update();

                clientContext.ExecuteQuery();
            }

 

DANKE ! :-)

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
82 Beiträge
Tim K. Als Antwort am 2 Sept. 2010 08:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es wäre jetzt noch interessant zu wissen, wie ich das Item auf der Zeile <Value Type='Text'>testjpg0.jpg</Value> mit einer Variablen definieren kann also:

string targetItemName = "testjpg0.jpg"; und damit dann <Value Type='Text'>targetItemName</Value>

- muss man den Typ als Variable definieren ( <Value Type='variable' ... ) oder so ähnlich?

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 2 Sept. 2010 09:15
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also das sind jetzt aber wirklich simpelste Grundlagen der Programmierung...

Du setzt einen String zusammen und dabei kannst Du natürlich auch Variablen einbauen. Bei <Value Type=""> mußt Du immer den Feldtyp angeben.

string caml = "erster Teil des Strings" + deineVariable + "zweuter Teil des Strings";

Noch schöner ist es, wenn Du dabei string.Format verwendest:
string caml = string.Format("Erster Teil {0} zweiter Teil", deineVariable);

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 2 Sept. 2010 09:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

super, dankeschön ^^

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".