PATCH /v2/user-extension — Update Record
Overview
This endpoint updates an existing row in any UE table. The request body follows the same shape as POST — tableCode, an optional dateFormat, and a data map containing the object keys and the UDF fields to update. The API resolves the parent record, validates the fields, and runs the UPDATE. On success it returns the updated row re-queried from the database.
| Property | Value |
|---|---|
| URL | {base_url}/sys-rest-api/jersey/v2/user-extension |
| Method | PATCH |
| Consumes / Produces | application/json |
| Success Status | 200 OK |
| Auth | Basic (Authorization: Basic {credentials}) |
Notes
Authentication and authorization are required.
The request body and data map requirements are identical to POST. tableCode is required, objectKey1 is required, and at least one non-key UDF field must be present in data — if you send nothing but object keys there is nothing to update and the request is rejected with a 400.
Key resolution works the same way as POST. The object key values in the request are used to find the parent record via ORASEQ. The authoritative key values are then re-fetched from the base table, so the WHERE clause of the UPDATE always uses the exact values as stored in the parent.
All UDF field values are validated and normalised by the database (LOV, case, date format) before the UPDATE runs. If any field fails, the whole request is rejected.
Required key fields for the UE table are loaded from da.sd#ue_table_fields and used to build the WHERE clause of the UPDATE statement. UDF fields go into the SET clause.
dateFormat defaults to YYYY-MM-DD if not supplied.
After a successful update the row is re-queried and returned in the response.
UI Navigation
User Extension tables are attached to the parent object's own screen in CMiC. There is no standalone navigation path. This endpoint is the API equivalent of editing and saving UE fields on an existing object record.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
tableCode |
String | Yes | UE table code to update (e.g. CIITEM_K). |
dateFormat |
String | No | Oracle date mask for date fields in data. Defaults to YYYY-MM-DD. |
data |
Map | Yes | Must include objectKey1 (and additional keys for composite-key tables) plus at least one UDF field to update. |
data.objectKey1 |
String | Yes | First business key of the parent record. |
data.objectKey2 through objectKey10 |
String | Depends | Additional keys for composite-key objects. |
data.{UDF_FIELD_CODE} |
String | At least one required | UDF field value to update. All supplied fields are written; fields omitted from the request are left unchanged. |
Attributes
Response — 200 OK
| Field | Type | Description | Example |
|---|---|---|---|
status |
String | Always success on 200 |
success |
tableCode |
String | UE table code that was updated | CIITEM_K |
rowsAffected |
Integer | Number of rows updated (normally 1) | 1 |
message |
String | Confirmation message | Successfully updated 1 row. |
data |
Map | The re-queried updated row. Column names prefixed with table code. System columns excluded. | |
data.{TABLECODE}_COMP_CODE |
String | Company Code key column | 01 |
data.{TABLECODE}_ITEM_CODE |
String | Item Code key column | BOLT-123 |
data.{TABLECODE}_{UDF_FIELD} |
String | Updated UDF field value (normalised) | A |
data.UE__IU__UPDATE_DATE |
String (ISO 8601) | Row last update timestamp | 2026-06-30T15:00:00-04:00 |
Example
Request
PATCH {base_url}/sys-rest-api/jersey/v2/user-extension
Content-Type: application/json
Authorization: Basic {credentials}
{
"tableCode": "CIITEM_K",
"dateFormat": "YYYY-MM-DD",
"data": {
"objectKey1": "01",
"objectKey2": "BOLT-123",
"UDF_RATING": "b",
"UDF_REVIEW_DATE": "2026-07-15"
}
}
Response — 200 OK
{
"status": "success",
"tableCode": "CIITEM_K",
"rowsAffected": 1,
"message": "Successfully updated 1 row.",
"data": {
"CIITEM_K_COMP_CODE": "01",
"CIITEM_K_ITEM_CODE": "BOLT-123",
"CIITEM_K_UDF_NOTES": "Approved by Engineering",
"CIITEM_K_UDF_RATING": "B",
"CIITEM_K_UDF_REVIEW_DATE": "2026-07-15T00:00:00-04:00",
"UE__IU__CREATE_DATE": "2026-06-30T10:30:00-04:00",
"UE__IU__UPDATE_DATE": "2026-06-30T15:00:00-04:00"
}
}
Note: UDF_NOTES was not included in the PATCH request so its existing value "Approved by Engineering" is unchanged. UDF_RATING was normalised from "b" to "B".
Error — Nothing to Update (400)
{
"error": "No fields (besides key fields) have been provided to update."
}
Error Codes
| HTTP | Error Code | Reason |
|---|---|---|
| 400 | SD-000380-ERR |
Request body is null or empty |
| 400 | SD-000381-ERR |
Request body is not valid JSON |
| 400 | SD-000375-ERR |
tableCode is blank or missing |
| 400 | SD-000382-ERR |
data map is null or empty |
| 400 | SD-000376-ERR |
Table code invalid or parent record not found |
| 400 | IllegalArgumentException |
No objectKey1 in data; no non-key fields provided; a UDF field does not exist; UDF validation failed |
| 500 | — | Unhandled database or server error — auto rollback |
Basic authentication
OK
"{\n \"status\": \"success\",\n \"tableCode\": \"CIITEM_K\",\n \"rowsAffected\": 1,\n \"message\": \"Successfully updated 1 row.\",\n \"data\": {\n \"COMP_CODE\": \"ZZ\",\n \"ITEM_CODE\": \"DIESEL\",\n \"NUMBEROKEY\": \"22\",\n \"AAA\": \"HelloCMIC\",\n \"UE__IU__CREATE_DATE\": \"2026-06-24T21:48:19-04:00\",\n \"UE__IU__UPDATE_DATE\": \"2026-06-25T15:25:06-04:00\",\n \"CLTEST\": null\n }\n}"