From 61709d343589880fc58f4a8fe81797b7e21a45a2 Mon Sep 17 00:00:00 2001 From: leonardo-toniolo Date: Wed, 17 Jun 2026 12:00:40 -0300 Subject: [PATCH] picklist 2 --- .DS_Store | Bin 0 -> 6148 bytes Archive.zip | Bin 21921 -> 0 bytes README.md | 6 +++--- src/metadata/field-hints.ts | 2 +- src/parse/prompt-picklist.ts | 3 ++- src/parse/value.ts | 28 ++++++++++++++++++++++++++++ 6 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 .DS_Store delete mode 100644 Archive.zip diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5172429f264de2441865cb4700216d4256da9242 GIT binary patch literal 6148 zcmeH~J!%6%427R!7lt%jx}3%b$PET#pTHLgIFQEJ;E>dF^gR7ES*H$5cmnB-G%I%Z zD|S`@Z2$T80!#olbXV*=%*>dt@PRwdU#I)^a=X5>;#J@&VrHyNnC;iLL0pQvfVyTmjO&;ssLc!1UOG})p;=82 zR;?Ceh}WZ?+UmMqI#RP8R>OzYoz15hnq@nzF`-!xQ4j$Um=RcIKKc27r2jVm&svm< zfC&6E0=7P!4tu^-ovjbA=k?dB`g+i*aXG_}p8zI)6mRKa+;6_1_R^8c3Qa!(fk8n8 H{*=HsM+*^= literal 0 HcmV?d00001 diff --git a/Archive.zip b/Archive.zip deleted file mode 100644 index 7c631967ce65ae07b86afe578c3bdf1c85f493c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21921 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 dKWsq&B)I)BF<@c_pL;yOe`), evitando erros ao digitar o nome manualmente. +Campos com `presentationType: PickList` (listas de opções customizadas ou do sistema) exibem uma **lista carregada da API** com nomes legíveis (ex: `Conteúdo`). O app envia o ID como **string** (`"/C_GenericTaskSetor/Edição"`), não como objeto `{"id":"..."}` — formato exigido pela API do Adaptive Work para PickList. -Campos de **referência** (`ReferenceToObject`, ex: User, Project) continuam exigindo o ID manual ou JSON `{"id":"/Tipo/guid"}`. +Campos de **referência** (`ReferenceToObject`, ex: User, Project) continuam exigindo objeto `{"id":"/Tipo/guid"}` ou `/Tipo/guid` convertido para `{ id }`. ## Variáveis de ambiente @@ -108,7 +108,7 @@ Exemplo resumido: "typeName": "Task", "filter": "Todos", "fieldName": "C_MeuCampo", - "value": { "id": "/C_GenericTaskSetor/abc123" }, + "value": "/C_GenericTaskSetor/Edição", "valueLabel": "Conteúdo (/C_GenericTaskSetor/abc123)" }, "summary": { "total": 10, "updated": 9, "errors": 1 }, diff --git a/src/metadata/field-hints.ts b/src/metadata/field-hints.ts index 5358ce8..b3a8475 100644 --- a/src/metadata/field-hints.ts +++ b/src/metadata/field-hints.ts @@ -25,7 +25,7 @@ export function formatFieldHint(field: FieldDescription): string { if (isPickListField(field)) { lines.push("Tipo: PickList (lista de opções)"); - lines.push("Escolha um valor na lista — não digite o nome exibido manualmente."); + lines.push("Escolha um valor na lista — a API recebe o ID como string (ex: /C_GenericTaskSetor/Edição)."); const refType = (field as { referencedEntities?: string[] }).referencedEntities?.[0]; if (refType) { lines.push(`Opções carregadas de: ${refType}`); diff --git a/src/parse/prompt-picklist.ts b/src/parse/prompt-picklist.ts index ceaef2d..2a13b47 100644 --- a/src/parse/prompt-picklist.ts +++ b/src/parse/prompt-picklist.ts @@ -64,7 +64,7 @@ async function promptPickListSelection( const match = pickListOptions.find((o) => o.id === selectedId); return { - value: { id: selectedId }, + value: selectedId, displayLabel: match ? `${match.label} (${match.id})` : String(selectedId), @@ -95,6 +95,7 @@ async function promptManualEntityValue( } function formatEntityDisplayLabel(value: JsonValue): string | undefined { + if (typeof value === "string") return value; if (value && typeof value === "object" && "id" in value) { const id = (value as { id?: unknown }).id; if (typeof id === "string") return id; diff --git a/src/parse/value.ts b/src/parse/value.ts index e933ea0..ee05bea 100644 --- a/src/parse/value.ts +++ b/src/parse/value.ts @@ -1,5 +1,6 @@ import type { FieldDescription, FieldType, JsonValue } from "@arco/clarizen-lib"; import { getFieldTypeExample } from "../metadata/field-hints.js"; +import { isPickListField } from "../metadata/picklist.js"; export class ValueParseError extends Error { constructor(message: string) { @@ -54,6 +55,29 @@ function parseEntity(raw: string): JsonValue { ); } +/** PickList fields accept the entity ID as a plain string, not `{ id }`. */ +function parsePickListEntityId(raw: string): string { + const trimmed = raw.trim(); + if (trimmed.startsWith("{")) { + try { + const parsed = JSON.parse(trimmed) as Record; + if (typeof parsed.id === "string") { + return parsed.id; + } + throw new ValueParseError('JSON de PickList deve conter "id".'); + } catch (err) { + if (err instanceof ValueParseError) throw err; + throw new ValueParseError(`JSON inválido para PickList: "${raw}"`); + } + } + if (trimmed.startsWith("/")) { + return trimmed; + } + throw new ValueParseError( + `ID de PickList inválido: "${raw}". Use /Tipo/id ou {"id":"/Tipo/id"}`, + ); +} + function parseJsonObject(raw: string, typeName: string): JsonValue { try { return JSON.parse(raw.trim()) as JsonValue; @@ -108,6 +132,10 @@ export function parseFieldValue( throw new ValueParseError("Valor não pode ser vazio."); } + if (isPickListField(field)) { + return parsePickListEntityId(raw); + } + return parseByType(raw, field.type); }