Create reference field using script
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-04-2023 01:20 AM - edited 10-04-2023 01:23 AM
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();
While running the script it shows an error - Field: field6 reference='<<table_name>>' attribute is missing
What attribute does it require?
Can anybody help?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-04-2023 01:33 AM
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' }
Anvesh
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-04-2023 01:36 AM
Hi,
Exactly table name - dtcc_9
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-04-2023 04:13 AM
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.
Anvesh