Share via


Definición del historial de tareas

En este artículo se describe la definición del registro del historial de tareas que se almacena en Dataverse en la tabla Historial de proyectos. Un registro del historial de tareas representa un cambio en una tarea.

"Editar tipo" define el tipo de registro de historial.

Sintaxis Descripción
TaskCreated representa cuándo se crea la tarea.
TaskEdited representa cuándo se edita la tarea.
TaskDeleted representa cuándo se elimina la tarea.
Undo representa cuándo se ha deshace un cambio
Redo representa cuándo se ha vuelto a cambiar
DependentEdit representa cuando se modifica una tarea debido a un cambio en otra tarea.

Registros de historial

Todos los registros del historial comparten un conjunto común de campos:

Campo Descripción
Project el proyecto con el que está relacionado el historial
Tarea Proyecto la tarea a la que está relacionado el historial. Está en blanco si se elimina la tarea.
XrmUserId el usuario de Xrm que realizó el cambio en la tarea
Timestamp fecha y hora en que se generó el cambio
Editar tipo el tipo de registro de historial
Detalles que contiene los datos del historial en formato JSON

En las secciones siguientes se describe lo que contiene el campo Carga de detalles en función del tipo de registro de historial y de lo que se editó. Para obtener las descripciones de las columnas de detalles, revise Exportar definición de contenido del proyecto.

Detalles de TaskCreated

El registro se crea cuando se crea la tarea. La carga está vacía.

Detalles de TaskDeleted

Contiene una única propiedad "name", que es el nombre de la tarea cuando se eliminó.

Ejemplo:

{"name":"Pour concrete"}

Deshacer o rehacer detalles

Propiedad "revisions" con un valor de matriz que contiene todos los números de revisión que se deshacen o se han rehacer. El número corresponde al sufijo de la propiedad revision del registro del historial.

Ejemplo:

{"revisions":[11,12]}

Que coincide con el registro del historial con el sufijo de registro de revisión (00000000011) en:

msxrm\_orgxxxyyyy.crm.dynamics.com\_ff69bc0e-3f66-41c3-b40c-aa3035517e38\_0000000011

Detalles de TaskEdited

TaskEdited representa modificaciones directas de propiedades en una tarea y crea, elimina y edita en cualquier elemento secundario de tarea, por ejemplo, elementos de lista de comprobación, datos adjuntos, asignaciones, vínculos, etc.

Modificaciones directas de campos de tarea

Los detalles tienen una propiedad "field" con un valor de objeto JSON. Ese objeto tiene los nombres de propiedad modificados como claves (puede haber varias propiedades de tarea editadas en una sola acción de usuario), con un objeto como valor. Ese objeto de propiedad tiene claves "anteriores" y "actualizadas" con los valores que tienen los valores antiguos y nuevos de la propiedad.

Ejemplo:

{
  "fields": {
    "name": {
      "previous": "Pour concrete",
      "updated": "Eat donuts"
    }
  }
}

Para las propiedades grandes (por ejemplo, la asignación de notas "totalWorkContour"), se emite un JSON vacío y no los valores anteriores o actualizados.

Ejemplo:

 {
  "fields": {
    "notes": {}
  }
}

Modificaciones de tareas que completan una tarea

Cualquier edición de propiedad que complete una tarea también agrega una propiedad booleana completada.

Ejemplo:

{
  "fields": {
    "percentComplete": {
      "previous": 75,
      "updated": 100
    }
  },
  "completed": true
}

Edición de elementos secundarios de tarea

Los elementos secundarios son similares a las modificaciones de campo, pero la clave es el nombre de la propiedad de navegación y el valor es una matriz. Los elementos de la matriz se pueden crear (tiene una propiedad "created":true), eliminar ("deleted":true property) o editar (sin crear o eliminar, pero lista de propiedades editadas). Los elementos secundarios creados o eliminados tienen un conjunto de propiedades mínimas necesarias para representar el elemento con valores establecidos directamente en la propiedad . Las ediciones tienen el mismo formato que las modificaciones de campo en la tarea con los valores anteriores y actualizados.

Ejemplo de creación:

{
  "fields": {
    "checklistItems": [
      {
        "id": "f4be3c03-bc04-ee11-83c4-e04f43e61e09",
        "created": true,
        "name": "checklistItem1"
      }
    ]
  }
}

Edición de ejemplo:

{
  "fields": {
    "checklistItems": [
      {
        "id": "54219e93-bd04-ee11-83c4-e04f43e61e09",
        "completed": {
          "previous": false,
          "updated": true
        }
      }
    ]
  }
}

Propiedades incluidas para las creaciones y eliminaciones

Para los elementos secundarios de tarea simple (como comprobar elementos de lista, datos adjuntos) al crearse y eliminarse, se incluyen todas las propiedades necesarias para representar ese elemento. Los elementos de lista de comprobación incluyen el nombre y los datos adjuntos: nombre, uri y tipo.

Los elementos secundarios que son una relación entre otras entidades incluyen el identificador de la otra entidad. Por ejemplo, las asignaciones incluyen el resourceId y los vínculos incluyen el predecessorId.

Detalles de DependentEdit

Los registros de edición dependientes se generan para una tarea si un cambio en otra tarea hace que se modifique la tarea actual. El registro de historial incluye los cambios en la tarea actual y una propiedad sourceEdit que indica los cambios en la tarea de origen que provocaron la modificación de la tarea actual.

Ejemplo: Se agrega un vínculo a otra tarea (origen) a la tarea actual y la fecha de inicio de la tarea actual se mueve un día:

{
  "fields": {
    "start": {
      "previous": "2015-11-17T08:00:00Z",
      "updated": "2015-11-18T08:00:00Z"
    }
  },
  "sourceEdit": {
    "type": "TaskEdited",
    "taskId": "a6f33356-cd04-ee11-83c4-e04f43e61e09",
    "fields": {
      "predecessors": [
        {
          "id": "abf33356-cd04-ee11-83c4-e04f43e61e09",
          "created": true,
          "predecessorId": "a4f33356-cd04-ee11-83c4-e04f43e61e09"
        }
      ]
    }
  }
}

Varias ediciones de origen

Las operaciones masivas pueden cambiar varias tareas a la vez y pueden dar lugar a varios cambios dependientes. En ese escenario, las tareas de la operación masiva se incluyen en sourceEdit con un tipo de registro CompoundEdit. Algunos ejemplos de estos escenarios son la eliminación de varias tareas, la vinculación de varias tareas y la sangría de varias tareas. Un registro CompoundEdit incluye el recuento de ediciones y las tres primeras ediciones.

Ejemplo

{
  "fields": {
    "start": {
      "previous": "2015-11-17T08:00:00Z",
      "updated": "2015-11-16T08:00:00Z"
    }
  },
  "sourceEdit": {
    "type": "CompoundEdit",
    "count": 2,
    "edits": [
      {
        "type": "TaskDeleted",
        "taskId": "f3233655-ce04-ee11-83c4-e04f43e61e09",
        "name": "Task A"
      },
      {
        "type": "TaskDeleted",
        "taskId": "f1233655-ce04-ee11-83c4-e04f43e61e09",
        "name": "Task B"
      }
    ]
  }
}

Modificaciones en tareas de resumen

Algunas operaciones, como eliminar una tarea o aplicar sangría a una tarea, pueden generar varios registros si la tarea editada es una tarea de resumen, ya que esas modificaciones también se aplican a los elementos secundarios de la tarea. Todos los registros dependientes incluyen la tarea de resumen como sourceEdit.

Tamaño del registro

El campo Detalles tiene un tamaño máximo de 1000 caracteres. Si el registro de cambio inicial supera los 1000 caracteres, el registro de historial se recorta. Todos los cambios de cadena están limitados a 100 caracteres y el número de campos modificados está limitado a 6. Una propiedad "truncada" indica cuántos campos directos no se incluyeron. Una propiedad "truncatedElements" indica el número de elementos secundarios que no se escribieron.

Si el tamaño del registro con las restricciones anteriores supera los 1000 caracteres, no se genera todo el registro.

Ejemplo

{
  "fields": {
    "start": {
      "previous": "2015-11-17T08:00:00Z",
      "updated": "2015-11-10T08:00:00Z"
    }
  },
  "sourceEdit": {
    "type": "CompoundEdit",
    "count": 2,
    "edits": [
      {
        "type": "TaskEdited",
        "taskld": "225a7a3b-a916-ee11-a35f-480fcf4e7967",
        "fields": {
          "name": {
            "previous": "Prepare Preliminary Project Scope Statement",
            "updated": "Summarize Project Results and Lessons Learned"
          },
          "start": {
            "previous": "2015-11-16T08:00:00Z",
            "updated": "2017-11-16T08:00: 00Z"
          },
          "truncated": 5
        }
      },
      {
        "type": "TaskEdited",
        "taskld": "245a7a3b-a916-ee11-a35f-480fcf4e7967",
        "fields": {
          "name": {
            "previous": "Prepare Preliminary Project Scope Statement",
            "updated": "Develop High Level Work Breakdown Structure"
          },
          "start": {
            "previous": "2015-11-16T08:00:00Z",
            "updated": "2017-11-16T08:00:00Z"
          },
          "truncated": 5
        }
      }
    ]
  }
}