---
id: SCR-PFM-MTD-017
title: Edit custom record
route: /console/{tenantId}/objects/{objectKey}/{recordId}/edit
surface: console
product_area: platform
module: metadata
revision: 1
status: draft
design_intent: confirmed
origin: PLAT-M5 D17 (forms) and PLAT-M5-S06 (two editors, the second told), Product Accepted 2026-10-20
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
purpose: A record keeper corrects register information and can select another owner. The editor retains typed work
  during concurrency recovery.
supports:
- JNY-PFM-MTD-002
- CAP-PFM-MTD-012
- CAP-PFM-MTD-018
permission: platform.custom-records.update at the object's scope; platform.associations.create and .delete to change
  the owner
entry_from:
- SCR-PFM-MTD-016
exits_to:
- SCR-PFM-MTD-016
displays:
- field: The record's current values and version
  source: getCustomObjectRecord
- field: The generated form
  source: describeObject (objects.<plural>)
- field: The current owner
  source: listRecordAssociations
actions:
- label: Save
  operation_id: updateCustomObjectRecord
  permission: platform.custom-records.update
  confirm: false
- label: Change the owner (after the save)
  operation_id: deleteAssociation then createAssociation
  permission: platform.associations.delete and .create
  confirm: false
- label: Upload a picture or file
  operation_id: issueFileUpload
  permission: platform.files.upload
  confirm: false
states:
- loading
- error
- not found
- read-only (owner field settled without permission)
- 'inactive (archived record or object: no editing)'
- 'stale (conflict: reload keeps typed values)'
- partial (saved, owner not changed)
validation:
- BR-CAP-PFM-MTD-012-02
- BR-CAP-PFM-MTD-012-03
- BR-CAP-PFM-MTD-012-04
- BR-CAP-PFM-MTD-012-07
- BR-CAP-PFM-MTD-012-10
- BR-CAP-PFM-MTD-012-11
patterns:
- PageLayout (standard width)
- shared form engine
- EditorActionBar
- unsaved-changes guard
- held draft
- stale version alert
component: components/console/custom-objects/record-editor.tsx
evidence:
- 'react-console at baf6dae3: app/(console)/console/[tenantId]/objects/[objectKey]/[recordId]/edit/page.tsx; components/console/custom-objects/record-editor.tsx;
  lib/forms/custom-objects/owner.ts; lib/custom-objects/api.ts'
controls: [TC-AVL-001, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-PI-001, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Edit custom record

## What the Screen Is For

A record keeper corrects register information and can select another owner. The editor retains typed work during concurrency recovery.

## What It Shows and Lets People Do

The client patches changed properties at the loaded version. Ownership runs afterwards, removing the old link before creating the new one.

## States and Errors

Stale-version handling offers reload without discarding typed values. A partial owner failure explains whether the preceding connection was already removed.

## Patterns It Must Respect

The built shared form editor uses the action bar, unsaved-change guard, retained draft and stale-version alert.
