Integrieren Sie den Dokumenten-Viewer
Der Document Viewer ist eine Web-Komponente, mit der Benutzer Vorlagen bearbeiten und Dokumente zur Unterzeichnung vorbereiten können — direkt in Ihrer Anwendung. Diese Anleitung zeigt, wie Sie ihn mit der GraphQL API verbinden, um einen kompletten Unterschriften-Workflow zu erstellen.
Überblick
Eine typische Integration folgt diesen Schritten:
- Authentifizieren — ein Token für den Viewer erhalten
- Eine Vorlage hochladen — über die GraphQL API
- Den Viewer rendern — die Vorlage-ID und das Token übergeben
- Ereignisse erfassen — der Viewer sendet
update- undvalidate-Events, während der Benutzer arbeitet - Das Dokument senden — die
send-Mutation mit den Empfänger- und Rollendaten aus dem Viewer aufrufen
Authentifizierung
Der Viewer benötigt ein gültiges Token, das an sein token-Attribut übergeben wird. Ihr Backend kann entweder ein SRP JWT oder ein kurzfristiges Komponenten-Token von generateComponentToken bereitstellen. Siehe Widget Authorization, bevor Sie den Viewer in Ihre Anwendung einbinden.
Compose-Modus — Senden eines vorgefertigten Dokuments
Der Compose-Modus ist für Workflows gedacht, bei denen Ihr System die Empfänger bereits kennt. Der Benutzer platziert nur noch die Signaturfelder und sendet.
1. Den Viewer rendern
<ls-document-viewer
id="viewer"
templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
token="YOUR_ACCESS_TOKEN"
mode="compose"
recipients='[
{"email": "jane@example.com", "firstname": "Jane", "lastname": "Smith", "signerIndex": 1},
{"email": "john@example.com", "firstname": "John", "lastname": "Doe", "signerIndex": 2}
]'
filtertoolbox="signature|initials|date|text"
>
<span slot="right-button">
<button id="send-btn" disabled>Send</button>
</span>
</ls-document-viewer>
2. Validierung und Rollen-IDs verfolgen
Während der Benutzer Felder hinzufügt, sendet der Viewer Events. Sie benötigen zwei Dinge aus diesen Events:
validate— gibt an, ob die Vorlage alle erforderlichen Felder enthält (mindestens eine Unterschrift pro Empfänger)update— liefert den aktuellen Vorlagenzustand, einschließlichroleIdfür jeden Teilnehmer, wenn Sie eine Zuordnung von Template-Rollen benötigen
const viewer = document.getElementById('viewer');
const sendBtn = document.getElementById('send-btn');
let isValid = false;
const recipientRoles = {};
viewer.addEventListener('validate', (e) => {
isValid = e.detail.valid;
sendBtn.disabled = !isValid;
});
viewer.addEventListener('update', (e) => {
const roles = e.detail.template.roles;
roles.forEach((role) => {
recipientRoles[role.signerIndex] = role.id;
});
});
Die roleId aus dem update-Event ordnet jeden Empfänger seinen Feldern auf der Vorlage zu. Fügen Sie sie ein, wenn Ihr Sendeablauf diese Zuordnung benötigt.
3. Das Dokument senden
Wenn der Benutzer auf Senden klickt, rufen Sie die send Mutation mit den Empfängerdaten und den aus dem Viewer erfassten Rollen-IDs auf:
sendBtn.addEventListener('click', async () => {
const token = '<token-from-authentication-guide>';
const recipients = [
{
firstName: 'Jane',
lastName: 'Smith',
email: 'jane@example.com',
role: 'Signer',
roleId: recipientRoles[1],
signerIndex: 1,
order: 1,
},
{
firstName: 'John',
lastName: 'Doe',
email: 'john@example.com',
role: 'Signer',
roleId: recipientRoles[2],
signerIndex: 2,
order: 2,
},
];
const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
query: `mutation SendDocument {
send(input: {
groupId: "YOUR_GROUP_ID"
templateId: "dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
title: "Contract - Jane Smith & John Doe"
recipients: ${JSON.stringify(recipients).replace(/"(\w+)":/g, '$1:')}
sequentialSigning: true
})
}`,
}),
});
const result = await response.json();
const taskId = result.data.send;
// Poll for completion
console.log('Task started:', taskId);
});
Die send-Mutation liefert eine Aufgaben-ID zurück. Fragen Sie die task Abfrage ab und überwachen Sie task.report.status, bis dieser COMPLETED oder FAILED erreicht, um die Fertigstellung der Dokumentenerstellung zu bestätigen.
Editor-Modus — Vorlage erstellen
Der Editor-Modus bietet Benutzern das vollständige Vorlagen-Bearbeitungserlebnis — Rollen hinzufügen, Felder platzieren und Optionen konfigurieren. Verwenden Sie dies, wenn Benutzer wiederverwendbare Vorlagen erstellen sollen.
<ls-document-viewer
id="editor"
templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
token="YOUR_ACCESS_TOKEN"
mode="editor"
></ls-document-viewer>
Im Editor-Modus wird das update-Event ausgelöst, wann immer sich die Vorlage ändert. Sie können es verwenden, um den Vorlagenzustand zu verfolgen oder eine Speicheranzeige anzuzeigen:
const editor = document.getElementById('editor');
editor.addEventListener('update', (e) => {
console.log('Template updated:', e.detail);
});
editor.addEventListener('validate', (e) => {
console.log('Template valid:', e.detail.valid);
});
Vorlagenänderungen werden automatisch vom Viewer gespeichert — Sie müssen keine GraphQL-Mutation aufrufen, um die Änderungen zu speichern.
React-Integration
Der React-Wrapper bietet dieselbe Funktionalität mit React-artiger Ereignisbehandlung:
import { useState } from 'react';
import { LsDocumentViewer } from 'legalesign-document-viewer-react';
const DocumentCompose = ({ templateId, recipients, token }) => {
const [isValid, setIsValid] = useState(false);
const [roleMap, setRoleMap] = useState({});
const handleValidate = (e) => {
setIsValid(e.detail.valid);
};
const handleUpdate = (e) => {
const roles = e.detail.template.roles;
const map = {};
roles.forEach((role) => {
map[role.signerIndex] = role.id;
});
setRoleMap(map);
};
const handleSend = async () => {
const mappedRecipients = recipients.map((r, i) => ({
...r,
roleId: roleMap[r.signerIndex],
order: i + 1,
}));
const response = await fetch('https://graphql.uk.legalesign.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({
query: `mutation SendDocument {
send(input: {
groupId: "YOUR_GROUP_ID"
templateId: "${templateId}"
title: "Document"
recipients: ${JSON.stringify(mappedRecipients).replace(/"(\w+)":/g, '$1:')}
})
}`,
}),
});
const result = await response.json();
console.log('Task ID:', result.data.send);
};
if (!token) return null;
return (
<LsDocumentViewer
templateid={templateId}
token={token}
mode="compose"
recipients={JSON.stringify(recipients)}
onValidate={handleValidate}
onUpdate={handleUpdate}
>
<div slot="right-button">
<button onClick={handleSend} disabled={!isValid}>
Send
</button>
</div>
</LsDocumentViewer>
);
};
Zeugen
Um einen Zeugen für einen Unterzeichner hinzuzufügen, setzen Sie roleType: "WITNESS" und verwenden Sie einen signerIndex, der dem Index des übergeordneten Unterzeichners + 100 entspricht. Zum Beispiel hat ein Zeuge für Unterzeichner 2 den signerIndex: 102:
<ls-document-viewer
mode="compose"
recipients='[
{"email": "signer@example.com", "firstname": "Alice", "lastname": "Jones", "signerIndex": 1},
{"email": "signer2@example.com", "firstname": "Bob", "lastname": "Brown", "signerIndex": 2},
{"email": "witness@example.com", "firstname": "Carol", "lastname": "White", "signerIndex": 102, "roleType": "WITNESS"}
]'
...
></ls-document-viewer>
Schlüsselkonzepte
| Viewer-Konzept | GraphQL-Typ | Beschreibung |
|---|---|---|
templateid-Attribut | Template | Die bearbeitete oder zusammengesetzte Vorlage |
recipients-Attribut | RecipientInput | Empfänger, die an den Compose-Modus übergeben werden |
roleId aus update-Event | Role | Verknüpft einen Empfänger mit seinen Feldern auf der Vorlage |
validate-Event | — | Ob die Vorlage alle erforderlichen Felder enthält |
send-Mutation | send | Sendet das Dokument nach der Komposition |
token-Attribut | — | Token aus der Authentifizierung |
mode="compose" | — | Vereinfachter Modus zum Platzieren von Feldern und Senden |
mode="editor" | — | Vollständiger Vorlagenbearbeitungsmodus |
experience im Send-Input | Experience | Steuert Branding, E-Mails und Unterzeichnungsseite — siehe Experiences explained |
Verwandte Inhalte
- Document Viewer Referenz — Vollständige Attribut- und Ereignisreferenz
- send-Mutation — Ein Dokument senden
- DocumentSendSettingsInput — Vollständige Send-Eingabesstruktur
- Versandmethoden erklärt — send vs sendBatch vs sendBulk
- Eine Datei als Vorlage hochladen — Vorlagen über die API hochladen
- Authentifizierung — Wählen Sie einen Authentifizierungsmodus