1)Download the Linqpad @
2)Install SPClient from here
3)Add required dlls And Import namespaces as follows
In Linqpad,Ribbon-->Query-->Queryfeatuters
2)Install SPClient from here
3)Add required dlls And Import namespaces as follows
In Linqpad,Ribbon-->Query-->Queryfeatuters
In Query window (Of Linqpad) ,Select C# Program to execute this source code, when prompted for input enter values as shown in Switch case
(Modify _spUrl variable to your SharePoint online site)
void Main() { while (true) { var result = LINQPad.Util.ReadLine("command:"); switch (result) { case "auth": Office365.Auth(Config.spUrl); break; case "getlists": GetLists(); break; case "getlistitems": GetListItems(); break; case "getschema": GetSchema(); break; case "createpopulatelist": CreatePopulateList(); break; case "odata": OData(); break; } } } class Config { public static string spUrl { get { if(_spUrl == "") _spUrl = Util.ReadLine("spUrl:"); return _spUrl; } set { _spUrl = value; } } private static string _spUrl = "https://swaticloud.sharepoint.com"; } void OData() { var wc = new System.Net.WebClient(); wc.Headers.Add("Cookie", CookieMonster.DoInternetGetCookieEx(Config.spUrl).GetCookieHeader(new Uri(Config.spUrl))); wc.DownloadString(Config.spUrl + "/_vti_bin/listdata.svc").Dump(); } // // via: [Using the SharePoint Foundation 2010 Managed Client Object Model](http://msdn.microsoft.com/en-us/library/ee857094.aspx) static ClientContext GetContext() { var context = new ClientContext(Config.spUrl); context.Credentials = CredentialCache.DefaultCredentials; context.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>(delegate(object sender, WebRequestEventArgs e){ e.WebRequestExecutor.WebRequest.CookieContainer = CookieMonster.DoInternetGetCookieEx(Config.spUrl); }); return context; } void GetLists() { var context = GetContext(); var results = context.LoadQuery(context.Web.Lists.Include(list => list.Title, list => list.Id)); context.ExecuteQuery(); results.ToList().ForEach(x => { x.Title.Dump(); }); } void GetListItems() { var context = GetContext(); var list = context.Web.Lists.GetByTitle("Contact"); var camlQuery = new CamlQuery(); //camlQuery.ViewXml = @"<View><Query><Where><Eq><FieldRef Name='Category'/><Value Type='Text'>Development</Value></Eq></Where></Query><RowLimit>100</RowLimit></View>"; camlQuery.ViewXml = @"<View />"; var listItems = list.GetItems(camlQuery); context.Load(listItems); //context.Load(listItems, items => items.Include( // item => item["Name"] //)); context.ExecuteQuery(); listItems.ToList().ForEach(x => { Console.WriteLine(x["Name"]); }); } void GetSchema() { var context = GetContext(); var list = context.Web.Lists.GetByTitle("Contact"); context.Load(list); var fields = list.Fields; context.Load(fields); context.ExecuteQuery(); fields.ToList().ForEach(f => { var e = XElement.Parse(f.SchemaXml); if((string)e.Attribute("FromBaseType") != "TRUE") { e.Attributes("ID").Remove(); e.Attributes("SourceID").Remove(); e.Attributes("ColName").Remove(); e.Attributes("RowOrdinal").Remove(); e.Attributes("StaticName").Remove(); Console.WriteLine(e); } }); } void CreatePopulateList() { ClientContext clientContext = GetContext(); Web site = clientContext.Web; // Create a list. ListCreationInformation listCreationInfo = new ListCreationInformation(); listCreationInfo.Title = "Client API Test List"; listCreationInfo.TemplateType = (int)ListTemplateType.GenericList; List list = site.Lists.Add(listCreationInfo); // Add fields to the list. Field field1 = list.Fields.AddFieldAsXml(@" <Field Type='Choice' DisplayName='Category' Format='Dropdown'> <Default>Specification</Default> <CHOICES> <CHOICE>Specification</CHOICE> <CHOICE>Development</CHOICE> <CHOICE>Test</CHOICE> <CHOICE>Documentation</CHOICE> </CHOICES> </Field> ", true, AddFieldOptions.DefaultValue); Field field2 = list.Fields.AddFieldAsXml(@" <Field Type='Number' DisplayName='Estimate'/> ", true, AddFieldOptions.DefaultValue); // Add some data. ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation(); ListItem listItem = list.AddItem(itemCreateInfo); listItem["Title"] = "Write specs for user interface."; listItem["Category"] = "Specification"; listItem["Estimate"] = "20"; listItem.Update(); listItem = list.AddItem(itemCreateInfo); listItem["Title"] = "Develop proof-of-concept."; listItem["Category"] = "Development"; listItem["Estimate"] = "42"; listItem.Update(); listItem = list.AddItem(itemCreateInfo); listItem["Title"] = "Write test plan for user interface."; listItem["Category"] = "Test"; listItem["Estimate"] = "16"; listItem.Update(); listItem = list.AddItem(itemCreateInfo); listItem["Title"] = "Validate SharePoint interaction."; listItem["Category"] = "Test"; listItem["Estimate"] = "18"; listItem.Update(); listItem = list.AddItem(itemCreateInfo); listItem["Title"] = "Develop user interface."; listItem["Category"] = "Development"; listItem["Estimate"] = "18"; listItem.Update(); clientContext.ExecuteQuery(); } class Office365 { public static void Auth(string url) { app app = new app(); Thread.Sleep(2000); app.w.Dispatcher.BeginInvoke(new Action(delegate(){ var dp = new System.Windows.Controls.DockPanel { LastChildFill = true }; var wb = new System.Windows.Controls.WebBrowser(); System.Windows.Controls.DockPanel.SetDock(wb, System.Windows.Controls.Dock.Top); dp.Children.Add(wb); app.w.Content = dp; wb.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(delegate(object sender, System.Windows.Navigation.NavigationEventArgs e){ //Console.WriteLine(CookieMonster.DoInternetGetCookieEx(Config.spUrl).GetCookieHeader(new Uri(Config.spUrl))); }); wb.Navigate(url); })); } public class app { public System.Windows.Application a; public System.Windows.Window w; public app() { ThreadStart myThreadDelegate = new ThreadStart(this.Start); Thread myThread = new Thread(myThreadDelegate); myThread.SetApartmentState(ApartmentState.STA); myThread.Start(); } public void Start() { a = new System.Windows.Application(); w = new System.Windows.Navigation.NavigationWindow(); a.MainWindow = w; a.MainWindow.Show(); a.Run(); } } } class CookieMonster { [DllImport("wininet.dll", EntryPoint = "InternetGetCookieExW", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)] static extern bool InternetGetCookieEx([In] string Url, [In] string cookieName, [Out] StringBuilder cookieData, [In, Out] ref uint pchCookieData, uint flags, IntPtr reserved); public static CookieContainer DoInternetGetCookieEx(string url) { var cookies = new CookieContainer(); var cookieData = new StringBuilder(); uint dataSize = 0; uint INTERNET_COOKIE_HTTPONLY = 0x00002000; var hresult1 = InternetGetCookieEx(url, null, cookieData, ref dataSize, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero); cookieData = new StringBuilder((int)dataSize); var hresult2 = InternetGetCookieEx(url, null, cookieData, ref dataSize, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero); //if (!hresult2) // throw new Win32Exception(Marshal.GetLastWin32Error()); if (cookieData.Length > 0) cookies.SetCookies(new Uri(url), cookieData.ToString().Replace(';', ',')); return cookies; } [DllImport("ieframe.dll", SetLastError = true)] public static extern int IEGetProtectedModeCookie([In] [MarshalAsAttribute(UnmanagedType.LPWStr)] string lpszURL, [In] [MarshalAsAttribute(UnmanagedType.LPWStr)] string lpszCookieName, [MarshalAsAttribute(UnmanagedType.LPWStr)] StringBuilder pszCookieData, ref uint pcchCookieData, uint dwFlags ); // HRESULT IEGetProtectedModeCookie(LPCWSTR lpszURL, LPCWSTR lpszCookieName, LPWSTR pszCookieData, DWORD *pcchCookieData, DWORD dwFlags ); public static CookieContainer DoIEGetProtectedModeCookie(string url) { var cookies = new CookieContainer(); var cookieData = new StringBuilder(); uint datasize = 0; uint INTERNET_COOKIE_HTTPONLY = 0x00002000; var hresult1 = IEGetProtectedModeCookie(url, null, cookieData, ref datasize, INTERNET_COOKIE_HTTPONLY); cookieData = new StringBuilder((int)datasize); var hresult2 = IEGetProtectedModeCookie(url, null, cookieData, ref datasize, INTERNET_COOKIE_HTTPONLY); //if (hresult2 != 0) // throw new Win32Exception(Marshal.GetLastWin32Error()); cookieData.Dump(); if (cookieData.Length > 0) cookies.SetCookies(new Uri(url), cookieData.ToString().Replace(';', ',')); return cookies; } }
2 comments:
Thanks for sharing this code. You can read an alternative solution (utilizing Fiddler) in my blog:
http://pholpar.wordpress.com/2013/03/08/accessing-office-365-rest-services-using-linqpad/
Thank you Pholpar !!
Post a Comment