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
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'}]}