قائمة عرض تصفية حول إصدار حقول البيانات الوصفية المدارة

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/43424

سؤال

طلب منا عميلنا تغيير تصفية عرض القائمة لعدم إظهار جميع المصطلحات من التصنيف في البيانات الوصفية المدارة، ولكن فقط من المستندات في المكتبة.

حاليا لدينا عمودان:

لدينا عمود بيانات تعريف مدار تعاقب حسب التصنيف حسب الطلب. عند استخدام عامل تصفية على العمود، تكون جميع القيم من التصنيف مرئية.

image1

لدينا أيضا عمود تعريف المجال المخصص الذي يرث من Taxolomyfield الذي يظهر عرض تصفية القيم فقط من المستندات الموجودة في مكتبة.

Image2

حاولت أن أجد طريقة لتوفير هذه الترشيح. بعد البحث، يبدو أن هناك طريقة بسيطة للقيام بذلك لعمود البيانات الوصفية المدارة. النظر إلى Net أيضا لم يعطي أي إجابات قاطعة. لقد وجدت مكانا واحدا فقط حيث طلب شخص ما من نفس السؤال، لكن الإجابات غير مرضية لحالتي.

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

المحلول

We were finally able to resolve the issue. In short - to work you need to change the way how OOTB Filter code works to way that it thinks that it is operating with SPFieldLookup.

To achieve this you need 3 steps.

1.Create copy of Filter.aspx file located from Sharepoint Root Directory. This aspx is responsible for rendering items in filter view. 2. Create HttpModule to redirect requests to the customFilter. 3. Register created HttpModule in webconfig.

  1. Replace FilterAspxPage class (the code is in Microsoft.Sharepoint.ApplicationPages.dll) used in this aspx file with custom implementation, which should look like this:

    public partial class CustomFilter : Microsoft.SharePoint.ApplicationPages.FilterAspxPage
    {   
        protected new void GetDistinctValues()
        {
        // exact copy of the method GetDistinctValues from Microsoft.Sharepoint.ApplicationPages.dll with code taken from OnInit method
        // to properly initialize objects used in this method
        // Also one use of reflection was needed, because renderAsHtml is protected
    
        // after assignment to text4 string we've added this condition:
    
        if (text4.Equals("Microsoft.SharePoint.Taxonomy.TaxonomyField", StringComparison.InvariantCultureIgnoreCase) == true)
        {
            text4 = "Microsoft.SharePoint.SPFieldLookup";
        }
      }
    }
    
  2. Here is an example of how to create custom HttpModule:

    public class ListFilterRedirectModule : IHttpModule
    {
    
    #region IHttpModule Members
    
        public void Dispose()
        {
        }
    
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }
    #endregion
    
    
        private void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
    
            if (context.Request.RawUrl.IndexOf("/_layouts/filter.aspx", StringComparison.InvariantCultureIgnoreCase) >= 0)
            {
                string newUrl = context.Request.Url.Scheme+"://"+context.Request.Url.Host + context.Request.RawUrl.Replace("/_layouts/filter.aspx", "/_layouts/CustomFilter.aspx");
                context.Response.Redirect(newUrl);
            }
        }
    
    }
    
  3. You will need to configure this module in the web.config file of your web and register it with IIS before being able to use it. For more information of the whole process see the following link: http://go.microsoft.com/?linkid=8101007. Below are sample lines that you can add to the web.config file:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <add name="ListFilterRedirectModule" type="ListFilterRedirectModule, ... , Version=1.0.0.0, Culture=neutral, PublicKeyToken=..." />
        </modules>
    </system.webServer>
    

نصائح أخرى

You may use this solution from CodePlex: http://metadatapagefilter.codeplex.com/ It has quite some limitations (column must exist as root site, limited to term sets with one level ...) but maybe it can help you.

Read the discussions if you are using IE8 or 9 as it indicates how to work around a infinite loading situation.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top