Actualizar los valores de campos personalizados en registros utilizando parámetros específicos para cada tipo de campo


Establecer Valores de Campos Personalizados

Los campos personalizados amplían la estructura estándar de registros de Blue con datos específicos del negocio. Este endpoint te permite establecer o actualizar valores para cualquier campo personalizado en un registro. Cada tipo de campo requiere parámetros específicos para garantizar la integridad de los datos y la validación adecuada.

Ejemplo Básico

mutation SetTextFieldValue {
  setTodoCustomField(input: {
    todoId: "todo_abc123"
    customFieldId: "field_xyz789"
    text: "Project specification document"
  })
}

Ejemplo Avanzado

mutation SetMultipleFieldTypes {
  # Set a date range field
  dateField: setTodoCustomField(input: {
    todoId: "todo_abc123"
    customFieldId: "field_date_001"
    startDate: "2024-01-15T09:00:00Z"
    endDate: "2024-01-31T17:00:00Z"
    timezone: "America/New_York"
  })
  
  # Set a multi-select field
  selectField: setTodoCustomField(input: {
    todoId: "todo_abc123"
    customFieldId: "field_select_002"
    customFieldOptionIds: ["option_high", "option_urgent", "option_client"]
  })
  
  # Set a location field
  locationField: setTodoCustomField(input: {
    todoId: "todo_abc123"
    customFieldId: "field_location_003"
    latitude: 40.7128
    longitude: -74.0060
  })
}

Parámetros de Entrada

SetTodoCustomFieldInput

Parámetro Tipo Requerido Descripción
todoId String! ✅ Sí El ID del registro a actualizar
customFieldId String! ✅ Sí El ID del campo personalizado
text String No Para TEXT_SINGLE, TEXT_MULTI, PHONE, EMAIL, URL
number Float No Para NUMBER, PERCENT, RATING
currency String No Código de moneda para el tipo CURRENCY (por ejemplo, "USD")
checked Boolean No Para campos CHECKBOX
startDate DateTime No Fecha de inicio para campos DATE
endDate DateTime No Fecha de finalización para campos de rango DATE
timezone String No Zona horaria para campos DATE (por ejemplo, "America/New_York")
latitude Float No Latitud para campos LOCATION
longitude Float No Longitud para campos LOCATION
regionCode String No Código de región para campos PHONE
countryCodes [String!] No Códigos de país ISO para campos COUNTRY
customFieldOptionId String No ID de opción para campos SELECT_SINGLE
customFieldOptionIds [String!] No IDs de opción para campos SELECT_MULTI
customFieldReferenceTodoIds [String!] No IDs de registros para campos REFERENCE

Ejemplos de Tipos de Campo

Campos de Texto

mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_description"
    text: "Detailed project requirements and specifications"
  })
}

Campos Numéricos

mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_budget"
    number: 15000.50
  })
}

Campos de Selección

# Single Select
mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_priority"
    customFieldOptionId: "option_high"
  })
}

# Multi Select
mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_tags"
    customFieldOptionIds: ["option_frontend", "option_urgent", "option_v2"]
  })
}

Campos de Fecha

# Single Date
mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_deadline"
    startDate: "2024-12-31T23:59:59Z"
  })
}

# Date Range
mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_project_timeline"
    startDate: "2024-01-01T00:00:00Z"
    endDate: "2024-03-31T23:59:59Z"
    timezone: "UTC"
  })
}

Campos de Ubicación

mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_office_location"
    latitude: 37.7749
    longitude: -122.4194
  })
}

Campos de Moneda

mutation {
  setTodoCustomField(input: {
    todoId: "todo_123"
    customFieldId: "field_invoice_amount"
    number: 5000
    currency: "USD"
  })
}

Campos de Archivo

Los campos de archivo utilizan mutaciones separadas:

# Add a file
mutation {
  createTodoCustomFieldFile(input: {
    todoId: "todo_123"
    customFieldId: "field_attachments"
    fileUid: "file_upload_789"
  })
}

# Remove a file
mutation {
  deleteTodoCustomFieldFile(input: {
    todoId: "todo_123"
    customFieldId: "field_attachments"
    fileUid: "file_upload_789"
  })
}

Estableciendo Valores Durante la Creación de Registros

Puedes establecer valores de campos personalizados al crear un nuevo registro:

mutation {
  createTodo(input: {
    todoListId: "list_project_123"
    title: "New Feature Development"
    customFields: [
      {
        customFieldId: "field_priority"
        value: "high"
      },
      {
        customFieldId: "field_estimate"
        value: "8"
      }
    ]
  }) {
    id
    customFields {
      customField {
        name
      }
      value
    }
  }
}

Campos de Respuesta

La mutación devuelve un booleano que indica el éxito:

Campo Tipo Descripción
setTodoCustomField Boolean! Verdadero si la operación tuvo éxito

Permisos Requeridos

Los usuarios deben tener permiso para editar tanto el registro como el campo personalizado específico:

Rol Puede Establecer Valores de Campo
OWNER ✅ Sí
ADMIN ✅ Sí
MEMBER ✅ Sí (a menos que esté restringido por un rol personalizado)
CLIENT ✅ Sí (a menos que esté restringido por un rol personalizado)

Para los usuarios con roles personalizados de proyecto, el sistema realiza una verificación de dos niveles:

  1. Primero, verifica que el usuario tenga acceso a nivel de proyecto
  2. Luego, verifica si el campo específico está marcado como editable en su configuración de rol personalizado

Esto significa que un usuario puede tener acceso general al proyecto, pero aún estar restringido para editar ciertos campos según su rol personalizado.

Respuestas de Error

Campo Personalizado No Encontrado

{
  "errors": [{
    "message": "Custom field was not found.",
    "extensions": {
      "code": "CUSTOM_FIELD_NOT_FOUND"
    }
  }]
}

Acceso No Autorizado

{
  "errors": [{
    "message": "You are not authorized.",
    "extensions": {
      "code": "FORBIDDEN"
    }
  }]
}

Valor de Campo Inválido

{
  "errors": [{
    "message": "Invalid value for field type NUMBER",
    "extensions": {
      "code": "VALIDATION_ERROR"
    }
  }]
}

Notas Importantes

  • Comportamiento de Upsert: La mutación crea un nuevo valor de campo si no existe, o actualiza el valor existente
  • Seguridad de Tipo: Solo proporciona parámetros que coincidan con el tipo de campo (por ejemplo, no envíes text para un campo NUMBER)
  • Efectos Secundarios: Establecer valores desencadena:
    • Recalculaciones de campos de fórmula
    • Reglas de automatización
    • Notificaciones de webhook
    • Entradas de registro de actividad
    • Actualizaciones de gráficos
  • Comportamientos Especiales:
    • Los campos CURRENCY manejan automáticamente los cálculos de conversión
    • Los campos REFERENCE actualizan relaciones bidireccionales
    • Los campos FORMULA son de solo lectura y no se pueden establecer directamente (se calculan automáticamente)
    • Los campos LOOKUP son de solo lectura y no se pueden establecer directamente (extraen datos de registros referenciados)
    • Los campos BUTTON desencadenan eventos de automatización cuando se "hacen clic"
  • Validación: La API valida que:
    • El registro existe en el proyecto
    • El campo personalizado existe en el mismo proyecto
    • El usuario tiene permisos de edición
    • El valor coincide con los requisitos del tipo de campo

Referencia de Formato de Valor

Tipo de Campo Parámetro Formato Ejemplo
TEXT_SINGLE text String "Project Alpha"
TEXT_MULTI text String with newlines "Line 1\nLine 2"
NUMBER number Float 42.5
CURRENCY number + currency Float + ISO code 1000.00 + "USD"
PERCENT number Float (0-100) 75
RATING number Float (within min/max) 4.5
CHECKBOX checked Boolean true
DATE startDate ISO 8601 DateTime "2024-01-15T00:00:00Z"
DATE (range) startDate + endDate ISO 8601 DateTimes See example above
SELECT_SINGLE customFieldOptionId Option ID "option_123"
SELECT_MULTI customFieldOptionIds Array of Option IDs ["opt_1", "opt_2"]
PHONE text String "+1-555-123-4567"
EMAIL text String "user@example.com"
URL text String "https://example.com"
LOCATION latitude + longitude Floats 40.7128, -74.0060
COUNTRY countryCodes ISO 3166 codes ["US", "CA"]
REFERENCE customFieldReferenceTodoIds Array of record IDs ["todo_1", "todo_2"]
FORMULA N/A Read-only - calculated automatically N/A
LOOKUP N/A Read-only - pulls from references N/A

Endpoints Relacionados

Asistente IA

Las respuestas son generadas por IA y pueden contener errores.

¿Cómo puedo ayudarte?

Pregúntame cualquier cosa sobre Blue o esta documentación.

Enter para enviar • Shift+Enter para nueva línea • ⌘I para abrir