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 @@
+
+
+
+