none
SharePoint-Abfrage RRS feed

  • Frage

  • Hallo,

    ich möchte gerne in Visual Studio 2015 den Kalender im SharePoint auslesen. SharePoint ist bei uns auf dem Server installiert und diverse dlls sind schon eingebunden (sie lagen auf dem Server, auf dem auch SharePoint installiert ist).

    Beim Ausführen des Codes wird mir die folgende Fehlermeldung angezeigt:

    • An unhandled exception of type 'System.IO.FileNotFoundException' occurred in System.Windows.Forms.dll

      Additional information: Die Datei oder Assembly "Microsoft.SharePoint.Library, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

    Anscheinend fehlt doch noch eine dll?! Aber wo liegt sie? In "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI" liegt sie nicht. In "C:\Windows\assembly\GAC_MSIL" auch nicht.

    Kann mir jemand eine Lösung sagen oder zumindest erklären, was die Fehlermeldung meint?

    Der dazugehörige Code:

     private void button1_Click(object sender, EventArgs e)
            {
                synchronousClick();
    
                SPSite site = new SPSite("http://intranet/sitepages/kalender.aspx");
                {
                    SPWeb web = SPContext.Current.Web;
    
                    SPPropertyBag props = web.Properties;
                    foreach (DictionaryEntry de in props)
                    {
                        Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
                    }
    
                }
    Schon in die Methode synchronous() geht er nicht hinein. Davor wird schon der Fehlöer ausgelöst.


    • Bearbeitet YK18 Mittwoch, 31. Januar 2018 09:31
    Mittwoch, 31. Januar 2018 09:24

Antworten

  • Das ist eigentlich nicht mein Ziel.

    Generell habe ich das Gefühl, dass man eine SharePoint Seite auf viele Wege erreichen kann, nur habe ich wohl mehrere Ansätze nicht ganz fertig gemacht. :/

    Hi,
    etwas nebulös Deine Aufgabenstellung - die solltest Du erst einmal konkretisieren. 

    Hier mal eine Windows Forms Demo:

    using System;
    using System.Net;
    using System.Windows.Forms;
    using sp = Microsoft.SharePoint.Client; // Nuget Package Microsoft.SharePoint.Client + Runtime
    
    namespace WindowsFormsApp1
    {
      public partial class Form21 : Form
      {
        public Form21()
        {
          InitializeComponent();
        }
    
        Button btn1 = new Button() { Text = "Daten laden", Dock = DockStyle.Top };
    
        private void Form21_Load(object sender, EventArgs e)
        {
          this.Controls.Add(btn1);
          btn1.Click += Btn1_Click;
        }
    
        private void Btn1_Click(object sender, EventArgs e)
        {
          try
          {
            using (sp.ClientContext ctx = new sp.ClientContext(Properties.Settings.Default.siteUrl))
            {
              ctx.Credentials= new NetworkCredential(Properties.Settings.Default.user,
                Properties.Settings.Default.password, Properties.Settings.Default.domain);
              sp.ListCollection collList = ctx.Web.Lists;
              ctx.Load(collList);
              ctx.ExecuteQuery();
              string res = string.Empty;
              foreach (var item in collList)
              {
                res += item.Title + Environment.NewLine;
              }
              MessageBox.Show(res);
            }
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.ToString());
          }
        }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 31. Januar 2018 11:22
  • Hi,
    Du musst die Daten laden, um sie dann zu verarbeiten, wenigsten die Eigenschaften, die Du benötigst. Die 86 ist vermutlich die Zahl der Eigenschaften der Liste resp. Kalender. Hier mal eine Demo, wie man das machen kann:

     using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Windows.Forms;
    using sp = Microsoft.SharePoint.Client; // Nuget Package Microsoft.SharePoint.Client + Runtime
    
    namespace WindowsFormsApp1
    {
      public partial class Form21 : Form
      {
        public Form21()
        {
          InitializeComponent();
        }
    
        Button btn3 = new Button() { Text = "Daten laden", Dock = DockStyle.Top };
        DataGridView dgv = new DataGridView() { Dock = DockStyle.Fill };
    
        private void Form21_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { dgv, btn3});
          btn3.Click += Btn3_Click;
        }
    
        private void Btn3_Click(object sender, EventArgs e)
        {
          try
          {
            List<Form21Data> Terminliste = new List<Form21Data>();
            using (sp.ClientContext ctx = new sp.ClientContext(Properties.Settings.Default.siteUrl))
            {
              ctx.Credentials = new NetworkCredential(Properties.Settings.Default.user, Properties.Settings.Default.password);
              sp.List liste = ctx.Web.Lists.GetByTitle("Kalender");
              ctx.Load(liste);
              sp.CamlQuery q = sp.CamlQuery.CreateAllItemsQuery();
              sp.ListItemCollection listItems = liste.GetItems(q);
              ctx.Load(listItems);
              ctx.ExecuteQuery();
              foreach (sp.ListItem item in listItems)
              {
                Terminliste.Add(new Form21Data()
                {
                  Betreff = item.FieldValues["Title"].ToString(),
                  StartDatum = (DateTime)item.FieldValues["EventDate"],
                  EndDatum = (DateTime)item.FieldValues["EndDate"],
                  ErstelltVon= (item.FieldValues["Author"] as sp.FieldUserValue).LookupValue.ToString()
                });
              }
              dgv.DataSource = Terminliste;
            }
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.ToString());
          }
        }
    
      }
      public class Form21Data
      {
        public string Betreff { get; set; }
        public DateTime StartDatum { get; set; }
        public DateTime EndDatum { get; set; }
        public string ErstelltVon { get; set; }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Donnerstag, 15. Februar 2018 14:55
  • Hi,
    Deim CAML sollte funktionieren. Mein vorheriges Beispiel jedenfalls klappt so:

          try
          {
            List<Form21Data> Terminliste = new List<Form21Data>();
            using (sp.ClientContext ctx = new sp.ClientContext(Properties.Settings.Default.siteUrl))
            {
              ctx.Credentials = new NetworkCredential(Properties.Settings.Default.user, Properties.Settings.Default.password);
              sp.List liste = ctx.Web.Lists.GetByTitle("Kalender");
              ctx.Load(liste);
              XElement caml = XElement.Parse(
    @"<View>
      <ViewFields>
        <FieldRef Name='ID'/>
        <FieldRef Name='Title'/>
        <FieldRef Name='EventDate'/>
        <FieldRef Name='EndDate'/>
        <FieldRef Name='Author'/>
      </ViewFields>
    </View>");
              sp.CamlQuery q = new sp.CamlQuery();
              q.ViewXml = caml.ToString(); sp.ListItemCollection listItems = liste.GetItems(q); ctx.Load(listItems); ctx.ExecuteQuery(); foreach (sp.ListItem item in listItems) { Terminliste.Add(new Form21Data() { Betreff = item.FieldValues["Title"].ToString(), StartDatum = (DateTime)item.FieldValues["EventDate"], EndDatum = (DateTime)item.FieldValues["EndDate"], ErstelltVon = (item.FieldValues["Author"] as sp.FieldUserValue).LookupValue.ToString() }); } dgv.DataSource = Terminliste; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Donnerstag, 15. Februar 2018 18:07

Alle Antworten

  • Eine kleine Veränderung:

    Kommentiere ich den Code aus, geht er in die synchronousClick() hinein... O.o Naja gut... Wieso auch immer.

    Jetzt wird mir gesagt, dass die Webseite (mit der angegebenen URL) nicht existiert. Gebe ich DIESE URL aber im Browser ein, komme ich auf die gewüschte SharePoint Seite.

    Wieso?

    Mein Code:

    ClientContext clientContext = new ClientContext("http://intranet/sitepages/kalender.aspx");
     ListCollection collList = clientContext.Web.Lists;
    
     clientContext.Load(collList,
                    lists => lists.Where(
                        list => list.Hidden == false).Include(
                        list => list.Title));
    
                clientContext.ExecuteQuery();
    
                foreach (SP.List oList in clientContext.Web.Lists)
                {
                    string listTitle = oList.Title;
                    Console.WriteLine("List {0} returned with {1} items", listTitle);
                }
    

    Der Fehler tritt bei "clientContext.ExecuteQuery(); " auf.

    Hilfe...

    Mittwoch, 31. Januar 2018 09:43
  • Hi,
    das SPSite-Objekt und auch der ClientContext arbeitet mit der Websitesammling und nicht mit einem WebForm aus einer Bibliothek.

    Dein erster Code-Auszug bezieht sich auf eine Farmlösung (wsp). Dort steht nach den Request das statische SPContext bereit.

    Der zweite Code-Auszug bezieht sich auf eine C#-Client-Lösung außerhalb des SharePoint, z.B. in einer einfachen Konsolenanwendung.

    Entscheide Dich bitte mit Deiner Frage, was Du genau mit welcher Technologie erreichen willst.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 31. Januar 2018 10:02
  • hallo,

    danke für die Antwort. :) Also müsste ich bezogen auf den ersten Codeabschnitt eine WSP-Datei erstellen?

    Das ist eigentlich nicht mein Ziel.

    Generell habe ich das Gefühl, dass man eine SharePoint Seite auf viele Wege erreichen kann, nur habe ich wohl mehrere Ansätze nicht ganz fertig gemacht. :/

    Demnach wäre mir die Technologie des zweiten Codeabschnittes lieber. Ich möchte zwar eine WinForms Anwendung schreiben, aber dies ist ja ähnlich einer Konsolenanwendung. Dabei ist nur das Problem, dass der Compiler die URL nicht erkennt. :/

    Mittwoch, 31. Januar 2018 10:18
  • Das ist eigentlich nicht mein Ziel.

    Generell habe ich das Gefühl, dass man eine SharePoint Seite auf viele Wege erreichen kann, nur habe ich wohl mehrere Ansätze nicht ganz fertig gemacht. :/

    Hi,
    etwas nebulös Deine Aufgabenstellung - die solltest Du erst einmal konkretisieren. 

    Hier mal eine Windows Forms Demo:

    using System;
    using System.Net;
    using System.Windows.Forms;
    using sp = Microsoft.SharePoint.Client; // Nuget Package Microsoft.SharePoint.Client + Runtime
    
    namespace WindowsFormsApp1
    {
      public partial class Form21 : Form
      {
        public Form21()
        {
          InitializeComponent();
        }
    
        Button btn1 = new Button() { Text = "Daten laden", Dock = DockStyle.Top };
    
        private void Form21_Load(object sender, EventArgs e)
        {
          this.Controls.Add(btn1);
          btn1.Click += Btn1_Click;
        }
    
        private void Btn1_Click(object sender, EventArgs e)
        {
          try
          {
            using (sp.ClientContext ctx = new sp.ClientContext(Properties.Settings.Default.siteUrl))
            {
              ctx.Credentials= new NetworkCredential(Properties.Settings.Default.user,
                Properties.Settings.Default.password, Properties.Settings.Default.domain);
              sp.ListCollection collList = ctx.Web.Lists;
              ctx.Load(collList);
              ctx.ExecuteQuery();
              string res = string.Empty;
              foreach (var item in collList)
              {
                res += item.Title + Environment.NewLine;
              }
              MessageBox.Show(res);
            }
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.ToString());
          }
        }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 31. Januar 2018 11:22
  • Hallo Peter Fleischer,

    wow, dankeschön! :) Ich habe es mal ausprobiert. Dazu musste ich allerdings

      ctx.Credentials= new NetworkCredential(Properties.Settings.Default.user,
                Properties.Settings.Default.password, Properties.Settings.Default.domain);

    herausnehmen und auch "siteUrl" anpassen, da diese bei mir Fehler angezeigen. Was bedeuten diese Zeilen genau?

    Weil wenn ich die beiden Zeilen auskommentiere und meine URL "in den ClientContext" schreibe, kommt wieder die Fehlermeldung...: System.Net.WebException. Die Verbindung mit dem Remoteserver kann nicht hergestellt werden ---> System.Net.SocketException.

    Dankeschön nochmal/schonmal im Voraus! :)

    Mittwoch, 31. Januar 2018 14:32
  • Noch ein Zusatz:

    Gebe ich eine andere URL an (mit dem Port oder Ähnliches), kommt entweder "Fehler 500, der Remoteserver hat einen Fehler zurückgegeben", "System.UriFormatException: Ungültiger URI" oder "Kann Webseite nicht kontaktieren. Es existiert keine Webseite mit solch einem Namen.".

    Mittwoch, 31. Januar 2018 14:49
  • Hi,
    aus den Projekteinstellungen werden die Angaben siteUrl (URL der SharePoint SiteCollection), user (Anmeldename), password (Anmeldekennwort) geholt. Auf die Credentials kannst Du verzichten, wenn SSO (single sign on) eingestellt ist. 

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 31. Januar 2018 17:47
  • Hi,
    Du musst schon die genaue URL der SharePoint SiteCollection angeben und, wenn Du ohne SSO zugreifst, dann auch die Anmeldedaten.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 31. Januar 2018 17:48
  • Hallo,

    entschuldige, dass ich erst jetzt antworte, aber ich war im Urlaub.

    Also ich habe nun ohne Fehlermeldung Zugriff auf SharePoint. :) Mir werden die einzelnen "Überpunkte" in der MessageBox angezeigt. :)

    Nur werden mir die Überschriften VON DER HAUPSEITE angezeigt, jedoch NICHT von der spezifischen Kalender-Seite. Ich habe aber die URL von der Kalenderseite angegeben und wenn ich diese im Browser eingebe, komme ich auch auf diese Kalender-Seite... :/

    Donnerstag, 15. Februar 2018 08:30
  • Ich dachte daran einen Titel/eine Überschrift aus dieser MessageBox zu filtern und davon dann die Elemente/Eigenschaften etc. anzeigen zu lassen. Dabei dachte ich an die Methode "GetByTitle". Allerdings wird der übergebene Titel von mir nicht erkannt. Als ob die angezeigten Elemente in der MessageBox KEINE Titel seien... :(

     ctx.Load(collList, w => w.GetByTitle("Listenvorlagenkatalog"));

    ctx ist 'sp.ClientContext ctx = new sp.ClientContext(siteUrl)'.

    Donnerstag, 15. Februar 2018 09:53
  • Hi,
    greifst Du auch das richtig Web zu? Ich vermute, Du hast Dir nicht das gewünschte SubWeb geholt und darin gesucht hast. Zeig mal Deine Web-Struktur in der Websitesammlung und wie Du auf die Liste zugreifst.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks



    Donnerstag, 15. Februar 2018 10:28
  • Hallo,

    so greife ich auf die ListeN (!) zu:

     string siteUrl = "URL"; // Verbindung zwischen Client und Share Point Server.
                    using (sp.ClientContext ctx = new sp.ClientContext(siteUrl))
                    {
                       
                        sp.ListCollection collList = ctx.Web.Lists;
    
    
    
                        ctx.Load(collList, w => w.Where(a => a.Hidden == false).Include(b => b.Title));
                        //ctx.Load(collList);
                        ctx.ExecuteQuery();
                        string res = string.Empty;
    
                        int itemCount = 0;
                        foreach (var item in collList)
                        {
                            res += item.Title + Environment.NewLine;
                            itemCount++;
    
                            if(item.Title.Equals("Kalender"))
                            {
                                var k = item.Context.ToString();     
                                MessageBox.Show(k.ToString());
                                break;
                            }
                        }
                        MessageBox.Show(res + "\nAnzahl der Items:  " + itemCount);
                    }
    Den Titel "Kalender" scheint es wohl doch zu geben, allerdings kann ich nicht in die Inhalte schauen. Und genau das ist ja mein Ziel... Führe ich das aus, kommt in der MessageBox nur "Microsoft.SharePoint.Client.ClientContext".

    Donnerstag, 15. Februar 2018 11:06
  • Hi,
    mit item.Context holst Du Dir das die Context-Eigenschaft, in der ein Verweis auf das Context-Objekt steht. Die ToString-Methode liefert dann die Namensraum.Klassenname. Also alles ok.

    Kannst Du mal etwas genauer beschreiben, welche Details Du holen willst? Um auf die Kalendereinträge zuzugreifen, musst Du diese auch laden:

                if (item.Title.Equals("Kalender"))
                {
                  sp.CamlQuery q = sp.CamlQuery.CreateAllItemsQuery();
                  sp.ListItemCollection listItems = item.GetItems(q);
                  ctx.Load(listItems);
                  ctx.ExecuteQuery();
                  var k = listItems.Count;
                  MessageBox.Show(k.ToString());
                  break;
                }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 15. Februar 2018 13:07
  • Hey,

    bezüglich der Details:

    Ich benötige die Namen der User, die in dem Kalender ihre Urlaubszeiträume eingetragen haben. D. h. auch, dass ich die Daten holen muss, wann die einzelnen User Urlaub haben. Kurz gesagt: Ich benötige alles, was in dem Kalender eingetragen wurde.

    Zum Code:

    inwiefern lädt das die Daten? :/ Weil wenn ich statt "item.Context" "item.Fields" verwende, kann ich per Debugging verschiedene Inhalte der Kalenderseite sehen. Allerdings kann ich darauf irgendwie nicht zugreifen. :( Ich weiß aber auch nicht, ob das die richtigen Daten sind, denn ich sehe dort keine Namen etc. Außerdem sind das "nur" 86 Elemente.

    Bei Deinem/Ihren Code sind es über 2000 wenn ich k ausgeben lasse.

    Donnerstag, 15. Februar 2018 14:12
  • Hi,
    Du musst die Daten laden, um sie dann zu verarbeiten, wenigsten die Eigenschaften, die Du benötigst. Die 86 ist vermutlich die Zahl der Eigenschaften der Liste resp. Kalender. Hier mal eine Demo, wie man das machen kann:

     using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Windows.Forms;
    using sp = Microsoft.SharePoint.Client; // Nuget Package Microsoft.SharePoint.Client + Runtime
    
    namespace WindowsFormsApp1
    {
      public partial class Form21 : Form
      {
        public Form21()
        {
          InitializeComponent();
        }
    
        Button btn3 = new Button() { Text = "Daten laden", Dock = DockStyle.Top };
        DataGridView dgv = new DataGridView() { Dock = DockStyle.Fill };
    
        private void Form21_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { dgv, btn3});
          btn3.Click += Btn3_Click;
        }
    
        private void Btn3_Click(object sender, EventArgs e)
        {
          try
          {
            List<Form21Data> Terminliste = new List<Form21Data>();
            using (sp.ClientContext ctx = new sp.ClientContext(Properties.Settings.Default.siteUrl))
            {
              ctx.Credentials = new NetworkCredential(Properties.Settings.Default.user, Properties.Settings.Default.password);
              sp.List liste = ctx.Web.Lists.GetByTitle("Kalender");
              ctx.Load(liste);
              sp.CamlQuery q = sp.CamlQuery.CreateAllItemsQuery();
              sp.ListItemCollection listItems = liste.GetItems(q);
              ctx.Load(listItems);
              ctx.ExecuteQuery();
              foreach (sp.ListItem item in listItems)
              {
                Terminliste.Add(new Form21Data()
                {
                  Betreff = item.FieldValues["Title"].ToString(),
                  StartDatum = (DateTime)item.FieldValues["EventDate"],
                  EndDatum = (DateTime)item.FieldValues["EndDate"],
                  ErstelltVon= (item.FieldValues["Author"] as sp.FieldUserValue).LookupValue.ToString()
                });
              }
              dgv.DataSource = Terminliste;
            }
          }
          catch (Exception ex)
          {
            MessageBox.Show(ex.ToString());
          }
        }
    
      }
      public class Form21Data
      {
        public string Betreff { get; set; }
        public DateTime StartDatum { get; set; }
        public DateTime EndDatum { get; set; }
        public string ErstelltVon { get; set; }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Donnerstag, 15. Februar 2018 14:55
  • Hi,

    sehr vielen Dank! :) Ich habe mir ein paar Sachen herausgepickt und nun funktioniert es! :) Also ich bekomme die richtigen Daten und das auch sortiert. :)

    Ich habe mich ja schon mit den einzelnen Klassen wie zum Beispiel "ClientContext" und "CamlQuery" auseinandersetzen müssen, jedoch verstehe ich die Funktionsweise nicht zu 100%. :/ Ich kenne zum Beispiel Queries (SQL) und vermute, dass CamlQuery so etwas in der Art auch ist, aber warum muss man hier nicht sowas schreiben wie "SELECT Username FROM ..."?

    Also was macht " sp.CamlQuery q = sp.CamlQuery.CreateAllItemsQuery();" genau?

    Gruß

    YK18

    PS: Das mit der extra Klasse für die Einträge ist echt eine gute Idee!



    • Bearbeitet YK18 Donnerstag, 15. Februar 2018 16:07
    Donnerstag, 15. Februar 2018 16:04
  • Hi,
    CAML ist eine sehr spezielle Abfragespreche, die mit SQL Anweisungen nichts gemeinsam hat. CAML ist eine XML-Datei, die vorgeschriebene Tags und eine entsprechende Struktur haben muss. Darin enthalten können sein die abzurufenden Spalte, Bedingungen der abzurufenden Listenelemente, Sortierfolge usw. CreateAllItemsQuery erzeugt eine CAML ohne Filter mit Abruf aller Eigenschaften.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 15. Februar 2018 16:53
  • Ahhaaa! :)

    Die Struktur dieser CamlQueries hat mich nämlich beim Ausprobieren echt gestört!

    camlQuery.ViewXml = "<View><ViewFields><FieldRef Name='ID'/>" +
                        "<FieldRef Name='Title'/><FieldRef Name='Body'/>" +
                        "</ViewFields></View>";

    Egal, was ich als FieldRef hineingeschrieben habe, es wurde immer gesagt, dass mindestens ein Feld nicht richtig installiert sei... O.o Darum habe ich das dann mit den CamlQueries gelassen. Ich hatte nämlich vorher probiert, über so eine Filterung an meine Kalender-Daten heranzukommen.

    Könntest du ein kleines Beispiel geben, wie man eine CamlQuery aufbaut?

    Muss man am Anfang immer "View" schreiben? Wie man merkt weiß ich darüber nicht viel, möchte es aber lernen. :)

    Danke! :)

    Gruß

    YK18



    Donnerstag, 15. Februar 2018 17:04
  • Hi,
    Deim CAML sollte funktionieren. Mein vorheriges Beispiel jedenfalls klappt so:

          try
          {
            List<Form21Data> Terminliste = new List<Form21Data>();
            using (sp.ClientContext ctx = new sp.ClientContext(Properties.Settings.Default.siteUrl))
            {
              ctx.Credentials = new NetworkCredential(Properties.Settings.Default.user, Properties.Settings.Default.password);
              sp.List liste = ctx.Web.Lists.GetByTitle("Kalender");
              ctx.Load(liste);
              XElement caml = XElement.Parse(
    @"<View>
      <ViewFields>
        <FieldRef Name='ID'/>
        <FieldRef Name='Title'/>
        <FieldRef Name='EventDate'/>
        <FieldRef Name='EndDate'/>
        <FieldRef Name='Author'/>
      </ViewFields>
    </View>");
              sp.CamlQuery q = new sp.CamlQuery();
              q.ViewXml = caml.ToString(); sp.ListItemCollection listItems = liste.GetItems(q); ctx.Load(listItems); ctx.ExecuteQuery(); foreach (sp.ListItem item in listItems) { Terminliste.Add(new Form21Data() { Betreff = item.FieldValues["Title"].ToString(), StartDatum = (DateTime)item.FieldValues["EventDate"], EndDatum = (DateTime)item.FieldValues["EndDate"], ErstelltVon = (item.FieldValues["Author"] as sp.FieldUserValue).LookupValue.ToString() }); } dgv.DataSource = Terminliste; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Donnerstag, 15. Februar 2018 18:07
  • Hallo,

    ach so, dafür steht "FieldRef Name". :) Dann bin ich jetzt echt schlauer, was das ganze Thema angeht. :)

    Dankesehr!!!

    Gruß

    YK18

    Montag, 19. Februar 2018 16:18