How do I set up the Table API to get values in both languages

Perry4
Tera Contributor

I am using the Table API of ServiceNow. When the interface calls the tableAPI, I can only get the default language value of the interface account. However, I want to get both Chinese and English values. Is there anything I can do?

5 REPLIES 5

Hitoshi Ozawa
Giga Sage

Sample Scripted REST API to get table data in different language. (It's not complete.)

1. In Scripted REST API, define Query Parameters "lang" and "table".

find_real_file.png

2. Define script

(function process( /*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {

    var queryParams = request.queryParams;
    var tableName = queryParams.table.toString();
    var lang = queryParams.lang.toString();

    if (!tableName) {
        var unspecifiedValue = new sn_ws_err.ServiceError();
        unspecifiedValue.setStatus(400);
        unspecifiedValue.setMessage('parameter table not specified');
        unspecifiedValue.setDetail('table name must be specified in parameter.');
        return unspecifiedValue;
    }

    if (!lang) {
        lang = 'en';
    }

    var tableUtil = new TableUtil2();
    var records = tableUtil.getTableData(tableName, lang);
    return records;
})(request, response);

3. Define Script Include to retrieve data from table

var TableUtil2 = Class.create();
TableUtil2.prototype = {
    initialize: function() {},
    getTableData: function(tableName, language) {
        var records = [];
        var gr = new GlideRecord(tableName);
        //gr.setLimit(1);
        gr.query();
        gr.next();

        var fields = gr.getFields();
        for (var i = 0; i < fields.size(); i++) {
            var glideElement = fields.get(i);
            if (glideElement.hasValue()) {
                var label = this.getLabel(tableName, glideElement.getName(), language);
                if (!label) {
                    label = glideElement.getLabel();
                }
                var value = this.getChoiceValue(tableName, glideElement.getName(), glideElement, language);
                if (!value) {
                    value = glideElement.getValue();
                }
				var col = {};
				col[label] = value;
                records.push(col);
            }
        }
        return records;
    },
    getChoiceValue: function(tableName, element, value, language) {
        grChoice = new GlideRecord('sys_choice');
        grChoice.addQuery('name', tableName);
        grChoice.addQuery('element', element);
        grChoice.addQuery('value', value);
        grChoice.addQuery('language', language);
        grChoice.query();
        if (grChoice.next()) {
            return grChoice.getValue('label');
        }
        return;
    },
    getLabel: function(tableName, element, language) {
        grDoc = new GlideRecord('sys_documentation');
        grDoc.addQuery('name', tableName);
        grDoc.addQuery('element', element);
        grDoc.addQuery('language', language);
        grDoc.query();
        if (grDoc.next()) {
            return grDoc.getValue('label');
        }
        return;
    },
    type: 'TableUtil2'
};

Sample execution results:

case 'ja': /getdatabylang?table={tablename}&lang=ja

{'result': [{'Updated by': 'admin'}, {'Created': '2022-05-16 08:42:52'}, {'Updates': '0'}, {'選択': '選択1'}, {'Updated': '2022-05-16 08:42:52'}, {'フィールド2': 'test value2'}, {'作成者': 'admin'}, {'フィールド1': 'test value1'}]}

case 'en': /getdatabylang?table={tablename}&lang=en

{'result': [{'Updated by': 'admin'}, {'Created': '2022-05-16 08:42:52'}, {'Updates': '0'}, {'selectbox': 'Choice1'}, {'Updated': '2022-05-16 08:42:52'}, {'Field2': 'test value2'}, {'Created by': 'admin'}, {'Field1': 'test value1'}]}