Ενσωμάτωση του Προβολέα Εγγράφων
Ο Προβολέας Εγγράφων είναι ένα web component που επιτρέπει στους χρήστες να επεξεργάζονται πρότυπα και να προετοιμάζουν έγγραφα για υπογραφή — απευθείας μέσα στην εφαρμογή σας. Αυτός ο οδηγός δείχνει πώς να τον συνδέσετε με το GraphQL API για να δημιουργήσετε μια ολοκληρωμένη ροή υπογραφής.
Επισκόπηση
Μια τυπική ενσωμάτωση ακολουθεί τα εξής βήματα:
- Πιστοποίηση — λήψη token για τον προβολέα
- Μεταφόρτωση προτύπου — μέσω του GraphQL API
- Εμφάνιση του προβολέα — περάστε το ID προτύπου και το token
- Καταγραφή γεγονότων — ο προβολέας εκπέμπει γεγονότα
updateκαιvalidateκαθώς ο χρήστης εργάζεται - Αποστολή εγγράφου — καλέστε το mutation
sendμε τα δεδομένα παραληπτών και ρόλων από τον προβολέα
Πιστοποίηση
Ο προβολέας χρειάζεται ένα έγκυρο token που περνάει στην ιδιότητα token. Το backend σας μπορεί να παρέχει είτε ένα SRP JWT είτε ένα βραχύβιο token component από το generateComponentToken. Δείτε το Widget Authorization πριν συνδέσετε τον προβολέα στην εφαρμογή σας.
Λειτουργία Σύνθεσης — Αποστολή Προ-κατασκευασμένου Εγγράφου
Η λειτουργία σύνθεσης είναι για ροές εργασίας όπου το σύστημά σας γνωρίζει ήδη τους παραλήπτες. Ο χρήστης απλά τοποθετεί πεδία υπογραφής και στέλνει.
1. Εμφάνιση του προβολέα
<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. Παρακολούθηση της επικύρωσης και των IDs ρόλων
Καθώς ο χρήστης προσθέτει πεδία, ο προβολέας εκπέμπει γεγονότα. Χρειάζεστε δύο πράγματα από αυτά τα γεγονότα:
validate— σας ενημερώνει αν το πρότυπο έχει όλα τα απαιτούμενα πεδία (τουλάχιστον μία υπογραφή ανά παραλήπτη)update— παρέχει την τρέχουσα κατάσταση του προτύπου, συμπεριλαμβανομένου τουroleIdγια κάθε συμμετέχοντα όταν χρειάζεστε αντιστοίχιση ρόλων προτύπου
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;
});
});
Το roleId από το γεγονός update αντιστοιχεί κάθε παραλήπτη στα πεδία του στο πρότυπο. Συμπεριλάβετε το όταν η ροή αποστολής σας χρειάζεται αυτή την αντιστοίχιση.
3. Αποστολή του εγγράφου
Όταν ο χρήστης πατάει αποστολή, καλέστε το mutation send με τα δεδομένα παραληπτών και τα IDs ρόλων που καταγράφηκαν από τον προβολέα:
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);
});
Το mutation send επιστρέφει ένα αναγνωριστικό εργασίας. Κάντε polling στο ερώτημα task και παρακολουθήστε το task.report.status μέχρι να φτάσει σε COMPLETED ή FAILED για να επιβεβαιώσετε ότι η δημιουργία του εγγράφου ολοκληρώθηκε.
Λειτουργία Επεξεργασίας — Δημιουργία Προτύπου
Η λειτουργία επεξεργασίας παρέχει στους χρήστες πλήρη εμπειρία επεξεργασίας προτύπων — προσθήκη ρόλων, τοποθέτηση πεδίων, ρύθμιση επιλογών. Χρησιμοποιήστε την όταν θέλετε οι χρήστες να δημιουργούν επαναχρησιμοποιήσιμα πρότυπα.
<ls-document-viewer
id="editor"
templateid="dHBsYjQ5YTg5NWQtYWRhMy0xMWYwLWIxZGMtMDY5NzZlZmU0MzIx"
token="YOUR_ACCESS_TOKEN"
mode="editor"
></ls-document-viewer>
Στη λειτουργία επεξεργασίας, το γεγονός update ενεργοποιείται κάθε φορά που αλλάζει το πρότυπο. Μπορείτε να το χρησιμοποιήσετε για να παρακολουθείτε την κατάσταση του προτύπου ή να δείξετε έναν δείκτη αποθήκευσης:
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);
});
Οι αλλαγές στο πρότυπο αποθηκεύονται αυτόματα από τον προβολέα — δεν χρειάζεται να καλέσετε κάποιο GraphQL mutation για να αποθηκεύσετε τις επεξεργασίες.
Ενσωμάτωση με React
Το React wrapper παρέχει την ίδια λειτουργικότητα με χειρισμό γεγονότων με στυλ React:
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>
);
};
Μάρτυρες
Για να προσθέσετε μάρτυρα για έναν υπογράφοντα, ορίστε roleType: "WITNESS" και χρησιμοποιήστε signerIndex ίσο με το index του γονικού υπογράφοντα + 100. Για παράδειγμα, μάρτυρας για τον υπογράφοντα 2 έχει 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>
Κυριότερες Έννοιες
| Έννοια προβολέα | Τύπος GraphQL | Περιγραφή |
|---|---|---|
Ιδιότητα templateid | Template | Το πρότυπο που επεξεργάζεται ή συντίθεται |
Ιδιότητα recipients | RecipientInput | Παραλήπτες που δίνονται στη λειτουργία σύνθεσης |
roleId από το γεγονός update | Role | Συνδέει έναν παραλήπτη με τα πεδία του στο πρότυπο |
Γεγονός validate | — | Αν το πρότυπο έχει όλα τα απαιτούμενα πεδία |
Mutation send | send | Στέλνει το έγγραφο μετά τη σύνθεση |
Ιδιότητα token | — | Token από authentication |
mode="compose" | — | Απλοποιημένη λειτουργία για τοποθέτηση πεδίων και αποστολή |
mode="editor" | — | Πλήρης λειτουργία επεξεργασίας προτύπου |
experience στην είσοδο αποστολής | Experience | Ελέγχει το branding, email και σελίδα υπογραφής — δείτε Experiences explained |
Σχετικά
- Αναφορά Προβολέα Εγγράφων — πλήρης αναφορά ιδιοτήτων και γεγονότων
- Mutation send — αποστολή εγγράφου
- DocumentSendSettingsInput — πλήρης δομή εισόδου αποστολής
- Εξηγήσεις μεθόδων αποστολής — send vs sendBatch vs sendBulk
- Μεταφόρτωση Αρχείου ως Πρότυπο — μεταφόρτωση προτύπων μέσω API
- Πιστοποίηση — επιλογή τρόπου πιστοποίησης