dynamics_create_column
Add custom fields to Dynamics CRM tables by defining column properties like data type, length, and validation rules for tailored data management.
Instructions
Cria uma nova coluna (campo/atributo) em uma tabela do Dynamics CRM
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| entityLogicalName | Yes | Nome lógico da entidade | |
| schemaName | Yes | Nome do schema do campo (ex: new_MyField) | |
| displayName | Yes | Nome de exibição | |
| attributeType | Yes | Tipo do atributo | |
| description | No | ||
| requiredLevel | No | None | |
| maxLength | No | Comprimento máximo (para String/Memo) | |
| minValue | No | Valor mínimo (para numéricos) | |
| maxValue | No | Valor máximo (para numéricos) | |
| precision | No | Precisão decimal | |
| lookupTarget | No | Entidade alvo (para Lookup) | |
| optionSetValues | No | Valores do OptionSet (para Picklist) | |
| solutionUniqueName | No |
Implementation Reference
- src/tools/schema/index.ts:216-274 (handler)The handler for the "dynamics_create_column" tool, which constructs the attribute metadata and sends a POST request to the Dataverse API.
server.tool( "dynamics_create_column", "Cria uma nova coluna (campo/atributo) em uma tabela do Dynamics CRM", CreateColumnSchema.shape, async (params: z.infer<typeof CreateColumnSchema>) => { const baseMetadata = ATTRIBUTE_TYPE_METADATA[params.attributeType] || {}; const attrData: Record<string, unknown> = { ...baseMetadata, SchemaName: params.schemaName, DisplayName: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: params.displayName, LanguageCode: 1046 }], }, Description: { "@odata.type": "Microsoft.Dynamics.CRM.Label", LocalizedLabels: [{ "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", Label: params.description || "", LanguageCode: 1046 }], }, RequiredLevel: { Value: params.requiredLevel }, }; if (params.maxLength !== undefined) attrData.MaxLength = params.maxLength; if (params.minValue !== undefined) attrData.MinValue = params.minValue; if (params.maxValue !== undefined) attrData.MaxValue = params.maxValue; if (params.precision !== undefined) attrData.Precision = params.precision; if (params.attributeType === "Lookup" && params.lookupTarget) { attrData.Targets = [params.lookupTarget]; } if (params.attributeType === "Picklist" && params.optionSetValues) { attrData.OptionSet = { IsGlobal: false, OptionSetType: "Picklist", Options: params.optionSetValues.map((opt) => ({ Value: opt.value, Label: { LocalizedLabels: [{ Label: opt.label, LanguageCode: 1046 }], }, })), }; } let endpoint = `EntityDefinitions(LogicalName='${params.entityLogicalName}')/Attributes`; if (params.solutionUniqueName) { endpoint += `?SolutionUniqueName='${params.solutionUniqueName}'`; } const result = await client.post<{ MetadataId: string }>(endpoint, attrData); return { content: [ { type: "text" as const, text: `Coluna criada com sucesso!\nMetadataId: ${result.MetadataId}\nSchema: ${params.schemaName}\nTipo: ${params.attributeType}\nEntidade: ${params.entityLogicalName}`, }, ], }; } ); - src/tools/schema/index.ts:25-42 (schema)The input schema definition for the "dynamics_create_column" tool.
export const CreateColumnSchema = z.object({ entityLogicalName: z.string().describe("Nome lógico da entidade"), schemaName: z.string().describe("Nome do schema do campo (ex: new_MyField)"), displayName: z.string().describe("Nome de exibição"), attributeType: AttributeTypeEnum, description: z.string().optional(), requiredLevel: z.enum(["None", "SystemRequired", "ApplicationRequired"]).default("None"), maxLength: z.number().optional().describe("Comprimento máximo (para String/Memo)"), minValue: z.number().optional().describe("Valor mínimo (para numéricos)"), maxValue: z.number().optional().describe("Valor máximo (para numéricos)"), precision: z.number().optional().describe("Precisão decimal"), lookupTarget: z.string().optional().describe("Entidade alvo (para Lookup)"), optionSetValues: z.array(z.object({ label: z.string(), value: z.number(), })).optional().describe("Valores do OptionSet (para Picklist)"), solutionUniqueName: z.string().optional(), });