public static void CreateNewItem(SharepointList list, Dictionary<string, object> item, Action<bool, ICollection<TemplateDataBase>, Exception> callback) { TemplateDataBase tditem = new TemplateDataBase { ListName = list.Name, Data = item }; SharepointEvents.RaisePrepareForSaveAsync(list, tditem, () => { var wslist = CreateListSoapClient(list); Action doCreateItem = () => { SharepointListWrapper wrapper = new SharepointListWrapper(); wrapper.List = list; wrapper.Callback = (success, spList, data) => { if (callback != null) { callback(success, data, wrapper.Exception); } }; wslist.UpdateListItemsCompleted += new EventHandler<UpdateListItemsCompletedEventArgs>(wslist_UpdateListItemsCompleted); var batch = CreateBatch(false); AddBatchMethod(batch, "New", GetFieldValue(list, item, false)); wrapper.Batch = batch; wslist.UpdateListItemsAsync(list.Name, batch, wrapper); }; EnsureSharepointListColumnsCreated(list, (ex) => { if (callback != null) callback(false, null, ex); }, wslist, doCreateItem); }); }
private static void ResetList(SharepointListWrapper wrapper, XElement listElement) { wrapper.Data = new Dictionary<string, TemplateDataBase>(); if (listElement != null) { wrapper.List.ParseColumns(listElement); } wrapper.List.SyncToken = null; wrapper.NeedMoreSync = true; //skip row parsing, we are reseting all the list EndSynchronize(wrapper); }
private static void DownloadListChanges(SharepointListWrapper wrapper) { var wslist = CreateListSoapClient(wrapper.List); XElement viewFields = null; if (wrapper.List.Columns == null) { wslist.GetListCompleted += new EventHandler<GetListCompletedEventArgs>(wslist_GetListCompleted); wslist.GetListAsync(wrapper.List.Name, wrapper); } else { wslist.GetListItemChangesSinceTokenCompleted += new EventHandler<GetListItemChangesSinceTokenCompletedEventArgs>(wslist_GetListItemChangesSinceTokenCompleted); viewFields = new XElement("ViewFields", (from c in wrapper.List.Columns select new XElement("FieldRef", new XAttribute("Name", c.StaticName))).ToArray()); wrapper.LastSyncRows = null; wslist.GetListItemChangesSinceTokenAsync(wrapper.List.Name, null, null, viewFields, null, null, wrapper.List.SyncToken, null, wrapper); } }
private static void EndSynchronize(SharepointListWrapper wrapper) { if (wrapper.NeedMoreSync) { DownloadListChanges(wrapper); return; } wrapper.List.LastSyncTime = DateTime.Now; wrapper.RaiseCallback(true); }
private static void downloadAttachments(SharepointListWrapper wrapper) { while (wrapper.LastSyncRows != null && wrapper.LastSyncRows.Count > 0) { var item = wrapper.LastSyncRows[0]; if (item.ToBeDownloaded == null || item.ToBeDownloaded.Count == 0) { wrapper.LastSyncRows.RemoveAt(0); continue; } break; } TemplateDataBase row = null; if(wrapper.LastSyncRows != null) row = wrapper.LastSyncRows.FirstOrDefault(); if (row == null || row.ToBeDownloaded == null || row.ToBeDownloaded.Count == 0) { EndSynchronize(wrapper); } else { Uri uri = new Uri(row.ToBeDownloaded[0], UriKind.RelativeOrAbsolute); WebClient attachmentDownloader = new WebClient(); attachmentDownloader.OpenReadCompleted += new OpenReadCompletedEventHandler(attachmentDownloader_OpenReadCompleted); if (!uri.IsAbsoluteUri) uri = new Uri(Application.Current.Host.Source, uri); attachmentDownloader.OpenReadAsync(uri, wrapper); } }