Ir al contenido principal

⚙️ API e Interconexiones: la evolución a lo largo del tiempo

¡Descubre en este artículo la evolución llevada a cabo desde 2018 en Digiforma en materia de API y conectores de software!

Escrito por Sarah Malledant

Al igual que toda nuestra galaxia de software, los conectores diseñados por los equipos de Digiforma evolucionan constantemente. Desde su nacimiento en 2018, han experimentado profundas transformaciones. Para repasar estos cambios a lo largo de los años, aquí tienes un pequeño resumen. ¡Buena lectura!

2026

Septiembre.

Crear un curso con un programa

Desde la llegada de los bloques pedagógicos, un curso creado a partir de un programa genera sus módulos a partir de los bloques pedagógicos de ese programa.

La API se alinea, por tanto, con este comportamiento: programa y módulos ya no se combinan en una misma creación.

⚠️ createTrainingSession ahora devuelve un error si programId y subsessions se envían en la misma mutación. Si tus integraciones crean sus cursos de esta manera, deben evolucionar hacia uno de los dos itinerarios que se indican a continuación.

{
"data": { "createTrainingSession": null },
"errors": [
{
"code": "bad_request",
"status_code": 400,
"message": "Cannot create a training session with both a program and subsessions",
"path": ["createTrainingSession"]
}
]
}

Siguen siendo posibles dos itinerarios, a elegir según tu punto de partida:

  • Partir del programa: crea el curso con programId, sus módulos se generan a partir de los bloques del programa, y luego añade tus módulos adicionales con createSubsession.

    # 1. El curso toma los bloques del programa para crear sus módulos
    mutation {
    createTrainingSession(trainingSessionInput: {
    name: "Curso de octubre"
    programId: <program_id>
    }) {
    id
    name
    subsessions { id name }
    }
    }

    # 2. Los módulos adicionales se añaden después, uno por uno
    mutation {
    createSubsession(
    trainingSessionId: <ts_id>
    subsessionInput: { name: "Módulo complementario" }
    ) {
    id
    name
    }
    }

  • Partir de los módulos: crea el curso con subsessions, y luego asocia el programa con updateTrainingSession y su campo programId.

    # 1. El curso se crea con sus propios módulos
    mutation {
    createTrainingSession(trainingSessionInput: {
    name: "Curso de octubre"
    subsessions: [
    { name: "Módulo 1" },
    { name: "Módulo 2" }
    ]
    }) {
    id
    subsessions { id name }
    }
    }

    # 2. El programa se asocia en un segundo momento
    mutation {
    updateTrainingSession(
    id: <ts_id>
    trainingSessionInput: { programId: <program_id> }
    ) {
    id
    program { id name }
    }
    }

Excluir un curso del catálogo

Ahora es posible excluir un curso del catálogo online

  • En lectura

    query {
    trainingSessions {
    id
    excludeFromCatalog
    }
    }
  • En escritura

    mutation {
    updateTrainingSession(id: <ts_id>, trainingSessionInput: {excludeFromCatalog: true })
    {
    id
    excludeFromCatalog
    }
    }

Julio

Los bloques pedagógicos llegan a la API. La apertura se realiza en dos partes: la gestión de los bloques y, a continuación, su uso en los programas.

Para familiarizarte con este nuevo funcionamiento, te invitamos a consultar el siguiente artículo: https://help.digiforma.com/fr/articles/3195501-comment-utiliser-les-blocs-de-programmes

Gestionar los bloques pedagógicos

Ahora es posible crear, consultar, modificar y archivar bloques pedagógicos directamente a través de la API. Un bloque existe en dos formas:

  • Un bloque de tipo TEMPLATE es un bloque plantilla. Vive de forma autónoma y puede asociarse a uno o varios programas.

  • Un bloque de tipo VARIANT es una copia de una plantilla. Se genera automáticamente cuando se añade un programa a un curso: el programa se convierte entonces en una variante, que tiene sus propias variantes de bloques.

Esto es lo que se puede hacer y lo que permanece automático:

  • Crear una plantilla con createPedagogicalBlock. La creación de un variant no está expuesta: permanece automática al añadir un programa a un curso.

  • Consultar una plantilla con pedagogicalBlock (por identificador) o pedagogicalBlocks (la lista completa). Un variant, por su parte, se lee directamente en la respuesta de su programa.

  • Modificar una plantilla con updatePedagogicalBlockTemplate, o un variant con updatePedagogicalBlockVariant.

  • Archivar una plantilla con deletePedagogicalBlockTemplate, o un variant con deletePedagogicalBlockVariant.

# Queries 
pedagogicalBlock(id: ID!): Block
pedagogicalBlocks: [Block]

# Mutations createPedagogicalBlock(blockInput: BlockInput!): Block
updatePedagogicalBlockTemplate(id: ID!, blockInput: BlockInput!): Block
updatePedagogicalBlockVariant(id: ID!, blockInput: BlockInput!): Block
deletePedagogicalBlockTemplate(id: ID!): Boolean
deletePedagogicalBlockVariant(id: ID!): Boolean

Usar los bloques en los programas

El tipo Program ahora expone un campo blocks que lista sus bloques pedagógicos. En escritura, el input ProgramInput acepta un campo blockIds: la lista ordenada de identificadores de plantillas a asociar al programa (sustituye los enlaces existentes).

El comportamiento depende de la operación:

  • En lectura: los bloques están disponibles en el nuevo campo blocks. Los antiguos campos (goals, steps, assessments, pedagogicalResources) siguen siendo legibles por ahora, pero están obsoletos.

  • En la creación (createProgram): dos opciones. Enviar blockIds para asociar plantillas existentes, o seguir enviando los antiguos campos. En este segundo caso, se crea automáticamente un bloque pedagógico a partir de esta información y luego se asocia al programa.

  • En la actualización (updateProgram): solo se aceptan los blockIds. El envío de los antiguos campos provoca un error.

Los campos goals, steps, assessments y pedagogicalResources están obsoletos, en favor de blocks en lectura y de blockIds en escritura. Te invitamos a hacer evolucionar tus integraciones: la actualización de un programa mediante estos antiguos campos ya no está permitida.

# Program (lecture) 
blocks: [Block]
goals: [ProgramGoals] # déprécié, utiliser blocks
steps: [ProgramStep] # déprécié, utiliser blocks
assessments: [ProgramAssessments] # déprécié, utiliser blocks
pedagogicalResources: [ProgramPedagogicalResources] # déprécié, utiliser
blocks

# ProgramInput (écriture)
blockIds: [ID!] # liste ordonnée de templates à rattacher goals/steps/assessments/pedagogicalResources # dépréciés, utiliser blockIds

Gestionar el registro de asistencia de los alumnos y de los formadores a través de la API

El registro de asistencia llega también a la API. Ahora es posible registrar la asistencia de los alumnos y de los formadores directamente a través de la API, en masa (hasta 50 elementos por solicitud).

⚠️ Esta API gestiona únicamente el registro de asistencia manual (asistencia comprobada: presente / ausente). No afecta a las firmas digitales o electrónicas, ni al registro de asistencia realizado en tableta.

Se cubren tres casos:

- Registro de asistencia de los alumnos con update_trainees_attendance: marcar a un alumno como presente o ausente (has_signed) en una clase dada.

- Registro de asistencia de los formadores con update_instructors_attendance: igual para un formador en una clase.

- Horas en modo intervalo con update_trainees_interval_attendance: declarar, para un módulo en modo intervalo, el número de horas realizadas por un alumno en un mes dado (con, de forma opcional, el formador que ha supervisado estas horas).

# Présence des apprenants
mutation ($id: ID!, $updates: [TraineeAttendanceUpdateInput!]!) { update_trainees_attendance(training_session_id: $id, attendance_updates: $updates) { id } }
# updates: [{ customerTraineeId, trainingSessionSlotId, hasSigned }]

# Présence des formateurs
mutation ($id: ID!, $updates: [InstructorAttendanceUpdateInput!]!) { update_instructors_attendance(training_session_id: $id, attendance_updates: $updates) { id } }
# updates: [{ trainingSessionInstructorId, trainingSessionSlotId, hasSigned }]

# Heures en mode intervalle
mutation ($id: ID!, $updates: [TraineeIntervalAttendanceUpdateInput!]!) { update_trainees_interval_attendance(training_session_id: $id, attendance_updates: $updates) { id } }
# updates: [{ customerTraineeId, subsessionId, date, hours, trainingSessionInstructorId }]

# Lecture des heures saisies
query ($id: ID!) { trainingSession(id: $id) { subsessions { monthlyHours { date hours customerTraineeId trainingSessionInstructorId } } } }

Junio

  • Los tokens de la API ya no se pueden consultar a posteriori. Solo se muestran una vez durante su creación. Por razones de seguridad, ya no almacenamos los tokens de la API en texto plano en nuestra base de datos. Por tanto, eres el único que puede consultar esta información.

    Para ayudarte a identificar tus tokens, mostramos su concepto, sus cuatro últimos caracteres así como la fecha de su último uso.

Mayo

  • Ahora es posible generar varios tokens de la API por academia

  • Es posible poner un nombre personalizado a nuestros tokens de la API

  • Ahora es posible crear preinscripciones mediante las query "createTraineeRegistration" y "createCompanyRegistration"

    mutation ($programId: ID!){
    createTraineeRegistration(programId: $programId, trainee: {
    lastname: "pierre"
    firstname: "laplace"
    email: "la@place"
    }) {
    id
    entity {
    __typename
    ...on Trainee {
    lastname
    }
    }
    }
    }


    mutation ($programId: ID!) {
    createCompanyRegistration(programId: $programId
    company: {
    name: "entreprise"
    }
    trainees: [ {
    lastname: "lastname"
    }]) {
    id
    entity {
    ...on Company {
    name
    }
    }
    }
    }
  • Modificar varios alumnos al mismo tiempo (máx. 50 elementos por solicitud)

    mutation($inputs: [TraineeInput]!) {
    update_trainees(trainee_inputs: $inputs) {
    lastname
    firstname
    email
    }
    }
  • Modificar varias empresas al mismo tiempo (máx. 50 elementos por solicitud)

    mutation($inputs: [CompanyInput]!) {
    update_companies(company_inputs: $inputs) {
    name
    email
    }
    }

Abril

  • Crear varios alumnos al mismo tiempo (máx. 50 elementos por solicitud)

    mutation($inputs: [TraineeInput]!) {
    create_trainees(trainee_inputs: $inputs) {
    lastname
    firstname
    email
    }
    }
  • Crear varias empresas al mismo tiempo (máx. 50 elementos por solicitud)

    mutation($inputs: [CompanyInput]!) {
    create_companies(company_inputs: $inputs) {
    name
    email
    }
    }

Marzo

  • Nueva query "accountingInformation" que permite recuperar la información relacionada con las exportaciones contables de la academia.

    query MyQuery {
    accountingInformation {
    customerAccountingCode
    defaultProductAccountingCode
    defaultProductAccountingCodeConsulting
    defaultProductAccountingCodeExpenses
    defaultProductAccountingCodeExpensesConsulting
    defaultProductAccountingCodeExpensesNoBpf
    defaultProductAccountingCodePedagogicalProduct
    defaultProductAccountingCodeNoBpf
    defaultProductAccountingCodePedagogicalProductConsulting
    defaultProductAccountingCodePedagogicalProductNoBpf
    salesBook
    vatAccountingCode
    }
    }

  • Nuevo campo "vatType" para el objeto invoices_item (escritura y consulta).

    Este campo se utiliza para el estándar factura-x (BT-151) y según los valores de la norma UNTDID 5305.

    mutation {
    createInvoice (createInvoiceInput: {
    items: [ {
    vatType: AE
    }]
    }) {
    items {
    vatType
    }
    }
    }

Febrero

  • Recuperar el estado de exención de IVA de una academia

    query {   
    academy {
    id
    vatExempted
    }
    }

  • Activar o desactivar el extranet de un alumno mediante el campo hidden_extranet (true/false)

    mutation UpdateCustomerTrainee($id: ID!, $inputs: UpdateCustomerTraineeInput!) {
    update_customer_trainee(customer_trainee_id: $id, update_customer_trainee_input: $inputs) {
    extranet_url
    hidden_extranet
    }
    }

  • Posibilidad de crear y modificar los precios de un programa

    mutation CreateProgramWithPrice($programInput: ProgramInput!) {
    createProgram(programInput: $programInput) {
    id
    name
    costsInter {
    description
    cost
    vat
    type
    costMode
    monthly
    }
    }
    }

  • Nuevo campo que permite recuperar la tasa de satisfacción de un programa.

    query($id: ID!) {
    program(id: $id) {
    satisfactionRate {
    score
    evaluationsCount
    }
    }
    }

  • Nuevo campo que permite recuperar los documentos asociados a un cliente en un curso.

    query {
    trainingSession(id: <ID>) {
    customers {
    documents {
    id
    url
    }
    }
    }
    }

  • Posibilidad de crear gastos financieros manualmente.

    mutation($inputs: [ManualChargeInput]!) {
    create_manual_charges(manual_charge_inputs: $inputs) {
    name
    amount
    date
    }
    }

Enero

  • Posibilidad de eliminar una solicitud de inscripción procedente del catálogo o de la página de preinscripción pública.

    mutation($id: ID!) {
    deleteRegistration(id: $id)
    }

2025

Octubre

  • Nuevo campo en las facturas para indicar si se trata de un anticipo y a qué factura está vinculado.

    query {
    invoices {
    id
    advanceFromId
    }
    }

  • Nuevo campo para acceder al progreso y a la puntuación del alumnado en los módulos de e-learning.

    query {
    trainingSession(id: XXXXXX) {
    customers {
    customerTrainees {
    elearningStats {
    # la moyenne
    progression
    score
    perModule {
    score
    progression
    module {
    id
    name
    }
    }
    }
    }
    }
    }
    }

  • Posibilidad de especificar el comercial para un cliente.

    mutation {
    createCustomer(
    createCustomerInput: {
    accountManagerId: XXXXXX
    companyId: XXXXXXX
    trainingSessionId: XXXXXXX
    }
    ) {
    id
    }
    }

    mutation {
    updateCustomer(id: XXXXXX, updateCustomerInput: {accountManagerId: XXXXXXX}) {
    id
    }
    }

  • Nueva mutación para crear una nota asociada a un cliente (Customer).

    mutation {
    createCustomerNote(
    customerId: XXXXXX
    noteInput: {
    # pour créer une tâche
    checkable: true
    # pour associer la note à un compte de votre OF
    managerId: XXXXXX
    # pour ajouter une date s’il s’agit d’une tâche
    nextDate: "2025-10-23"
    # le seul champ requis : le contenu de la note
    text: "contenu de la note"
    }
    ) {
    id
    }
    }
  • Nuevo tipo GeneratedFile que da acceso al enlace del documento generado y a la información de la firma electrónica asociada, accesible en los Customers para el contrato y los presupuestos en el objeto Quotation

    query {
    trainingSession(id: ####) {
    customers {
    conventionFile {
    url
    signatureInfo {
    state
    insertedAt
    signers {
    firstname
    lastname
    email
    }
    }
    }
    }
    }
    }

    query {
    quotation(id: #####) {
    file {
    url
    signatureInfo {
    state
    signers {
    firstname
    lastname
    email
    }
    }
    }
    }
    }

Septiembre

  • Nueva mutación para crear inscripciones que aparecerán en la página Solicitudes de inscripción. (https://app.digiforma.com/crm/registrations):

    # On commence par créer notre Company en draft (ou un Trainee)
    mutation createDraftCompany {
    createCompany(companyInput: {
    draft: true
    email: "test-co@coco.com"
    name: "Test Company"
    }) {
    id
    }
    }

    # On récupère le programme et la training session auxquels on veut associer l’inscription.
    query {
    programs(filter: {rootLevelOnly: true, soldOnCatalog: true}) {
    name
    # on aura besoin de cet ID
    id
    variants {
    trainingSession {
    # et l'ID de la training session si on veut s’inscrire à une session en particulier.
    id
    }
    }
    }
    }

    # Et pour finir, la création de l’inscription.
    mutation registerTestCompany {
    createRegistration(
    createRegistrationInput: {
    apiOrigin: "My awesome webpage"
    # un programme "root"/"parent" Qui a été créé dans la bibliothèque ou
    # par API avec la mutation createProgram
    programId: 2234878
    # Optionnel: l'ID de la session sur laquelle on veut inscrire.
    trainingSessionId: 2401139
    # l'ID d'une Company, ou un Trainee (draftTraineeId) en draft
    draftCompanyId: 2195316
    # Si l'inscription concerne une entreprise, on peut spécifier
    # le nombre d’apprenants
    learnerRegistrationCount: 24
    }
    ) {
    id
    }
    }

  • Campo para acceder a la url del documento generado para un programa

    query {
    program(id: 2234879) {
    generatedProgramUrl
    }
    }

  • Campo para acceder a la URL del contrato generado para un cliente

     query {
    customers {
    conventionUrl
    }
    }

  • Campos para acceder a la URL del certificado de asistencia y de la convocatoria de un alumno

    query {
    trainingSession(id: 2314283) {
    id
    customers {
    customerTrainees {
    attendanceProofUrl
    convocationUrl
    }
    }
    }

Agosto

  • Se han añadido dos nuevas mutaciones para añadir una nueva clase (llamada slot) al módulo de un curso o bien para eliminar una:

    mutation ($subsessionId: ID!, $input: TrainingSessionDateInput!) {
    createSubsessionSlot(subsessionId: $subsessionId, trainingSessionDateInput: $input) {
    id
    }
    }

    mutation ($id: ID!) {
    deleteSubsessionSlot(id: $id)
    }
  • adición del campo comercial (aquí llamado accountManager) en los clientes

    {
    customers(pagination: {page: 0, size: 5}) {
    accountManager {
    firstname
    lastname
    }
    }
    }

Julio

  • Los presupuestos devuelven más información:

    • los prefijos y números de presupuesto ahora están disponibles (campos prefix, number y number_str)

    • la fecha de confirmación también (campo accepted_at)

  • Ahora es posible recuperar el documento generado en Digiforma para las facturas y presupuestos con el campo fileUrl.

Para recuperar las facturas, la solicitud es:

query($id: ID!) {
invoice(id: $id) {
fileUrl
}
}

  • Los campos forceTotal y forcedTotal se han añadido en los items de factura para poder recuperar los importes manuales de las líneas de factura

  • Para saber cuándo se ha añadido o modificado un alumno en un curso, se devuelven los campos inserted_at y updated_at:

    query {
    trainingSessions {
    customers {
    customerTrainees {
    insertedAt
    updatedAt
    }
    }
    }
    }
  • Los mismos campos se devuelven en las respuestas a una evaluación para saber cuándo se ha añadido o modificado una respuesta:

    query {
    trainingSessions {
    evaluations {
    form {
    formAnswers {
    insertedAt
    updatedAt
    }
    }
    }
    }
    }
  • Aparece una nueva mutación updateSubsessionSlot: permite actualizar una clase de módulo (en un curso) de manera unitaria

  • Corrección en la gestión de los gerentes de curso

  • Corrección en la recuperación de los gastos

Enero

  • ​Ahora es posible acceder a los alumnos desde los trainingSessionSlots (¿señal de una futura modularización de los itinerarios en Digiforma?) utilizando el atributo customerTrainees.

    query ($id: ID!){
    trainingSession(id: $id) {
    trainingSessionSlots {
    customerTrainees {
    __typename
    }
    }
    }
    }

2024

Noviembre

  • ​Hay dos nuevos campos disponibles en los objetos "trainingSession": benefit (facturación (BA) del curso) y charges (gastos del curso)

  • ¡Los enlaces de acceso al extranet están disponibles en la API!

    Estos enlaces son accesibles a nivel de las trainingSessions para recuperar el enlace general y a nivel de los customerTrainees para recuperar los enlaces personales.

    query ($id: ID!){
    trainingSession(id: $id) {
    extranetUrl
    customers {
    customerTrainees {
    extranetUrl
    }
    }
    }
    }

Octubre

  • Hay una nueva solicitud disponible: tasklists. Esta te permite recuperar las listas de tareas disponibles en tu cuenta.

Septiembre

  • ​Hay una nueva query disponible: customers (y customer). Permite la recuperación de los clientes asociados a un curso de formación.

  • Ahora es posible filtrar los cursos por code. Este filtro es exclusivo y solo podrá devolver un único resultado.

  • El campo pendingEvaluation de los "trainingSession" está obsoleto. Prioriza el uso del campo evaluations.

    query ($id: ID!) {
    trainingSession(id: $id) {
    evaluations {
    __typename
    }
    }
    }

  • Los programas se pueden filtrar por 4 nuevos criterios:

    • soldOnCatalog/soldOnMarketplace para recuperar únicamente los programas vendidos en el catálogo o el Marketplace.

    • tailored para recuperar únicamente los programas "disponibles bajo presupuesto".

    • categoryId para recuperar únicamente los programas de una determinada categoría.

Agosto

  • ​Ahora es posible encontrar el porcentaje de avance de un alumno en un curso mediante el campo "sessionCompletion" de los objetos "customerTrainee"

    query ($id: ID!) {
    trainingSession(id: $id) {
    customers {
    customerTrainees {
    sessionCompletion
    }
    }
    }
    }

Junio

  • ​​Los programs ahora se pueden filtrar por los campos codeCpf y code

  • Los objetos "invoice" (facturas) tienen dos nuevos campos para acercarse lo más posible al comportamiento de la aplicación web: payment_limit_days e is_payment_limit_end_month.

Mayo

  • ​Los códigos de los programas ahora están disponibles en todos los programs, incluso para los programs cuyo código no se ha modificado.
    ​

  • Tres nuevos campos en el objeto invoice: «numberStr», «paymentLimitDays» e «isPaymentLimitEndMonth».

Abril

  • ​Los campos «insertedAt» y «updatedAt» ahora están disponibles en los objetos quotation, training_session_instructor, training_session_slot, grade, invoice_payement, contact, evaluation and customer_funding.
    ​

  • Las preinscripciones de la gestión comercial ahora se pueden consultar desde la API GraphQL.

Marzo

  • Además de poder filtrarse por fecha, ¡las solicitudes formuladas en la API GraphQL ahora se pueden filtrar por hora!

Febrero

  • Un nuevo objeto se integra en la API GraphQL: «AnswerInput». Permite responder a las evaluaciones con la mutación «answerEvaluation». El tipo de respuesta a introducir depende del tipo de pregunta a la que se responde durante la evaluación. Las diferentes preguntas de una evaluación están disponibles desde las training session en el objeto «Form» y luego «Inputs».

Enero

  • Adición del campo «programId» al objeto «trainingSessionInput». Permite a los usuarios modificar el programa asociado a un curso de formación.
    ​

  • Nuevo campo «Evaluations» para el objeto «trainingSession», que permite recuperar las evaluaciones en un formato sencillo y comprensible para todo el mundo.
    ​

  • Nuevo campo «Inputs» para el objeto «Form» (disponible en el objeto «Evaluation»). Permite recuperar las diferentes preguntas de la evaluación. Las respuestas a las preguntas también están disponibles por alumno.


2023

Diciembre

  • Nuevas solicitudes «programSpecialties» y «programSpecialty». Permiten a los usuarios recuperar la lista de especialidades asociables a los programas mediante el campo «specialty».

  • Nueva solicitud «programDiplomas». Permite a los usuarios recuperar la lista de valores posibles para el campo «diploma» del objeto «program».

  • Adición de los nuevos campos «certificationModalityAccess», «certificationType» y «certificationModality» al objeto «programInput».

  • Adición del parámetro «dateFilter» a las solicitudes «companies», «fundingAgencies» e «instructors». Permite armonizar los filtros sustituyendo la mayoría de los filtros de fecha presentes en los filtros tradicionales.
    ​Por favor, prioriza el uso de los «dateFilter» en lugar de los filtros para precisar tus búsquedas basándote en las fechas de creación y modificación.

  • Adición de los campos «startedBefore» y «endedAfter» al objeto «trainingSessionFilters».

  • Adición del campo «subsessions» al objeto «customer». Este campo debe utilizarse en lugar del campo «subsessionIds».

Noviembre

  • Adición de un nuevo parámetro a las solicitudes «customers», «trainees», «trainingSessions», «invoices» y «programs»: el «dateFilter». Permite armonizar los filtros sustituyendo la mayoría de los filtros de fecha presentes en los filtros tradicionales.
    ​Por favor, prioriza el uso de los «dateFilter» en lugar de los filtros para precisar tus búsquedas basándote en las fechas de creación y modificación.

  • Creación de la nueva solicitud «marketplaceCategories». Permite recuperar la lista de opciones disponibles para el campo «marketplaceCategory» de los programas.

  • Adición de los nuevos campos «marketplaceEnabledAt», «marketplaceTargetLevel» y «marketplaceCategory» al objeto «program».

  • Adición de los campos «marketplaceTargetLevel», «sell_on_marketplace», «marketplaceCategoryId», «accessDeleyUnit» y «Capacity» al objeto «programInpt».

Octubre

  • Actualización de los filtros de programa: adición de los filtros «name», «updated_before», «updated_after», «created_before» y «created_after». Adición también de los campos «inserted_at» y «updated_at» para los programas.

  • Adición del campo «tailored» para el objeto «program». Permite a los usuarios ver si la casilla «Catálogo online: proponer una opción bajo presupuesto» está disponible para el programa.

  • Adición del campo «invoices» para el objeto «trainingSession». Permite a los usuarios visualizar la lista de facturas asociadas a un curso de formación.

  • Actualización de los filtros de las invoices: adición de los filtros «date_after», «date_before», «updated_before», «updated_after», «created_before» y «created_after». Adición de los campos «inserted_at» y «updated_at» para las invoices.

  • Adición de las solicitudes «manager» y «managers». Permite disponer de la lista de responsables así como de las subsessions asociadas a él. Adición de los campos «manager» y «second_manager» en el objeto «training_session» para acceder a los responsables desde el curso de formación.

  • Adición del campo «trainingSession» al objeto «program» para acceder al curso de formación asociado a los programas.

  • Adición del campo «variants» al objeto «program» para permitir a los usuarios recuperar la totalidad de los variants vinculados a un programa. Permite, por extensión, el acceso a todos los cursos de formación asociados a un programa.

Septiembre

  • Adición del campo «evaluationScore» a los objetos «training_session» para un acceso más sencillo a la puntuación de evaluación. Objetivo: parecerse lo más posible a la página «calidad» de las training sessions en la aplicación.

Agosto

  • Adición de las solicitudes «addInstructorToSlot» y «removeInstructorToSlot», que permiten añadir a un instructor ya presente en un curso en horarios concretos.

  • Adición de un filtro «draft» en la solicitud «trainees» para permitir a los usuarios recuperar la lista de inscritos mediante las preinscripciones públicas.

Junio

  • Actualización de los comentarios en la API. La descripción de numerosos campos se actualiza para ser más clara y comprensible para los usuarios.

  • Adición de las solicitudes «customers» y «pipeline_state» a la API. Equivalente de la página «gestión comercial», con los filtros asociados (name, status, subuser_id, pipeline_state).


2022

Diciembre

  • Las notas y las tareas de los cursos de formación son datos accesibles en la API GraphQL.

  • Los cursos se pueden ordenar por estado (proyecto, planificación en progreso, programado, completado), por fecha o por nombre en la API GraphQL.

  • Los cursos archivados también se pueden ordenar.


2019

Octubre

  • Interconexión de Digiforma con otras soluciones Cloud como Google Forms para crear preinscripciones en tus cursos.


2018

Septiembre

  • Interconexión de tu cuenta Digiforma con soluciones de terceros a través de la API GraphQL o Zapier.

¿Ha quedado contestada tu pregunta?