Establecer mediante programación el valor HtmlDesignAssociated
-
28-09-2020 - |
Pregunta
Estoy implementando una apariencia compuesta desde el servidor (incluidos los archivos .spcolor, .spfont, master.html y master.preview), pero no puedo seleccionar el campo Archivo asociado.Intenté configurarlo solo en el elements.xml
archivo así como el del receptor del evento FeatureActivated
evento.
Elementos.xml:
<File Path="Master\corporate.html" Url="corporate.html" Type="GhostableInLibrary" ReplaceContent="True">
<Property Name="ContentType" Value="Html Master Page"></Property>
<Property Name="UIVersion" Value="15"></Property>
<Property Name="HtmlDesignAssociated" Value="TRUE"></Property>
<Property Name="FSObjType" Value="0"></Property>
</File>
Y el código subyacente:
SPList masterGallery = web.Lists.TryGetList("Master Page Gallery");
SPListItemCollection masterItems = masterGallery.Items;
for (int m = 0; m < masterItems.Count; m++)
{
SPListItem page = masterItems[m];
if(page["Name"].ToString() == "corporate.html")
{
page["HtmlDesignAssociated"] = true;
page.Update(); // forgot to include this line
}
}
Nota:He omitido otro código irrelevante.
Solución
Ok, aparentemente estoy intentando configurar el campo. HtmlDesignAssociated
desde el elements.xml
El archivo en un módulo no funcionará.
Una vez que lo saqué, el código en el receptor de eventos funcionó y mi master.html
El archivo ahora tiene un asociado. master.master
.
Modifiqué un poco el código para utilizarlo. SPUrlUtility.CombineUrl
en lugar de web.GetList
o web.Lists.TryGetList("whatever")
.Aquí está el código que funciona:
var masterGallery = SPUrlUtility.CombineUrl(relativePath, "_catalogs/masterpage");
SPList master = web.GetList(masterGallery);
SPListItemCollection masterItems = master.Items;
for (int m = 0; m < masterItems.Count; m++)
{
SPListItem page = masterItems[m];
if (page["Name"].ToString() == "corporate.html")
{
page["HtmlDesignAssociated"] = true;
page.Update();
}
}