feat(servicenow): add offset and display value params to read records (#3415)

* feat(servicenow): add offset and display value params to read records

* fix(servicenow): address greptile review feedback for offset and displayValue

* fix(servicenow): handle offset=0 correctly in pagination

* fix(servicenow): guard offset against empty string in URL builder
This commit is contained in:
Waleed
2026-03-04 17:01:31 -08:00
committed by GitHub
parent 6b355e9b54
commit 04fa31864b
4 changed files with 54 additions and 0 deletions

View File

@@ -69,7 +69,9 @@ Read records from a ServiceNow table
| `number` | string | No | Record number \(e.g., INC0010001\) |
| `query` | string | No | Encoded query string \(e.g., "active=true^priority=1"\) |
| `limit` | number | No | Maximum number of records to return \(e.g., 10, 50, 100\) |
| `offset` | number | No | Number of records to skip for pagination \(e.g., 0, 10, 20\) |
| `fields` | string | No | Comma-separated list of fields to return \(e.g., sys_id,number,short_description,state\) |
| `displayValue` | string | No | Return display values for reference fields: "true" \(display only\), "false" \(sys_id only\), or "all" \(both\) |
#### Output

View File

@@ -129,6 +129,30 @@ Output: {"short_description": "Network outage", "description": "Network connecti
condition: { field: 'operation', value: 'servicenow_read_record' },
mode: 'advanced',
},
{
id: 'offset',
title: 'Offset',
type: 'short-input',
placeholder: '0',
condition: { field: 'operation', value: 'servicenow_read_record' },
description: 'Number of records to skip for pagination',
mode: 'advanced',
},
{
id: 'displayValue',
title: 'Display Value',
type: 'dropdown',
options: [
{ label: 'Default (not set)', id: '' },
{ label: 'False (sys_id only)', id: 'false' },
{ label: 'True (display value only)', id: 'true' },
{ label: 'All (both)', id: 'all' },
],
value: () => '',
condition: { field: 'operation', value: 'servicenow_read_record' },
description: 'Return display values for reference fields instead of sys_ids',
mode: 'advanced',
},
{
id: 'fields',
title: 'Fields to Return',
@@ -203,6 +227,9 @@ Output: {"state": "2", "assigned_to": "john.doe", "work_notes": "Assigned and st
const isCreateOrUpdate =
operation === 'servicenow_create_record' || operation === 'servicenow_update_record'
if (rest.limit != null && rest.limit !== '') rest.limit = Number(rest.limit)
if (rest.offset != null && rest.offset !== '') rest.offset = Number(rest.offset)
if (fields && isCreateOrUpdate) {
const parsedFields = typeof fields === 'string' ? JSON.parse(fields) : fields
return { ...rest, fields: parsedFields }
@@ -222,7 +249,9 @@ Output: {"state": "2", "assigned_to": "john.doe", "work_notes": "Assigned and st
number: { type: 'string', description: 'Record number' },
query: { type: 'string', description: 'Query string' },
limit: { type: 'number', description: 'Result limit' },
offset: { type: 'number', description: 'Pagination offset' },
fields: { type: 'json', description: 'Fields object or JSON string' },
displayValue: { type: 'string', description: 'Display value mode for reference fields' },
},
outputs: {
record: { type: 'json', description: 'Single ServiceNow record' },

View File

@@ -60,6 +60,12 @@ export const readRecordTool: ToolConfig<ServiceNowReadParams, ServiceNowReadResp
visibility: 'user-or-llm',
description: 'Maximum number of records to return (e.g., 10, 50, 100)',
},
offset: {
type: 'number',
required: false,
visibility: 'user-or-llm',
description: 'Number of records to skip for pagination (e.g., 0, 10, 20)',
},
fields: {
type: 'string',
required: false,
@@ -67,6 +73,13 @@ export const readRecordTool: ToolConfig<ServiceNowReadParams, ServiceNowReadResp
description:
'Comma-separated list of fields to return (e.g., sys_id,number,short_description,state)',
},
displayValue: {
type: 'string',
required: false,
visibility: 'user-or-llm',
description:
'Return display values for reference fields: "true" (display only), "false" (sys_id only), or "all" (both)',
},
},
request: {
@@ -96,10 +109,18 @@ export const readRecordTool: ToolConfig<ServiceNowReadParams, ServiceNowReadResp
queryParams.append('sysparm_limit', params.limit.toString())
}
if (params.offset !== undefined && params.offset !== null && params.offset !== '') {
queryParams.append('sysparm_offset', params.offset.toString())
}
if (params.fields) {
queryParams.append('sysparm_fields', params.fields)
}
if (params.displayValue) {
queryParams.append('sysparm_display_value', params.displayValue)
}
const queryString = queryParams.toString()
return queryString ? `${url}?${queryString}` : url
},

View File

@@ -31,7 +31,9 @@ export interface ServiceNowReadParams extends ServiceNowBaseParams {
number?: string
query?: string
limit?: number
offset?: number
fields?: string
displayValue?: string
}
export interface ServiceNowReadResponse extends ToolResponse {