Create reference field using script

Alex153
Tera Contributor

Hi,

I have a script to create table with custom fields with different types. Everything works fine except reference field. It creates but there is no link to the table. Instead of "table_name" I use real table name not a label name 🙂

 

var table_name = 'some_table';
var extends_table = 'some_table';

var fieldDefinitions = [
    { name: 'sys_id', type: 'string' },
    { name: 'sys_created_on', type: 'datetime' },
    { name: 'sys_created_by', type: 'string' },
    { name: 'sys_updated_on', type: 'datetime' },
    { name: 'sys_updated_by', type: 'string' },
    { name: 'sys_mod_count', type: 'integer' },
    { name: 'sys_tags', type: 'string' },
    { name: 'sys_scope', type: 'string' },
    { name: 'sys_domain', type: 'string' },
    { name: 'sys_domain_path', type: 'string' },
    { name: 'Field1', type: 'string' },
    { name: 'Field2', type: 'integer' },
    { name: 'Field3', type: 'boolean' },
    { name: 'Field4', type: 'choice' },
    { name: 'Field5', type: 'date' },
    { name: 'Field6', type: 'reference', reference: 'table_name' },
    { name: 'Field7', type: 'string' },
    { name: 'Field8', type: 'string' },
    { name: 'Field9', type: 'string' },
    { name: 'Field10', type: 'string'}
];

var attrs = new Packages.java.util.HashMap();

for (var i = 0; i < fieldDefinitions.length; i++) {
    var fieldDef = fieldDefinitions[i];
    var fieldName = fieldDef.name;
    var fieldType = fieldDef.type;
    var ca = new GlideColumnAttributes(fieldName);

    switch (fieldType) {
        case 'string':
        case 'integer':
        case 'boolean':
        case 'choice':
        case 'date':
            ca.setType(fieldType);
            break;
        case 'reference':
            ca.setType('reference');
            ca.setReference(fieldDef.reference);
            break;
        default:
            ca.setType('string');
            break;
    }

    ca.setUsePrefix(false);
    attrs.put(fieldName, ca);
}

var tc = new GlideTableCreator(table_name, table_name);
tc.setColumnAttributes(attrs);

if (typeof extends_table != 'undefined') {
    tc.setExtends(extends_table);
}

tc.update();

 

 

Alex153_0-1696407503388.png

While running the script it shows an error - Field: field6 reference='<<table_name>>' attribute is missing

What attribute does it require?
Can anybody help?

3 REPLIES 3

AnveshKumar M
Tera Sage
Tera Sage

Hi @Alex153 

When you test what value you have passed for the Field 6 reference attribute? I mean, the value in red.

{ name: 'Field6', type: 'reference', reference: 'table_name' }

Thanks,
Anvesh

Hi,

Exactly table name - dtcc_9

Alex153_0-1696408579863.png

 

Hi @Alex153 

I Just found that, there is no such method called setReference in the GlideColumnAttributes class. The available methods are,

 

DBName, addValue, class, columnName, equals, getClass, getColumnName, getDBName, getIntLength, getLabel, getLength, getName, getReferenceTable, getType, getValues, hashCode, intLength, isUseOptimizedNameCleaner, label, length, name, notify, notifyAll, prefixSysFields, referenceTable, setLabel, setLength, setPrefixSysFields, setReferenceTable, setType, setUseOptimizedNameCleaner, setUsePrefix, toString, type, useOptimizedNameCleaner, usePrefix, values, wait

 

And I tried using setReferenceTable but it is throwing illegal access error.  I'll try investigating more on this.

Thanks,
Anvesh