Trackline es una funcionalidad de la plataforma Code Contract que permite automatizar la recopilación de información sin modificar los procesos de trabajo y sin necesidad de registros manuales.
Este post explica cómo descargar automáticamente los documentos de un proceso Trackline y guardarlos en una biblioteca de documentos de SharePoint usando llamadas HTTP.
Puede implementarse en:
- Un backend propio (Node.js, Python, .NET, Java…)
- Azure Function / AWS Lambda
- Un servidor corporativo
- Una API interna que sincronice Trackline con SharePoint
1. Paso 1 — Obtener el Token de Trackline
Antes de descargar documentos, necesitas un token JWT.
🔹 Ejemplo de llamada (POST)
POST https://api.codecontractplattform.com/api/login
Content-Type: application/json
Body:
{
"email": "TU_USUARIO",
"password": "TU_CONTRASEÑA"
}
🔹 Respuesta esperada:
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGc..."
}
Guarda este token para usarlo en las siguientes llamadas.
2. Paso 2 — Obtener la lista de documentos de un proceso
Para conocer los documentos que hay en Trackline, consulta los metadatos del proceso.
🔹 Ejemplo de llamada (GET)
GET https://api.codecontractplattform.com/api/track-line/ext/track-path/metadata?process_id=ID_DEL_PROCESO
Authorization: Bearer TOKEN_JWT
🔹 Respuesta:
{
"process_id": "12345",
"documents": [
{
"doc_id": "98765",
"doc_name": "Factura_001.pdf"
},
{
"doc_id": "98766",
"doc_name": "PackingList_002.pdf"
}
]
}
Cada documento tiene:
- doc_id → sirve para descargarlo
- doc_name → nombre original del archivo
3. Paso 3 — Descargar cada documento de Trackline
Para cada doc_id, puedes descargar el archivo binario.
🔹 Llamada (GET):
GET https://api.codecontractplattform.com/api/track-line/ext/attachment/file?attachment_id=98765
Authorization: Bearer TOKEN_JWT🔹 Respuesta:
Contenido binario (PDF, XML, ZIP, JPG, etc.)
Guárdalo en una variable o como archivo en tu servidor.
4. Paso 4 — Subir el archivo a SharePoint
SharePoint permite subir archivos a una biblioteca mediante su API REST. Necesitas un token de Microsoft Azure AD (OAuth2) para autenticarte contra SharePoint.
4.1 Obtener token de SharePoint (Azure AD)
Llamada típica (para app de servidor):
POST https://login.microsoftonline.com/TENANT_ID/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
Body:
client_id=ID_APP
scope=https://graph.microsoft.com/.default
client_secret=SECRETO_APP
grant_type=client_credentials
Respuesta:
{
"access_token": "SP_ACCESS_TOKEN",
"expires_in": 3599
}
Ese access_token se usa para subir archivos.
4.2 Subir documentos a una biblioteca de SharePoint
Supongamos que quieres subirlos a:
https://tuempresa.sharepoint.com/sites/Documentos/Shared Documents/Trackline
🔹 Ejemplo de llamada (PUT)
PUT https://tuempresa.sharepoint.com/sites/Documentos/_api/web/GetFolderByServerRelativeUrl('/sites/Documentos/Shared Documents/Trackline')/Files/add(url='Factura_001.pdf',overwrite=true)
Authorization: Bearer SP_ACCESS_TOKEN
Content-Type: application/octet-stream
<binario_del_archivo>
Si la subida es correcta, SharePoint devuelve metadatos del archivo.
5. Resumen del flujo completo
1️⃣ Login en Trackline → obtienes token JWT
2️⃣ Consultar metadatos → obtienes la lista de documentos
3️⃣ Descargar cada documento desde Trackline
4️⃣ Autenticación con Azure AD para conectarte a SharePoint
5️⃣ Subir cada archivo a la biblioteca de SharePoint
6. Ejemplo completo (Node.js)
(Puedes copiar tal cual en un backend corporativo)
const fetch = require("node-fetch");
const fs = require("fs");
// 1. Obtener token Trackline
async function getTracklineToken() {
const res = await fetch("https://api.codecontractplattform.com/api/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
email: "TU_USUARIO",
password: "TU_CONTRASEÑA"
})
});
return (await res.json()).token;
}
// 2. Obtener documentos del proceso
async function getDocuments(token, processId) {
const res = await fetch(
`https://api.codecontractplattform.com/api/track-line/ext/track-path/metadata?process_id=${processId}`,
{ headers: { Authorization: `Bearer ${token}` } }
);
return (await res.json()).documents;
}
// 3. Descargar documento
async function downloadFile(token, docId) {
const res = await fetch(
`https://api.codecontractplattform.com/api/track-line/ext/attachment/file?attachment_id=${docId}`,
{ headers: { Authorization: `Bearer ${token}` } }
);
return Buffer.from(await res.arrayBuffer());
}
// 4. Subir archivo a SharePoint
async function uploadToSharePoint(accessToken, fileName, fileContent) {
const url = `https://tuempresa.sharepoint.com/sites/Documentos/_api/web/GetFolderByServerRelativeUrl('/sites/Documentos/Shared Documents/Trackline')/Files/add(url='${fileName}',overwrite=true)`;
await fetch(url, {
method: "PUT",
headers: {
"Authorization": `Bearer ${accessToken}`,
"Content-Type": "application/octet-stream"
},
body: fileContent
});
}
(async () => {
const tracklineToken = await getTracklineToken();
const docs = await getDocuments(tracklineToken, "12345");
for (const doc of docs) {
const bin = await downloadFile(tracklineToken, doc.doc_id);
// Aquí deberías obtener SP_ACCESS_TOKEN
const spAccessToken = "TOKEN_SHAREPOINT";
await uploadToSharePoint(spAccessToken, doc.doc_name, bin);
}
})();
Si necesitas más información o soporte, contacta con el equipo de Code Contract. 🚀
