/// <summary> /// Process the request /// </summary> public override void ExecuteCmdlet() { base.ExecuteCmdlet(); siteColumns = new List <SPFieldDefinitionModel>(); try { //Load list var siteUrl = this.ClientContext.Url; var listInSite = this.ClientContext.Web.Lists.GetByTitle(ListTitle); this.ClientContext.Load(listInSite); this.ClientContext.ExecuteQuery(); //#TODO: Provision datamigrated column for holder var camlWhereClause = CAML.Neq(CAML.FieldValue("DataMigrated", "Integer", "1")); // get ezforms site and query the list for approved requests ListItemCollectionPosition ListItemCollectionPosition = null; var camlQuery = CamlQuery.CreateAllItemsQuery(); camlQuery.ViewXml = string.Format("<View Scope='RecursiveAll'><Query><Where>{0}</Where>", camlWhereClause); camlQuery.ViewXml += "<RowLimit>50</RowLimit>"; camlQuery.ViewXml += "</Query></View>"; camlQuery.ListItemCollectionPosition = ListItemCollectionPosition; var output = new List <object>(); while (true) { camlQuery.ListItemCollectionPosition = ListItemCollectionPosition; var spListItems = listInSite.GetItems(camlQuery); this.ClientContext.Load(spListItems, lti => lti.ListItemCollectionPosition, lti => lti.IncludeWithDefaultProperties(lnc => lnc.Id, lnc => lnc.ContentType)); this.ClientContext.ExecuteQuery(); ListItemCollectionPosition = spListItems.ListItemCollectionPosition; foreach (var requestItem in spListItems) { var requestId = requestItem.Id; ListItem _item = listInSite.GetItemById(requestId); //#TODO: add list item column includes for specific columns of operation ClientContext.Load(_item); ClientContext.ExecuteQuery(); try { output.Add(ProcessListItem(_item)); } catch (Exception e) { LogError(e, "Failed to update list item {0}", e.Message); } } if (ListItemCollectionPosition == null) { break; } } LogVerbose("Writing objects to memory stream."); output.ForEach(s => WriteObject(s)); } catch (Exception ex) { LogError(ex, "Migrate failed for list items MSG:{0}", ex.Message); } }
/// <summary> /// Process the request /// </summary> public override void ExecuteCmdlet() { base.ExecuteCmdlet(); siteColumns = new List <SPFieldDefinitionModel>(); try { //Load list var siteUrl = this.ClientContext.Url; var listInSite = this.ClientContext.Web.Lists.GetByTitle(ListTitle); this.ClientContext.Load(listInSite); this.ClientContext.ExecuteQuery(); //#TODO: Provision datamigrated column for holder var camlWhereClause = CAML.Neq(CAML.FieldValue("DataMigrated", "Integer", "1")); var camlViewFields = CAML.ViewFields((new string[] { "Modified", "", "", "Id" }).Select(s => CAML.FieldRef(s)).ToArray()); // get site and query the list for approved requests ListItemCollectionPosition ListItemCollectionPosition = null; var camlQuery = new CamlQuery() { ViewXml = CAML.ViewQuery(ViewScope.RecursiveAll, CAML.Where(camlWhereClause), string.Empty, camlViewFields, 50) }; var output = new List <object>(); while (true) { camlQuery.ListItemCollectionPosition = ListItemCollectionPosition; var spListItems = listInSite.GetItems(camlQuery); this.ClientContext.Load(spListItems, lti => lti.ListItemCollectionPosition, lti => lti.IncludeWithDefaultProperties(lnc => lnc.Id, lnc => lnc.ContentType)); this.ClientContext.ExecuteQuery(); ListItemCollectionPosition = spListItems.ListItemCollectionPosition; foreach (var requestItem in spListItems) { var requestId = requestItem.Id; ListItem _item = listInSite.GetItemById(requestId); ClientContext.Load(_item); ClientContext.ExecuteQueryRetry(); try { output.Add(ProcessListItem(_item)); } catch (Exception e) { LogError(e, "Failed to update list item {0}", e.Message); } } if (ListItemCollectionPosition == null) { break; } } LogVerbose("Writing objects to memory stream."); output.ForEach(s => WriteObject(s)); } catch (Exception ex) { LogError(ex, "Migrate failed for list items MSG:{0}", ex.Message); } }
public override void ExecuteCmdlet() { base.ExecuteCmdlet(); var SelectedWeb = this.ClientContext.Web; ilogger = new DefaultUsageLogger( (string msg, object[] margs) => { LogDebugging(msg, margs); }, (string msg, object[] margs) => { LogWarning(msg, margs); }, (Exception ex, string msg, object[] margs) => { LogError(ex, msg, margs); }); var list = List.GetList(SelectedWeb); SelectedWeb.Context.Load(list, lctx => lctx.Id); SelectedWeb.Context.ExecuteQueryRetry(); var workflowSubscriptionId = default(Nullable <Guid>); if (!string.IsNullOrEmpty(WorkflowName)) { var servicesManager = new WorkflowServicesManager(ClientContext, SelectedWeb); var subscriptionService = servicesManager.GetWorkflowSubscriptionService(); var subscriptions = subscriptionService.EnumerateSubscriptionsByList(list.Id); //foreach (WorkflowSubscription subs1 in subscriptions) //{ // if (subs1.Name == WorkflowName) { ClientContext.Load(subs1); } //} ClientContext.Load(subscriptions); ClientContext.ExecuteQueryRetry(); if (subscriptions.Any(subs => subs.Name == WorkflowName)) { var subscription = subscriptions.FirstOrDefault(subs => subs.Name == WorkflowName); workflowSubscriptionId = subscription.Id; } } // Check if the field exists var viewFields = new string[] { "Id", "Title", WorkflowColumnName }; var viewFieldXml = CAML.ViewFields(viewFields.Select(s => CAML.FieldRef(s)).ToArray()); var internalFields = new List <string>(); internalFields.AddRange(viewFields); try { var checkFields = list.GetFields(internalFields.ToArray()); } catch (Exception ex) { LogError(ex, $"Failed to retreive the fields {string.Join(";", viewFields)} with Msg {ex.Message}"); return; } var itemIds = new List <int>(); var viewCaml = new CamlQuery() { ViewXml = CAML.ViewQuery( ViewScope.RecursiveAll, CAML.Where(CAML.Neq(CAML.FieldValue(WorkflowColumnName, FieldType.WorkflowStatus.ToString("f"), WorkflowStatus.Completed.ToString("D")))), string.Empty, viewFieldXml, 100) }; ListItemCollectionPosition itemPosition = null; while (true) { viewCaml.ListItemCollectionPosition = itemPosition; var items = list.GetItems(viewCaml); list.Context.Load(items); list.Context.ExecuteQueryRetry(); itemPosition = items.ListItemCollectionPosition; foreach (var item in items) { itemIds.Add(item.Id); } if (itemPosition == null) { break; } } // Workflow status to re-start! var workflowStati = new List <Microsoft.SharePoint.Client.WorkflowServices.WorkflowStatus>() { Microsoft.SharePoint.Client.WorkflowServices.WorkflowStatus.Started, Microsoft.SharePoint.Client.WorkflowServices.WorkflowStatus.Suspended, Microsoft.SharePoint.Client.WorkflowServices.WorkflowStatus.Invalid }; foreach (var itemId in itemIds) { // Retreive the ListItem var item = list.GetItemById("" + itemId); list.Context.Load(item, ictx => ictx.Id, ictx => ictx.ParentList.Id); list.Context.ExecuteQueryRetry(); // Variables for processing var subscriptionIds = new List <Guid>(); var allinstances = SelectedWeb.GetWorkflowInstances(item); var terminationInstances = allinstances.Where(instance => workflowStati.Any(ws => ws == instance.Status) && (!workflowSubscriptionId.HasValue || (!workflowSubscriptionId.HasValue && instance.WorkflowSubscriptionId == workflowSubscriptionId))).ToList(); // Cancel the existing failed workflow instances foreach (var instance in terminationInstances) { var instanceId = instance.Id; subscriptionIds.Add(instance.WorkflowSubscriptionId); var msg = string.Format("List Item {0} => Cancelling subscription {1} instance Id {2}", itemId, instance.WorkflowSubscriptionId, instanceId); if (ShouldProcess(msg)) { instance.CancelWorkFlow(); LogWarning("List Item {0} => Cancelled subscription {1} instance Id {2}", itemId, instance.WorkflowSubscriptionId, instanceId); } } // Instantiate the workflow subscription foreach (var subscriptionId in subscriptionIds) { var msg = string.Format("List Item {0} => Start workflow subscription id {1}", itemId, subscriptionId); if (ShouldProcess(msg)) { var instanceId = item.StartWorkflowInstance(subscriptionId, new Dictionary <string, object>()); LogWarning("List Item {0} => Successfully restarted subscription {1} with new instance Id {2}", itemId, subscriptionId, instanceId); } } // Retreive the Item workflow instances and print to the console var instances = SelectedWeb.GetWorkflowInstances(item); foreach (var instance in instances) { LogVerbose("List Item {0} => Instance {1} => Status {2} => WF Status {3} => Created {4} => LastUpdated {5} => Subscription {6}", itemId, instance.Id, instance.Status, instance.UserStatus, instance.InstanceCreated, instance.LastUpdated, instance.WorkflowSubscriptionId); } } }