I'm using Rws.LanguageCloud.Sdk and call ListTermbaseTermsAsync to get the list of Terms. How can I filter Terms based on termbaseFieldValues? Can I use search and searchType to implement this?
I'm using Rws.LanguageCloud.Sdk and call ListTermbaseTermsAsync to get the list of Terms. How can I filter Terms based on termbaseFieldValues? Can I use search and searchType to implement this?
Hello Vitalii Lytvynenko
It seems like you're using the wrong endpoint for what you're trying to accomplish.
You should use ListTermbaseEntriesAsync, adding the required "fields" query parameter (documented here), depending on what level the termbaseFieldValues are at.
So, for example:
Let's say you have a term level field, named "TermLevelField"
And you wish to get terms that have a "TermLevelField" value of "TermLevelValue". Then, to get the terms, the code would be something similar to:
public async Task<List<string>> GetTermsFilteredByFieldValues() { var credentials = new ServiceCredentials("cleintId", "clientSecret", "tenant"); var clientProvider = new LanguageCloudClientProvider("region"); var termbase = clientProvider.GetTermbaseClient(credentials); var listTermbaseEntriesResponse = await termbase.ListTermbaseEntriesAsync("termbaseId", fields: "termbaseFieldValues, languages.terms.termbaseFieldValues"); var terms = new List<string>(); foreach (var termbaseEntry in listTermbaseEntriesResponse.Items) { foreach (var language in termbaseEntry.Languages.Where(lang => lang.Language.LanguageCode == "de")) { foreach (var term in language.Terms) { if (term.TermbaseFieldValues.First(fiedlValue => fiedlValue.Name == "TermLevelField").Value == "TermLevelValue") terms.Add(term.Text); } } } return terms; }
Hello Vitalii Lytvynenko
It seems like you're using the wrong endpoint for what you're trying to accomplish.
You should use ListTermbaseEntriesAsync, adding the required "fields" query parameter (documented here), depending on what level the termbaseFieldValues are at.
So, for example:
Let's say you have a term level field, named "TermLevelField"
And you wish to get terms that have a "TermLevelField" value of "TermLevelValue". Then, to get the terms, the code would be something similar to:
public async Task<List<string>> GetTermsFilteredByFieldValues() { var credentials = new ServiceCredentials("cleintId", "clientSecret", "tenant"); var clientProvider = new LanguageCloudClientProvider("region"); var termbase = clientProvider.GetTermbaseClient(credentials); var listTermbaseEntriesResponse = await termbase.ListTermbaseEntriesAsync("termbaseId", fields: "termbaseFieldValues, languages.terms.termbaseFieldValues"); var terms = new List<string>(); foreach (var termbaseEntry in listTermbaseEntriesResponse.Items) { foreach (var language in termbaseEntry.Languages.Where(lang => lang.Language.LanguageCode == "de")) { foreach (var term in language.Terms) { if (term.TermbaseFieldValues.First(fiedlValue => fiedlValue.Name == "TermLevelField").Value == "TermLevelValue") terms.Add(term.Text); } } } return terms; }