Skip to content

Instantly share code, notes, and snippets.

@dev-kperera
Created September 4, 2016 09:39
Show Gist options
  • Save dev-kperera/a7de5ea23c0a441f89e66bf119e2688f to your computer and use it in GitHub Desktop.
Save dev-kperera/a7de5ea23c0a441f89e66bf119e2688f to your computer and use it in GitHub Desktop.
Updating SharePoint list or library field which consist of MMS (Managed Metadata or Taxonomy) column with Angular JS and JSOM
(function () {
'use strict';
// define controller
var controllerId = "MMSDevCtrl";
angular
.module('app')
.controller(controllerId, ['$q', mmsDevController]);
// create controller
function mmsDevController($q) {
//global var
var vm = this;
//value definitions
var siteUrl = 'http://win2012/sites/MSSDevTest';
var listName = 'MyDocumentLibrary';
var fieldName = 'MMSColName'; //MMS Column name
var itemIdUpdating = 1; // Item to be udated
var termLabel = 'IT'; //'';
//add metadata column to sharepoint
vm.submitMetadata = function () {
// function for update managed metadata column
SetManagedMetaDataField();
}
// Setting managed metadata to SharePoint List or Library
function SetManagedMetaDataField() {
var context = new SP.ClientContext(siteUrl);
//Get item form ID
var list = context.get_web().get_lists().getByTitle(listName); //listName
var item = list.getItemById(itemIdUpdating); //itemID
var field = list.get_fields().getByInternalNameOrTitle(fieldName); //fieldName
var txField = context.castTo(field, SP.Taxonomy.TaxonomyField);
//loading context
context.load(field);
context.load(txField);
context.load(item);
//excute async
context.executeQueryAsync(
Function.createDelegate(this, function () {
var termSetId = txField.get_termSetId().toString();
var termId;
getTermIdForTerm(function success(id) {
termId = id;
var value = item.get_item(fieldName);
var terms = new Array();
// If column in multivalued
if (txField.get_allowMultipleValues()) {
var enumerator = value.getEnumerator();
while (enumerator.moveNext()) {
var tv = enumerator.get_current();
terms.push(tv.get_wssId() + ";#" + tv.get_label() + "|" + tv.get_termGuid());
}
terms.push("-1;#" + termLabel + "|" + termId);
termValueString = terms.join(";#");
termValues = new SP.Taxonomy.TaxonomyFieldValueCollection(context, termValueString, txField);
txField.setFieldValueByValueCollection(item, termValues);
}
else {// If column in single valued
var termValue = new SP.Taxonomy.TaxonomyFieldValue();
termValue.set_label(termLabel);
termValue.set_termGuid(termId);
termValue.set_wssId(-1);
txField.setFieldValueByValue(item, termValue);
}
// Define other columns
item.set_item('Title', 'New Item with good hope!');
var dateValue = new Date('28-8-2016');
item.set_item('DateTimeColumn', dateValue);
// Update item
item.update();
//Execute query
context.executeQueryAsync(
function () {
console.log('field updated with MMS column #TechCentro');
}, function (sender, args) {
console.error(args.get_message() + '\n' + args.get_stackTrace());
});
}, function (sender, args) {
console.log(args.get_message() + '\n' + args.get_stackTrace());
}, context, termLabel, termSetId);
})
, Function.createDelegate(this, function (err) {
console.error(err.get_message());
}));
}
// Getting ID of the Term
function getTermIdForTerm(success, error, clientContext, term, termSetId) {
var termId = "";
var tSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(clientContext);
var ts = tSession.getDefaultSiteCollectionTermStore();
var tset = ts.getTermSet(termSetId);
var lmi = new SP.Taxonomy.LabelMatchInformation(clientContext);
lmi.set_lcid(1033);
lmi.set_trimUnavailable(true);
lmi.set_termLabel(term);
var termMatches = tset.getTerms(lmi);
//contexr 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();
success(termId);
}, function (sender, args) {
error(args);
});
}
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment