# Custom Fields — definitions, labels, and values

Load this when the task creates, reads, updates, or deletes Test Manager **custom fields** — their project-scoped definitions, per-object `label` rows, or `value` rows (`uip tm customfield …`).

Definitions are project-scoped and attach to **Requirement**, **TestCase**, or **TestSet**. Nested `label` and `value` groups operate on per-object rows. `--object-type` is case-sensitive and accepts only `Requirement`, `TestCase`, or `TestSet`; `--data-type` accepts only `Text` or `Label` (PascalCase).

- `uip tm customfield list --project-key <PROJECT_KEY>` lists definitions; optionally `--object-types <type...>`, `--data-types <type...>` (variadic PascalCase filters), `--name <NAME>` (exact), `--filter <text>` (substring), `--sort-by <expr>`, `--limit <N>`, `--offset <N>`. `get --project-key <PROJECT_KEY> --field-id <UUID>` gets by UUID, or identify by `--name <NAME> --object-type <TYPE>`.
- `create --project-key <PROJECT_KEY> --name <NAME> --data-type <Text|Label> (--object-type <Requirement|TestCase|TestSet> | --scope-list <type...>)` creates with one scope or mutually exclusive variadic `--scope-list <Requirement TestCase TestSet>`; optionally `--description <text>`, `--value-hints <text>`, `--default-value <text>`. `update --project-key <PROJECT_KEY> --field-id <UUID>` identifies by `--field-id` or `--name + --object-type`; optionally `--rename-to <name>`, `--description`, `--default-value`, `--value-hints`; unspecified fields remain unchanged. `delete --project-key <PROJECT_KEY> --field-ids <UUID...>` deletes variadic UUIDs, or one by `--name + --object-type`.
- All `customfield label` commands require `--object-type <Requirement|TestCase|TestSet>`: `label list --project-key <PROJECT_KEY> --object-type <TYPE>` optionally `--object-id <UUID>`, `--filter <text>`, `--sort-by`, `--limit`, `--offset`; `label get --project-key <PROJECT_KEY> --object-type <TYPE> --label-id <UUID>`; `label create --project-key <PROJECT_KEY> --object-type <TYPE> --object-id <UUID> --values '{"Field":["v1","v2"]}'` upserts a row, with `--values` mapping field names to string arrays; `label add --project-key <PROJECT_KEY> --object-type <TYPE> --custom-field-name <NAME> --object-ids <UUID...> --values <value...>` appends across objects, optionally `--replace-existing-values` for authoritative-set semantics; `label remove --project-key <PROJECT_KEY> --object-type <TYPE> --custom-field-name <NAME> --object-ids <UUID...> (--values <value...> | --remove-all-values)` removes across objects.
- All `customfield value` commands require `--object-type <Requirement|TestCase|TestSet>`; `create` also requires matching `--data-type <Text|Label>`. `value list --project-key <PROJECT_KEY> --object-type <TYPE>` lists rows and is empty unless `--object-id <UUID>` is supplied; optionally `--filter <text>`, `--sort-by`, `--limit`, `--offset`. `value get --project-key <PROJECT_KEY> --object-type <TYPE> --value-id <UUID>` gets by UUID, or by `--name + --object-id`.
- `value create --project-key <PROJECT_KEY> --object-type <TYPE> --name <FIELD_NAME> --object-id <UUID> --data-type <Text|Label>` creates; optionally `--value <text>`; datatype must match the definition. `value update --project-key <PROJECT_KEY> --object-type <TYPE> --value-id <UUID> --value <text>` updates by UUID, or by `--name + --object-id`; `--clear` sets empty. `value delete --project-key <PROJECT_KEY> --object-type <TYPE> --value-id <UUID>` deletes by UUID, or by `--name + --object-id`.
