الحصول على مصطلح التنقل للصفحة الحالية في CSOM (JavaScript)
-
10-12-2019 - |
سؤال
أحاول الحصول على الخصائص المحلية لمصطلح التنقل الذي يتم عرضه حاليًا.
على سبيل المثال...إذا قمت بالتنقل إلى http://sp2013/about/team
أحتاج إلى الحصول على الخصائص المخصصة المحلية لهذا المصطلح فريق.
الحل الحالي (مشكلات الأداء):
- احصل على المصطلح في عنوان URL
window.location.pathname
من الصفحة الحالية - احصل على مخزن المصطلحات الافتراضي
- احصل على المجموعة التي يوجد بها هذا المصطلح
- احصل على مجموعة المصطلحات الموجودة في هذا المصطلح
- احصل على مصطلح عن (من /حول/الفريق)
- احصل على مصطلح فريق (من /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) للصفحة الحالية.
لا تنتمي إلى sharepoint.stackexchange