This may be generic function you can use when you play with managed metadata (taxonomy) columns or with Managed Managed Metadata Service.
Notes:
Following code illustrate how to get term ID for term value provided.
[code language="javascript"]
// Resolve Term ID for the Term Value
function getTermIdForTermValue(siteUri, listName, fieldName, termValue) {
//Define
var deferred = $q.defer()
, termId;
var clientContext = new SP.ClientContext(siteUrl);
var list = clientContext.get_web().get_lists().getByTitle(listName);
//Tx field
var field = list.get_fields().getByInternalNameOrTitle(fieldName);
var txField = clientContext.castTo(field, SP.Taxonomy.TaxonomyField);
//load context
clientContext.load(field);
clientContext.load(txField);
// //excute async of context
clientContext.executeQueryAsync(
//Success on Async
Function.createDelegate(this
, function () {
//Getting term set of the field
var termSetId = txField.get_termSetId().toString();
var tSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext);
var ts = tSession.getDefaultSiteCollectionTermStore();
var tset = ts.getTermSet(termSetId);
//Define term label to match
var lmi = new SP.Taxonomy.LabelMatchInformation(clientContext);
lmi.set_lcid(1033);
lmi.set_trimUnavailable(true);
lmi.set_termLabel(termValue);
var termMatches = tset.getTerms(lmi);
//context loading with taxanomy values
clientContext.load(tSession);
clientContext.load(ts);
clientContext.load(tset);
clientContext.load(termMatches);
clientContext.executeQueryAsync(
function () {
if (termMatches && termMatches.get_count() > 0) {
termId = termMatches.get_item(0).get_id().toString();
console.log("Resolved Term Id for Term " + termValue, termId);
deferred.resolve(termId);
}
else {
console.log("No IDs to resolved for Term " + termValue);
deferred.resolve(null);
}
}
, function (sender, args) {
console.log("Error on resolving term ID", args);
deferred.reject(null);
});
}
, function (sender, args) {
console.log(args.get_message() + '\n' + args.get_stackTrace());
})
//Failed on Async
, Function.createDelegate(this, function (err) {
console.error(err.get_message());
})
);
return deferred.promise;
}
[/code]
Click here to view in gist.
For more details refer following links;
Notes:
- Used JSOM since no impletation in REST API to get done this task in SharePoint to date of post
- Passing term set ID is must since there may may be many term values equivalent in the term store
- For the example, I have retrieved the term set ID from the list field which glued with the managed metadata service.
Following code illustrate how to get term ID for term value provided.
[code language="javascript"]
// Resolve Term ID for the Term Value
function getTermIdForTermValue(siteUri, listName, fieldName, termValue) {
//Define
var deferred = $q.defer()
, termId;
var clientContext = new SP.ClientContext(siteUrl);
var list = clientContext.get_web().get_lists().getByTitle(listName);
//Tx field
var field = list.get_fields().getByInternalNameOrTitle(fieldName);
var txField = clientContext.castTo(field, SP.Taxonomy.TaxonomyField);
//load context
clientContext.load(field);
clientContext.load(txField);
// //excute async of context
clientContext.executeQueryAsync(
//Success on Async
Function.createDelegate(this
, function () {
//Getting term set of the field
var termSetId = txField.get_termSetId().toString();
var tSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext);
var ts = tSession.getDefaultSiteCollectionTermStore();
var tset = ts.getTermSet(termSetId);
//Define term label to match
var lmi = new SP.Taxonomy.LabelMatchInformation(clientContext);
lmi.set_lcid(1033);
lmi.set_trimUnavailable(true);
lmi.set_termLabel(termValue);
var termMatches = tset.getTerms(lmi);
//context loading with taxanomy values
clientContext.load(tSession);
clientContext.load(ts);
clientContext.load(tset);
clientContext.load(termMatches);
clientContext.executeQueryAsync(
function () {
if (termMatches && termMatches.get_count() > 0) {
termId = termMatches.get_item(0).get_id().toString();
console.log("Resolved Term Id for Term " + termValue, termId);
deferred.resolve(termId);
}
else {
console.log("No IDs to resolved for Term " + termValue);
deferred.resolve(null);
}
}
, function (sender, args) {
console.log("Error on resolving term ID", args);
deferred.reject(null);
});
}
, function (sender, args) {
console.log(args.get_message() + '\n' + args.get_stackTrace());
})
//Failed on Async
, Function.createDelegate(this, function (err) {
console.error(err.get_message());
})
);
return deferred.promise;
}
[/code]
Click here to view in gist.
For more details refer following links;
- https://kushanlahiru.wordpress.com/2016/09/05/managed-metadata-column-value-add-with-angular-javascript-jsom-csom/
- https://kushanlahiru.wordpress.com/2016/09/07/update-sharepoint-metadata-taxonomy-column-with-angular-js/
Comments
Post a Comment