Term stores contain term groups, term sets, and terms. This article describes how to work find, load, and use a term store to access the terms inside.
You can access a list of all term stores via the termstores property of the Taxonomy class.
// get a list of term stores and return all properties
const stores = await taxonomy.termStores.get();
// you can also select the fields to return for the term stores using the select operator.
const stores2 = await taxonomy.termStores.select("Name").get();
To load a specific term store you can use the getByName or getById methods. Using the get method executes the request to the server.
const store = await taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==").get();
const store2 = await taxonomy.termStores.getById("f6112509-fba7-4544-b2ed-ce6c9396b646").get();
// you can use select as well with either method to choose the fields to return
const store3 = await taxonomy.termStores.getById("f6112509-fba7-4544-b2ed-ce6c9396b646").select("Name").get();
For term stores and all other objects data is returned as a merger of the data and a new instance of the representative class. Allowing you to immediately begin acting on the object. IF you do not need the data, skip the get call until you do.
// no data loaded yet, store is an instance of TermStore class
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
// I can call subsequent methods on the same object and will now have an object with data
// I could have called get above as well - this is just an example
const store2: ITermStore & ITermStoreData = await store.get();
// log the Name property
console.log(store2.Name);
// call another TermStore method on the same object
await store2.addLanguage(1031);
Loads the data for this term store
import { taxonomy, ITermStore } from "@pnp/sp-taxonomy";
const store: ITermStore = await taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==").get();
Gets the collection of term sets with a matching name
import { taxonomy, ITermSets } from "@pnp/sp-taxonomy";
const sets: ITermSets = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==").getTermSetsByName("My Set", 1033);
Gets the term set with a matching id
import { taxonomy, ITermStore, ITermSet } from "@pnp/sp-taxonomy";
// note that you can also use instances if you wanted to conduct multiple operations on a single store
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
const set: ITermSet = store.getTermSetById("0ba6845c-1468-4ec5-a5a8-718f1fb05431");
// we will handle normalizing guids for you as well :)
const set2: ITermSet = store.getTermSetById("{a63aefc9-359d-42b7-a0d2-cb1809acd260}");
Gets a term by id
import { taxonomy, ITermStore, ITerm, ITermData } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
const term: ITerm = store.getTermById("0ba6845c-1468-4ec5-a5a8-718f1fb05431");
const termWithData: ITerm & ITermData = await term.get();
Added in 1.2.6
import { taxonomy, ITermStore, ITerms, ITermData } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
const terms: ITerms = store.getTermsById("0ba6845c-1468-4ec5-a5a8-718f1fb05431", "0ba6845c-1468-4ec5-a5a8-718f1fb05432");
const termWithData: (ITerm & ITermData)[] = await term.get();
Gets a term group by id
import { taxonomy, ITermStore, ITermGroup } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
const group: ITermGroup = store.getTermGroupById("0ba6845c-1468-4ec5-a5a8-718f1fb05431");
Gets terms that match the provided criteria. Please see this article for details on valid querys.
import { taxonomy, ITermStore, ILabelMatchInfo, ITerm, ITermData } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
const terms: ITerms = store.getTerms({
TermLabel: "test label",
TrimUnavailable: true,
});
// load the data based on the above query
const termsWithData: (ITerm & ITermData)[] = terms.get();
// select works here too :)
const termsWithData2: (ITerm & ITermData)[] = terms.select("Name").get();
Adds a language to the term store by LCID
import { taxonomy, ITermStore } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
await store.addLanguage(1031);
Adds a term group to the term store
import { taxonomy, ITermStore } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
const group: ITermGroup & ITermGroupData = await store.addGroup("My Group Name");
// you can optionally specify the guid of the group, if you don't we just create a new guid for you
const groups: ITermGroup & ITermGroupData = await store.addGroup("My Group Name", "0ba6845c-1468-4ec5-a5a8-718f1fb05431");
Commits all updates to the database that have occurred since the last commit or rollback.
import { taxonomy, ITermStore } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
await store.commitAll();
Delete a working language from the TermStore
import { taxonomy, ITermStore } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
await store.deleteLanguage(1031);
Discards all updates that have occurred since the last commit or rollback. It is unlikely you will need to call this method through this library due to how things are structured.
import { taxonomy, ITermStore } from "@pnp/sp-taxonomy";
const store: ITermStore = taxonomy.termStores.getByName("Taxonomy_v5o/SbcTE2cegwO2dtAN9l==");
await store.rollbackAll();