From 67be979ffdb8c4ec9fea12e13378291aee1409db Mon Sep 17 00:00:00 2001 From: Tobias Gerits Date: Tue, 1 Aug 2017 09:25:16 +0000 Subject: [PATCH 01/18] Extending ResultScriptWebPartDefinition, Handler, Validotr --- .../ResultScriptWebPartDefinitionGenerator.cs | 5 +- .../ResultScriptWebPartDefinitionValidator.cs | 132 +++++++++++++++++- .../ResultScriptWebPartModelHandler.cs | 77 +++++++++- .../Webparts/ResultScriptWebPartDefinition.cs | 98 +++++++++++++ 4 files changed, 301 insertions(+), 11 deletions(-) diff --git a/SPMeta2/SPMeta2.Containers.Standard/DefinitionGenerators/Webparts/ResultScriptWebPartDefinitionGenerator.cs b/SPMeta2/SPMeta2.Containers.Standard/DefinitionGenerators/Webparts/ResultScriptWebPartDefinitionGenerator.cs index 8c1132711..cc3b3fbab 100644 --- a/SPMeta2/SPMeta2.Containers.Standard/DefinitionGenerators/Webparts/ResultScriptWebPartDefinitionGenerator.cs +++ b/SPMeta2/SPMeta2.Containers.Standard/DefinitionGenerators/Webparts/ResultScriptWebPartDefinitionGenerator.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using SPMeta2.Definitions; using SPMeta2.Standard.Definitions.Webparts; @@ -20,6 +17,8 @@ public override DefinitionBase GenerateRandomDefinition(Action a def.ZoneId = "FullPage"; def.ZoneIndex = Rnd.Int(100); + + def.EmptyMessage = Rnd.String(); }); } } diff --git a/SPMeta2/SPMeta2.Regression.SSOM.Standard/Validation/Webparts/ResultScriptWebPartDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.SSOM.Standard/Validation/Webparts/ResultScriptWebPartDefinitionValidator.cs index 6f5b0cd61..5a7d65532 100644 --- a/SPMeta2/SPMeta2.Regression.SSOM.Standard/Validation/Webparts/ResultScriptWebPartDefinitionValidator.cs +++ b/SPMeta2/SPMeta2.Regression.SSOM.Standard/Validation/Webparts/ResultScriptWebPartDefinitionValidator.cs @@ -48,19 +48,145 @@ public override void DeployModel(object modelHost, DefinitionBase model) assert.SkipProperty(m => m.DataProviderJSON, "DataProviderJSON is null or empty, skipping."); if (!string.IsNullOrEmpty(definition.EmptyMessage)) - throw new NotImplementedException(); + assert.ShouldBeEqual(m => m.EmptyMessage, o => o.EmptyMessage); else assert.SkipProperty(m => m.EmptyMessage, "EmptyMessage is null or empty, skipping."); if (definition.ResultsPerPage.HasValue) - throw new NotImplementedException(); + assert.ShouldBeEqual(m => m.ResultsPerPage.Value, o => o.ResultsPerPage); else assert.SkipProperty(m => m.ResultsPerPage, "ResultsPerPage is null or empty, skipping."); if (definition.ShowResultCount.HasValue) - throw new NotImplementedException(); + assert.ShouldBeEqual(m => m.ShowResultCount.Value, o => o.ShowResultCount); else assert.SkipProperty(m => m.ShowResultCount, "ShowResultCount is null or empty, skipping."); + + if (definition.ShowLanguageOptions.HasValue) + assert.ShouldBeEqual(m => m.ShowLanguageOptions.Value, o => o.ShowLanguageOptions); + else + assert.SkipProperty(m => m.ShowLanguageOptions, "ShowLanguageOptions is null or empty, skipping."); + + if (definition.MaxPagesBeforeCurrent.HasValue) + assert.ShouldBeEqual(m => m.MaxPagesBeforeCurrent.Value, o => o.MaxPagesBeforeCurrent); + else + assert.SkipProperty(m => m.MaxPagesBeforeCurrent, "MaxPagesBeforeCurrent is null or empty, skipping."); + + if (definition.ShowBestBets.HasValue) + assert.ShouldBeEqual(m => m.ShowBestBets.Value, o => o.ShowBestBets); + else + assert.SkipProperty(m => m.ShowBestBets, "ShowBestBets is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.AdvancedSearchPageAddress)) + assert.ShouldBeEqual(m => m.AdvancedSearchPageAddress, o => o.AdvancedSearchPageAddress); + else + assert.SkipProperty(m => m.AdvancedSearchPageAddress, "AdvancedSearchPageAddress is null or empty, skipping."); + + if (definition.UseSharedDataProvider.HasValue) + assert.ShouldBeEqual(m => m.UseSharedDataProvider.Value, o => o.UseSharedDataProvider); + else + assert.SkipProperty(m => m.UseSharedDataProvider, "UseSharedDataProvider is null or empty, skipping."); + + if (definition.ShowPreferencesLink.HasValue) + assert.ShouldBeEqual(m => m.ShowPreferencesLink.Value, o => o.ShowPreferencesLink); + else + assert.SkipProperty(m => m.ShowPreferencesLink, "ShowPreferencesLink is null or empty, skipping."); + + if (definition.ShowViewDuplicates.HasValue) + assert.ShouldBeEqual(m => m.ShowViewDuplicates.Value, o => o.ShowViewDuplicates); + else + assert.SkipProperty(m => m.ShowViewDuplicates, "ShowViewDuplicates is null or empty, skipping."); + + if (definition.RepositionLanguageDropDown.HasValue) + assert.ShouldBeEqual(m => m.RepositionLanguageDropDown.Value, o => o.RepositionLanguageDropDown); + else + assert.SkipProperty(m => m.RepositionLanguageDropDown, "RepositionLanguageDropDown is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.PreloadedItemTemplateIdsJson)) + throw new NotImplementedException(); + else + assert.SkipProperty(m => m.PreloadedItemTemplateIdsJson, "PreloadedItemTemplateIdsJson is null or empty, skipping."); + + if (definition.ShowPaging.HasValue) + assert.ShouldBeEqual(m => m.ShowPaging.Value, o => o.ShowPaging); + else + assert.SkipProperty(m => m.ShowPaging, "ShowPaging is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.ResultTypeId)) + assert.ShouldBeEqual(m => m.ResultTypeId, o => o.ResultTypeId); + else + assert.SkipProperty(m => m.ResultTypeId, "ResultTypeId is null or empty, skipping."); + + if (definition.ShowResults.HasValue) + assert.ShouldBeEqual(m => m.ShowResults.Value, o => o.ShowResults); + else + assert.SkipProperty(m => m.ShowResults, "ShowResults is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.ItemTemplateId)) + assert.ShouldBeEqual(m => m.ItemTemplateId, o => o.ItemTemplateId); + else + assert.SkipProperty(m => m.ItemTemplateId, "ItemTemplateId is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.ItemBodyTemplateId)) + assert.ShouldBeEqual(m => m.ItemBodyTemplateId, o => o.ItemBodyTemplateId); + else + assert.SkipProperty(m => m.ItemBodyTemplateId, "ItemBodyTemplateId is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.HitHighlightedPropertiesJson)) + throw new NotImplementedException(); + else + assert.SkipProperty(m => m.HitHighlightedPropertiesJson, "HitHighlightedPropertiesJson is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.AvailableSortsJson)) + throw new NotImplementedException(); + else + assert.SkipProperty(m => m.AvailableSortsJson, "AvailableSortsJson is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.RenderTemplateId)) + assert.ShouldBeEqual(m => m.RenderTemplateId, o => o.RenderTemplateId); + else + assert.SkipProperty(m => m.RenderTemplateId, "RenderTemplateId is null or empty, skipping."); + + if (definition.ShowPersonalFavorites.HasValue) + assert.ShouldBeEqual(m => m.ShowPersonalFavorites.Value, o => o.ShowPersonalFavorites); + else + assert.SkipProperty(m => m.ShowPersonalFavorites, "ShowPersonalFavorites is null or empty, skipping."); + + if (definition.ShowSortOptions.HasValue) + assert.ShouldBeEqual(m => m.ShowSortOptions.Value, o => o.ShowSortOptions); + else + assert.SkipProperty(m => m.ShowSortOptions, "ShowSortOptions is null or empty, skipping."); + + if (definition.ShowAlertMe.HasValue) + assert.ShouldBeEqual(m => m.ShowAlertMe.Value, o => o.ShowAlertMe); + else + assert.SkipProperty(m => m.ShowAlertMe, "ShowAlertMe is null or empty, skipping."); + + if (definition.ShowDidYouMean.HasValue) + assert.ShouldBeEqual(m => m.ShowDidYouMean.Value, o => o.ShowDidYouMean); + else + assert.SkipProperty(m => m.ShowDidYouMean, "ShowDidYouMean is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.QueryGroupName)) + assert.ShouldBeEqual(m => m.QueryGroupName, o => o.QueryGroupName); + else + assert.SkipProperty(m => m.QueryGroupName, "QueryGroupName is null or empty, skipping."); + + if (definition.ShowAdvancedLink.HasValue) + assert.ShouldBeEqual(m => m.ShowAdvancedLink.Value, o => o.ShowAdvancedLink); + else + assert.SkipProperty(m => m.ShowAdvancedLink, "ShowAdvancedLink is null or empty, skipping."); + + if (definition.BypassResultTypes.HasValue) + assert.ShouldBeEqual(m => m.BypassResultTypes.Value, o => o.BypassResultTypes); + else + assert.SkipProperty(m => m.BypassResultTypes, "BypassResultTypes is null or empty, skipping."); + + if (!string.IsNullOrEmpty(definition.GroupTemplateId)) + assert.ShouldBeEqual(m => m.GroupTemplateId, o => o.GroupTemplateId); + else + assert.SkipProperty(m => m.GroupTemplateId, "GroupTemplateId is null or empty, skipping."); + }); } diff --git a/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs b/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs index 5bd43802f..b33850e45 100644 --- a/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs +++ b/SPMeta2/SPMeta2.SSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - using System.Web.UI.WebControls.WebParts; using Microsoft.Office.Server.Search.WebControls; -using Microsoft.SharePoint.Portal.WebControls; using SPMeta2.Definitions; using SPMeta2.SSOM.ModelHandlers; using SPMeta2.SSOM.ModelHosts; @@ -51,6 +46,78 @@ protected override void ProcessWebpartProperties(WebPart webpartInstance, WebPar if (definition.ShowResultCount.HasValue) typedWebpart.ShowResultCount = definition.ShowResultCount.Value; + + if (definition.ShowLanguageOptions.HasValue) + typedWebpart.ShowLanguageOptions = definition.ShowLanguageOptions.Value; + + if (definition.MaxPagesBeforeCurrent.HasValue) + typedWebpart.MaxPagesBeforeCurrent = definition.MaxPagesBeforeCurrent.Value; + + if (definition.ShowBestBets.HasValue) + typedWebpart.ShowBestBets = definition.ShowBestBets.Value; + + if (!string.IsNullOrEmpty(definition.AdvancedSearchPageAddress)) + typedWebpart.AdvancedSearchPageAddress = definition.AdvancedSearchPageAddress; + + if (definition.UseSharedDataProvider.HasValue) + typedWebpart.UseSharedDataProvider = definition.UseSharedDataProvider.Value; + + if (definition.ShowPreferencesLink.HasValue) + typedWebpart.ShowPreferencesLink = definition.ShowPreferencesLink.Value; + + if (definition.ShowViewDuplicates.HasValue) + typedWebpart.ShowViewDuplicates = definition.ShowViewDuplicates.Value; + + if (definition.RepositionLanguageDropDown.HasValue) + typedWebpart.RepositionLanguageDropDown = definition.RepositionLanguageDropDown.Value; + + if (!string.IsNullOrEmpty(definition.PreloadedItemTemplateIdsJson)) + typedWebpart.PreloadedItemTemplateIdsJson = definition.PreloadedItemTemplateIdsJson; + + if (definition.ShowPaging.HasValue) + typedWebpart.ShowPaging = definition.ShowPaging.Value; + + if (!string.IsNullOrEmpty(definition.ResultTypeId)) + typedWebpart.ResultTypeId = definition.ResultTypeId; + + if (definition.ShowResults.HasValue) + typedWebpart.ShowResults = definition.ShowResults.Value; + + if (!string.IsNullOrEmpty(definition.ItemTemplateId)) + typedWebpart.ItemTemplateId = definition.ItemTemplateId; + + if (!string.IsNullOrEmpty(definition.HitHighlightedPropertiesJson)) + typedWebpart.HitHighlightedPropertiesJson = definition.HitHighlightedPropertiesJson; + + if (!string.IsNullOrEmpty(definition.AvailableSortsJson)) + typedWebpart.AvailableSortsJson = definition.AvailableSortsJson; + + if (!string.IsNullOrEmpty(definition.RenderTemplateId)) + typedWebpart.RenderTemplateId = definition.RenderTemplateId; + + if (definition.ShowPersonalFavorites.HasValue) + typedWebpart.ShowPersonalFavorites = definition.ShowPersonalFavorites.Value; + + if (definition.ShowSortOptions.HasValue) + typedWebpart.ShowSortOptions = definition.ShowSortOptions.Value; + + if (definition.ShowAlertMe.HasValue) + typedWebpart.ShowAlertMe = definition.ShowAlertMe.Value; + + if (definition.ShowDidYouMean.HasValue) + typedWebpart.ShowDidYouMean = definition.ShowDidYouMean.Value; + + if (!string.IsNullOrEmpty(definition.QueryGroupName)) + typedWebpart.QueryGroupName = definition.QueryGroupName; + + if (definition.ShowAdvancedLink.HasValue) + typedWebpart.ShowAdvancedLink = definition.ShowAdvancedLink.Value; + + if (definition.BypassResultTypes.HasValue) + typedWebpart.BypassResultTypes = definition.BypassResultTypes.Value; + + if (!string.IsNullOrEmpty(definition.GroupTemplateId)) + typedWebpart.GroupTemplateId = definition.GroupTemplateId; } #endregion diff --git a/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs b/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs index 4e2096705..e579cce36 100644 --- a/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs +++ b/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs @@ -48,7 +48,105 @@ public class ResultScriptWebPartDefinition : WebPartDefinition [ExpectValidation] public bool? ShowResultCount { get; set; } + [DataMember] + [ExpectValidation] + public bool? ShowLanguageOptions { get; set; } + + [DataMember] + [ExpectValidation] + public int? MaxPagesBeforeCurrent { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowBestBets { get; set; } + + [DataMember] + [ExpectValidation] + public string AdvancedSearchPageAddress { get; set; } + + [DataMember] + [ExpectValidation] + public bool? UseSharedDataProvider { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowPreferencesLink { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowViewDuplicates { get; set; } + + [DataMember] + [ExpectValidation] + public bool? RepositionLanguageDropDown { get; set; } + + [DataMember] + [ExpectValidation] + public string PreloadedItemTemplateIdsJson { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowPaging { get; set; } + + [DataMember] + [ExpectValidation] + public string ResultTypeId { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowResults { get; set; } + + [DataMember] + [ExpectValidation] + public string ItemTemplateId { get; set; } + + [DataMember] + [ExpectValidation] + public string ItemBodyTemplateId { get; set; } + + [DataMember] + [ExpectValidation] + public string HitHighlightedPropertiesJson { get; set; } + + [DataMember] + [ExpectValidation] + public string AvailableSortsJson { get; set; } + + [DataMember] + [ExpectValidation] + public string RenderTemplateId { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowPersonalFavorites { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowSortOptions { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowAlertMe { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowDidYouMean { get; set; } + + [DataMember] + [ExpectValidation] + public string QueryGroupName { get; set; } + [DataMember] + [ExpectValidation] + public bool? ShowAdvancedLink { get; set; } + + [DataMember] + [ExpectValidation] + public bool? BypassResultTypes { get; set; } + + [DataMember] + [ExpectValidation] + public string GroupTemplateId { get; set; } #endregion #region methods From bd78d366138d2da8566a6a162a8097d981a94692 Mon Sep 17 00:00:00 2001 From: Tobias Gerits Date: Wed, 2 Aug 2017 12:23:11 +0000 Subject: [PATCH 02/18] =?UTF-8?q?Extended=20ResultScriptWebpart=20Definiti?= =?UTF-8?q?on,=20ModelHandler=20for=20CSOM.=20This=20doesn=C2=B4t=20includ?= =?UTF-8?q?e=20the=20Code=20for=20the=20ResultScriptWebPartDefinitionValid?= =?UTF-8?q?ator=20because=20I=20wasn=C2=B4t=20sure=20how=20to=20implement?= =?UTF-8?q?=20the=20Assertions.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResultScriptWebPartModelHandler.cs | 117 +++++++++++++++++- .../Webparts/ResultScriptWebPartDefinition.cs | 103 ++++++++++++++- 2 files changed, 210 insertions(+), 10 deletions(-) diff --git a/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs b/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs index 9357b5b84..0aca7f3b0 100644 --- a/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs +++ b/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/Webparts/ResultScriptWebPartModelHandler.cs @@ -28,13 +28,118 @@ public override Type TargetType protected override string GetWebpartXmlDefinition(ListItemModelHost listItemModelHost, WebPartDefinitionBase webPartModel) { - var wpModel = webPartModel.WithAssertAndCast("model", value => value.RequireNotNull()); - - var wpXml = WebpartXmlExtensions - .LoadWebpartXmlDocument(BuiltInWebPartTemplates.ResultScriptWebPart) - .ToString(); + var definition = webPartModel.WithAssertAndCast("model", value => value.RequireNotNull()); + var xml = WebpartXmlExtensions.LoadWebpartXmlDocument(ProcessCommonWebpartProperties(BuiltInWebPartTemplates.ResultScriptWebPart, webPartModel)); + + if (!string.IsNullOrEmpty(definition.DataProviderJSON)) + xml.SetOrUpdateProperty("DataProviderJSON", definition.DataProviderJSON); - return wpXml; + if (!string.IsNullOrEmpty(definition.EmptyMessage)) + xml.SetOrUpdateProperty("EmptyMessage", definition.EmptyMessage); + + if (definition.ResultsPerPage.HasValue) + xml.SetOrUpdateProperty("ResultsPerPage", definition.ResultsPerPage.Value.ToString()); + + if (definition.ShowResultCount.HasValue) + xml.SetOrUpdateProperty("ShowResultCount", definition.ShowResultCount.Value.ToString()); + + if (definition.MaxPagesBeforeCurrent.HasValue) + xml.SetOrUpdateProperty("MaxPagesBeforeCurrent", definition.MaxPagesBeforeCurrent.Value.ToString()); + + if (definition.ShowBestBets.HasValue) + xml.SetOrUpdateProperty("ShowBestBets", definition.ShowBestBets.Value.ToString()); + + if (definition.ShowViewDuplicates.HasValue) + xml.SetOrUpdateProperty("ShowViewDuplicates", definition.ShowViewDuplicates.Value.ToString()); + + if (definition.Height.HasValue) + xml.SetOrUpdateProperty("Height", definition.Height.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.AdvancedSearchPageAddress)) + xml.SetOrUpdateProperty("AdvancedSearchPageAddress", definition.AdvancedSearchPageAddress); + + if (definition.UseSharedDataProvider.HasValue) + xml.SetOrUpdateProperty("UseSharedDataProvider", definition.UseSharedDataProvider.Value.ToString()); + + if (definition.ShowPreferencesLink.HasValue) + xml.SetOrUpdateProperty("ShowPreferencesLink", definition.ShowPreferencesLink.Value.ToString()); + + if (definition.RepositionLanguageDropDown.HasValue) + xml.SetOrUpdateProperty("RepositionLanguageDropDown", definition.RepositionLanguageDropDown.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.PreloadedItemTemplateIdsJson)) + xml.SetOrUpdateProperty("PreloadedItemTemplateIdsJson", definition.PreloadedItemTemplateIdsJson); + + if (definition.ShowPaging.HasValue) + xml.SetOrUpdateProperty("ShowPaging", definition.ShowPaging.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.ResultTypeId)) + xml.SetOrUpdateProperty("ResultTypeId", definition.ResultTypeId); + + if (!string.IsNullOrEmpty(definition.Title)) + xml.SetOrUpdateProperty("Title", definition.Title); + + if (definition.ShowResults.HasValue) + xml.SetOrUpdateProperty("ShowResults", definition.ShowResults.Value.ToString()); + + if (definition.Hidden.HasValue) + xml.SetOrUpdateProperty("Hidden", definition.Hidden.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.ItemTemplateId)) + xml.SetOrUpdateProperty("ItemTemplateId", definition.ItemTemplateId); + + if (!string.IsNullOrEmpty(definition.ItemBodyTemplateId)) + xml.SetOrUpdateProperty("ItemBodyTemplateId", definition.ItemBodyTemplateId); + + if (!string.IsNullOrEmpty(definition.HitHighlightedPropertiesJson)) + xml.SetOrUpdateProperty("HitHighlightedPropertiesJson", definition.HitHighlightedPropertiesJson); + + if (!string.IsNullOrEmpty(definition.AvailableSortsJson)) + xml.SetOrUpdateProperty("AvailableSortsJson", definition.AvailableSortsJson); + + if (!string.IsNullOrEmpty(definition.RenderTemplateId)) + xml.SetOrUpdateProperty("RenderTemplateId", definition.RenderTemplateId); + + if (definition.ShowPersonalFavorites.HasValue) + xml.SetOrUpdateProperty("ShowPersonalFavorites", definition.ShowPersonalFavorites.Value.ToString()); + + if (definition.ShowSortOptions.HasValue) + xml.SetOrUpdateProperty("ShowSortOptions", definition.ShowSortOptions.Value.ToString()); + + if (definition.ShowLanguageOptions.HasValue) + xml.SetOrUpdateProperty("ShowLanguageOptions", definition.ShowLanguageOptions.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.Description)) + xml.SetOrUpdateProperty("Description", definition.Description); + + if (!string.IsNullOrEmpty(definition.TitleUrl)) + xml.SetOrUpdateProperty("TitleUrl", definition.TitleUrl); + + if (definition.ShowAlertMe.HasValue) + xml.SetOrUpdateProperty("ShowAlertMe", definition.ShowAlertMe.Value.ToString()); + + if (definition.ShowDidYouMean.HasValue) + xml.SetOrUpdateProperty("ShowDidYouMean", definition.ShowDidYouMean.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.QueryGroupName)) + xml.SetOrUpdateProperty("QueryGroupName", definition.QueryGroupName); + + if (definition.Width.HasValue) + xml.SetOrUpdateProperty("Width", definition.Width.Value.ToString()); + + if (definition.ShowAdvancedLink.HasValue) + xml.SetOrUpdateProperty("ShowAdvancedLink", definition.ShowAdvancedLink.Value.ToString()); + + if (definition.BypassResultTypes.HasValue) + xml.SetOrUpdateProperty("BypassResultTypes", definition.BypassResultTypes.Value.ToString()); + + if (!string.IsNullOrEmpty(definition.GroupTemplateId)) + xml.SetOrUpdateProperty("GroupTemplateId", definition.GroupTemplateId); + + if (!string.IsNullOrEmpty(definition.TitleIconImageUrl)) + xml.SetOrUpdateProperty("TitleIconImageUrl", definition.TitleIconImageUrl); + + return xml.ToString(); } #endregion diff --git a/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs b/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs index 4e2096705..a04042267 100644 --- a/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs +++ b/SPMeta2/SPMeta2.Standard/Definitions/Webparts/ResultScriptWebPartDefinition.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Runtime.Serialization; -using System.Text; using SPMeta2.Attributes; using SPMeta2.Attributes.Regression; @@ -48,7 +45,105 @@ public class ResultScriptWebPartDefinition : WebPartDefinition [ExpectValidation] public bool? ShowResultCount { get; set; } + [DataMember] + [ExpectValidation] + public bool? ShowLanguageOptions { get; set; } + + [DataMember] + [ExpectValidation] + public int? MaxPagesBeforeCurrent { get; set; } + [DataMember] + [ExpectValidation] + public bool? ShowBestBets { get; set; } + + [DataMember] + [ExpectValidation] + public string AdvancedSearchPageAddress { get; set; } + + [DataMember] + [ExpectValidation] + public bool? UseSharedDataProvider { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowPreferencesLink { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowViewDuplicates { get; set; } + + [DataMember] + [ExpectValidation] + public bool? RepositionLanguageDropDown { get; set; } + + [DataMember] + [ExpectValidation] + public string PreloadedItemTemplateIdsJson { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowPaging { get; set; } + + [DataMember] + [ExpectValidation] + public string ResultTypeId { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowResults { get; set; } + + [DataMember] + [ExpectValidation] + public string ItemTemplateId { get; set; } + + [DataMember] + [ExpectValidation] + public string ItemBodyTemplateId { get; set; } + + [DataMember] + [ExpectValidation] + public string HitHighlightedPropertiesJson { get; set; } + + [DataMember] + [ExpectValidation] + public string AvailableSortsJson { get; set; } + + [DataMember] + [ExpectValidation] + public string RenderTemplateId { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowPersonalFavorites { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowSortOptions { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowAlertMe { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowDidYouMean { get; set; } + + [DataMember] + [ExpectValidation] + public string QueryGroupName { get; set; } + + [DataMember] + [ExpectValidation] + public bool? ShowAdvancedLink { get; set; } + + [DataMember] + [ExpectValidation] + public bool? BypassResultTypes { get; set; } + + [DataMember] + [ExpectValidation] + public string GroupTemplateId { get; set; } #endregion #region methods @@ -56,7 +151,7 @@ public class ResultScriptWebPartDefinition : WebPartDefinition public override string ToString() { return new ToStringResult(this, base.ToString()) - .ToString(); + .ToString(); } #endregion From 64255bb14bf8960131f991f41d12fbad8380a539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Bl=C3=BCher?= Date: Wed, 2 Aug 2017 15:33:38 +0200 Subject: [PATCH 03/18] Change PeoplePicketSettingsSyntax so AddPeoplePicketSettings is available for SPWebApplication Model Extended TypedSyntaxTests to also include PeoplePickerSettingsDefinition --- .../SPMeta2.Regression.Tests/Impl/Syntax/TypedSyntaxTests.cs | 2 ++ .../Syntax/Default/PeoplePickerSettingsDefintionSyntax.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/TypedSyntaxTests.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/TypedSyntaxTests.cs index 9fbd9bfbc..fea59699c 100644 --- a/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/TypedSyntaxTests.cs +++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Syntax/TypedSyntaxTests.cs @@ -75,6 +75,8 @@ public void CanPassTypedSyntax_WebApplicationLevel() webApplication.AddSuiteBar(new SuiteBarDefinition()); webApplication.AddFarmSolution(new FarmSolutionDefinition()); + + webApplication.AddPeoplePickerSettings(new PeoplePickerSettingsDefinition()); }); } diff --git a/SPMeta2/SPMeta2/Syntax/Default/PeoplePickerSettingsDefintionSyntax.cs b/SPMeta2/SPMeta2/Syntax/Default/PeoplePickerSettingsDefintionSyntax.cs index 4beffedbd..81fd29c5b 100644 --- a/SPMeta2/SPMeta2/Syntax/Default/PeoplePickerSettingsDefintionSyntax.cs +++ b/SPMeta2/SPMeta2/Syntax/Default/PeoplePickerSettingsDefintionSyntax.cs @@ -18,14 +18,14 @@ public static class PeoplePickerSettingsDefintionSyntax #region methods public static TModelNode AddPeoplePickerSettings(this TModelNode model, PeoplePickerSettingsDefinition definition) - where TModelNode : ModelNode, IModuleFileHostModelNode, new() + where TModelNode : ModelNode, IWebApplicationModelNode, new() { return AddPeoplePickerSettings(model, definition, null); } public static TModelNode AddPeoplePickerSettings(this TModelNode model, PeoplePickerSettingsDefinition definition, Action action) - where TModelNode : ModelNode, IModuleFileHostModelNode, new() + where TModelNode : ModelNode, IWebApplicationModelNode, new() { return model.AddTypedDefinitionNode(definition, action); } From d3880d7d1c1e579f5ed538a77cc167d8e817452c Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Mon, 28 Aug 2017 21:46:12 +1000 Subject: [PATCH 04/18] + MetadataNavigationSettings Hierarchy missing Folders field #1064 --- .../MetadataNavigationSettingsConfig.cs | 33 ++++++++++++------- .../MetadataNavigationSettingsModelHandler.cs | 10 ++++-- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/SPMeta2/SPMeta2.CSOM.Standard/Config/MetadataNavigationSettingsConfig.cs b/SPMeta2/SPMeta2.CSOM.Standard/Config/MetadataNavigationSettingsConfig.cs index 1b8353f8d..111a11625 100644 --- a/SPMeta2/SPMeta2.CSOM.Standard/Config/MetadataNavigationSettingsConfig.cs +++ b/SPMeta2/SPMeta2.CSOM.Standard/Config/MetadataNavigationSettingsConfig.cs @@ -70,27 +70,36 @@ public static MetadataNavigationSettingsConfig GetMetadataNavigationSettings(Lis #region methods + public void EnsureDefaultFolderHierarchyNode() + { + var root = SettingDocument.Root; + + var parentNode = root.Descendants("NavigationHierarchies").FirstOrDefault(); + + if (parentNode == null) + { + parentNode = new XElement("NavigationHierarchies"); + root.Add(parentNode); + + var folderHierarchyNode = new XElement("FolderHierarchy"); + + folderHierarchyNode.SetAttribute("HideFoldersNode", "False"); + parentNode.Add(folderHierarchyNode); + } + } + public void AddConfiguredHierarchy(MetadataNavigationHierarchyConfig item) { var currentKey = FindConfiguredKeyFilter(item.FieldId); if (currentKey == null) { - var root = SettingDocument.Root; + EnsureDefaultFolderHierarchyNode(); + // parentNode should be ensured iearly in EnsureDefaultFolderHierarchyNode() + var root = SettingDocument.Root; var parentNode = root.Descendants("NavigationHierarchies").FirstOrDefault(); - if (parentNode == null) - { - parentNode = new XElement("NavigationHierarchies"); - root.Add(parentNode); - - var folderHierarchyNode = new XElement("FolderHierarchy"); - - folderHierarchyNode.SetAttribute("HideFoldersNode", "False"); - parentNode.Add(folderHierarchyNode); - } - var newNode = new XElement("MetadataField"); newNode.SetAttributeValue("FieldID", item.FieldId.ToString("D")); diff --git a/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/MetadataNavigationSettingsModelHandler.cs b/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/MetadataNavigationSettingsModelHandler.cs index dec81f893..67a1c0abe 100644 --- a/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/MetadataNavigationSettingsModelHandler.cs +++ b/SPMeta2/SPMeta2.CSOM.Standard/ModelHandlers/MetadataNavigationSettingsModelHandler.cs @@ -59,6 +59,12 @@ private void DeploySettings(object modelHost, ListModelHost listHost, MetadataNa // deploy var settings = GetCurrentSettings(list); + // MetadataNavigationSettings Hierarchy missing Folders field #1064 + // https://github.com/SubPointSolutions/spmeta2/issues/1064 + // always ensure a top level NavigationHierarchies->FolderHierarchy->HideFoldersNode=false + + settings.EnsureDefaultFolderHierarchyNode(); + if (definition.Hierarchies.Count() > 0) { foreach (var h in definition.Hierarchies) @@ -66,7 +72,7 @@ private void DeploySettings(object modelHost, ListModelHost listHost, MetadataNa if (h.FieldId.HasGuidValue()) { var targetField = list.Fields.GetById(h.FieldId.Value); - + context.Load(targetField); context.ExecuteQueryWithTrace(); @@ -117,7 +123,7 @@ private void DeploySettings(object modelHost, ListModelHost listHost, MetadataNa ObjectDefinition = definition, ModelHost = modelHost }); - + if (needUpdate) { MetadataNavigationSettingsConfig.SetMetadataNavigationSettings(list, settings); From f937bfc485dbffd46c64f4aa183b281df890493e Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Mon, 28 Aug 2017 22:59:33 +1000 Subject: [PATCH 05/18] + refactoring for IsSharePointOnlineContext fails to Recognize Claim Based Authentication Context #1036 --- .../ClientRuntimeContextExtensions.cs | 129 +++++++++--------- .../ModelHandlers/CSOMModelHandlerBase.cs | 8 +- .../ClientRuntimeContextServiceBase.cs | 45 ++++-- .../DefaultClientRuntimeContextService.cs | 68 +++++++++ ...uireCSOMRuntimeVersionDeploymentService.cs | 2 +- 5 files changed, 167 insertions(+), 85 deletions(-) diff --git a/SPMeta2/SPMeta2.CSOM/Extensions/ClientRuntimeContextExtensions.cs b/SPMeta2/SPMeta2.CSOM/Extensions/ClientRuntimeContextExtensions.cs index ad765a3dd..f7dfb3681 100644 --- a/SPMeta2/SPMeta2.CSOM/Extensions/ClientRuntimeContextExtensions.cs +++ b/SPMeta2/SPMeta2.CSOM/Extensions/ClientRuntimeContextExtensions.cs @@ -1,62 +1,67 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using Microsoft.SharePoint.Client; -using SPMeta2.CSOM.Services; -using SPMeta2.CSOM.Services.Impl; -using SPMeta2.Services; -using SPMeta2.Services.Impl; - -namespace SPMeta2.CSOM.Extensions -{ - public static class ClientRuntimeContextExtensions - { - #region static - - static ClientRuntimeContextExtensions() - { - DefaultClientRuntimeContextService = new DefaultClientRuntimeContextService(); - DefaultTraceServiceBase = new TraceSourceService(); - } - - #endregion - - #region properties - - private static readonly ClientRuntimeContextServiceBase DefaultClientRuntimeContextService; - private static readonly TraceServiceBase DefaultTraceServiceBase; - - private static TraceServiceBase TraceService - { - get { return ServiceContainer.Instance.GetService() ?? DefaultTraceServiceBase; } - } - - private static ClientRuntimeContextServiceBase ClientRuntimeContextService - { - get - { - return ServiceContainer.Instance.GetService() ?? DefaultClientRuntimeContextService; - } - } - - #endregion - - #region methods - - public static void ExecuteQueryWithTrace(this ClientRuntimeContext context) - { - TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "ExecuteQuery()"); - - // delegating to ClientRuntimeContextService instance - // Implement fault tolerant provision for CSOM #567 - // https://github.com/SubPointSolutions/spmeta2/issues/567 - //context.ExecuteQuery(); - - ClientRuntimeContextService.ExecuteQuery(context); - } - - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Microsoft.SharePoint.Client; +using SPMeta2.CSOM.Services; +using SPMeta2.CSOM.Services.Impl; +using SPMeta2.Services; +using SPMeta2.Services.Impl; + +namespace SPMeta2.CSOM.Extensions +{ + public static class ClientRuntimeContextExtensions + { + #region static + + static ClientRuntimeContextExtensions() + { + DefaultClientRuntimeContextService = new DefaultClientRuntimeContextService(); + DefaultTraceServiceBase = new TraceSourceService(); + } + + #endregion + + #region properties + + private static readonly ClientRuntimeContextServiceBase DefaultClientRuntimeContextService; + private static readonly TraceServiceBase DefaultTraceServiceBase; + + private static TraceServiceBase TraceService + { + get { return ServiceContainer.Instance.GetService() ?? DefaultTraceServiceBase; } + } + + private static ClientRuntimeContextServiceBase ClientRuntimeContextService + { + get + { + return ServiceContainer.Instance.GetService() ?? DefaultClientRuntimeContextService; + } + } + + #endregion + + #region methods + + public static bool IsSharePointOnlineContext(this ClientRuntimeContext context) + { + return ClientRuntimeContextService.IsSharePointOnlineContext(context); + } + + public static void ExecuteQueryWithTrace(this ClientRuntimeContext context) + { + TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "ExecuteQuery()"); + + // delegating to ClientRuntimeContextService instance + // Implement fault tolerant provision for CSOM #567 + // https://github.com/SubPointSolutions/spmeta2/issues/567 + //context.ExecuteQuery(); + + ClientRuntimeContextService.ExecuteQuery(context); + } + + #endregion + } +} diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/CSOMModelHandlerBase.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/CSOMModelHandlerBase.cs index 7b4f0738f..758ae53e7 100644 --- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/CSOMModelHandlerBase.cs +++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/CSOMModelHandlerBase.cs @@ -54,13 +54,7 @@ protected virtual object GetPropertyValue(object obj, string propName) protected virtual bool IsSharePointOnlineContext(ClientContext context) { -#if NET35 - return false; -#endif - -#if !NET35 - return context.Credentials is SharePointOnlineCredentials; -#endif + return ClientRuntimeContextExtensions.IsSharePointOnlineContext(context); } #endregion diff --git a/SPMeta2/SPMeta2.CSOM/Services/ClientRuntimeContextServiceBase.cs b/SPMeta2/SPMeta2.CSOM/Services/ClientRuntimeContextServiceBase.cs index 27a533ebd..40a1af4a6 100644 --- a/SPMeta2/SPMeta2.CSOM/Services/ClientRuntimeContextServiceBase.cs +++ b/SPMeta2/SPMeta2.CSOM/Services/ClientRuntimeContextServiceBase.cs @@ -1,15 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using Microsoft.SharePoint.Client; -using SPMeta2.Services; - -namespace SPMeta2.CSOM.Services -{ - public abstract class ClientRuntimeContextServiceBase - { - public abstract void ExecuteQuery(ClientRuntimeContext context); - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using Microsoft.SharePoint.Client; +using SPMeta2.Services; + +namespace SPMeta2.CSOM.Services +{ + public abstract class ClientRuntimeContextServiceBase + { + public abstract void ExecuteQuery(ClientRuntimeContext context); + + /// + /// Detects if the context is SharePoint Online one. + /// Tries to detect the version of the assembly looking for 16.1, + /// then fallaback to context.Credentials is SharePointOnlineCredentials + /// + /// Returns false for the rest of the cases. + /// + /// + /// + public virtual bool IsSharePointOnlineContext(ClientRuntimeContext context) + { + // this must be overwritten in the inherited class + throw new NotImplementedException(); + } + } +} diff --git a/SPMeta2/SPMeta2.CSOM/Services/Impl/DefaultClientRuntimeContextService.cs b/SPMeta2/SPMeta2.CSOM/Services/Impl/DefaultClientRuntimeContextService.cs index 26f2a8c06..80a311551 100644 --- a/SPMeta2/SPMeta2.CSOM/Services/Impl/DefaultClientRuntimeContextService.cs +++ b/SPMeta2/SPMeta2.CSOM/Services/Impl/DefaultClientRuntimeContextService.cs @@ -31,6 +31,8 @@ public DefaultClientRuntimeContextService() InitAllowedStatusCodes(); InitAllowedIISResetSocketStatusCodes(); + + Context2SharePointOnlineHash = new Dictionary(); } private void InitAllowedIISResetSocketStatusCodes() @@ -48,6 +50,23 @@ private void InitAllowedStatusCodes() #region properties + + + private RequireCSOMRuntimeVersionDeploymentService _assemblyVersionService; + + protected virtual RequireCSOMRuntimeVersionDeploymentService AssemblyVersionService + { + get + { + if (_assemblyVersionService == null) + _assemblyVersionService = new RequireCSOMRuntimeVersionDeploymentService(); + + return _assemblyVersionService; + } + } + + protected Dictionary Context2SharePointOnlineHash { get; set; } + public int ExecuteQueryDelayInMilliseconds { get; set; } public int ExecuteQueryRetryAttempts { get; set; } public double ExecuteQueryRetryDelayMultiplier { get; set; } @@ -72,6 +91,55 @@ protected virtual List AllowedIISResetSocketStatusCodes #region methods + protected virtual bool DetectSharePointOnlineContext(ClientRuntimeContext context) + { +#if NET35 + return false; +#endif + +#if !NET35 + // checking based on the current assembly version + // using hash to avoid performance degradation + + if (!Context2SharePointOnlineHash.ContainsKey(context)) + { + Context2SharePointOnlineHash.Add(context, false); + + try + { + // by assembly version + var version = AssemblyVersionService.GetAssemblyFileVersion(context.GetType().Assembly); + + // 16.1.0.0 for SharePoint Online + // 16.0.0.0 for SharePoint 2016, we should be safe + // Major.Minor.Build.Revision + Context2SharePointOnlineHash[context] = version.Major == 16 && version.Minor == 1; + } + catch (Exception e) + { + // fallback + Context2SharePointOnlineHash[context] = context.Credentials is SharePointOnlineCredentials; + } + } + + return Context2SharePointOnlineHash[context]; +#endif + } + + /// + /// Detects if the context is SharePoint Online one. + /// Tries to detect the version of the assembly looking for 16.1, + /// then fallaback to context.Credentials is SharePointOnlineCredentials + /// + /// Returns false for the rest of the cases. + /// + /// + /// + public override bool IsSharePointOnlineContext(ClientRuntimeContext context) + { + return DetectSharePointOnlineContext(context); + } + protected virtual void InternalExecuteQuery(ClientRuntimeContext context) { if (CustomExecuteQueryHandler != null) diff --git a/SPMeta2/SPMeta2.CSOM/Services/Impl/RequireCSOMRuntimeVersionDeploymentService.cs b/SPMeta2/SPMeta2.CSOM/Services/Impl/RequireCSOMRuntimeVersionDeploymentService.cs index 62f8e1d89..e0da00fc2 100644 --- a/SPMeta2/SPMeta2.CSOM/Services/Impl/RequireCSOMRuntimeVersionDeploymentService.cs +++ b/SPMeta2/SPMeta2.CSOM/Services/Impl/RequireCSOMRuntimeVersionDeploymentService.cs @@ -125,7 +125,7 @@ protected virtual Version GetCSOMRuntimeVersion() return GetAssemblyFileVersion(spAssembly); } - protected virtual Version GetAssemblyFileVersion(Assembly assembly) + public virtual Version GetAssemblyFileVersion(Assembly assembly) { var fileVersionAttribute = Attribute.GetCustomAttribute( assembly, From 1ede9a0fa1d4732fc5ccbf4f90ce93a971b1a2dc Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Wed, 30 Aug 2017 18:14:04 +1000 Subject: [PATCH 06/18] + CSOM fix for List view scope does not apply in xslt list view webpart #1030 + Improved validation for ListViewWebPartDefinition / XsltListViewWebPartDefinition + non-existing ContentTypeLink validation fix --- .../ContentTypeLinkModelHandler.cs | 2 +- .../Webparts/ListViewWebPartModelHandler.cs | 14 +- .../XsltListViewWebPartModelHandler.cs | 13 + .../Webparts/ListViewWebPartDefinition.cs | 3 + .../Webparts/XsltListViewWebPartDefinition.cs | 371 +++++++++--------- 5 files changed, 217 insertions(+), 186 deletions(-) diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ContentTypeLinkModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ContentTypeLinkModelHandler.cs index 19c95738e..2230ca737 100644 --- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ContentTypeLinkModelHandler.cs +++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ContentTypeLinkModelHandler.cs @@ -118,7 +118,7 @@ public override void DeployModel(object modelHost, DefinitionBase model) targetContentType = web.AvailableContentTypes[0]; } - if (targetContentType == null) + if (targetContentType == null || targetContentType.ServerObjectIsNull == true) { TraceService.ErrorFormat((int)LogEventId.ModelProvisionCoreCall, "Cannot find site content type by ID: [{0}] or Name:[{1}].", diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/ListViewWebPartModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/ListViewWebPartModelHandler.cs index fc4319d38..7c76f131b 100644 --- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/ListViewWebPartModelHandler.cs +++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/ListViewWebPartModelHandler.cs @@ -270,7 +270,19 @@ protected override void InternalOnAfterWebPartProvision(WebPartProcessingContext } #if !NET35 - hiddenView.ListViewXml = htmlSchemaXml.Root.GetInnerXmlAsString(); + hiddenView.ListViewXml = htmlSchemaXml.Root.GetInnerXmlAsString(); + + // updating other attribute based properties, in the root node + // partly related to following issue + // List view scope does not apply in xslt list view webpart #1030 + // https://github.com/SubPointSolutions/spmeta2/issues/1030 + + var scopeValue = htmlSchemaXml.Root.GetAttributeValue("Scope"); + + if (!string.IsNullOrEmpty(scopeValue)) + { + hiddenView.Scope = (ViewScope)Enum.Parse(typeof(ViewScope), scopeValue); + } #endif hiddenView.Update(); diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/XsltListViewWebPartModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/XsltListViewWebPartModelHandler.cs index 0b774cdcd..573fde64d 100644 --- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/XsltListViewWebPartModelHandler.cs +++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/Webparts/XsltListViewWebPartModelHandler.cs @@ -238,7 +238,20 @@ protected override void InternalOnAfterWebPartProvision(WebPartProcessingContext updatedSchemaXml.Root.ReplaceWith(originalSchemaXml.Root); #if !NET35 + // updating inner xml definition for view hiddenView.ListViewXml = updatedSchemaXml.Root.GetInnerXmlAsString(); + + // updating other attribute based properties, in the root node + // partly related to following issue + // List view scope does not apply in xslt list view webpart #1030 + // https://github.com/SubPointSolutions/spmeta2/issues/1030 + + var scopeValue = updatedSchemaXml.Root.GetAttributeValue("Scope"); + + if(!string.IsNullOrEmpty(scopeValue)) + { + hiddenView.Scope = (ViewScope)Enum.Parse(typeof(ViewScope), scopeValue); + } #endif } diff --git a/SPMeta2/SPMeta2/Definitions/Webparts/ListViewWebPartDefinition.cs b/SPMeta2/SPMeta2/Definitions/Webparts/ListViewWebPartDefinition.cs index e73193ce2..fa5183562 100644 --- a/SPMeta2/SPMeta2/Definitions/Webparts/ListViewWebPartDefinition.cs +++ b/SPMeta2/SPMeta2/Definitions/Webparts/ListViewWebPartDefinition.cs @@ -36,14 +36,17 @@ public class ListViewWebPartDefinition : WebPartDefinition [ExpectValidation] [DataMember] + [ExpectRequired(GroupName = "Target List")] public string ListTitle { get; set; } [ExpectValidation] [DataMember] + [ExpectRequired(GroupName = "Target List")] public string ListUrl { get; set; } [ExpectValidation] [DataMember] + [ExpectRequired(GroupName = "Target List")] public Guid? ListId { get; set; } [ExpectValidation] diff --git a/SPMeta2/SPMeta2/Definitions/Webparts/XsltListViewWebPartDefinition.cs b/SPMeta2/SPMeta2/Definitions/Webparts/XsltListViewWebPartDefinition.cs index 03963a31b..4cc6ba393 100644 --- a/SPMeta2/SPMeta2/Definitions/Webparts/XsltListViewWebPartDefinition.cs +++ b/SPMeta2/SPMeta2/Definitions/Webparts/XsltListViewWebPartDefinition.cs @@ -1,188 +1,191 @@ -using System; -using System.Runtime.Serialization; -using SPMeta2.Attributes; -using SPMeta2.Attributes.Capabilities; -using SPMeta2.Attributes.Regression; -using SPMeta2.Utils; - -namespace SPMeta2.Definitions.Webparts -{ - /// - /// Allows to define and deploy 'XsltListView' web part. - /// - [SPObjectType(SPObjectModelType.SSOM, "System.Web.UI.WebControls.WebParts.WebPart", "System.Web")] - [SPObjectType(SPObjectModelType.CSOM, "Microsoft.SharePoint.Client.WebParts.WebPart", "Microsoft.SharePoint.Client")] - - [DefaultRootHost(typeof(WebDefinition))] - [DefaultParentHost(typeof(WebPartPageDefinition))] - - [Serializable] - [DataContract] - [ExpectArrayExtensionMethod] - [ExpectManyInstances] - - [ExpectWebpartType(WebPartType = "Microsoft.SharePoint.WebPartPages.XsltListViewWebPart , Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")] - - public class XsltListViewWebPartDefinition : WebPartDefinition - { - #region constructors - - public XsltListViewWebPartDefinition() - { - TitleUrl = string.Empty; - } - - #endregion - - #region properties - - [ExpectValidation] - [DataMember] - public string ListTitle { get; set; } - - [ExpectValidation] - [DataMember] - public string ListUrl { get; set; } - - [ExpectValidation] - [DataMember] - public Guid? ListId { get; set; } - - [ExpectValidation] - [DataMember] - [SiteCollectionTokenCapability] - [WebTokenCapability] - public string WebUrl { get; set; } - - [ExpectValidation] - [DataMember] - public Guid? WebId { get; set; } - - - [ExpectValidation] - [DataMember] - public string ViewName { get; set; } - - [ExpectValidation] - [DataMember] +using System; +using System.Runtime.Serialization; +using SPMeta2.Attributes; +using SPMeta2.Attributes.Capabilities; +using SPMeta2.Attributes.Regression; +using SPMeta2.Utils; + +namespace SPMeta2.Definitions.Webparts +{ + /// + /// Allows to define and deploy 'XsltListView' web part. + /// + [SPObjectType(SPObjectModelType.SSOM, "System.Web.UI.WebControls.WebParts.WebPart", "System.Web")] + [SPObjectType(SPObjectModelType.CSOM, "Microsoft.SharePoint.Client.WebParts.WebPart", "Microsoft.SharePoint.Client")] + + [DefaultRootHost(typeof(WebDefinition))] + [DefaultParentHost(typeof(WebPartPageDefinition))] + + [Serializable] + [DataContract] + [ExpectArrayExtensionMethod] + [ExpectManyInstances] + + [ExpectWebpartType(WebPartType = "Microsoft.SharePoint.WebPartPages.XsltListViewWebPart , Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")] + + public class XsltListViewWebPartDefinition : WebPartDefinition + { + #region constructors + + public XsltListViewWebPartDefinition() + { + TitleUrl = string.Empty; + } + + #endregion + + #region properties + + [ExpectValidation] + [DataMember] + [ExpectRequired(GroupName = "Target List")] + public string ListTitle { get; set; } + + [ExpectValidation] + [DataMember] + [ExpectRequired(GroupName = "Target List")] + public string ListUrl { get; set; } + + [ExpectValidation] + [DataMember] + [ExpectRequired(GroupName = "Target List")] + public Guid? ListId { get; set; } + + [ExpectValidation] + [DataMember] + [SiteCollectionTokenCapability] + [WebTokenCapability] + public string WebUrl { get; set; } + + [ExpectValidation] + [DataMember] + public Guid? WebId { get; set; } + + + [ExpectValidation] + [DataMember] + public string ViewName { get; set; } + + [ExpectValidation] + [DataMember] public Guid? ViewId { get; set; } [ExpectValidation] [DataMember] - public string ViewUrl { get; set; } - - [ExpectValidation] - [DataMember] - public string JSLink { get; set; } - - [ExpectValidation] - [ExpectUpdatAsToolbarType] - [ExpectNullable] - [DataMember] - public string Toolbar { get; set; } - - [ExpectValidation] - [ExpectUpdate] - [ExpectNullable] - [DataMember] - public bool? ToolbarShowAlways { get; set; } - - [ExpectUpdate] - [ExpectValidation] - [DataMember] - public bool? ShowTimelineIfAvailable { get; set; } - - /// - /// Enable Data View Caching prop. - /// - [ExpectUpdate] - [ExpectValidation] - [DataMember] - public bool? CacheXslStorage { get; set; } - - /// - /// Data View Caching Time-out (seconds) - /// - [ExpectUpdate] - [ExpectValidation] - [DataMember] - public int? CacheXslTimeOut { get; set; } - - - //[ExpectUpdate] - [ExpectValidation] - [DataMember] - public bool? DisableSaveAsNewViewButton { get; set; } - - - //[ExpectUpdate] - [ExpectValidation] - [DataMember] - public bool? DisableViewSelectorMenu { get; set; } - - - //[ExpectUpdate] - [ExpectValidation] - [DataMember] - public bool? DisableColumnFiltering { get; set; } - - //[ExpectUpdate] - [ExpectValidation] - [DataMember] - public bool? InplaceSearchEnabled { get; set; } - - [ExpectUpdate] - [ExpectValidation] - [DataMember] - public string BaseXsltHashKey { get; set; } - - - #region xml-xslt props - - [ExpectValidation] - [DataMember] - - [XmlPropertyCapability] - public string XmlDefinition { get; set; } - - [ExpectValidation] - [DataMember] - public string XmlDefinitionLink { get; set; } - - [ExpectValidation] - [DataMember] - - [XsltPropertyCapability] - public string Xsl { get; set; } - - [ExpectValidation] - [DataMember] - public string XslLink { get; set; } - - [ExpectValidation] - [DataMember] - public string GhostedXslLink { get; set; } - - #endregion - - #endregion - - #region methods - - public override string ToString() - { - return new ToStringResult(this, base.ToString()) - .AddPropertyValue(p => p.ListTitle) - .AddPropertyValue(p => p.ListUrl) - .AddPropertyValue(p => p.ListId) - - .AddPropertyValue(p => p.ViewName) - .AddPropertyValue(p => p.ViewId) - - .AddPropertyValue(p => p.JSLink) - .ToString(); - } - - #endregion - } -} + public string ViewUrl { get; set; } + + [ExpectValidation] + [DataMember] + public string JSLink { get; set; } + + [ExpectValidation] + [ExpectUpdatAsToolbarType] + [ExpectNullable] + [DataMember] + public string Toolbar { get; set; } + + [ExpectValidation] + [ExpectUpdate] + [ExpectNullable] + [DataMember] + public bool? ToolbarShowAlways { get; set; } + + [ExpectUpdate] + [ExpectValidation] + [DataMember] + public bool? ShowTimelineIfAvailable { get; set; } + + /// + /// Enable Data View Caching prop. + /// + [ExpectUpdate] + [ExpectValidation] + [DataMember] + public bool? CacheXslStorage { get; set; } + + /// + /// Data View Caching Time-out (seconds) + /// + [ExpectUpdate] + [ExpectValidation] + [DataMember] + public int? CacheXslTimeOut { get; set; } + + + //[ExpectUpdate] + [ExpectValidation] + [DataMember] + public bool? DisableSaveAsNewViewButton { get; set; } + + + //[ExpectUpdate] + [ExpectValidation] + [DataMember] + public bool? DisableViewSelectorMenu { get; set; } + + + //[ExpectUpdate] + [ExpectValidation] + [DataMember] + public bool? DisableColumnFiltering { get; set; } + + //[ExpectUpdate] + [ExpectValidation] + [DataMember] + public bool? InplaceSearchEnabled { get; set; } + + [ExpectUpdate] + [ExpectValidation] + [DataMember] + public string BaseXsltHashKey { get; set; } + + + #region xml-xslt props + + [ExpectValidation] + [DataMember] + + [XmlPropertyCapability] + public string XmlDefinition { get; set; } + + [ExpectValidation] + [DataMember] + public string XmlDefinitionLink { get; set; } + + [ExpectValidation] + [DataMember] + + [XsltPropertyCapability] + public string Xsl { get; set; } + + [ExpectValidation] + [DataMember] + public string XslLink { get; set; } + + [ExpectValidation] + [DataMember] + public string GhostedXslLink { get; set; } + + #endregion + + #endregion + + #region methods + + public override string ToString() + { + return new ToStringResult(this, base.ToString()) + .AddPropertyValue(p => p.ListTitle) + .AddPropertyValue(p => p.ListUrl) + .AddPropertyValue(p => p.ListId) + + .AddPropertyValue(p => p.ViewName) + .AddPropertyValue(p => p.ViewId) + + .AddPropertyValue(p => p.JSLink) + .ToString(); + } + + #endregion + } +} From 3920bdd2feec21eefdf6b7316917a8eda01ccc96 Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Wed, 30 Aug 2017 20:32:17 +1000 Subject: [PATCH 07/18] + ProcessedModelNodeCount is different for single provision operation #1066 --- .../Impl/Services/ModelServiceBaseTests.cs | 101 ++++++++++++++++++ .../SPMeta2.Regression.Tests.csproj | 1 + SPMeta2/SPMeta2/Services/ModelServiceBase.cs | 6 +- 3 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs new file mode 100644 index 000000000..976d6cdd7 --- /dev/null +++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs @@ -0,0 +1,101 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using SPMeta2.Services; +using SPMeta2.Syntax.Default; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SPMeta2.Containers; +using SPMeta2.Definitions; +using SPMeta2.Regression.ModelHandlers; + +namespace SPMeta2.Regression.Tests.Impl.Services +{ + + public class TestModelServiceBase : ModelServiceBase + { + + } + + [TestClass] + public class ModelServiceBaseTests + { + #region tests + + [TestMethod] + [TestCategory("Regression.Services.ModelServiceBase")] + [TestCategory("CI.Core")] + public void OnModelProcessing_ProcessedModelNodeCount() + { + // ProcessedModelNodeCount is different for single provision operation #1066 + // https://github.com/SubPointSolutions/spmeta2/issues/1066 + + var provisionService = new TestModelServiceBase(); + + var hasProcessingEventHit = false; + var hasProcessedEventHit = false; + + var expectedProcessingReults = new Dictionary() { + { 1,3 }, + { 2,3 }, + { 3,3 } + }; + + var expectedProcessedReults = new Dictionary() { + { 1,3 }, + { 2,3 }, + { 3,3 } + }; + + var processingResults = new Dictionary(); + var processedResults = new Dictionary(); + + provisionService.OnModelNodeProcessing += (s, e) => + { + processingResults.Add(e.ProcessedModelNodeCount, e.TotalModelNodeCount); + hasProcessingEventHit = true; + }; + + provisionService.OnModelNodeProcessed += (s, e) => + { + processedResults.Add(e.ProcessedModelNodeCount, e.TotalModelNodeCount); + hasProcessedEventHit = true; + }; + + var model = SPMeta2Model.NewSiteModel(site => + { + site.AddRandomField(); + site.AddRandomField(); + }); + + provisionService.ModelHandlers.Add(typeof(SiteDefinition), new EmptyModelhandler()); + provisionService.ModelHandlers.Add(typeof(FieldDefinition), new EmptyModelhandler()); + + provisionService.DeployModel(null, model); + + // hits + Assert.IsTrue(hasProcessingEventHit); + Assert.IsTrue(hasProcessedEventHit); + + // processing / processed results + foreach (var result in processingResults.Keys) + { + var resultTotal = processingResults[result]; + + Assert.IsTrue(expectedProcessedReults.ContainsKey(result)); + Assert.IsTrue(expectedProcessedReults[result] == resultTotal); + } + + foreach (var result in processedResults.Keys) + { + var resultTotal = processedResults[result]; + + Assert.IsTrue(processedResults.ContainsKey(result)); + Assert.IsTrue(processedResults[result] == resultTotal); + } + } + + #endregion + } +} diff --git a/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj b/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj index 665b03afc..b8d0a6546 100644 --- a/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj +++ b/SPMeta2/SPMeta2.Regression.Tests/SPMeta2.Regression.Tests.csproj @@ -265,6 +265,7 @@ + diff --git a/SPMeta2/SPMeta2/Services/ModelServiceBase.cs b/SPMeta2/SPMeta2/Services/ModelServiceBase.cs index 047f6cef7..fb5c989d9 100644 --- a/SPMeta2/SPMeta2/Services/ModelServiceBase.cs +++ b/SPMeta2/SPMeta2/Services/ModelServiceBase.cs @@ -349,8 +349,6 @@ private void InitModelTraverseService() _modelTraverseService.OnModelProcessed += (node) => { - CurrentModelNodeIndex++; - RaiseOnModelNodeProcessed(this, new ModelProcessingEventArgs { Model = CurrentModelNode, @@ -358,6 +356,8 @@ private void InitModelTraverseService() ProcessedModelNodeCount = CurrentModelNodeIndex }); + CurrentModelNodeIndex++; + _activeModelNode = null; }; @@ -389,7 +389,7 @@ private void InitModelTraverseService() private void ProcessModelDeployment(object modelHost, ModelNode modelNode) { - CurrentModelNodeIndex = 0; + CurrentModelNodeIndex = 1; CurrentModelHost = modelHost; CurrentModelNode = modelNode; From fc3d480d2b36862bc83a9dd356a184a10f63de12 Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Fri, 1 Sep 2017 00:01:27 +1000 Subject: [PATCH 08/18] + fixed CI build, migrated to 0.1.0-beta10 --- SPMeta2/Build/tools/packages.config | 2 +- SPMeta2/Build/tools/packages.config.md5sum | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SPMeta2/Build/tools/packages.config b/SPMeta2/Build/tools/packages.config index f9cef174f..2a9197e54 100644 --- a/SPMeta2/Build/tools/packages.config +++ b/SPMeta2/Build/tools/packages.config @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/SPMeta2/Build/tools/packages.config.md5sum b/SPMeta2/Build/tools/packages.config.md5sum index 95db67f7c..1fb9e403d 100644 --- a/SPMeta2/Build/tools/packages.config.md5sum +++ b/SPMeta2/Build/tools/packages.config.md5sum @@ -1 +1 @@ -38-0C-2E-66-B0-3C-49-7B-AD-15-87-FD-A7-2D-0C-44 +F1-15-E6-4E-CD-2A-D1-A8-68-8E-80-64-D3-9A-5E-3D From 84be73df29c54443bfda55fee0837bb6b0929afa Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Fri, 1 Sep 2017 00:11:32 +1000 Subject: [PATCH 09/18] + CI build fix - temporary removed docs merge, updated to 1.2.140 --- SPMeta2/Build/build.cake | 3 +++ SPMeta2/Build/build.json | 56 ++++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/SPMeta2/Build/build.cake b/SPMeta2/Build/build.cake index 8472173fb..46efca417 100644 --- a/SPMeta2/Build/build.cake +++ b/SPMeta2/Build/build.cake @@ -1,6 +1,9 @@ // load up common tools #load tools/SubPointSolutions.CakeBuildTools/scripts/SubPointSolutions.CakeBuild.Core.cake +// clear default doc merge task +defaultActionDocsMerge.Task.Actions.Clear(); + // replace default buil defaultActionBuild.Task.Actions.Clear(); defaultActionBuild diff --git a/SPMeta2/Build/build.json b/SPMeta2/Build/build.json index c904f67b9..43a9b84b8 100644 --- a/SPMeta2/Build/build.json +++ b/SPMeta2/Build/build.json @@ -284,7 +284,7 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2", "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", "ProjectUrl": "https://github.com/SubPointSolutions/spmeta2", @@ -323,11 +323,11 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.Standard", "Id": "SPMeta2.Core.Standard", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -368,11 +368,11 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.CSOM", "Id": "SPMeta2.CSOM.Foundation", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -405,15 +405,15 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.CSOM.Standard", "Id": "SPMeta2.CSOM.Standard", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.CSOM.Foundation", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "SPMeta2.Core.Standard", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -446,11 +446,11 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.SSOM", "Id": "SPMeta2.SSOM.Foundation", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -483,15 +483,15 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.SSOM.Standard", "Id": "SPMeta2.SSOM.Standard", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.SSOM.Foundation", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "SPMeta2.Core.Standard", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -525,11 +525,11 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.CSOM", "Id": "SPMeta2.CSOM.Foundation-v14", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -555,15 +555,15 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.CSOM.Standard", "Id": "SPMeta2.CSOM.Standard-v14", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.CSOM.Foundation-v14", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "SPMeta2.Core.Standard", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -589,11 +589,11 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.SSOM", "Id": "SPMeta2.SSOM.Foundation-v14", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -619,15 +619,15 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.SSOM.Standard", "Id": "SPMeta2.SSOM.Standard-v14", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.SSOM.Foundation-v14", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "SPMeta2.Core.Standard", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" } ], "LicenseUrl": "http://docs.subpointsolutions.com/spmeta2/license", @@ -653,11 +653,11 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.CSOM", "Id": "SPMeta2.CSOM.Foundation-v16", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.Core", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "Microsoft.SharePointOnline.CSOM", @@ -694,15 +694,15 @@ { "CustomProjectFolder" : "SPMeta2/SPMeta2.CSOM.Standard", "Id": "SPMeta2.CSOM.Standard-v16", - "Version": "1.2.130-beta1", + "Version": "1.2.140-beta1", "Dependencies": [ { "Id": "SPMeta2.CSOM.Foundation-v16", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "SPMeta2.Core.Standard", - "Version": "1.2.130-beta1" + "Version": "1.2.140-beta1" }, { "Id": "Microsoft.SharePointOnline.CSOM", From 1062c39d8e3b1f6a4372e9b21e4abb117db0fc95 Mon Sep 17 00:00:00 2001 From: support Date: Sun, 28 Jan 2018 17:05:18 +1100 Subject: [PATCH 10/18] + migration to VS2015, cake build fixes --- SPMeta2.sln | 46 +++--- SPMeta2/Build/Build.csproj | 7 +- SPMeta2/Build/build.ps1 | 131 +++++++++++------- SPMeta2/Build/tools/packages.config | 5 +- SPMeta2/Build/tools/packages.config.md5sum | 2 +- .../AppManifest.xml | 2 +- .../SPMeta2.Containers.AppContainer.csproj | 9 +- .../SPMeta2.Containers.AppContainerWeb.csproj | 12 +- .../Web.config | 9 ++ 9 files changed, 134 insertions(+), 89 deletions(-) diff --git a/SPMeta2.sln b/SPMeta2.sln index 638b601fd..b01a86221 100644 --- a/SPMeta2.sln +++ b/SPMeta2.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Provision", "Provision", "{8A0307D3-5564-4034-9DB1-D13FEE1DADD9}" EndProject @@ -28,6 +28,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Validators", "Validators", EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "O365", "O365", "{42ABDD31-F19A-4D2D-995E-5C68197A5AFB}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{200D7335-DB4A-4BF2-906F-9E17DC82113B}" + ProjectSection(SolutionItems) = preProject + .nuget\packages.config = .nuget\packages.config + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Containers", "Containers", "{2D69B084-1813-41D6-B995-E0C9200E5264}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Impl", "Impl", "{AAD233F1-B9CE-4D41-8065-36F21CEE797B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Impl", "Impl", "{7142CBDC-7BBA-4C46-9E55-F4B7EEBB0901}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestContainers", "TestContainers", "{358E83EE-8ABA-463E-A868-3906865FDA39}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{7DCBDB97-13FC-4A07-B49C-2300D2FBCF8D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Provision.Nintex", "Provision.Nintex", "{543E02CC-AA4A-4B1F-ABBD-2C88CFAA463C}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Dependencies", "SPMeta2\SPMeta2.Dependencies\SPMeta2.Dependencies.csproj", "{A3A48F9F-1424-41CD-BF92-49D509C715CE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2", "SPMeta2\SPMeta2\SPMeta2.csproj", "{EE49D3FD-6180-40E6-829F-6831FF89DAC6}" @@ -60,19 +77,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Regression.CSOM", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Regression.SSOM", "SPMeta2\SPMeta2.Regression.SSOM\SPMeta2.Regression.SSOM.csproj", "{00E1581F-31D9-493E-AD16-C188AE966458}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{200D7335-DB4A-4BF2-906F-9E17DC82113B}" - ProjectSection(SolutionItems) = preProject - .nuget\packages.config = .nuget\packages.config - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.SSOM.Standard", "SPMeta2\SPMeta2.SSOM.Standard\SPMeta2.SSOM.Standard.csproj", "{7D095A0D-0BDE-446D-8093-13E5685F1D3C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Regression.SSOM.Standard", "SPMeta2\SPMeta2.Regression.SSOM.Standard\SPMeta2.Regression.SSOM.Standard.csproj", "{D81AE83A-BEEF-4099-B354-0B88D7396B25}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Regression.CSOM.Standard", "SPMeta2\SPMeta2.Regression.CSOM.Standard\SPMeta2.Regression.CSOM.Standard.csproj", "{33B40E92-C649-41FC-B774-53D259801B3B}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Containers", "Containers", "{2D69B084-1813-41D6-B995-E0C9200E5264}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers", "SPMeta2\SPMeta2.Containers\SPMeta2.Containers.csproj", "{091C48FB-27E3-4F84-897C-5DE7BB55A2D3}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.Standard", "SPMeta2\SPMeta2.Containers.Standard\SPMeta2.Containers.Standard.csproj", "{5793019F-7514-4B1F-B31D-A5E472FD034D}" @@ -85,20 +95,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.O365", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.SSOM", "SPMeta2\SPMeta2.Containers.SSOM\SPMeta2.Containers.SSOM.csproj", "{04EF5903-B379-4404-8DBC-B21ABE0D1099}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Impl", "Impl", "{AAD233F1-B9CE-4D41-8065-36F21CEE797B}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.O365v16", "SPMeta2\SPMeta2.Containers.O365v16\SPMeta2.Containers.O365v16.csproj", "{E9274D1F-BF08-44CB-9162-35110379D5C0}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Build", "SPMeta2\SPMeta2.Build\SPMeta2.Build.csproj", "{7B84193A-251E-47F1-BDD0-EDD85918D307}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Regression.Impl.Tests", "SPMeta2\SPMeta2.Regression.Impl.Tests\SPMeta2.Regression.Impl.Tests.csproj", "{B556A178-DA0A-4DA0-AF92-2D2504FBCDA9}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Impl", "Impl", "{7142CBDC-7BBA-4C46-9E55-F4B7EEBB0901}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.SandboxSolutionContainer", "SPMeta2\SPMeta2.Containers.SandboxSolutionContainer\SPMeta2.Containers.SandboxSolutionContainer.csproj", "{A88390A8-20F2-4247-A9C3-28480FEAEFA6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestContainers", "TestContainers", "{358E83EE-8ABA-463E-A868-3906865FDA39}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.AppContainer", "SPMeta2\SPMeta2.Containers.O365\SPMeta2.Containers.AppContainer\SPMeta2.Containers.AppContainer.csproj", "{16A7F927-A570-4EB0-90E6-887E676AF42B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.AppContainerWeb", "SPMeta2\SPMeta2.Containers.O365\SPMeta2.Containers.AppContainerWeb\SPMeta2.Containers.AppContainerWeb.csproj", "{16E57ADA-0D73-429E-96F7-87EAA03128D9}" @@ -107,14 +111,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Containers.FarmSolu EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Regression", "SPMeta2\SPMeta2.Regression\SPMeta2.Regression.csproj", "{0DE538C9-1723-46B1-90F8-5DC67C56D7DD}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{7DCBDB97-13FC-4A07-B49C-2300D2FBCF8D}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubPointSolutions.Docs", "SPMeta2\SubPointSolutions.Docs\SubPointSolutions.Docs.csproj", "{B30F6CA8-3E96-4734-B6B1-A61F201099E4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Build", "SPMeta2\Build\Build.csproj", "{B9AD05BB-B576-46B8-89A0-FBC70C438B64}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Provision.Nintex", "Provision.Nintex", "{543E02CC-AA4A-4B1F-ABBD-2C88CFAA463C}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Nintex", "SPMeta2\SPMeta2.Nintex\SPMeta2.Nintex.csproj", "{D19B0907-CED5-416A-9D45-0F112990C234}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPMeta2.Nintex.CSOM", "SPMeta2\SPMeta2.Nintex.CSOM\SPMeta2.Nintex.CSOM.csproj", "{588FC30F-1C85-410E-AB20-C9741DB28857}" @@ -424,6 +424,10 @@ Global {94191759-5F75-41E2-AA43-E1BF6B151C96} = {8A0307D3-5564-4034-9DB1-D13FEE1DADD9} {AA39B47D-287D-4DAC-A1B6-CBEE826B0D83} = {E79C8EBA-BB08-4D47-882E-2E9D5E04F4B5} {42ABDD31-F19A-4D2D-995E-5C68197A5AFB} = {8A0307D3-5564-4034-9DB1-D13FEE1DADD9} + {2D69B084-1813-41D6-B995-E0C9200E5264} = {E79C8EBA-BB08-4D47-882E-2E9D5E04F4B5} + {AAD233F1-B9CE-4D41-8065-36F21CEE797B} = {2D69B084-1813-41D6-B995-E0C9200E5264} + {7142CBDC-7BBA-4C46-9E55-F4B7EEBB0901} = {E79C8EBA-BB08-4D47-882E-2E9D5E04F4B5} + {358E83EE-8ABA-463E-A868-3906865FDA39} = {2D69B084-1813-41D6-B995-E0C9200E5264} {A3A48F9F-1424-41CD-BF92-49D509C715CE} = {EE9BD842-2CA9-45B2-AB7C-A8EB0353AAB7} {EE49D3FD-6180-40E6-829F-6831FF89DAC6} = {E82F6DFA-D355-449F-A964-B30529CC9D50} {6F7EBF0C-7124-44D6-B9EC-302A54A19FE4} = {F033F269-10B2-426D-9D8D-FCC9383498DF} @@ -436,20 +440,16 @@ Global {7D095A0D-0BDE-446D-8093-13E5685F1D3C} = {94191759-5F75-41E2-AA43-E1BF6B151C96} {D81AE83A-BEEF-4099-B354-0B88D7396B25} = {AA39B47D-287D-4DAC-A1B6-CBEE826B0D83} {33B40E92-C649-41FC-B774-53D259801B3B} = {AA39B47D-287D-4DAC-A1B6-CBEE826B0D83} - {2D69B084-1813-41D6-B995-E0C9200E5264} = {E79C8EBA-BB08-4D47-882E-2E9D5E04F4B5} {091C48FB-27E3-4F84-897C-5DE7BB55A2D3} = {2D69B084-1813-41D6-B995-E0C9200E5264} {5793019F-7514-4B1F-B31D-A5E472FD034D} = {2D69B084-1813-41D6-B995-E0C9200E5264} {F310878E-9B72-4C3C-AE5D-C60B3515E2FC} = {E82F6DFA-D355-449F-A964-B30529CC9D50} {2A8F08ED-E837-4E91-8E49-B5F30CF9EEF3} = {AAD233F1-B9CE-4D41-8065-36F21CEE797B} {8B199151-24BC-4C32-B69F-7371B37F33D4} = {AAD233F1-B9CE-4D41-8065-36F21CEE797B} {04EF5903-B379-4404-8DBC-B21ABE0D1099} = {AAD233F1-B9CE-4D41-8065-36F21CEE797B} - {AAD233F1-B9CE-4D41-8065-36F21CEE797B} = {2D69B084-1813-41D6-B995-E0C9200E5264} {E9274D1F-BF08-44CB-9162-35110379D5C0} = {AAD233F1-B9CE-4D41-8065-36F21CEE797B} {7B84193A-251E-47F1-BDD0-EDD85918D307} = {EE9BD842-2CA9-45B2-AB7C-A8EB0353AAB7} {B556A178-DA0A-4DA0-AF92-2D2504FBCDA9} = {7142CBDC-7BBA-4C46-9E55-F4B7EEBB0901} - {7142CBDC-7BBA-4C46-9E55-F4B7EEBB0901} = {E79C8EBA-BB08-4D47-882E-2E9D5E04F4B5} {A88390A8-20F2-4247-A9C3-28480FEAEFA6} = {358E83EE-8ABA-463E-A868-3906865FDA39} - {358E83EE-8ABA-463E-A868-3906865FDA39} = {2D69B084-1813-41D6-B995-E0C9200E5264} {16A7F927-A570-4EB0-90E6-887E676AF42B} = {358E83EE-8ABA-463E-A868-3906865FDA39} {16E57ADA-0D73-429E-96F7-87EAA03128D9} = {358E83EE-8ABA-463E-A868-3906865FDA39} {2A290D6E-6AF3-4D17-975D-3C393700A0B1} = {358E83EE-8ABA-463E-A868-3906865FDA39} diff --git a/SPMeta2/Build/Build.csproj b/SPMeta2/Build/Build.csproj index f58b1776c..8dcbdf17f 100644 --- a/SPMeta2/Build/Build.csproj +++ b/SPMeta2/Build/Build.csproj @@ -52,12 +52,11 @@ - + + Designer + - - - + + \ No newline at end of file diff --git a/SPMeta2/Build/tools/packages.config.md5sum b/SPMeta2/Build/tools/packages.config.md5sum index 1fb9e403d..73f7ea301 100644 --- a/SPMeta2/Build/tools/packages.config.md5sum +++ b/SPMeta2/Build/tools/packages.config.md5sum @@ -1 +1 @@ -F1-15-E6-4E-CD-2A-D1-A8-68-8E-80-64-D3-9A-5E-3D +54-CE-88-E4-DE-59-59-C5-FE-A4-92-B2-FF-3D-A9-48 diff --git a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/AppManifest.xml b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/AppManifest.xml index bb79767b4..fccc2ef40 100644 --- a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/AppManifest.xml +++ b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/AppManifest.xml @@ -4,7 +4,7 @@ Name="SPMeta2ContainersAppContainer" ProductID="{e81b6820-5d57-4d17-a098-5f4317f6c400}" Version="1.0.0.3" - SharePointMinVersion="15.0.0.0" + SharePointMinVersion="16.0.0.0" > SPMeta2.Containers.AppContainer diff --git a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/SPMeta2.Containers.AppContainer.csproj b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/SPMeta2.Containers.AppContainer.csproj index a7953a7b2..0ebc22b4b 100644 --- a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/SPMeta2.Containers.AppContainer.csproj +++ b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainer/SPMeta2.Containers.AppContainer.csproj @@ -10,11 +10,11 @@ SPMeta2.Containers.AppContainer SPMeta2.Containers.AppContainer v4.5 - 16.0 + 16.1 512 {C1CDDADD-2546-481F-9697-4EA41081F2FC};{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 12.0 - 12.1 + 12.2 False SharePointApp {480d7d14-ca6b-4c97-b1b9-ef67b9226be7} @@ -23,6 +23,11 @@ {bfbb1a3d-d82c-4ded-8d31-ee342ead5df6} {37985bb4-ebd0-43ec-a43e-7a7e0125ea4c} M2RegressionTests + + + + + 12.0 true diff --git a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/SPMeta2.Containers.AppContainerWeb.csproj b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/SPMeta2.Containers.AppContainerWeb.csproj index e86fe5b41..d1f800eb1 100644 --- a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/SPMeta2.Containers.AppContainerWeb.csproj +++ b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/SPMeta2.Containers.AppContainerWeb.csproj @@ -4,8 +4,7 @@ Debug AnyCPU - - + 2.0 {16E57ADA-0D73-429E-96F7-87EAA03128D9} {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} @@ -77,10 +76,8 @@ True ..\..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - - + + True ..\..\..\packages\Microsoft.AspNet.WebPages.3.2.2\lib\net45\System.Web.Helpers.dll @@ -228,8 +225,7 @@ http://localhost:2564/ False False - - + False diff --git a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/Web.config b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/Web.config index 87f0cd382..a4f4f137c 100644 --- a/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/Web.config +++ b/SPMeta2/SPMeta2.Containers.O365/SPMeta2.Containers.AppContainerWeb/Web.config @@ -42,6 +42,15 @@ + + + + + + + + + From e1d64e19807e02d0bc7c2c90a35d3bb1cec91f80 Mon Sep 17 00:00:00 2001 From: support Date: Sun, 28 Jan 2018 17:14:22 +1100 Subject: [PATCH 11/18] + build script update for AppVeyor --- SPMeta2/Build/build.ps1 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/SPMeta2/Build/build.ps1 b/SPMeta2/Build/build.ps1 index dc4bff523..fc91dc0fd 100644 --- a/SPMeta2/Build/build.ps1 +++ b/SPMeta2/Build/build.ps1 @@ -56,6 +56,14 @@ Param( [string[]]$ScriptArgs ) +Write-Host "Preparing to run build script..." + +if(!$PSScriptRoot){ + $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent +} + +cd $PSScriptRoot + [Reflection.Assembly]::LoadWithPartialName("System.Security") | Out-Null function MD5HashFile([string] $filePath) { From 8d7cecfc10ed1369d27dac7a4acd63a364107e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Bl=C3=BCher?= Date: Tue, 30 Jan 2018 21:06:53 +0100 Subject: [PATCH 12/18] Added DisableGridEditing property to ListDefinition Edited ListModelHandler SSOM to set DisableGridEditing Added Validation for new property --- .../ModelHandlers/ListModelHandler.cs | 5 +---- .../ListDefinitionGenerator.cs | 5 +++-- .../CSOMValidationService.cs | 2 -- .../Validation/ClientListDefinitionValidator.cs | 3 ++- .../Validation/ListDefinitionValidator.cs | 17 +++++++++++++++-- .../ModelHandlers/ListModelHandler.cs | 3 +++ SPMeta2/SPMeta2/Definitions/ListDefinition.cs | 9 +++++++++ .../Definitions/ListDefinitionValidator.cs | 2 +- 8 files changed, 34 insertions(+), 12 deletions(-) diff --git a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListModelHandler.cs b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListModelHandler.cs index 31b974e58..d95fc6b44 100644 --- a/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListModelHandler.cs +++ b/SPMeta2/SPMeta2.CSOM/ModelHandlers/ListModelHandler.cs @@ -1,7 +1,7 @@ using System; using System.Linq; using System.Collections.Generic; -using System.Text; + using Microsoft.SharePoint.Client; using SPMeta2.CSOM.DefaultSyntax; @@ -591,7 +591,6 @@ public static List FindListByUrl(IEnumerable listCollection, string listUr return null; } - #endregion public override Type TargetType @@ -607,7 +606,5 @@ protected virtual void ProcessLocalization(List obj, ListDefinition definition) { "DescriptionResource", definition.DescriptionResource }, }); } - - } } diff --git a/SPMeta2/SPMeta2.Containers/DefinitionGenerators/ListDefinitionGenerator.cs b/SPMeta2/SPMeta2.Containers/DefinitionGenerators/ListDefinitionGenerator.cs index 166c07acc..0f6e57854 100644 --- a/SPMeta2/SPMeta2.Containers/DefinitionGenerators/ListDefinitionGenerator.cs +++ b/SPMeta2/SPMeta2.Containers/DefinitionGenerators/ListDefinitionGenerator.cs @@ -1,8 +1,8 @@ using System; + using SPMeta2.Containers.Services; using SPMeta2.Containers.Services.Base; using SPMeta2.Definitions; -using SPMeta2.Definitions.Base; using SPMeta2.Enumerations; namespace SPMeta2.Containers.DefinitionGenerators @@ -64,6 +64,8 @@ public override DefinitionBase GenerateRandomDefinition(Action a //def.EnableModeration = Rnd.NullableBool(); //def.EnableVersioning = Rnd.NullableBool(); //def.ForceCheckout = Rnd.NullableBool(); + //def.EnableAssignToEmail = Rnd.NullableBool(); + //def.DisableGridEditing = Rnd.NullableBool(); //if (def.ForceCheckout.HasValue && def.ForceCheckout.Value) //{ @@ -77,7 +79,6 @@ public override DefinitionBase GenerateRandomDefinition(Action a if (action != null) action(def); - }); } } diff --git a/SPMeta2/SPMeta2.Regression.CSOM/CSOMValidationService.cs b/SPMeta2/SPMeta2.Regression.CSOM/CSOMValidationService.cs index 1b3efe635..0cad6b6f4 100644 --- a/SPMeta2/SPMeta2.Regression.CSOM/CSOMValidationService.cs +++ b/SPMeta2/SPMeta2.Regression.CSOM/CSOMValidationService.cs @@ -1,6 +1,4 @@ using SPMeta2.CSOM.ModelHandlers; -using SPMeta2.Definitions; -using SPMeta2.Regression.CSOM.Validation; using SPMeta2.Services; namespace SPMeta2.Regression.CSOM diff --git a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListDefinitionValidator.cs index 3ab28cf30..85e635edd 100644 --- a/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListDefinitionValidator.cs +++ b/SPMeta2/SPMeta2.Regression.CSOM/Validation/ClientListDefinitionValidator.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Text; using Microsoft.SharePoint.Client; @@ -11,7 +12,6 @@ using SPMeta2.Definitions; using SPMeta2.Services; using SPMeta2.Utils; -using System.Text; namespace SPMeta2.Regression.CSOM.Validation { @@ -70,6 +70,7 @@ public override void DeployModel(object modelHost, DefinitionBase model) assert.SkipProperty(m => m.Description, "Description is null or empty. Skipping."); assert.SkipProperty(m => m.EnableAssignToEmail, "EnableAssignToEmail is not supported by CSOM"); + assert.SkipProperty(m => m.DisableGridEditing, "DisableGridEditing is not supported by CSOM"); assert.SkipProperty(m => m.WriteSecurity, "WriteSecurity is not supported by CSOM"); assert.SkipProperty(m => m.NavigateForFormsPages, "NavigateForFormsPages is not supported by CSOM"); diff --git a/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListDefinitionValidator.cs b/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListDefinitionValidator.cs index 2711beca2..99feaa4d9 100644 --- a/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListDefinitionValidator.cs +++ b/SPMeta2/SPMeta2.Regression.SSOM/Validation/ListDefinitionValidator.cs @@ -48,9 +48,22 @@ public override void DeployModel(object modelHost, DefinitionBase model) }); if (definition.EnableAssignToEmail.HasValue) + { assert.ShouldBeEqual(m => m.EnableAssignToEmail, o => o.EnableAssignToEmail); + } + else + { + assert.SkipProperty(m => m.EnableAssignToEmail, "EnableAssignToEmail is null or empty"); + } + + if (definition.DisableGridEditing.HasValue) + { + assert.ShouldBeEqual(m => m.DisableGridEditing, o => o.DisableGridEditing); + } else - assert.SkipProperty(m => m.EnableAssignToEmail, "EnableAssignToEmail is null or empty"); + { + assert.SkipProperty(m => m.DisableGridEditing, "DisableGridEditing is null or empty"); + } if (definition.NavigateForFormsPages.HasValue) { @@ -58,7 +71,7 @@ public override void DeployModel(object modelHost, DefinitionBase model) } else { - assert.SkipProperty(m => m.NavigateForFormsPages, "NavigateForFormsPages is null or empty"); + assert.SkipProperty(m => m.NavigateForFormsPages, "NavigateForFormsPages is null or empty"); } if (definition.WriteSecurity.HasValue) diff --git a/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListModelHandler.cs b/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListModelHandler.cs index 724e0b589..691f6f44d 100644 --- a/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListModelHandler.cs +++ b/SPMeta2/SPMeta2.SSOM/ModelHandlers/ListModelHandler.cs @@ -171,6 +171,9 @@ protected override void MapObject(SPList currentObject, ListDefinition definitio if (definition.EnableAssignToEmail.HasValue) list.EnableAssignToEmail = definition.EnableAssignToEmail.Value; + if (definition.DisableGridEditing.HasValue) + list.DisableGridEditing = definition.DisableGridEditing.Value; + #if !NET35 if (definition.IndexedRootFolderPropertyKeys.Any()) { diff --git a/SPMeta2/SPMeta2/Definitions/ListDefinition.cs b/SPMeta2/SPMeta2/Definitions/ListDefinition.cs index fcc2303ab..a80e40cd4 100644 --- a/SPMeta2/SPMeta2/Definitions/ListDefinition.cs +++ b/SPMeta2/SPMeta2/Definitions/ListDefinition.cs @@ -286,6 +286,15 @@ public ListDefinition() [DataMember] public bool? EnableAssignToEmail { get; set; } + /// + /// Represents SPList.DisableGridEditing property. + /// Supported only with SSOM provision + /// https://github.com/SubPointSolutions/spmeta2/issues/1097 + /// + [ExpectValidation] + [ExpectUpdate] + [DataMember] + public bool? DisableGridEditing { get; set; } #endregion diff --git a/SPMeta2/SPMeta2/Validation/Validators/Definitions/ListDefinitionValidator.cs b/SPMeta2/SPMeta2/Validation/Validators/Definitions/ListDefinitionValidator.cs index f46ae922c..9dd389e0f 100644 --- a/SPMeta2/SPMeta2/Validation/Validators/Definitions/ListDefinitionValidator.cs +++ b/SPMeta2/SPMeta2/Validation/Validators/Definitions/ListDefinitionValidator.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; + using SPMeta2.Definitions; using SPMeta2.Validation.Common; using SPMeta2.Validation.Extensions; @@ -44,7 +45,6 @@ public override void Validate(DefinitionBase definition, List .NotEqual(m => m.TemplateType, 0, result); } }); - } } } From 75aed550836ba10c0f9617bf103e283b8c83236b Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Fri, 9 Feb 2018 01:21:49 +1100 Subject: [PATCH 13/18] + reworked regression env setup - Migrate regression testing Win2016, SP2016 and VS2015 platform #1096 + finished regression for CSOM 2016 and CSOM O365 --- .gitignore | 1 + SPMeta2/Regression/Regression.csproj | 16 +- SPMeta2/Regression/_helpers.ps1 | 183 --- SPMeta2/Regression/_ut_bootstrap_psmodule.ps1 | 6 - .../Regression/_ut_grid_baseline_config.ps1 | 211 ---- SPMeta2/Regression/_ut_grid_dsc_modules.ps1 | 44 - .../_ut_grid_dsc_spmeta2_webapp_unittests.ps1 | 327 ------ SPMeta2/Regression/bootstrap.ps1 | 9 + SPMeta2/Regression/config.default.ps1 | 112 ++ SPMeta2/Regression/config.yaml | 78 -- ...CleanEnvironmentVariablesConfiguration.ps1 | 20 + .../dsc/SPMeta2_DomainConfiguration.ps1 | 41 + ...eta2_EnvironmentVariablesConfiguration.ps1 | 21 + .../SPMeta2_SharePointConfiguration.ps1} | 218 ++-- .../dsc/SharePoint16_FarmTuning.ps1 | 86 ++ SPMeta2/Regression/local.config.ps1 | 36 + SPMeta2/Regression/local.csom.ps1 | 18 + SPMeta2/Regression/local.o365.ps1 | 18 + SPMeta2/Regression/local.o365v16.ps1 | 18 + SPMeta2/Regression/local.ssom.ps1 | 18 + SPMeta2/Regression/utils/_spmeta2.sp.ps1 | 128 +++ SPMeta2/Regression/utils/_spmeta2.utils.ps1 | 1016 +++++++++++++++++ SPMeta2/SPMeta2.Build/m2.buildbaseline.xml | 2 +- SPMeta2/SPMeta2.CSOM/SPMeta2.CSOM.csproj | 15 +- .../SPMeta2.Containers.AppContainerWeb.csproj | 15 +- .../Impl/Services/ProvisionServiceTests.cs | 3 + .../Scenarios/ListViewWebPartScenariosTest.cs | 3 +- .../XsltListViewWebPartScenariosTest.cs | 11 +- 28 files changed, 1687 insertions(+), 987 deletions(-) delete mode 100644 SPMeta2/Regression/_helpers.ps1 delete mode 100644 SPMeta2/Regression/_ut_bootstrap_psmodule.ps1 delete mode 100644 SPMeta2/Regression/_ut_grid_baseline_config.ps1 delete mode 100644 SPMeta2/Regression/_ut_grid_dsc_modules.ps1 delete mode 100644 SPMeta2/Regression/_ut_grid_dsc_spmeta2_webapp_unittests.ps1 create mode 100644 SPMeta2/Regression/bootstrap.ps1 create mode 100644 SPMeta2/Regression/config.default.ps1 delete mode 100644 SPMeta2/Regression/config.yaml create mode 100644 SPMeta2/Regression/dsc/SPMeta2_CleanEnvironmentVariablesConfiguration.ps1 create mode 100644 SPMeta2/Regression/dsc/SPMeta2_DomainConfiguration.ps1 create mode 100644 SPMeta2/Regression/dsc/SPMeta2_EnvironmentVariablesConfiguration.ps1 rename SPMeta2/Regression/{_ut_grid_dsc_spmeta2_webapp.ps1 => dsc/SPMeta2_SharePointConfiguration.ps1} (53%) create mode 100644 SPMeta2/Regression/dsc/SharePoint16_FarmTuning.ps1 create mode 100644 SPMeta2/Regression/local.config.ps1 create mode 100644 SPMeta2/Regression/local.csom.ps1 create mode 100644 SPMeta2/Regression/local.o365.ps1 create mode 100644 SPMeta2/Regression/local.o365v16.ps1 create mode 100644 SPMeta2/Regression/local.ssom.ps1 create mode 100644 SPMeta2/Regression/utils/_spmeta2.sp.ps1 create mode 100644 SPMeta2/Regression/utils/_spmeta2.utils.ps1 diff --git a/.gitignore b/.gitignore index bbcbc6239..dacce732e 100644 --- a/.gitignore +++ b/.gitignore @@ -222,3 +222,4 @@ FakesAssemblies/ /SPMeta2/SPMeta2.Standard/SPMeta2.Standard.csproj.DotSettings /SPMeta2/SPMeta2/SPMeta2.csproj.DotSettings /SPMeta2/SubPointSolutions.Docs/Views-Output +/SPMeta2/Regression/.configs diff --git a/SPMeta2/Regression/Regression.csproj b/SPMeta2/Regression/Regression.csproj index 0f78e5d1f..54ce352f4 100644 --- a/SPMeta2/Regression/Regression.csproj +++ b/SPMeta2/Regression/Regression.csproj @@ -42,13 +42,15 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:FullPage" ID="FullPage" FrameType="TitleBarOnly"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:LeftColumn" ID="LeftColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:MiddleColumn" ID="MiddleColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:RightColumn" ID="RightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Footer" ID="Footer" FrameType="TitleBarOnly"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="2" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:LeftColumn" ID="LeftColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Body" ID="Body" FrameType="TitleBarOnly"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="2" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Body" ID="Body" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:RightColumn" ID="RightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" rowspan="4" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:LeftColumn" ID="LeftColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Row1" ID="Row1" FrameType="TitleBarOnly" Orientation="Horizontal"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" rowspan="4" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:RightColumn" ID="RightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Row2" ID="Row2" FrameType="TitleBarOnly" Orientation="Horizontal"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Row3" ID="Row3" FrameType="TitleBarOnly" Orientation="Horizontal"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Row4" ID="Row4" FrameType="TitleBarOnly" Orientation="Horizontal"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Footer" ID="Footer" FrameType="TitleBarOnly"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:LeftColumn" ID="LeftColumn" FrameType="TitleBarOnly"/> </td> + <td valign="top" style="padding:0"> + <table cellpadding="4" cellspacing="0" border="0" width="100%" height="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="2" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:TopRow" ID="TopRow" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterLeftColumn" ID="CenterLeftColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterRightColumn" ID="CenterRightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + </table> + </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:RightColumn" ID="RightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top" width="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:Footer" ID="Footer" FrameType="TitleBarOnly"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:LeftColumn" ID="LeftColumn" FrameType="TitleBarOnly"/> </td> + <td valign="top" style="padding:0"> + <table cellpadding="4" cellspacing="0" border="0" width="100%" height="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top"> <WebPartPages:WebPartZone runat="server" Title="loc:TopRow" ID="TopRow" FrameType="TitleBarOnly" Orientation="Horizontal"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterLeftColumn" ID="CenterLeftColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterColumn" ID="CenterColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterRightColumn" ID="CenterRightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top"> <WebPartPages:WebPartZone runat="server" Title="loc:Footer" ID="Footer" FrameType="TitleBarOnly"/> </td> + </tr> + </table> + </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + + <%-- _lcid="1033" _version="16.0.4266" _dal="1" --%> +<%-- _LocalBinding --%> +<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> +<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server"> + <SharePoint:ListItemProperty Property="BaseName" maxlength="40" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server"> + <meta name="GENERATOR" content="Microsoft SharePoint" /> + <meta name="ProgId" content="SharePoint.WebPartPage.Document" /> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="CollaborationServer" content="SharePoint Team Web Site" /> + <SharePoint:ScriptBlock runat="server"> + var navBarHelpOverrideKey = "WSSEndUser"; + </SharePoint:ScriptBlock> +<SharePoint:StyleBlock runat="server"> +body #s4-leftpanel { + display:none; +} +.s4-ca { + margin-left:0px; +} +</SharePoint:StyleBlock> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server"> + <SharePoint:DelegateControl runat="server" + ControlId="SmallSearchInputBox" /> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server"> + <SharePoint:ProjectProperty Property="Description" runat="server"/> +</asp:Content> +<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> + <div class="ms-hide"> + <WebPartPages:WebPartZone runat="server" title="loc:TitleBar" id="TitleBar" AllowLayoutChange="false" AllowPersonalization="false" Style="display:none;" /> + </div> + <table class="ms-core-tableNoSpace ms-webpartPage-root" width="100%"> + <tr> + <td valign="top" style="padding:0"> + <table cellpadding="4" cellspacing="0" border="0" width="100%" height="100%"> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top"> <WebPartPages:WebPartZone runat="server" Title="loc:Header" ID="Header" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top"> <WebPartPages:WebPartZone runat="server" Title="loc:TopRow" ID="TopRow" FrameType="TitleBarOnly" Orientation="Horizontal"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterLeftColumn" ID="CenterLeftColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterColumn" ID="CenterColumn" FrameType="TitleBarOnly"/> </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:CenterRightColumn" ID="CenterRightColumn" FrameType="TitleBarOnly"/> </td> + </tr> + <tr> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" colspan="3" valign="top"> <WebPartPages:WebPartZone runat="server" Title="loc:Footer" ID="Footer"/> </td> + </tr> + </table> + </td> + <td id="_invisibleIfEmpty" name="_invisibleIfEmpty" valign="top" height="100%"> <WebPartPages:WebPartZone runat="server" Title="loc:RightColumn" ID="RightColumn"/> </td> + </tr> + <SharePoint:ScriptBlock runat="server">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == "function") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock> + </table> +</asp:Content> + + \ No newline at end of file From 1491f0230edd2d3b52ed825c1f08df465ba7eae8 Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Fri, 9 Feb 2018 23:57:19 +1100 Subject: [PATCH 15/18] + NET35 fix --- .../Impl/Services/ModelServiceBaseTests.cs | 1 - .../SPMeta2/Services/Impl/DefaultWebPartPageTemplatesService.cs | 1 - SPMeta2/SPMeta2/Services/WebPartPageTemplatesServiceBase.cs | 1 - 3 files changed, 3 deletions(-) diff --git a/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs b/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs index 976d6cdd7..8ece0f91c 100644 --- a/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs +++ b/SPMeta2/SPMeta2.Regression.Tests/Impl/Services/ModelServiceBaseTests.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; using SPMeta2.Containers; using SPMeta2.Definitions; using SPMeta2.Regression.ModelHandlers; diff --git a/SPMeta2/SPMeta2/Services/Impl/DefaultWebPartPageTemplatesService.cs b/SPMeta2/SPMeta2/Services/Impl/DefaultWebPartPageTemplatesService.cs index 36394e3e4..467229038 100644 --- a/SPMeta2/SPMeta2/Services/Impl/DefaultWebPartPageTemplatesService.cs +++ b/SPMeta2/SPMeta2/Services/Impl/DefaultWebPartPageTemplatesService.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; namespace SPMeta2.Services.Impl { diff --git a/SPMeta2/SPMeta2/Services/WebPartPageTemplatesServiceBase.cs b/SPMeta2/SPMeta2/Services/WebPartPageTemplatesServiceBase.cs index baa7e0e81..006bac89d 100644 --- a/SPMeta2/SPMeta2/Services/WebPartPageTemplatesServiceBase.cs +++ b/SPMeta2/SPMeta2/Services/WebPartPageTemplatesServiceBase.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; namespace SPMeta2.Services { From ac1bcda1e8af957ed494dd327daf5da841e4c946 Mon Sep 17 00:00:00 2001 From: "support@subpointsolutions.com" Date: Sat, 10 Feb 2018 00:55:56 +1100 Subject: [PATCH 16/18] + 1.2.1840.0152 + Serialization error using ClientValueObject in AddListItem using IncrementalDeploy #1100 --- SPMeta2.sln | 4 + SPMeta2/Build/Build.csproj | 5 ++ SPMeta2/Build/build.json | 58 ++++++------- SPMeta2/Regression/Regression.csproj | 5 ++ SPMeta2/Regression/local.csom.ps1 | 2 +- SPMeta2/Regression/local.o365.ps1 | 6 +- SPMeta2/Regression/local.o365v16.ps1 | 6 +- SPMeta2/SPMeta2.Build/SPMeta2.Build.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.CSOM.Standard.csproj | 5 ++ .../SPMeta2.CSOM/Properties/AssemblyInfo.cs | 2 +- SPMeta2/SPMeta2.CSOM/SPMeta2.CSOM.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Containers.CSOM.csproj | 7 +- ...a2.Containers.FarmSolutionContainer.csproj | 5 ++ ...tainers.FarmSolutionWebAppContainer.csproj | 5 ++ ...ainers.FarmSolutionWebAppContainer1.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Containers.AppContainer.csproj | 5 ++ .../SPMeta2.Containers.AppContainerWeb.csproj | 1 + .../SPMeta2.Containers.O365.csproj | 11 ++- .../SPMeta2.Containers.O365v16.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Containers.SSOM.csproj | 5 ++ ...Containers.SandboxSolutionContainer.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Containers.Standard.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Containers.csproj | 5 ++ .../Services/RegressionTestService.cs | 2 +- .../SPMeta2.Dependencies.csproj | 5 ++ .../SPMeta2.Nintex.CSOM.csproj | 5 ++ .../SPMeta2.Nintex.SSOM.csproj | 5 ++ SPMeta2/SPMeta2.Nintex/SPMeta2.Nintex.csproj | 5 ++ .../SPMeta2.O365/Properties/AssemblyInfo.cs | 2 +- SPMeta2/SPMeta2.O365/SPMeta2.O365.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Regression.CSOM.Standard.csproj | 11 ++- .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Regression.CSOM.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Regression.Impl.Tests.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Regression.SSOM.Standard.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Regression.SSOM.csproj | 5 ++ .../Impl/Services/HashCodeServiceTests.cs | 4 +- .../Impl/Services/ServiceContainerTests.cs | 3 +- .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Regression.Tests.csproj | 5 ++ .../SPMeta2.Regression.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.SSOM.Standard.csproj | 5 ++ .../SPMeta2.SSOM/Properties/AssemblyInfo.cs | 2 +- SPMeta2/SPMeta2.SSOM/SPMeta2.SSOM.csproj | 5 ++ .../Properties/AssemblyInfo.cs | 2 +- .../SPMeta2.Standard/SPMeta2.Standard.csproj | 5 ++ SPMeta2/SPMeta2/Properties/AssemblyInfo.cs | 2 +- SPMeta2/SPMeta2/SPMeta2.csproj | 6 ++ SPMeta2/SPMeta2/ServiceContainer.cs | 1 + .../SPMeta2/Services/HashCodeServiceBase.cs | 79 ++++------------- ...aultIncrementalModelTreeTraverseService.cs | 25 ++++-- .../Impl/DefaultModelDotPrintService.cs | 19 +++- .../Services/MD5HashCodeServiceBase.cs | 86 +++++++++++++++++++ .../SubPointSolutions.Docs.csproj | 5 ++ 65 files changed, 374 insertions(+), 138 deletions(-) create mode 100644 SPMeta2/SPMeta2/Services/MD5HashCodeServiceBase.cs diff --git a/SPMeta2.sln b/SPMeta2.sln index b01a86221..a87a9acd2 100644 --- a/SPMeta2.sln +++ b/SPMeta2.sln @@ -463,4 +463,8 @@ Global {9A306EC6-DE61-49B9-940D-7C1A36FC15AD} = {358E83EE-8ABA-463E-A868-3906865FDA39} {B9DDD9D7-99AF-4849-A559-C02558D4F774} = {358E83EE-8ABA-463E-A868-3906865FDA39} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + BuildVersion_StartDate = 2000/1/1 + BuildVersion_UpdateFileVersion = True + EndGlobalSection EndGlobal diff --git a/SPMeta2/Build/Build.csproj b/SPMeta2/Build/Build.csproj index 8dcbdf17f..cf524432f 100644 --- a/SPMeta2/Build/Build.csproj +++ b/SPMeta2/Build/Build.csproj @@ -58,6 +58,11 @@ + + + + +