private static void ProcessField(Field field, Guid listGuid, string webId, string relationshipDeleteBehavior) { var isDirty = false; var existingFieldElement = XElement.Parse(field.SchemaXml); isDirty = UpdateFieldAttribute(existingFieldElement, "List", listGuid.ToString(), false); isDirty = UpdateFieldAttribute(existingFieldElement, "WebId", webId, isDirty); isDirty = UpdateFieldAttribute(existingFieldElement, "SourceID", webId, isDirty); if (!string.IsNullOrEmpty(relationshipDeleteBehavior)) { isDirty = UpdateFieldAttribute(existingFieldElement, "RelationshipDeleteBehavior", relationshipDeleteBehavior, isDirty); } if (isDirty) { field.SchemaXml = existingFieldElement.ToString(); field.UpdateAndPushChanges(true); field.Context.ExecuteQueryRetry(); } }
private static void ProcessField(Field field, Guid listGuid, string webId) { var isDirty = false; var existingFieldElement = XElement.Parse(field.SchemaXml); isDirty = UpdateFieldAttribute(existingFieldElement, "List", listGuid.ToString(), false); isDirty = UpdateFieldAttribute(existingFieldElement, "WebId", webId, isDirty); isDirty = UpdateFieldAttribute(existingFieldElement, "SourceID", webId, isDirty); if (isDirty) { field.SchemaXml = existingFieldElement.ToString(); field.UpdateAndPushChanges(true); field.Context.ExecuteQueryRetry(); } }
private static void ProcessField(Field field, Guid listGuid, string webId, string relationshipDeleteBehavior) { var isDirty = false; var existingFieldElement = XElement.Parse(field.SchemaXmlWithResourceTokens); isDirty = UpdateFieldAttribute(existingFieldElement, "List", listGuid.ToString(), false); isDirty = UpdateFieldAttribute(existingFieldElement, "WebId", webId, isDirty); isDirty = UpdateFieldAttribute(existingFieldElement, "SourceID", webId, isDirty); if (!string.IsNullOrEmpty(relationshipDeleteBehavior)) isDirty = UpdateFieldAttribute(existingFieldElement, "RelationshipDeleteBehavior", relationshipDeleteBehavior, isDirty); if (isDirty) { field.SchemaXml = existingFieldElement.ToString(); field.UpdateAndPushChanges(true); field.Context.ExecuteQueryRetry(); } }
private Field UpdateField(ClientObject web, ListInfo listInfo, Guid fieldId, XElement templateFieldElement, Field existingField, PnPMonitoredScope scope, TokenParser parser, string originalFieldXml) { Field field = null; web.Context.Load(existingField, f => f.SchemaXmlWithResourceTokens); web.Context.ExecuteQueryRetry(); var existingFieldElement = XElement.Parse(existingField.SchemaXmlWithResourceTokens); var equalityComparer = new XNodeEqualityComparer(); // Is field different in template? if (equalityComparer.GetHashCode(existingFieldElement) != equalityComparer.GetHashCode(templateFieldElement)) { // Is existing field of the same type? if (existingFieldElement.Attribute("Type").Value == templateFieldElement.Attribute("Type").Value) { templateFieldElement = PrepareField(templateFieldElement); if (IsFieldXmlValid(parser.ParseString(templateFieldElement.ToString()), parser, web.Context)) { foreach (var attribute in templateFieldElement.Attributes()) { if (existingFieldElement.Attribute(attribute.Name) != null) { existingFieldElement.Attribute(attribute.Name).Value = attribute.Value; } else { existingFieldElement.Add(attribute); } } foreach (var element in templateFieldElement.Elements()) { if (existingFieldElement.Element(element.Name) != null) { existingFieldElement.Element(element.Name).Remove(); } existingFieldElement.Add(element); } if (existingFieldElement.Attribute("Version") != null) { existingFieldElement.Attributes("Version").Remove(); } existingField.SchemaXml = parser.ParseString(existingFieldElement.ToString(), "~sitecollection", "~site"); existingField.UpdateAndPushChanges(true); web.Context.ExecuteQueryRetry(); bool isDirty = false; #if !SP2013 if (originalFieldXml.ContainsResourceToken()) { var originalFieldElement = XElement.Parse(originalFieldXml); var nameAttributeValue = originalFieldElement.Attribute("DisplayName") != null ? originalFieldElement.Attribute("DisplayName").Value : ""; if (nameAttributeValue.ContainsResourceToken()) { if (existingField.TitleResource.SetUserResourceValue(nameAttributeValue, parser)) { isDirty = true; } } var descriptionAttributeValue = originalFieldElement.Attribute("Description") != null ? originalFieldElement.Attribute("Description").Value : ""; if (descriptionAttributeValue.ContainsResourceToken()) { if (existingField.DescriptionResource.SetUserResourceValue(descriptionAttributeValue, parser)) { isDirty = true; } } } #endif if (isDirty) { existingField.Update(); web.Context.ExecuteQueryRetry(); field = existingField; } } else { // The field Xml was found invalid var tokenString = parser.GetLeftOverTokens(originalFieldXml).Aggregate(String.Empty, (acc, i) => acc + " " + i); scope.LogError("The field was found invalid: {0}", tokenString); throw new Exception(string.Format("The field was found invalid: {0}", tokenString)); } } else { var fieldName = existingFieldElement.Attribute("Name") != null ? existingFieldElement.Attribute("Name").Value : existingFieldElement.Attribute("StaticName").Value; scope.LogWarning(CoreResources.Provisioning_ObjectHandlers_ListInstances_Field__0____1___exists_in_list__2____3___but_is_of_different_type__Skipping_field_, fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id); WriteWarning(string.Format(CoreResources.Provisioning_ObjectHandlers_ListInstances_Field__0____1___exists_in_list__2____3___but_is_of_different_type__Skipping_field_, fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id), ProvisioningMessageType.Warning); } } return field; }
private void UpdateField(ClientObject web, ListInfo listInfo, Guid fieldId, XElement templateFieldElement, Field existingField, PnPMonitoredScope scope, TokenParser parser) { web.Context.Load(existingField, f => f.SchemaXml); web.Context.ExecuteQueryRetry(); var existingFieldElement = XElement.Parse(existingField.SchemaXml); var equalityComparer = new XNodeEqualityComparer(); // Is field different in template? if (equalityComparer.GetHashCode(existingFieldElement) != equalityComparer.GetHashCode(templateFieldElement)) { // Is existing field of the same type? if (existingFieldElement.Attribute("Type").Value == templateFieldElement.Attribute("Type").Value) { templateFieldElement = PrepareField(templateFieldElement); foreach (var attribute in templateFieldElement.Attributes()) { if (existingFieldElement.Attribute(attribute.Name) != null) { existingFieldElement.Attribute(attribute.Name).Value = attribute.Value; } else { existingFieldElement.Add(attribute); } } foreach (var element in templateFieldElement.Elements()) { if (existingFieldElement.Element(element.Name) != null) { existingFieldElement.Element(element.Name).Remove(); } existingFieldElement.Add(element); } if (existingFieldElement.Attribute("Version") != null) { existingFieldElement.Attributes("Version").Remove(); } existingField.SchemaXml = parser.ParseString(existingFieldElement.ToString(), "~sitecollection", "~site"); existingField.UpdateAndPushChanges(true); web.Context.ExecuteQueryRetry(); } else { var fieldName = existingFieldElement.Attribute("Name") != null ? existingFieldElement.Attribute("Name").Value : existingFieldElement.Attribute("StaticName").Value; scope.LogWarning(CoreResources.Provisioning_ObjectHandlers_ListInstances_Field__0____1___exists_in_list__2____3___but_is_of_different_type__Skipping_field_, fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id); WriteWarning(string.Format(CoreResources.Provisioning_ObjectHandlers_ListInstances_Field__0____1___exists_in_list__2____3___but_is_of_different_type__Skipping_field_, fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id), ProvisioningMessageType.Warning); } } }
private void UpdateField(ClientObject web, ListInfo listInfo, Guid fieldId, XElement templateFieldElement, Field existingField) { web.Context.Load(existingField, f => f.SchemaXml); web.Context.ExecuteQueryRetry(); var existingFieldElement = XElement.Parse(existingField.SchemaXml); var equalityComparer = new XNodeEqualityComparer(); // Is field different in template? if (equalityComparer.GetHashCode(existingFieldElement) != equalityComparer.GetHashCode(templateFieldElement)) { // Is existing field of the same type? if (existingFieldElement.Attribute("Type").Value == templateFieldElement.Attribute("Type").Value) { var listIdentifier = templateFieldElement.Attribute("List") != null ? templateFieldElement.Attribute("List").Value : null; if (listIdentifier != null) { // Temporary remove list attribute from list templateFieldElement.Attribute("List").Remove(); } foreach (var attribute in templateFieldElement.Attributes()) { if (existingFieldElement.Attribute(attribute.Name) != null) { existingFieldElement.Attribute(attribute.Name).Value = attribute.Value; } else { existingFieldElement.Add(attribute); } } foreach (var element in templateFieldElement.Elements()) { if (existingFieldElement.HasAttributes && existingFieldElement.Attribute(element.Name) != null) { existingFieldElement.Attribute(element.Name).Remove(); } existingFieldElement.Add(element); } if (existingFieldElement.Attribute("Version") != null) { existingFieldElement.Attributes("Version").Remove(); } existingField.SchemaXml = existingFieldElement.ToString(); existingField.UpdateAndPushChanges(true); web.Context.ExecuteQueryRetry(); } else { var fieldName = existingFieldElement.Attribute("Name") != null?existingFieldElement.Attribute("Name").Value : existingFieldElement.Attribute("StaticName").Value; WriteWarning(string.Format("Field {0} ({1}) exists in list {2} ({3}) but is of different type. Skipping field.", fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id), ProvisioningMessageType.Warning); } } }
private void UpdateField(ClientObject web, ListInfo listInfo, Guid fieldId, XElement templateFieldElement, Field existingField, PnPMonitoredScope scope, TokenParser parser, string originalFieldXml) { web.Context.Load(existingField, f => f.SchemaXmlWithResourceTokens); web.Context.ExecuteQueryRetry(); var existingFieldElement = XElement.Parse(existingField.SchemaXmlWithResourceTokens); var equalityComparer = new XNodeEqualityComparer(); // Is field different in template? if (equalityComparer.GetHashCode(existingFieldElement) != equalityComparer.GetHashCode(templateFieldElement)) { // Is existing field of the same type? if (existingFieldElement.Attribute("Type").Value == templateFieldElement.Attribute("Type").Value) { templateFieldElement = PrepareField(templateFieldElement); foreach (var attribute in templateFieldElement.Attributes()) { if (existingFieldElement.Attribute(attribute.Name) != null) { existingFieldElement.Attribute(attribute.Name).Value = attribute.Value; } else { existingFieldElement.Add(attribute); } } foreach (var element in templateFieldElement.Elements()) { if (existingFieldElement.Element(element.Name) != null) { existingFieldElement.Element(element.Name).Remove(); } existingFieldElement.Add(element); } if (existingFieldElement.Attribute("Version") != null) { existingFieldElement.Attributes("Version").Remove(); } existingField.SchemaXml = parser.ParseString(existingFieldElement.ToString(), TokenParser.SPSiteTokenKeys); existingField.UpdateAndPushChanges(true); web.Context.ExecuteQueryRetry(); bool isDirty = false; #if !CLIENTSDKV15 if (originalFieldXml.ContainsResourceToken()) { var originalFieldElement = XElement.Parse(originalFieldXml); var nameAttributeValue = originalFieldElement.Attribute("Name") != null ? originalFieldElement.Attribute("Name").Value : ""; if (nameAttributeValue.ContainsResourceToken()) { if (existingField.TitleResource.SetUserResourceValue(nameAttributeValue, parser)) { isDirty = true; } } var descriptionAttributeValue = originalFieldElement.Attribute("Description") != null ? originalFieldElement.Attribute("Description").Value : ""; if (descriptionAttributeValue.ContainsResourceToken()) { if (existingField.DescriptionResource.SetUserResourceValue(descriptionAttributeValue, parser)) { isDirty = true; } } } #endif if (isDirty) { existingField.Update(); web.Context.ExecuteQuery(); } } else { var fieldName = existingFieldElement.Attribute("Name") != null ? existingFieldElement.Attribute("Name").Value : existingFieldElement.Attribute("StaticName").Value; scope.LogWarning(CoreResources.Provisioning_ObjectHandlers_ListInstances_Field__0____1___exists_in_list__2____3___but_is_of_different_type__Skipping_field_, fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id); WriteWarning(string.Format(CoreResources.Provisioning_ObjectHandlers_ListInstances_Field__0____1___exists_in_list__2____3___but_is_of_different_type__Skipping_field_, fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id), ProvisioningMessageType.Warning); } } }
private void UpdateField(ClientObject web, ListInfo listInfo, Guid fieldId, XElement templateFieldElement, Field existingField) { web.Context.Load(existingField, f => f.SchemaXml); web.Context.ExecuteQueryRetry(); var existingFieldElement = XElement.Parse(existingField.SchemaXml); var equalityComparer = new XNodeEqualityComparer(); // Is field different in template? if (equalityComparer.GetHashCode(existingFieldElement) != equalityComparer.GetHashCode(templateFieldElement)) { // Is existing field of the same type? if (existingFieldElement.Attribute("Type").Value == templateFieldElement.Attribute("Type").Value) { var listIdentifier = templateFieldElement.Attribute("List") != null ? templateFieldElement.Attribute("List").Value : null; if (listIdentifier != null) { // Temporary remove list attribute from list templateFieldElement.Attribute("List").Remove(); } foreach (var attribute in templateFieldElement.Attributes()) { if (existingFieldElement.Attribute(attribute.Name) != null) { existingFieldElement.Attribute(attribute.Name).Value = attribute.Value; } else { existingFieldElement.Add(attribute); } } foreach (var element in templateFieldElement.Elements()) { if (existingFieldElement.HasAttributes && existingFieldElement.Attribute(element.Name) != null) { existingFieldElement.Attribute(element.Name).Remove(); } existingFieldElement.Add(element); } if (existingFieldElement.Attribute("Version") != null) { existingFieldElement.Attributes("Version").Remove(); } existingField.SchemaXml = existingFieldElement.ToString(); existingField.UpdateAndPushChanges(true); web.Context.ExecuteQueryRetry(); } else { var fieldName = existingFieldElement.Attribute("Name") != null ? existingFieldElement.Attribute("Name").Value : existingFieldElement.Attribute("StaticName").Value; WriteWarning(string.Format("Field {0} ({1}) exists in list {2} ({3}) but is of different type. Skipping field.", fieldName, fieldId, listInfo.TemplateList.Title, listInfo.SiteList.Id), ProvisioningMessageType.Warning); } } }