سؤال

أحاول الحصول على الخصائص المحلية لمصطلح التنقل الذي يتم عرضه حاليًا.

على سبيل المثال...إذا قمت بالتنقل إلى http://sp2013/about/team أحتاج إلى الحصول على الخصائص المخصصة المحلية لهذا المصطلح فريق.

الحل الحالي (مشكلات الأداء):

  1. احصل على المصطلح في عنوان URL window.location.pathname من الصفحة الحالية
  2. احصل على مخزن المصطلحات الافتراضي
  3. احصل على المجموعة التي يوجد بها هذا المصطلح
  4. احصل على مجموعة المصطلحات الموجودة في هذا المصطلح
  5. احصل على مصطلح عن (من /حول/الفريق)
  6. احصل على مصطلح فريق (من /about/team) ثم اقرأ الخصائص المخصصة.

أداء هذا سيء جدًا نظرًا لوجود عدد كبير جدًا من عمليات استدعاء ExecuterQueryAsync، وكلما زاد عمق عنوان URL، زاد عدد الاستعلامات!!

الحلول الممكنة الأخرى؟؟

  • هل هناك طريقة للحصول على مصطلح التنقل الذي يتم عرضه على الصفحة الحالية باستخدام استعلام واحد فقط؟
  • هل هناك طريقة للبحث في جميع المصطلحات الموجودة في مصطلح معين؟ قم بتعيين مصطلح استرداد استنادًا إلى عنوان URL المألوف (حيث يكون عنوان URL المألوف = window.location.pathname)؟
هل كانت مفيدة؟

المحلول 2

حل مشكلة الأداء بمساعدة روبرت وكذلك توصلت إلى حل أمثل باستخدام getTerms() للبحث في متجر المصطلحات بالكامل عن المصطلح المطلوب:

// Get SP Context
var context = SP.ClientContext.get_current();
// Get the default Term Store for context
var session = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
var termStore = session.getDefaultSiteCollectionTermStore();
// Set up Term Query for termStore.getTerms()
var termQuery = new SP.Taxonomy.LabelMatchInformation(context);
    // The language code identifier (LCID) of the Term.labels to be matched
    termQuery.set_lcid(1033);
    // Determines if only terms available for tagging are returned
    termQuery.set_trimUnavailable(false);
    // The Label of the Term to get
    termQuery.set_termLabel("My Term");
// Get Terms based on termQuery
var termsStoreTerms = termStore.getTerms(termQuery);
// Load em' and run execute query!
context.load(session);
context.load(termStore);
context.load(termsStoreTerms);
context.executeQueryAsync(
    function(){
        // Get all the terms based on search
        var termsEnum = termsStoreTerms.getEnumerator();

        // Loop through results
        while(termsEnum.moveNext()){
            // Current Item in Enumerator Loop
            var currentTerm = termsEnum.get_current();

            // Get Local Custom Properties
            var termLocalCustomProperties = currentTerm.get_localCustomProperties();
        }
    }, function(sender, args){
        // Failure getting Term
        var error = 'Failure getting Term: ' + args.get_message() + '\n' + args.get_stackTrace
        alert(error);
    });

نصائح أخرى

يمكنك استخدام _spFriendlyUrlPageContextInfo.termId للحصول على معلومات المصطلح (GUID) للصفحة الحالية.

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