本文整理汇总了C#中Web.GetPropertyBagValueString方法的典型用法代码示例。如果您正苦于以下问题:C# Web.GetPropertyBagValueString方法的具体用法?C# Web.GetPropertyBagValueString怎么用?C# Web.GetPropertyBagValueString使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Web
的用法示例。
在下文中一共展示了Web.GetPropertyBagValueString方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateTemplateOnWeb
private void UpdateTemplateOnWeb(Web targetWeb, RefreshSitesJob job)
{
targetWeb.EnsureProperty(w => w.Url);
var infoJson = targetWeb.GetPropertyBagValueString(PnPPartnerPackConstants.PropertyBag_TemplateInfo, null);
if (!String.IsNullOrEmpty(infoJson))
{
Console.WriteLine($"Updating template for site: {targetWeb.Url}");
var info = JsonConvert.DeserializeObject<SiteTemplateInfo>(infoJson);
// If we have the template info
if (info != null && !String.IsNullOrEmpty(info.TemplateProviderType))
{
ProvisioningTemplate template = null;
// Try to retrieve the template
var templatesProvider = PnPPartnerPackSettings.TemplatesProviders[info.TemplateProviderType];
if (templatesProvider != null)
{
template = templatesProvider.GetProvisioningTemplate(info.TemplateUri);
}
// If we have the template
if (template != null)
{
// Configure proper settings for the provisioning engine
ProvisioningTemplateApplyingInformation ptai =
new ProvisioningTemplateApplyingInformation();
// Write provisioning steps on console log
ptai.MessagesDelegate += delegate (string message, ProvisioningMessageType messageType)
{
Console.WriteLine("{0} - {1}", messageType, messageType);
};
ptai.ProgressDelegate += delegate (string message, int step, int total)
{
Console.WriteLine("{0:00}/{1:00} - {2}", step, total, message);
};
// Exclude handlers not supported in App-Only
ptai.HandlersToProcess ^=
OfficeDevPnP.Core.Framework.Provisioning.Model.Handlers.TermGroups;
ptai.HandlersToProcess ^=
OfficeDevPnP.Core.Framework.Provisioning.Model.Handlers.SearchSettings;
// Configure template parameters
if (info.TemplateParameters != null)
{
foreach (var key in info.TemplateParameters.Keys)
{
if (info.TemplateParameters.ContainsKey(key))
{
template.Parameters[key] = info.TemplateParameters[key];
}
}
}
targetWeb.ApplyProvisioningTemplate(template, ptai);
// Save the template information in the target site
var updatedInfo = new SiteTemplateInfo()
{
TemplateProviderType = info.TemplateProviderType,
TemplateUri = info.TemplateUri,
TemplateParameters = template.Parameters,
AppliedOn = DateTime.Now,
};
var jsonInfo = JsonConvert.SerializeObject(updatedInfo);
targetWeb.SetPropertyBagValue(PnPPartnerPackConstants.PropertyBag_TemplateInfo, jsonInfo);
Console.WriteLine($"Updated template on site: {targetWeb.Url}");
// Update (recursively) all the subwebs of the current web
targetWeb.EnsureProperty(w => w.Webs);
foreach (var subweb in targetWeb.Webs)
{
UpdateTemplateOnWeb(subweb, job);
}
}
}
}
}
示例2: GetAvailablePageLayouts
private IEnumerable<PageLayout> GetAvailablePageLayouts(Web web)
{
var defaultLayoutXml = web.GetPropertyBagValueString(DEFAULTPAGELAYOUT, null);
var defaultPageLayoutUrl = string.Empty;
if (defaultLayoutXml != null && defaultLayoutXml != "__inherit")
{
defaultPageLayoutUrl = XElement.Parse(defaultLayoutXml).Attribute("url").Value;
}
List<PageLayout> layouts = new List<PageLayout>();
var layoutsXml = web.GetPropertyBagValueString(AVAILABLEPAGELAYOUTS, null);
if (!string.IsNullOrEmpty(layoutsXml) && layoutsXml != "__inherit")
{
var layoutsElement = XElement.Parse(layoutsXml);
foreach (var layout in layoutsElement.Descendants("layout"))
{
if (layout.Attribute("url") != null)
{
var pageLayout = new PageLayout();
pageLayout.Path = layout.Attribute("url").Value;
if (pageLayout.Path == defaultPageLayoutUrl)
{
pageLayout.IsDefault = true;
}
layouts.Add(pageLayout);
}
}
}
return layouts;
}
示例3: ExtractObjects
public override ProvisioningTemplate ExtractObjects(Web web, ProvisioningTemplate template, ProvisioningTemplateCreationInformation creationInfo)
{
using (var scope = new PnPMonitoredScope(this.Name))
{
// Load object if not there
#if !CLIENTSDKV15
web.EnsureProperties(w => w.Url, w => w.MasterUrl, w => w.AlternateCssUrl, w => w.SiteLogoUrl);
#else
web.EnsureProperties(w => w.Url, w => w.MasterUrl);
#endif
// Information coming from the site
template.ComposedLook.MasterPage = Tokenize(web.MasterUrl, web.Url);
#if !CLIENTSDKV15
template.ComposedLook.AlternateCSS = Tokenize(web.AlternateCssUrl, web.Url);
template.ComposedLook.SiteLogo = Tokenize(web.SiteLogoUrl, web.Url);
#else
template.ComposedLook.AlternateCSS = null;
template.ComposedLook.SiteLogo = null;
#endif
scope.LogInfo(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_Retrieving_current_composed_look);
Site site = (web.Context as ClientContext).Site;
if (!site.IsObjectPropertyInstantiated("Url"))
{
web.Context.Load(site);
web.Context.ExecuteQueryRetry();
}
SharePointConnector spConnector = new SharePointConnector(web.Context, web.Url, "dummy");
// to get files from theme catalog we need a connector linked to the root site
SharePointConnector spConnectorRoot;
if (!site.Url.Equals(web.Url, StringComparison.InvariantCultureIgnoreCase))
{
spConnectorRoot = new SharePointConnector(web.Context.Clone(site.Url), site.Url, "dummy");
}
else
{
spConnectorRoot = spConnector;
}
// Check if we have composed look info in the property bag, if so, use that, otherwise try to detect the current composed look
if (web.PropertyBagContainsKey("_PnP_ProvisioningTemplateComposedLookInfo"))
{
scope.LogInfo(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_Using_ComposedLookInfoFromPropertyBag);
try
{
var composedLook = JsonConvert.DeserializeObject<ComposedLook>(web.GetPropertyBagValueString("_PnP_ProvisioningTemplateComposedLookInfo", ""));
if (composedLook.Name == null || composedLook.BackgroundFile == null || composedLook.FontFile == null || composedLook.MasterPage == null || composedLook.SiteLogo == null)
{
scope.LogError(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_ComposedLookInfoFailedToDeserialize);
throw new JsonSerializationException();
}
template.ComposedLook = composedLook;
if (creationInfo != null && creationInfo.PersistComposedLookFiles && creationInfo.FileConnector != null)
{
scope.LogDebug(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_Creating_SharePointConnector);
// Let's create a SharePoint connector since our files anyhow are in SharePoint at this moment
// Download the theme/branding specific files
#if !CLIENTSDKV15
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, web.AlternateCssUrl, scope);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, web.SiteLogoUrl, scope);
#endif
TokenParser parser = new TokenParser(web, template);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, parser.ParseString(composedLook.BackgroundFile), scope);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, parser.ParseString(composedLook.ColorFile), scope);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, parser.ParseString(composedLook.FontFile), scope);
}
// Create file entries for the custom theme files
if (!string.IsNullOrEmpty(template.ComposedLook.BackgroundFile))
{
template.Files.Add(GetComposedLookFile(template.ComposedLook.BackgroundFile));
}
if (!string.IsNullOrEmpty(template.ComposedLook.ColorFile))
{
template.Files.Add(GetComposedLookFile(template.ComposedLook.ColorFile));
}
if (!string.IsNullOrEmpty(template.ComposedLook.FontFile))
{
template.Files.Add(GetComposedLookFile(template.ComposedLook.FontFile));
}
if (!string.IsNullOrEmpty(template.ComposedLook.SiteLogo))
{
template.Files.Add(GetComposedLookFile(template.ComposedLook.SiteLogo));
}
}
catch (JsonSerializationException)
{
// cannot deserialize the object, fall back to composed look detection
template = DetectComposedLook(web, template, creationInfo, scope, spConnector, spConnectorRoot);
}
//.........这里部分代码省略.........
示例4: ExtractObjects
public override ProvisioningTemplate ExtractObjects(Web web, ProvisioningTemplate template, ProvisioningTemplateCreationInformation creationInfo)
{
using (var scope = new PnPMonitoredScope(this.Name))
{
scope.LogInfo(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_Retrieving_current_composed_look);
// Ensure that we have URL property loaded for web and site
web.EnsureProperty(w => w.Url);
Site site = (web.Context as ClientContext).Site;
site.EnsureProperty(s => s.Url);
SharePointConnector spConnector = new SharePointConnector(web.Context, web.Url, "dummy");
// to get files from theme catalog we need a connector linked to the root site
SharePointConnector spConnectorRoot;
if (!site.Url.Equals(web.Url, StringComparison.InvariantCultureIgnoreCase))
{
spConnectorRoot = new SharePointConnector(web.Context.Clone(site.Url), site.Url, "dummy");
}
else
{
spConnectorRoot = spConnector;
}
// Check if we have composed look info in the property bag, if so, use that, otherwise try to detect the current composed look
if (web.PropertyBagContainsKey("_PnP_ProvisioningTemplateComposedLookInfo"))
{
scope.LogInfo(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_Using_ComposedLookInfoFromPropertyBag);
try
{
var composedLook = JsonConvert.DeserializeObject<ComposedLook>(web.GetPropertyBagValueString("_PnP_ProvisioningTemplateComposedLookInfo", ""));
if (composedLook.Name == null || composedLook.BackgroundFile == null || composedLook.FontFile == null)
{
scope.LogError(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_ComposedLookInfoFailedToDeserialize);
throw new JsonSerializationException();
}
composedLook.BackgroundFile = Tokenize(composedLook.BackgroundFile, web.Url);
composedLook.FontFile = Tokenize(composedLook.FontFile, web.Url);
composedLook.ColorFile = Tokenize(composedLook.ColorFile, web.Url);
template.ComposedLook = composedLook;
if (!web.IsSubSite() && creationInfo != null &&
creationInfo.PersistBrandingFiles && creationInfo.FileConnector != null)
{
scope.LogDebug(CoreResources.Provisioning_ObjectHandlers_ComposedLooks_ExtractObjects_Creating_SharePointConnector);
// Let's create a SharePoint connector since our files anyhow are in SharePoint at this moment
TokenParser parser = new TokenParser(web, template);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, parser.ParseString(composedLook.BackgroundFile), scope);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, parser.ParseString(composedLook.ColorFile), scope);
DownLoadFile(spConnector, spConnectorRoot, creationInfo.FileConnector, web.Url, parser.ParseString(composedLook.FontFile), scope);
}
// Create file entries for the custom theme files
if (!string.IsNullOrEmpty(template.ComposedLook.BackgroundFile))
{
var f = GetComposedLookFile(template.ComposedLook.BackgroundFile);
f.Folder = Tokenize(f.Folder, web.Url);
template.Files.Add(f);
}
if (!string.IsNullOrEmpty(template.ComposedLook.ColorFile))
{
var f = GetComposedLookFile(template.ComposedLook.ColorFile);
f.Folder = Tokenize(f.Folder, web.Url);
template.Files.Add(f);
}
if (!string.IsNullOrEmpty(template.ComposedLook.FontFile))
{
var f = GetComposedLookFile(template.ComposedLook.FontFile);
f.Folder = Tokenize(f.Folder, web.Url);
template.Files.Add(f);
}
}
catch (JsonSerializationException)
{
// cannot deserialize the object, fall back to composed look detection
template = DetectComposedLook(web, template, creationInfo, scope, spConnector, spConnectorRoot);
}
}
else
{
template = DetectComposedLook(web, template, creationInfo, scope, spConnector, spConnectorRoot);
}
if (creationInfo != null && creationInfo.BaseTemplate != null)
{
template = CleanupEntities(template, creationInfo.BaseTemplate);
}
}
return template;
}
示例5: AreSiblingsEnabledForCurrentStructuralNavigation
private Boolean AreSiblingsEnabledForCurrentStructuralNavigation(Web web)
{
bool siblingsEnabled = false;
if (bool.TryParse(web.GetPropertyBagValueString(NavigationShowSiblings, "false"), out siblingsEnabled))
{
}
return siblingsEnabled;
}
示例6: ApplyBrandingOnWeb
public static void ApplyBrandingOnWeb(Web targetWeb, BrandingSettings brandingSettings, ProvisioningTemplate template)
{
targetWeb.EnsureProperties(w => w.MasterUrl, w => w.Url);
// Configure proper settings for the provisioning engine
ProvisioningTemplateApplyingInformation ptai =
new ProvisioningTemplateApplyingInformation();
// Write provisioning steps on console log
ptai.MessagesDelegate += delegate (string message, ProvisioningMessageType messageType) {
Console.WriteLine("{0} - {1}", messageType, messageType);
};
ptai.ProgressDelegate += delegate (string message, int step, int total) {
Console.WriteLine("{0:00}/{1:00} - {2}", step, total, message);
};
// Include only required handlers
ptai.HandlersToProcess = Core.Framework.Provisioning.Model.Handlers.ComposedLook |
Core.Framework.Provisioning.Model.Handlers.Files |
Core.Framework.Provisioning.Model.Handlers.WebSettings;
// Check if we really need to apply/update the branding
var siteBrandingUpdatedOn = targetWeb.GetPropertyBagValueString(
PnPPartnerPackConstants.PropertyBag_Branding_AppliedOn, null);
// If the branding updated on date and time are missing
// or older than the branding update date and time
if (String.IsNullOrEmpty(siteBrandingUpdatedOn) ||
DateTime.Parse(siteBrandingUpdatedOn) < brandingSettings.UpdatedOn.Value.ToUniversalTime())
{
Console.WriteLine($"Appling branding to site: {targetWeb.Url}");
// Confirm the master page URL
template.WebSettings.MasterPageUrl = targetWeb.MasterUrl;
// Apply the template
targetWeb.ApplyProvisioningTemplate(template, ptai);
// Apply a custom JSLink, if any
if (!String.IsNullOrEmpty(brandingSettings.UICustomActionsUrl))
{
targetWeb.AddJsLink(
PnPPartnerPackConstants.BRANDING_SCRIPT_LINK_KEY,
brandingSettings.UICustomActionsUrl);
}
// Store Property Bag to set the last date and time when we applied the branding
targetWeb.SetPropertyBagValue(
PnPPartnerPackConstants.PropertyBag_Branding_AppliedOn,
DateTime.Now.ToUniversalTime().ToString());
Console.WriteLine($"Applied branding to site: {targetWeb.Url}");
}
// Apply branding (recursively) on all the subwebs of the current web
targetWeb.EnsureProperty(w => w.Webs);
foreach (var subweb in targetWeb.Webs)
{
ApplyBrandingOnWeb(subweb, brandingSettings, template);
}
}