سؤال

أقوم بنشر مظهر مؤلف من الخادم (بما في ذلك ملفات .spcolor و.spfont وmaster.html وmaster.preview)، لكن لا يمكنني الحصول على الحقل "ملف مرتبط" لتحديده.لقد حاولت وضعه في فقط elements.xml الملف وكذلك متلقي الحدث FeatureActivated حدث.

العناصر.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>

والكود الخلفي:

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
    }
}

ملحوظة:لقد تركت رمزًا آخر غير ذي صلة.

هل كانت مفيدة؟

المحلول

حسنًا، يبدو أن محاولة ضبط المجال HtmlDesignAssociated من elements.xml لن يعمل الملف الموجود في الوحدة النمطية.

بمجرد إخراج ذلك، عمل الكود الموجود في جهاز استقبال الحدث و master.html يحتوي الملف الآن على ملف مرتبط master.master.

لقد قمت بتعديل الكود قليلاً للاستفادة منه SPUrlUtility.CombineUrl بدلاً من web.GetList أو web.Lists.TryGetList("whatever").إليك الكود الذي يعمل:

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();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top