문제

현재 보고 있는 탐색 용어에 대한 로컬 속성을 가져오려고 합니다.

예를 들어...내가 탐색하면 http://sp2013/about/team 해당 용어에 대한 로컬 사용자 정의 속성을 가져와야 합니다. .

현재 솔루션(성능 문제):

  1. URL에서 용어 가져오기 window.location.pathname 현재 페이지의
  2. 기본 용어 저장소 가져오기
  3. 해당 용어가 속한 그룹 가져오기
  4. 해당 용어가 속한 용어 집합 가져오기
  5. 기간 얻기 에 대한 (/about/team에서)
  6. 기간 얻기 (/about/team에서) 그런 다음 사용자 정의 속성을 읽어보세요.

ExecuteQueryAsync가 너무 많이 호출되고 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