import { CallExpressionShape, Shape } from '@servicenow/sdk-build-core' import { ApprovalRulesColumn, BasicDateTimeColumn, BasicImageColumn, BooleanColumn, CalendarDateTimeColumn, ChoiceColumn, ConditionsColumn, DateColumn, DateTimeColumn, DayOfWeekColumn, DaysOfWeekColumn, DecimalColumn, DocumentIdColumn, DomainIdColumn, DomainPathColumn, DueDateColumn, DurationColumn, EmailColumn, FieldListColumn, FieldNameColumn, FloatColumn, GuidColumn, HtmlColumn, IntegerColumn, IntegerDateColumn, JsonColumn, ListColumn, MultiLineTextColumn, NameValuePairsColumn, OtherDateColumn, Password2Column, RadioColumn, RecordsColumn, ReferenceColumn, ScheduleDateTimeColumn, ScriptColumn, SlushBucketColumn, StringColumn, SystemClassNameColumn, TableNameColumn, TemplateValueColumn, TimeColumn, TranslatedFieldColumn, TranslatedTextColumn, UrlColumn, UserRolesColumn, VersionColumn, } from '@servicenow/sdk-core/runtime/db' export const COLUMN_TYPE_TO_API: Record = { string: StringColumn.name, boolean: BooleanColumn.name, choice: ChoiceColumn.name, conditions: ConditionsColumn.name, date: OtherDateColumn.name, calendar_date_time: CalendarDateTimeColumn.name, datetime: BasicDateTimeColumn.name, due_date: DueDateColumn.name, glide_date: DateColumn.name, glide_date_time: DateTimeColumn.name, integer_date: IntegerDateColumn.name, schedule_date_time: ScheduleDateTimeColumn.name, decimal: DecimalColumn.name, document_id: DocumentIdColumn.name, domain_id: DomainIdColumn.name, domain_path: DomainPathColumn.name, field_name: FieldNameColumn.name, integer: IntegerColumn.name, radio: RadioColumn.name, reference: ReferenceColumn.name, script: ScriptColumn.name, sys_class_name: SystemClassNameColumn.name, table_name: TableNameColumn.name, translated_field: TranslatedFieldColumn.name, translated_text: TranslatedTextColumn.name, user_roles: UserRolesColumn.name, version: VersionColumn.name, glide_list: ListColumn.name, image: BasicImageColumn.name, // New column types GUID: GuidColumn.name, password2: Password2Column.name, json: JsonColumn.name, url: UrlColumn.name, email: EmailColumn.name, html: HtmlColumn.name, float: FloatColumn.name, glide_duration: DurationColumn.name, glide_time: TimeColumn.name, field_list: FieldListColumn.name, records: RecordsColumn.name, slushbucket: SlushBucketColumn.name, name_values: NameValuePairsColumn.name, approval_rules: ApprovalRulesColumn.name, multi_two_lines: MultiLineTextColumn.name, template_value: TemplateValueColumn.name, day_of_week: DayOfWeekColumn.name, days_of_week: DaysOfWeekColumn.name, } export const COLUMN_API_TO_TYPE = Object.fromEntries( Object.entries(COLUMN_TYPE_TO_API).map(([key, value]) => [value, key]) ) export const DEFAULT_COLUMN_CALCULATION = `(function calculatedFieldValue(current) { // Add your code here return ''; // return the calculated value })(current);` export function addFieldsToColumn( fields: { name: string; table: string; display: boolean }, column: CallExpressionShape ) { const additionalFields = Shape.from(column, fields).asObject() return new CallExpressionShape({ source: column.getSource(), callee: column.getCallee(), args: [column.getArgument(0).asObject().merge(additionalFields)], }) } export function getDefaultMaxLength(columnType: string | undefined): number { switch (columnType) { case 'conditions': case 'glide_list': case 'json': case 'name_values': case 'multi_two_lines': return 4000 case 'template_value': return 65000 case 'script': return 8000 case 'html': return 65536 case 'decimal': return 20 case 'float': return 15 case 'domain_id': case 'document_id': case 'reference': case 'GUID': return 32 case 'string_full_utf8': case 'domain_path': case 'user_roles': case 'password2': case 'email': return 255 case 'url': case 'records': return 1024 case 'table_name': case 'field_name': return 80 case 'glide_duration': return 20 case 'glide_time': return 8 case 'field_list': case 'approval_rules': return 1024 case 'slushbucket': return 4000 default: /** * For types mentioned below it default to 40 on instance * boolean | integer | image | choice | radio | sys_class_name | translated_field | translated_text | version | glide_date | glide_date_time | calendar_date_time * datetime | due_date | integer_date | schedule_date_time | date | generic * * TODO::We need to request max_length from user for string column type because its mandatory on instance. */ return 40 } }