diff --git a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLProvidersTests.cs b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLProvidersTests.cs index 7788cbad98..0cba0d4e9a 100644 --- a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLProvidersTests.cs +++ b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLProvidersTests.cs @@ -883,11 +883,11 @@ public void XMLSerializer_Deserialize_ContentTypes_201605() Assert.IsNotNull(ct.DocumentSetTemplate); Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes); - Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E002")); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3"))); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc"))); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531"))); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f"))); + Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c.ContentTypeId == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E002")); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new SharedField { FieldId = new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3") })); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new SharedField { FieldId = new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc") })); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new WelcomePageField { FieldId = new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531") })); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new WelcomePageField { FieldId = new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f") })); Assert.AreEqual("home.aspx", ct.DocumentSetTemplate.WelcomePage); Assert.IsNotNull(ct.DocumentSetTemplate.DefaultDocuments); @@ -937,13 +937,16 @@ public void XMLSerializer_Serialize_ContentTypes_201605() }; var dt = new DocumentSetTemplate(); - dt.AllowedContentTypes.Add("0x01005D4F34E4BE7F4B6892AEBE088EDD215E002"); - dt.SharedFields.Add(new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3")); - dt.SharedFields.Add(new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc")); - dt.WelcomePageFields.Add(new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531")); - dt.WelcomePageFields.Add(new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f")); + dt.AllowedContentTypes.Add(new AllowedContentType + { + ContentTypeId = "0x01005D4F34E4BE7F4B6892AEBE088EDD215E002" + }); + dt.SharedFields.Add(new SharedField { FieldId = new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3") }); + dt.SharedFields.Add(new SharedField { FieldId = new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc") }); + dt.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531") }); + dt.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f") }); dt.WelcomePage = "home.aspx"; - dt.DefaultDocuments.Add(new DefaultDocument() + dt.DefaultDocuments.Add(new DefaultDocument { ContentTypeId = "0x01005D4F34E4BE7F4B6892AEBE088EDD215E001", FileSourcePath = "document.dotx", diff --git a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201903Tests.cs b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201903Tests.cs index 87a75f90ee..ef92baa4bc 100644 --- a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201903Tests.cs +++ b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201903Tests.cs @@ -2402,10 +2402,10 @@ public void XMLSerializer_Deserialize_ContentTypes() Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes); Assert.AreEqual("{sitecollection}/_cts/ProjectDocumentSet/ProjectHomePage.aspx", ct.DocumentSetTemplate.WelcomePage); Assert.IsTrue(ct.DocumentSetTemplate.RemoveExistingContentTypes); - Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E")); + Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c.ContentTypeId == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E")); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new Guid("B01B3DBC-4630-4ED1-B5BA-321BC7841E3D"))); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new Guid("23203E97-3BFE-40CB-AFB4-07AA2B86BF45"))); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c.FieldId == new Guid("B01B3DBC-4630-4ED1-B5BA-321BC7841E3D"))); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c.FieldId == new Guid("23203E97-3BFE-40CB-AFB4-07AA2B86BF45"))); Assert.IsNotNull(ct.DocumentSetTemplate.DefaultDocuments); @@ -2444,11 +2444,11 @@ public void XMLSerializer_Serialize_ContentTypes() }; var documentSetTemplate = new DocumentSetTemplate { RemoveExistingContentTypes = true }; - documentSetTemplate.AllowedContentTypes.Add("0x01005D4F34E4BE7F4B6892AEBE088EDD215E002"); - documentSetTemplate.SharedFields.Add(new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3")); - documentSetTemplate.SharedFields.Add(new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc")); - documentSetTemplate.WelcomePageFields.Add(new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531")); - documentSetTemplate.WelcomePageFields.Add(new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f")); + documentSetTemplate.AllowedContentTypes.Add(new AllowedContentType { ContentTypeId = "0x01005D4F34E4BE7F4B6892AEBE088EDD215E002" }); + documentSetTemplate.SharedFields.Add(new SharedField { FieldId = new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3") }); + documentSetTemplate.SharedFields.Add(new SharedField { FieldId = new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc") }); + documentSetTemplate.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531") }); + documentSetTemplate.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f") }); documentSetTemplate.WelcomePage = "home.aspx"; documentSetTemplate.DefaultDocuments.Add(new DefaultDocument() { diff --git a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201909Tests.cs b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201909Tests.cs index c1cbb8ffa0..4e8d089805 100644 --- a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201909Tests.cs +++ b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer201909Tests.cs @@ -2965,10 +2965,10 @@ public void XMLSerializer_Deserialize_ContentTypes() Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes); Assert.AreEqual("{sitecollection}/_cts/ProjectDocumentSet/ProjectHomePage.aspx", ct.DocumentSetTemplate.WelcomePage); Assert.IsTrue(ct.DocumentSetTemplate.RemoveExistingContentTypes); - Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E")); + Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c.ContentTypeId == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E")); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new Guid("B01B3DBC-4630-4ED1-B5BA-321BC7841E3D"))); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new Guid("23203E97-3BFE-40CB-AFB4-07AA2B86BF45"))); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c.FieldId == new Guid("B01B3DBC-4630-4ED1-B5BA-321BC7841E3D"))); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c.FieldId == new Guid("23203E97-3BFE-40CB-AFB4-07AA2B86BF45"))); Assert.IsNotNull(ct.DocumentSetTemplate.DefaultDocuments); @@ -3007,11 +3007,11 @@ public void XMLSerializer_Serialize_ContentTypes() }; var documentSetTemplate = new DocumentSetTemplate { RemoveExistingContentTypes = true }; - documentSetTemplate.AllowedContentTypes.Add("0x01005D4F34E4BE7F4B6892AEBE088EDD215E002"); - documentSetTemplate.SharedFields.Add(new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3")); - documentSetTemplate.SharedFields.Add(new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc")); - documentSetTemplate.WelcomePageFields.Add(new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531")); - documentSetTemplate.WelcomePageFields.Add(new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f")); + documentSetTemplate.AllowedContentTypes.Add(new AllowedContentType { ContentTypeId = "0x01005D4F34E4BE7F4B6892AEBE088EDD215E002" }); + documentSetTemplate.SharedFields.Add(new SharedField { FieldId = new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3") }); + documentSetTemplate.SharedFields.Add(new SharedField { FieldId = new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc") }); + documentSetTemplate.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531") }); + documentSetTemplate.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f") }); documentSetTemplate.WelcomePage = "home.aspx"; documentSetTemplate.DefaultDocuments.Add(new DefaultDocument() { diff --git a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer202002Tests.cs b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer202002Tests.cs index fee838c4f3..6ae5174a67 100644 --- a/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer202002Tests.cs +++ b/Core/OfficeDevPnP.Core.Tests/Framework/Providers/XMLSerializer202002Tests.cs @@ -3064,10 +3064,10 @@ public void XMLSerializer_Deserialize_ContentTypes() Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes); Assert.AreEqual("{sitecollection}/_cts/ProjectDocumentSet/ProjectHomePage.aspx", ct.DocumentSetTemplate.WelcomePage); Assert.IsTrue(ct.DocumentSetTemplate.RemoveExistingContentTypes); - Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E")); + Assert.IsNotNull(ct.DocumentSetTemplate.AllowedContentTypes.FirstOrDefault(c => c.ContentTypeId == "0x01005D4F34E4BE7F4B6892AEBE088EDD215E")); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c == new Guid("B01B3DBC-4630-4ED1-B5BA-321BC7841E3D"))); - Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c == new Guid("23203E97-3BFE-40CB-AFB4-07AA2B86BF45"))); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.SharedFields.FirstOrDefault(c => c.FieldId == new Guid("B01B3DBC-4630-4ED1-B5BA-321BC7841E3D"))); + Assert.AreNotEqual(Guid.Empty, ct.DocumentSetTemplate.WelcomePageFields.FirstOrDefault(c => c.FieldId == new Guid("23203E97-3BFE-40CB-AFB4-07AA2B86BF45"))); Assert.IsNotNull(ct.DocumentSetTemplate.DefaultDocuments); @@ -3106,11 +3106,11 @@ public void XMLSerializer_Serialize_ContentTypes() }; var documentSetTemplate = new DocumentSetTemplate { RemoveExistingContentTypes = true }; - documentSetTemplate.AllowedContentTypes.Add("0x01005D4F34E4BE7F4B6892AEBE088EDD215E002"); - documentSetTemplate.SharedFields.Add(new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3")); - documentSetTemplate.SharedFields.Add(new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc")); - documentSetTemplate.WelcomePageFields.Add(new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531")); - documentSetTemplate.WelcomePageFields.Add(new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f")); + documentSetTemplate.AllowedContentTypes.Add(new AllowedContentType { ContentTypeId = "0x01005D4F34E4BE7F4B6892AEBE088EDD215E002" }); + documentSetTemplate.SharedFields.Add(new SharedField { FieldId = new Guid("f6e7bdd5-bdcb-4c72-9f18-2bd8c27003d3") }); + documentSetTemplate.SharedFields.Add(new SharedField { FieldId = new Guid("a8df65ec-0d06-4df1-8edf-55d48b3936dc") }); + documentSetTemplate.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("c69d2ffc-0c86-474a-9cc7-dcd7774da531") }); + documentSetTemplate.WelcomePageFields.Add(new WelcomePageField { FieldId = new Guid("b9132b30-2b9e-47d4-b0fc-1ac34a61506f") }); documentSetTemplate.WelcomePage = "home.aspx"; documentSetTemplate.DefaultDocuments.Add(new DefaultDocument() { diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/AllowedContentType.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/AllowedContentType.cs new file mode 100644 index 0000000000..aca280ca1d --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/AllowedContentType.cs @@ -0,0 +1,79 @@ +using System; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Model +{ + /// + /// An allowed content type for a Document Set + /// + public partial class AllowedContentType : BaseModel, IEquatable + { + #region Public Members + + /// + /// The name of the allowed content type in a document set + /// + public String Name { get; set; } + + /// + /// The content type id of the allowed content type in a document set + /// + public String ContentTypeId { get; set; } + + /// + /// True to specify that the allowed content type should be removed from the document set. If False, it means it will be added to the document set. + /// + public bool Remove { get; set; } + + #endregion + + #region Comparison code + + /// + /// Gets the hash code + /// + /// Returns HashCode + public override int GetHashCode() + { + return (String.Format("{0}|{1}|{2}|", + (this.Name != null ? this.Name.GetHashCode() : 0), + (this.ContentTypeId != null ? this.ContentTypeId.GetHashCode() : 0), + this.Remove.GetHashCode() + ).GetHashCode()); + } + + /// + /// Compares object with AllowedContentType + /// + /// Object that represents AllowedContentType + /// True if the current object is equal to the AllowedContentType + public override bool Equals(object obj) + { + if (!(obj is AllowedContentType)) + { + return (false); + } + return (Equals((AllowedContentType)obj)); + } + + /// + /// Compares AllowedContentType object based on Name, ContentTypeID and Remove. + /// + /// AllowedContentType object + /// True if the AllowedContentType object is equal to the current object; otherwise, false. + public bool Equals(AllowedContentType other) + { + if (other == null) + { + return (false); + } + + return (this.Name == other.Name && + this.ContentTypeId == other.ContentTypeId && + this.Remove == other.Remove + ); + + } + + #endregion + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/AllowedContentTypeCollection.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/AllowedContentTypeCollection.cs new file mode 100644 index 0000000000..9447613790 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/AllowedContentTypeCollection.cs @@ -0,0 +1,14 @@ +namespace OfficeDevPnP.Core.Framework.Provisioning.Model +{ + public partial class AllowedContentTypeCollection : BaseProvisioningTemplateObjectCollection + { + /// + /// Constructor for AllowedContentTypesCollection class. + /// + /// Parent provisioning template + public AllowedContentTypeCollection(ProvisioningTemplate parentTemplate) : base(parentTemplate) + { + + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocument.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocument.cs index 82ed312c87..93331ada8b 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocument.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocument.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace OfficeDevPnP.Core.Framework.Provisioning.Model { @@ -28,6 +24,11 @@ public partial class DefaultDocument : BaseModel, IEquatable /// public String FileSourcePath { get; set; } + /// + /// True to specify that the Default Document should be removed from the document set. If False, it means it will be added to the document set. + /// + public bool Remove { get; set; } + #endregion #region Comparison code @@ -41,7 +42,8 @@ public override int GetHashCode() return (String.Format("{0}|{1}|{2}|", (this.Name != null ? this.Name.GetHashCode() : 0), (this.ContentTypeId != null ? this.ContentTypeId.GetHashCode() : 0), - (this.FileSourcePath != null ? this.FileSourcePath.GetHashCode() : 0) + (this.FileSourcePath != null ? this.FileSourcePath.GetHashCode() : 0), + this.Remove.GetHashCode() ).GetHashCode()); } @@ -60,7 +62,7 @@ public override bool Equals(object obj) } /// - /// Compares DefaultDocument object based on Name, ContentTypeID and FileSourcePath. + /// Compares DefaultDocument object based on Name, ContentTypeID, FileSourcePath and Remove. /// /// DefaultDocument object /// true if the DefaultDocument object is equal to the current object; otherwise, false. @@ -73,9 +75,9 @@ public bool Equals(DefaultDocument other) return (this.Name == other.Name && this.ContentTypeId == other.ContentTypeId && - this.FileSourcePath == other.FileSourcePath + this.FileSourcePath == other.FileSourcePath && + this.Remove == other.Remove ); - } #endregion diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocumentCollection.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocumentCollection.cs index 5d090e0633..4258333357 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocumentCollection.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DefaultDocumentCollection.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace OfficeDevPnP.Core.Framework.Provisioning.Model +namespace OfficeDevPnP.Core.Framework.Provisioning.Model { public partial class DefaultDocumentCollection : BaseProvisioningTemplateObjectCollection { diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DocumentSetTemplate.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DocumentSetTemplate.cs index 7ea00c389d..2fe1e3139c 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DocumentSetTemplate.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/DocumentSetTemplate.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Xml.Linq; using OfficeDevPnP.Core.Extensions; @@ -15,10 +13,10 @@ public partial class DocumentSetTemplate : BaseModel, IEquatable _allowedContentTypes = new List(); + private AllowedContentTypeCollection _allowedContentTypes; private DefaultDocumentCollection _defaultDocuments; - private List _sharedFields = new List(); - private List _welcomePageFields = new List(); + private SharedFieldCollection _sharedFields; + private WelcomePageFieldCollection _welcomePageFields; #endregion @@ -30,6 +28,9 @@ public partial class DocumentSetTemplate : BaseModel, IEquatable @@ -40,7 +41,7 @@ public DocumentSetTemplate() /// Default documents for the DocumentSet /// Shared Fields for the DocumentSet /// Welcome Page Fields for the DocumentSet - public DocumentSetTemplate(String welcomePage, IEnumerable allowedContentTypes = null, IEnumerable defaultDocuments = null, IEnumerable sharedFields = null, IEnumerable welcomePageFields = null) : + public DocumentSetTemplate(String welcomePage, IEnumerable allowedContentTypes = null, IEnumerable defaultDocuments = null, IEnumerable sharedFields = null, IEnumerable welcomePageFields = null) : this() { if (!String.IsNullOrEmpty(welcomePage)) @@ -49,9 +50,12 @@ public DocumentSetTemplate(String welcomePage, IEnumerable allowedConten } if (allowedContentTypes != null) { - this._allowedContentTypes.AddRange(allowedContentTypes); + this.AllowedContentTypes.AddRange(allowedContentTypes); + } + if (defaultDocuments != null) + { + this.DefaultDocuments.AddRange(defaultDocuments); } - this.DefaultDocuments.AddRange(defaultDocuments); if (sharedFields != null) { this._sharedFields.AddRange(sharedFields); @@ -69,7 +73,7 @@ public DocumentSetTemplate(String welcomePage, IEnumerable allowedConten /// /// The list of allowed Content Types for the Document Set /// - public List AllowedContentTypes + public AllowedContentTypeCollection AllowedContentTypes { get { return this._allowedContentTypes; } private set { this._allowedContentTypes = value; } @@ -87,7 +91,7 @@ public DefaultDocumentCollection DefaultDocuments /// /// The list of Shared Fields for the Document Set /// - public List SharedFields + public SharedFieldCollection SharedFields { get { return this._sharedFields; } private set { this._sharedFields = value; } @@ -96,7 +100,7 @@ public List SharedFields /// /// The list of Welcome Page Fields for the Document Set /// - public List WelcomePageFields + public WelcomePageFieldCollection WelcomePageFields { get { return this._welcomePageFields; } private set { this._welcomePageFields = value; } diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/SharedField.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/SharedField.cs new file mode 100644 index 0000000000..9686c36832 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/SharedField.cs @@ -0,0 +1,78 @@ +using System; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Model +{ + /// + /// A shared field for a Document Set + /// + public partial class SharedField : BaseModel, IEquatable + { + #region Public Members + + /// + /// The name of the shared field in a document set + /// + public String Name { get; set; } + + /// + /// The id of the shared field in a document set + /// + public Guid FieldId { get; set; } + + /// + /// True to specify that the shared field should be removed from the document set. If False, it means it will be added to the document set. + /// + public bool Remove { get; set; } + + #endregion + + #region Comparison code + + /// + /// Gets the hash code + /// + /// Returns HashCode + public override int GetHashCode() + { + return (String.Format("{0}|{1}|{2}|", + (this.Name != null ? this.Name.GetHashCode() : 0), + (this.FieldId != null ? this.FieldId.GetHashCode() : 0), + this.Remove.GetHashCode() + ).GetHashCode()); + } + + /// + /// Compares object with SharedField + /// + /// Object that represents SharedField + /// True if the current object is equal to the SharedField + public override bool Equals(object obj) + { + if (!(obj is SharedField)) + { + return (false); + } + return (Equals((SharedField)obj)); + } + + /// + /// Compares SharedField object based on Name, FieldId and Remove. + /// + /// SharedField object + /// True if the SharedField object is equal to the current object; otherwise, false. + public bool Equals(SharedField other) + { + if (other == null) + { + return (false); + } + + return (this.Name == other.Name && + this.FieldId == other.FieldId && + this.Remove == other.Remove + ); + } + + #endregion + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/SharedFieldCollection.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/SharedFieldCollection.cs new file mode 100644 index 0000000000..96013bbe26 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/SharedFieldCollection.cs @@ -0,0 +1,14 @@ +namespace OfficeDevPnP.Core.Framework.Provisioning.Model +{ + public partial class SharedFieldCollection : BaseProvisioningTemplateObjectCollection + { + /// + /// Constructor for SharedFieldCollection class. + /// + /// Parent provisioning template + public SharedFieldCollection(ProvisioningTemplate parentTemplate) : base(parentTemplate) + { + + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/WelcomePageField.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/WelcomePageField.cs new file mode 100644 index 0000000000..fa2fc43c13 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/WelcomePageField.cs @@ -0,0 +1,78 @@ +using System; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Model +{ + /// + /// A welcome page field for a Document Set + /// + public partial class WelcomePageField : BaseModel, IEquatable + { + #region Public Members + + /// + /// The name of the welcome page field in a document set + /// + public String Name { get; set; } + + /// + /// The id of the welcome page field in a document set + /// + public Guid FieldId { get; set; } + + /// + /// True to specify that the welcome page field should be removed from the document set. If False, it means it will be added to the document set. + /// + public bool Remove { get; set; } + + #endregion + + #region Comparison code + + /// + /// Gets the hash code + /// + /// Returns HashCode + public override int GetHashCode() + { + return (String.Format("{0}|{1}|{2}|", + (this.Name != null ? this.Name.GetHashCode() : 0), + (this.FieldId != null ? this.FieldId.GetHashCode() : 0), + this.Remove.GetHashCode() + ).GetHashCode()); + } + + /// + /// Compares object with WelcomePageField + /// + /// Object that represents WelcomePageField + /// True if the current object is equal to the WelcomePageField + public override bool Equals(object obj) + { + if (!(obj is WelcomePageField)) + { + return (false); + } + return (Equals((WelcomePageField)obj)); + } + + /// + /// Compares WelcomePageField object based on Name, FieldId and Remove. + /// + /// WelcomePageField object + /// True if the WelcomePageField object is equal to the current object; otherwise, false. + public bool Equals(WelcomePageField other) + { + if (other == null) + { + return (false); + } + + return (this.Name == other.Name && + this.FieldId == other.FieldId && + this.Remove == other.Remove + ); + } + + #endregion + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/WelcomePageFieldCollection.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/WelcomePageFieldCollection.cs new file mode 100644 index 0000000000..45e179a510 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Model/SharePoint/InformationArchitecture/WelcomePageFieldCollection.cs @@ -0,0 +1,14 @@ +namespace OfficeDevPnP.Core.Framework.Provisioning.Model +{ + public partial class WelcomePageFieldCollection : BaseProvisioningTemplateObjectCollection + { + /// + /// Constructor for WelcomePageFieldCollection class. + /// + /// Parent provisioning template + public WelcomePageFieldCollection(ProvisioningTemplate parentTemplate) : base(parentTemplate) + { + + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/ObjectHandlers/ObjectContentType.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/ObjectHandlers/ObjectContentType.cs index b1d1ddbf93..41747d454b 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/ObjectHandlers/ObjectContentType.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/ObjectHandlers/ObjectContentType.cs @@ -356,34 +356,62 @@ bool UpdateChildren() // AllowedContentTypes // Add additional content types to the set of allowed content types - foreach (string ctId in templateContentType.DocumentSetTemplate.AllowedContentTypes) + foreach (AllowedContentType allowedContentType in templateContentType.DocumentSetTemplate.AllowedContentTypes) { - // Validate if the content type is not part of the document set content types yet - if (documentSetTemplate.AllowedContentTypes.All(d => d.StringValue != ctId)) + // Validate if the content type is not part of the document set content types yet and it hasn't got the instruction to remove it + if (!allowedContentType.Remove && documentSetTemplate.AllowedContentTypes.All(d => d.StringValue != allowedContentType.ContentTypeId)) { - Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == ctId); + Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == allowedContentType.ContentTypeId); if (ct != null) { documentSetTemplate.AllowedContentTypes.Add(ct.Id); documentSetIsDirty = true; } } + else + { + // Content Type is part of the document set already, check if it should be removed + if(allowedContentType.Remove) + { + // Remove the content type + Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == allowedContentType.ContentTypeId); + if (ct != null) + { + documentSetTemplate.AllowedContentTypes.Remove(ct.Id); + documentSetIsDirty = true; + } + } + } } // DefaultDocuments if (!isNoScriptSite) { - foreach (var doc in templateContentType.DocumentSetTemplate.DefaultDocuments) - { - // Ensure the default document is not part of the document set yet - if (documentSetTemplate.DefaultDocuments.All(d => d.Name != doc.Name)) + foreach (var defaultDocument in templateContentType.DocumentSetTemplate.DefaultDocuments) + { + // Ensure the default document is not part of the document set yet and it hasn't got the instruction to remove it + if (!defaultDocument.Remove && documentSetTemplate.DefaultDocuments.All(d => d.Name != defaultDocument.Name)) { - Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == doc.ContentTypeId); + Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == defaultDocument.ContentTypeId); if (ct != null) { - using (Stream fileStream = connector.GetFileStream(doc.FileSourcePath)) + using (Stream fileStream = connector.GetFileStream(defaultDocument.FileSourcePath)) { - documentSetTemplate.DefaultDocuments.Add(doc.Name, ct.Id, ReadFullStream(fileStream)); + documentSetTemplate.DefaultDocuments.Add(defaultDocument.Name, ct.Id, ReadFullStream(fileStream)); + documentSetIsDirty = true; + } + } + } + else + { + // Default Document is part of the document set already, check if it should be removed + if (defaultDocument.Remove) + { + // Remove the default document + Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == defaultDocument.ContentTypeId); + if (ct != null) + { + documentSetTemplate.DefaultDocuments.Remove(defaultDocument.Name); documentSetIsDirty = true; } } @@ -400,32 +428,60 @@ bool UpdateChildren() // SharedFields foreach (var sharedField in templateContentType.DocumentSetTemplate.SharedFields) - { - // Ensure the shared field is not part of the document set yet - if (documentSetTemplate.SharedFields.All(f => f.Id != sharedField)) + { + // Ensure the shared field is not part of the document set yet and it hasn't got the instruction to remove it + if (!sharedField.Remove && documentSetTemplate.SharedFields.All(f => f.Id != sharedField.FieldId)) { - Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == sharedField); + Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == sharedField.FieldId); if (field != null) { documentSetTemplate.SharedFields.Add(field); documentSetIsDirty = true; } } + else + { + // Shared Field is part of the document set already, check if it should be removed + if (sharedField.Remove) + { + // Remove the shared field + Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == sharedField.FieldId); + if (field != null) + { + documentSetTemplate.SharedFields.Remove(field); + documentSetIsDirty = true; + } + } + } } // WelcomePageFields foreach (var welcomePageField in templateContentType.DocumentSetTemplate.WelcomePageFields) { - // Ensure the welcomepage field is not part of the document set yet - if (documentSetTemplate.WelcomePageFields.All(w => w.Id != welcomePageField)) + // Ensure the welcomepage field is not part of the document set yet and it hasn't got the instruction to remove it + if (!welcomePageField.Remove && documentSetTemplate.WelcomePageFields.All(w => w.Id != welcomePageField.FieldId)) { - Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == welcomePageField); + Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == welcomePageField.FieldId); if (field != null) { documentSetTemplate.WelcomePageFields.Add(field); documentSetIsDirty = true; } } + else + { + // Welcome page field is part of the document set already, check if it should be removed + if (welcomePageField.Remove) + { + // Remove the welcome page field + Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == welcomePageField.FieldId); + if (field != null) + { + documentSetTemplate.WelcomePageFields.Remove(field.Id); + documentSetIsDirty = true; + } + } + } } if (documentSetIsDirty) @@ -624,9 +680,12 @@ private Microsoft.SharePoint.Client.ContentType CreateContentType( // Add additional content types to the set of allowed content types bool hasDefaultDocumentContentTypeInTemplate = false; - foreach (String ctId in templateContentType.DocumentSetTemplate.AllowedContentTypes) + foreach (AllowedContentType allowedContentType in templateContentType.DocumentSetTemplate.AllowedContentTypes) { - Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == ctId); + // If the allowed content type is marked to be removed, since we're creating the document set here, we simply skip this line + if (allowedContentType.Remove) continue; + + Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == allowedContentType.ContentTypeId); if (ct != null) { if (ct.Id.StringValue.Equals("0x0101", StringComparison.InvariantCultureIgnoreCase)) @@ -649,14 +708,17 @@ private Microsoft.SharePoint.Client.ContentType CreateContentType( if (!isNoScriptSite) { - foreach (var doc in templateContentType.DocumentSetTemplate.DefaultDocuments) + foreach (var defaultDocument in templateContentType.DocumentSetTemplate.DefaultDocuments) { - Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == doc.ContentTypeId); + // If the default document is marked to be removed, since we're creating the document set here, we simply skip this line + if (defaultDocument.Remove) continue; + + Microsoft.SharePoint.Client.ContentType ct = existingCTs.FirstOrDefault(c => c.StringId == defaultDocument.ContentTypeId); if (ct != null) { - using (Stream fileStream = connector.GetFileStream(doc.FileSourcePath)) + using (Stream fileStream = connector.GetFileStream(defaultDocument.FileSourcePath)) { - documentSetTemplate.DefaultDocuments.Add(doc.Name, ct.Id, ReadFullStream(fileStream)); + documentSetTemplate.DefaultDocuments.Add(defaultDocument.Name, ct.Id, ReadFullStream(fileStream)); } } } @@ -671,7 +733,10 @@ private Microsoft.SharePoint.Client.ContentType CreateContentType( foreach (var sharedField in templateContentType.DocumentSetTemplate.SharedFields) { - Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == sharedField); + // If the shared field is marked to be removed, since we're creating the document set here, we simply skip this line + if (sharedField.Remove) continue; + + Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == sharedField.FieldId); if (field != null) { documentSetTemplate.SharedFields.Add(field); @@ -680,7 +745,10 @@ private Microsoft.SharePoint.Client.ContentType CreateContentType( foreach (var welcomePageField in templateContentType.DocumentSetTemplate.WelcomePageFields) { - Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == welcomePageField); + // If the welcome page field is marked to be removed, since we're creating the document set here, we simply skip this line + if (welcomePageField.Remove) continue; + + Microsoft.SharePoint.Client.Field field = existingFields.FirstOrDefault(f => f.Id == welcomePageField.FieldId); if (field != null) { documentSetTemplate.WelcomePageFields.Add(field); @@ -874,7 +942,10 @@ private IEnumerable GetEntities(Web web, PnPMonitoredScope scope, P newCT.DocumentSetTemplate = new DocumentSetTemplate( null, // TODO: WelcomePage not yet supported (from allowedCT in documentSetTemplate.AllowedContentTypes.AsEnumerable() - select allowedCT.StringValue).ToList(), + select new AllowedContentType + { + ContentTypeId = allowedCT.StringValue + }).ToList(), (from defaultDocument in documentSetTemplate.DefaultDocuments.AsEnumerable() select new DefaultDocument { @@ -887,9 +958,17 @@ private IEnumerable GetEntities(Web web, PnPMonitoredScope scope, P #endif }).ToList(), (from sharedField in documentSetTemplate.SharedFields.AsEnumerable() - select sharedField.Id).ToList(), + select new SharedField + { + FieldId = sharedField.Id, + Name = sharedField.StaticName + }).ToList(), (from welcomePageField in documentSetTemplate.WelcomePageFields.AsEnumerable() - select welcomePageField.Id).ToList() + select new WelcomePageField + { + FieldId = welcomePageField.Id, + Name = welcomePageField.StaticName + }).ToList() ); //extract the DefaultDocument files diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.cs index 893a7364c9..40685b489d 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.cs @@ -8651,10 +8651,10 @@ public partial class ListInstanceFieldRef : FieldRefFull { private string displayNameField; - private bool removeField; + private bool remove1Field; public ListInstanceFieldRef() { - this.removeField = false; + this.remove1Field = false; } /// @@ -8669,14 +8669,14 @@ public string DisplayName { } /// - [System.Xml.Serialization.XmlAttributeAttribute()] + [System.Xml.Serialization.XmlAttributeAttribute("Remove")] [System.ComponentModel.DefaultValueAttribute(false)] - public bool Remove { + public bool Remove1 { get { - return this.removeField; + return this.remove1Field; } set { - this.removeField = value; + this.remove1Field = value; } } } @@ -8691,8 +8691,6 @@ public bool Remove { [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.dev.office.com/PnP/2020/02/ProvisioningSchema")] public partial class FieldRefFull : FieldRefBase { - private string nameField; - private bool requiredField; private bool hiddenField; @@ -8702,17 +8700,6 @@ public FieldRefFull() { this.hiddenField = false; } - /// - [System.Xml.Serialization.XmlAttributeAttribute()] - public string Name { - get { - return this.nameField; - } - set { - this.nameField = value; - } - } - /// [System.Xml.Serialization.XmlAttributeAttribute()] [System.ComponentModel.DefaultValueAttribute(false)] @@ -8739,7 +8726,6 @@ public bool Hidden { } /// - [System.Xml.Serialization.XmlIncludeAttribute(typeof(DocumentSetFieldRef))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(FieldRefFull))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ContentTypeFieldRef))] [System.Xml.Serialization.XmlIncludeAttribute(typeof(ListInstanceFieldRef))] @@ -8752,6 +8738,14 @@ public partial class FieldRefBase { private string idField; + private string nameField; + + private bool removeField; + + public FieldRefBase() { + this.removeField = false; + } + /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ID { @@ -8762,15 +8756,29 @@ public string ID { this.idField = value; } } - } - - /// - [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")] - [System.SerializableAttribute()] - [System.Diagnostics.DebuggerStepThroughAttribute()] - [System.ComponentModel.DesignerCategoryAttribute("code")] - [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.dev.office.com/PnP/2020/02/ProvisioningSchema")] - public partial class DocumentSetFieldRef : FieldRefBase { + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string Name { + get { + return this.nameField; + } + set { + this.nameField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + [System.ComponentModel.DefaultValueAttribute(false)] + public bool Remove { + get { + return this.removeField; + } + set { + this.removeField = value; + } + } } /// @@ -9031,9 +9039,9 @@ public partial class DocumentSetTemplate { private DocumentSetTemplateDefaultDocument[] defaultDocumentsField; - private DocumentSetFieldRef[] sharedFieldsField; + private DocumentSetTemplateSharedField[] sharedFieldsField; - private DocumentSetFieldRef[] welcomePageFieldsField; + private DocumentSetTemplateWelcomePageField[] welcomePageFieldsField; private DocumentSetTemplateXmlDocuments xmlDocumentsField; @@ -9062,7 +9070,7 @@ public DocumentSetTemplateDefaultDocument[] DefaultDocuments { /// [System.Xml.Serialization.XmlArrayItemAttribute("SharedField", IsNullable=false)] - public DocumentSetFieldRef[] SharedFields { + public DocumentSetTemplateSharedField[] SharedFields { get { return this.sharedFieldsField; } @@ -9073,7 +9081,7 @@ public DocumentSetFieldRef[] SharedFields { /// [System.Xml.Serialization.XmlArrayItemAttribute("WelcomePageField", IsNullable=false)] - public DocumentSetFieldRef[] WelcomePageFields { + public DocumentSetTemplateWelcomePageField[] WelcomePageFields { get { return this.welcomePageFieldsField; } @@ -9154,6 +9162,14 @@ public partial class DocumentSetTemplateAllowedContentTypesAllowedContentType { private string contentTypeIDField; + private string nameField; + + private bool removeField; + + public DocumentSetTemplateAllowedContentTypesAllowedContentType() { + this.removeField = false; + } + /// [System.Xml.Serialization.XmlAttributeAttribute()] public string ContentTypeID { @@ -9164,6 +9180,29 @@ public string ContentTypeID { this.contentTypeIDField = value; } } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string Name { + get { + return this.nameField; + } + set { + this.nameField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + [System.ComponentModel.DefaultValueAttribute(false)] + public bool Remove { + get { + return this.removeField; + } + set { + this.removeField = value; + } + } } /// @@ -9180,6 +9219,12 @@ public partial class DocumentSetTemplateDefaultDocument { private string fileSourcePathField; + private bool removeField; + + public DocumentSetTemplateDefaultDocument() { + this.removeField = false; + } + /// [System.Xml.Serialization.XmlAttributeAttribute()] public string Name { @@ -9212,6 +9257,124 @@ public string FileSourcePath { this.fileSourcePathField = value; } } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + [System.ComponentModel.DefaultValueAttribute(false)] + public bool Remove { + get { + return this.removeField; + } + set { + this.removeField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://schemas.dev.office.com/PnP/2020/02/ProvisioningSchema")] + public partial class DocumentSetTemplateSharedField { + + private string idField; + + private string nameField; + + private bool removeField; + + public DocumentSetTemplateSharedField() { + this.removeField = false; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string ID { + get { + return this.idField; + } + set { + this.idField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string Name { + get { + return this.nameField; + } + set { + this.nameField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + [System.ComponentModel.DefaultValueAttribute(false)] + public bool Remove { + get { + return this.removeField; + } + set { + this.removeField = value; + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://schemas.dev.office.com/PnP/2020/02/ProvisioningSchema")] + public partial class DocumentSetTemplateWelcomePageField { + + private string idField; + + private string nameField; + + private bool removeField; + + public DocumentSetTemplateWelcomePageField() { + this.removeField = false; + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string ID { + get { + return this.idField; + } + set { + this.idField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + public string Name { + get { + return this.nameField; + } + set { + this.nameField = value; + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute()] + [System.ComponentModel.DefaultValueAttribute(false)] + public bool Remove { + get { + return this.removeField; + } + set { + this.removeField = value; + } + } } /// diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.xsd b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.xsd index 6bda9c4856..142d535680 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.xsd +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/ProvisioningSchema-2020-02.xsd @@ -4144,6 +4144,20 @@ + + + + The name of the content type used in the content type reference. This is for reference/readability only. + + + + + + + Declares if the AllowedContentType should be Removed from the document set, optional attribute. + + + @@ -4190,6 +4204,13 @@ + + + + Declares if the default document should be Removed from the document set, optional attribute. + + + @@ -4203,8 +4224,31 @@ - + + + + + + The ID of the field to use as a shared field in the Document Set, required attribute. + + + + + + + The name of the field to use as a shared field. This is for reference/readability only. + + + + + + + Declares if the SharedField should be Removed from the document set, optional attribute. + + + + + @@ -4216,11 +4260,35 @@ - + + + + + + The ID of the field to use as a welcome page field in the Document Set, required attribute. + + + + + + + The name of the field to use as a welcome page field. This is for reference/readability only. + + + + + + + Declares if the WelcomePageField should be Removed from the document set, optional attribute. + + + + + + Added with schema version 201805 @@ -4309,6 +4377,20 @@ + + + + The name of the field reference. This is for reference/readability only. + + + + + + + Declares if the field reference should be Removed from the document set, optional attribute. + + + @@ -4326,14 +4408,6 @@ - - - - The name of the field used in the field reference. This is for reference/readibility only. - - - - @@ -4399,17 +4473,6 @@ - - - - Defines the binding between a Document Set and a Field. - - - - - - - diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromModelToSchemaTypeResolver.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromModelToSchemaTypeResolver.cs index 867a933ade..85fe9b8732 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromModelToSchemaTypeResolver.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromModelToSchemaTypeResolver.cs @@ -41,7 +41,9 @@ public object Resolve(object source, Dictionary resolvers = n foreach (var ct in documentSetTemplate.AllowedContentTypes) { var item = Activator.CreateInstance(allowedContentTypeType); - item.SetPublicInstancePropertyValue("ContentTypeID", ct); + item.SetPublicInstancePropertyValue("ContentTypeID", ct.ContentTypeId); + item.SetPublicInstancePropertyValue("Name", ct.Name); + item.SetPublicInstancePropertyValue("Remove", ct.Remove); allowedContentTypesArray.SetValue(item, i); i++; } diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver.cs index 6aba21fe1a..4e592f0c11 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V201705/DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver.cs @@ -22,7 +22,7 @@ public DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver() public object Resolve(object source, Dictionary resolvers = null, Boolean recursive = false) { - var result = new List(); + var result = new List(); var allowedContentTypesContainer = source.GetPublicInstancePropertyValue("AllowedContentTypes"); var allowedContentTypes = allowedContentTypesContainer?.GetPublicInstancePropertyValue("AllowedContentType"); @@ -31,8 +31,19 @@ public object Resolve(object source, Dictionary resolvers = n { foreach(var ac in (IEnumerable)allowedContentTypes) { - var contentTypeId = ac?.GetPublicInstancePropertyValue("ContentTypeID"); - result.Add((String)contentTypeId); + var model = new Model.AllowedContentType + { + ContentTypeId = ac?.GetPublicInstancePropertyValue("ContentTypeID").ToString(), + Name = ac?.GetPublicInstancePropertyValue("Name")?.ToString(), + }; + + var removeContentType = ac?.GetPublicInstancePropertyValue("Remove"); + if (removeContentType != null && bool.TryParse(removeContentType.ToString(), out bool removeContentTypeBool)) + { + model.Remove = removeContentTypeBool; + } + + result.Add(model); } } diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateSharedFieldsFromModelToSchemaTypeResolver.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateSharedFieldsFromModelToSchemaTypeResolver.cs new file mode 100644 index 0000000000..49429ea893 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateSharedFieldsFromModelToSchemaTypeResolver.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using OfficeDevPnP.Core.Extensions; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.Resolvers +{ + internal class DocumentSetTemplateSharedFieldsFromModelToSchemaTypeResolver : ITypeResolver + { + public string Name => this.GetType().Name; + + public bool CustomCollectionResolver => false; + + public DocumentSetTemplateSharedFieldsFromModelToSchemaTypeResolver() + { + } + + public object Resolve(object source, Dictionary resolvers = null, Boolean recursive = false) + { + var documentSetTemplate = source as Model.DocumentSetTemplate; + + if (null != documentSetTemplate) + { + var sharedFieldTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.DocumentSetTemplateSharedField, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; + var sharedFieldType = Type.GetType(sharedFieldTypeName, true); + var sharedFieldsArray = Array.CreateInstance(sharedFieldType, documentSetTemplate.SharedFields.Count); + + Int32 i = 0; + foreach (var field in documentSetTemplate.SharedFields) + { + var item = Activator.CreateInstance(sharedFieldType); + item.SetPublicInstancePropertyValue("ID", field.FieldId.ToString()); + item.SetPublicInstancePropertyValue("Name", field.Name); + item.SetPublicInstancePropertyValue("Remove", field.Remove); + sharedFieldsArray.SetValue(item, i); + i++; + } + + return sharedFieldsArray; + } + + return null; + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateSharedFieldsFromSchemaToModelTypeResolver.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateSharedFieldsFromSchemaToModelTypeResolver.cs new file mode 100644 index 0000000000..4ca8e2f8ee --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateSharedFieldsFromSchemaToModelTypeResolver.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using OfficeDevPnP.Core.Extensions; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.Resolvers.V201705 +{ + /// + /// Resolves a list of Shared Fields from Schema to Domain Model + /// + internal class DocumentSetTemplateSharedFieldsFromSchemaToModelTypeResolver : ITypeResolver + { + public string Name => this.GetType().Name; + public bool CustomCollectionResolver => false; + + public DocumentSetTemplateSharedFieldsFromSchemaToModelTypeResolver() + { + } + + public object Resolve(object source, Dictionary resolvers = null, Boolean recursive = false) + { + var result = new List(); + + var sharedFieldsContainer = source.GetPublicInstancePropertyValue("SharedFields"); + + if (null != sharedFieldsContainer) + { + foreach(var field in (IEnumerable)sharedFieldsContainer) + { + var model = new Model.SharedField + { + Name = field?.GetPublicInstancePropertyValue("Name")?.ToString(), + }; + + var fieldId = field?.GetPublicInstancePropertyValue("ID"); + if (fieldId != null && Guid.TryParse(fieldId.ToString(), out Guid fieldIdGuid)) + { + model.FieldId = fieldIdGuid; + } + + var removeSharedField = field?.GetPublicInstancePropertyValue("Remove"); + if (removeSharedField != null && bool.TryParse(removeSharedField.ToString(), out bool removeSharedFieldBool)) + { + model.Remove = removeSharedFieldBool; + } + + result.Add(model); + } + } + + return (result); + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateWelcomePageFieldsFromModelToSchemaTypeResolver.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateWelcomePageFieldsFromModelToSchemaTypeResolver.cs new file mode 100644 index 0000000000..4d4fb5a245 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateWelcomePageFieldsFromModelToSchemaTypeResolver.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using OfficeDevPnP.Core.Extensions; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.Resolvers +{ + internal class DocumentSetTemplateWelcomePageFieldsFromModelToSchemaTypeResolver : ITypeResolver + { + public string Name => this.GetType().Name; + + public bool CustomCollectionResolver => false; + + public DocumentSetTemplateWelcomePageFieldsFromModelToSchemaTypeResolver() + { + } + + public object Resolve(object source, Dictionary resolvers = null, Boolean recursive = false) + { + var documentSetTemplate = source as Model.DocumentSetTemplate; + + if (null != documentSetTemplate) + { + var welcomePageFieldTypeName = $"{PnPSerializationScope.Current?.BaseSchemaNamespace}.DocumentSetTemplateWelcomePageField, {PnPSerializationScope.Current?.BaseSchemaAssemblyName}"; + var welcomePageFieldType = Type.GetType(welcomePageFieldTypeName, true); + var welcomePageFieldsArray = Array.CreateInstance(welcomePageFieldType, documentSetTemplate.WelcomePageFields.Count); + + Int32 i = 0; + foreach (var field in documentSetTemplate.WelcomePageFields) + { + var item = Activator.CreateInstance(welcomePageFieldType); + item.SetPublicInstancePropertyValue("ID", field.FieldId.ToString()); + item.SetPublicInstancePropertyValue("Name", field.Name); + item.SetPublicInstancePropertyValue("Remove", field.Remove); + welcomePageFieldsArray.SetValue(item, i); + i++; + } + + return welcomePageFieldsArray; + } + + return null; + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateWelcomePageFieldsFromSchemaToModelTypeResolver.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateWelcomePageFieldsFromSchemaToModelTypeResolver.cs new file mode 100644 index 0000000000..9170cc2e22 --- /dev/null +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Resolvers/V202002/DocumentSetTemplateWelcomePageFieldsFromSchemaToModelTypeResolver.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using OfficeDevPnP.Core.Extensions; + +namespace OfficeDevPnP.Core.Framework.Provisioning.Providers.Xml.Resolvers.V201705 +{ + /// + /// Resolves a list of Shared Fields from Schema to Domain Model + /// + internal class DocumentSetTemplateWelcomePageFieldsFromSchemaToModelTypeResolver : ITypeResolver + { + public string Name => this.GetType().Name; + public bool CustomCollectionResolver => false; + + public DocumentSetTemplateWelcomePageFieldsFromSchemaToModelTypeResolver() + { + } + + public object Resolve(object source, Dictionary resolvers = null, Boolean recursive = false) + { + var result = new List(); + + var welcomePageFieldTypes = source.GetPublicInstancePropertyValue("WelcomePageFields"); + + if (null != welcomePageFieldTypes) + { + foreach(var field in (IEnumerable)welcomePageFieldTypes) + { + var model = new Model.WelcomePageField + { + Name = field?.GetPublicInstancePropertyValue("Name")?.ToString(), + }; + + var fieldId = field?.GetPublicInstancePropertyValue("ID"); + if (fieldId != null && Guid.TryParse(fieldId.ToString(), out Guid fieldIdGuid)) + { + model.FieldId = fieldIdGuid; + } + + var removeSharedField = field?.GetPublicInstancePropertyValue("Remove"); + if (removeSharedField != null && bool.TryParse(removeSharedField.ToString(), out bool removeSharedFieldBool)) + { + model.Remove = removeSharedFieldBool; + } + + result.Add(model); + } + } + + return (result); + } + } +} diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Serializers/V201705/ContentTypesSerializer.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Serializers/V201705/ContentTypesSerializer.cs index 207b34833f..a7b1c2f405 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Serializers/V201705/ContentTypesSerializer.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/Serializers/V201705/ContentTypesSerializer.cs @@ -27,22 +27,24 @@ public override void Deserialize(object persistence, ProvisioningTemplate templa // Define custom resolver for FieldRef.ID because needs conversion from String to GUID expressions.Add(c => c.FieldRefs[0].Id, new FromStringToGuidValueResolver()); + //document template expressions.Add(c => c.DocumentTemplate, new ExpressionValueResolver((s, v) => v.GetPublicInstancePropertyValue("TargetName"))); + //document set template expressions.Add(c => c.DocumentSetTemplate, new PropertyObjectTypeResolver(ct => ct.DocumentSetTemplate)); //document set template - allowed content types - expressions.Add(c => c.DocumentSetTemplate.AllowedContentTypes, - new DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver()); + expressions.Add(c => c.DocumentSetTemplate.AllowedContentTypes, new DocumentSetTemplateAllowedContentTypesFromSchemaToModelTypeResolver()); + //document set template - remove existing content types - expressions.Add(c => c.DocumentSetTemplate.RemoveExistingContentTypes, - new RemoveExistingContentTypesFromSchemaToModelValueResolver()); + expressions.Add(c => c.DocumentSetTemplate.RemoveExistingContentTypes, new RemoveExistingContentTypesFromSchemaToModelValueResolver()); //document set template - shared fields - expressions.Add(c => c.DocumentSetTemplate.SharedFields, new ExpressionCollectionValueResolver((s) => Guid.Parse(s.GetPublicInstancePropertyValue("ID").ToString()))); + expressions.Add(c => c.DocumentSetTemplate.SharedFields, new DocumentSetTemplateSharedFieldsFromSchemaToModelTypeResolver()); + //document set template - welcome page fields - expressions.Add(c => c.DocumentSetTemplate.WelcomePageFields, new ExpressionCollectionValueResolver((s) => Guid.Parse(s.GetPublicInstancePropertyValue("ID").ToString()))); + expressions.Add(c => c.DocumentSetTemplate.WelcomePageFields, new DocumentSetTemplateWelcomePageFieldsFromSchemaToModelTypeResolver()); //document set template - XmlDocuments section expressions.Add(c => c.DocumentSetTemplate.XmlDocuments, new XmlAnyFromSchemaToModelValueResolver("XmlDocuments")); @@ -79,8 +81,17 @@ public override void Serialize(ProvisioningTemplate template, object persistence expressions.Add($"{contentTypeType.Namespace}.DocumentSetTemplate.AllowedContentTypes", new DocumentSetTemplateAllowedContentTypesFromModelToSchemaTypeResolver()); - //document set template - shared fields and welcome page fields (this expression also used to resolve fieldref collection ids because of same type name) + //document set template - shared fields + expressions.Add($"{contentTypeType.Namespace}.DocumentSetTemplate.SharedFields", + new DocumentSetTemplateSharedFieldsFromModelToSchemaTypeResolver()); + + //document set template - welcome page fields + expressions.Add($"{contentTypeType.Namespace}.DocumentSetTemplate.WelcomePageFields", + new DocumentSetTemplateWelcomePageFieldsFromModelToSchemaTypeResolver()); + + //document set template - fieldref collection expressions.Add($"{contentTypeType.Namespace}.FieldRefBase.ID", new ExpressionValueResolver((s, v) => v != null ? v.ToString() : s?.ToString())); + //document template expressions.Add($"{contentTypeType.FullName}.DocumentTemplate", new DocumentTemplateFromModelToSchemaTypeResolver(documentTemplateType)); diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201508Formatter.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201508Formatter.cs index 0509f03d0e..c2729a59c4 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201508Formatter.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201508Formatter.cs @@ -412,7 +412,7 @@ select field.SchemaXml.ToXmlElement()).ToArray(), (from act in ct.DocumentSetTemplate.AllowedContentTypes select new DocumentSetTemplateAllowedContentType { - ContentTypeID = act + ContentTypeID = act.ContentTypeId }).ToArray() : null, DefaultDocuments = ct.DocumentSetTemplate.DefaultDocuments.Count > 0 ? (from dd in ct.DocumentSetTemplate.DefaultDocuments @@ -1334,25 +1334,34 @@ from contentType in source.ContentTypes contentType.DocumentSetTemplate.WelcomePage, contentType.DocumentSetTemplate.AllowedContentTypes != null ? (from act in contentType.DocumentSetTemplate.AllowedContentTypes - select act.ContentTypeID) : null, + select new Model.AllowedContentType + { + ContentTypeId = act.ContentTypeID + }) : null, contentType.DocumentSetTemplate.DefaultDocuments != null ? (from dd in contentType.DocumentSetTemplate.DefaultDocuments select new Model.DefaultDocument { ContentTypeId = dd.ContentTypeID, FileSourcePath = dd.FileSourcePath, - Name = dd.Name, + Name = dd.Name }) : null, contentType.DocumentSetTemplate.SharedFields != null ? (from sf in contentType.DocumentSetTemplate.SharedFields - select Guid.Parse(sf.ID)) : null, + select new Model.SharedField + { + FieldId = Guid.Parse(sf.ID) + }) : null, contentType.DocumentSetTemplate.WelcomePageFields != null ? (from wpf in contentType.DocumentSetTemplate.WelcomePageFields - select Guid.Parse(wpf.ID)) : null + select new Model.WelcomePageField + { + FieldId = Guid.Parse(wpf.ID) + }) : null ) : null, DisplayFormUrl = contentType.DisplayFormUrl, EditFormUrl = contentType.EditFormUrl, - NewFormUrl = contentType.NewFormUrl, + NewFormUrl = contentType.NewFormUrl } ); } diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201512Formatter.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201512Formatter.cs index 89fd19e774..8e06772fb6 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201512Formatter.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201512Formatter.cs @@ -467,7 +467,7 @@ select field.SchemaXml.ToXmlElement()).ToArray(), (from act in ct.DocumentSetTemplate.AllowedContentTypes select new DocumentSetTemplateAllowedContentType { - ContentTypeID = act + ContentTypeID = act.ContentTypeId }).ToArray() : null, DefaultDocuments = ct.DocumentSetTemplate.DefaultDocuments.Count > 0 ? (from dd in ct.DocumentSetTemplate.DefaultDocuments @@ -1440,7 +1440,10 @@ from contentType in source.ContentTypes contentType.DocumentSetTemplate.WelcomePage, contentType.DocumentSetTemplate.AllowedContentTypes != null ? (from act in contentType.DocumentSetTemplate.AllowedContentTypes - select act.ContentTypeID) : null, + select new Model.AllowedContentType + { + ContentTypeId = act.ContentTypeID + }) : null, contentType.DocumentSetTemplate.DefaultDocuments != null ? (from dd in contentType.DocumentSetTemplate.DefaultDocuments select new Model.DefaultDocument @@ -1451,10 +1454,16 @@ from contentType in source.ContentTypes }) : null, contentType.DocumentSetTemplate.SharedFields != null ? (from sf in contentType.DocumentSetTemplate.SharedFields - select Guid.Parse(sf.ID)) : null, + select new Model.SharedField + { + FieldId = Guid.Parse(sf.ID) + }) : null, contentType.DocumentSetTemplate.WelcomePageFields != null ? (from wpf in contentType.DocumentSetTemplate.WelcomePageFields - select Guid.Parse(wpf.ID)) : null + select new Model.WelcomePageField + { + FieldId = Guid.Parse(wpf.ID) + }) : null ) : null, DisplayFormUrl = contentType.DisplayFormUrl, EditFormUrl = contentType.EditFormUrl, diff --git a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201605Formatter.cs b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201605Formatter.cs index e82ccc77c0..bd3deaa30a 100644 --- a/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201605Formatter.cs +++ b/Core/OfficeDevPnP.Core/Framework/Provisioning/Providers/Xml/XMLPnPSchemaV201605Formatter.cs @@ -526,7 +526,7 @@ select field.SchemaXml.ToXmlElement()).ToArray(), (from act in ct.DocumentSetTemplate.AllowedContentTypes select new DocumentSetTemplateAllowedContentType { - ContentTypeID = act + ContentTypeID = act.ContentTypeId }).ToArray() : null, DefaultDocuments = ct.DocumentSetTemplate.DefaultDocuments.Count > 0 ? (from dd in ct.DocumentSetTemplate.DefaultDocuments @@ -1623,7 +1623,10 @@ from contentType in source.ContentTypes contentType.DocumentSetTemplate.WelcomePage, contentType.DocumentSetTemplate.AllowedContentTypes != null ? (from act in contentType.DocumentSetTemplate.AllowedContentTypes - select act.ContentTypeID) : null, + select new Model.AllowedContentType + { + ContentTypeId = act.ContentTypeID + }) : null, contentType.DocumentSetTemplate.DefaultDocuments != null ? (from dd in contentType.DocumentSetTemplate.DefaultDocuments select new Model.DefaultDocument @@ -1634,10 +1637,16 @@ from contentType in source.ContentTypes }) : null, contentType.DocumentSetTemplate.SharedFields != null ? (from sf in contentType.DocumentSetTemplate.SharedFields - select Guid.Parse(sf.ID)) : null, + select new Model.SharedField + { + FieldId = Guid.Parse(sf.ID) + }) : null, contentType.DocumentSetTemplate.WelcomePageFields != null ? (from wpf in contentType.DocumentSetTemplate.WelcomePageFields - select Guid.Parse(wpf.ID)) : null + select new Model.WelcomePageField + { + FieldId = Guid.Parse(wpf.ID) + }) : null ) : null, DisplayFormUrl = contentType.DisplayFormUrl, EditFormUrl = contentType.EditFormUrl, diff --git a/Core/OfficeDevPnP.Core/OfficeDevPnP.Core.csproj b/Core/OfficeDevPnP.Core/OfficeDevPnP.Core.csproj index 0741074716..3ab13f27cf 100644 --- a/Core/OfficeDevPnP.Core/OfficeDevPnP.Core.csproj +++ b/Core/OfficeDevPnP.Core/OfficeDevPnP.Core.csproj @@ -603,8 +603,14 @@ + + + + + + @@ -764,6 +770,10 @@ + + + +