Documenti Google consente ai collaboratori di collaborare scrivendo commenti e fornendo suggerimenti che fungono da modifiche posticipate in attesa di approvazione.
Puoi utilizzare l'API per visualizzare le modifiche suggerite in linea nel testo del documento. Nella versione di anteprima per sviluppatori, puoi anche leggere, creare, rispondere, aggiornare o eliminare in modo programmatico i thread di commenti e suggerimenti.
Quando utilizzi il
documents.get metodo per
recuperare i contenuti del documento, questi potrebbero includere suggerimenti non risolti. Per
controllare il modo in cui documents.get rappresenta i suggerimenti, utilizza il parametro facoltativo
SuggestionsViewMode. Con questo parametro sono disponibili le seguenti condizioni di filtro:
- Recupera i contenuti con
SUGGESTIONS_INLINE, in modo che nel documento venga visualizzato il testo in attesa di eliminazione o inserimento. - Recupera i contenuti come anteprima con tutti i suggerimenti accettati.
- Recupera i contenuti come anteprima, senza suggerimenti, con tutti i suggerimenti rifiutati.
Se non fornisci SuggestionsViewMode, l'API Documenti Google utilizza un'impostazione predefinita appropriata per i privilegi dell'utente corrente.
Suggerimenti e indici
Un motivo per cui SuggestionsViewMode è importante è che gli indici nella risposta potrebbero variare a seconda della presenza di suggerimenti, come mostrato di seguito.
| Contenuti con suggerimenti | Contenuti senza suggerimenti |
|---|---|
{
"tabs": [
{
"documentTab": {
"body": {
"content": [
{
"startIndex": 1,
"endIndex": 31,
"paragraph": {
"elements": [
{
"startIndex": 1,
"endIndex": 31,
"textRun": {
"content": "Text preceding the suggestion\n",
"textStyle": {}
}
}
],
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT",
"direction": "LEFT_TO_RIGHT"
}
}
},
{
"startIndex": 31,
"endIndex": 51,
"paragraph": {
"elements": [
{
"startIndex": 31,
"endIndex": 50,
"textRun": {
"content": "Suggested insertion",
"suggestedInsertionIds": [
"suggest.vcti8ewm4mww"
],
"textStyle": {}
}
},
{
"startIndex": 50,
"endIndex": 51,
"textRun": {
"content": "\n",
"textStyle": {}
}
}
],
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT",
"direction": "LEFT_TO_RIGHT"
}
}
},
{
"startIndex": 51,
"endIndex": 81,
"paragraph": {
"elements": [
{
"startIndex": 51,
"endIndex": 81,
"textRun": {
"content": "Text following the suggestion\n",
"textStyle": {}
}
}
],
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT",
"direction": "LEFT_TO_RIGHT"
}
}
}
]
}
}
}
]
},
|
{
"tabs": [
{
"documentTab": {
"body": {
"content": [
{
"startIndex": 1,
"endIndex": 31,
"paragraph": {
"elements": [
{
"startIndex": 1,
"endIndex": 31,
"textRun": {
"content": "Text preceding the suggestion\n",
"textStyle": {}
}
}
],
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT",
"direction": "LEFT_TO_RIGHT"
}
}
},
{
"startIndex": 31,
"endIndex": 32,
"paragraph": {
"elements": [
{
"startIndex": 31,
"endIndex": 32,
"textRun": {
"content": "\n",
"textStyle": {}
}
}
],
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT",
"direction": "LEFT_TO_RIGHT"
}
}
},
{
"startIndex": 32,
"endIndex": 62,
"paragraph": {
"elements": [
{
"startIndex": 32,
"endIndex": 62,
"textRun": {
"content": "Text following the suggestion\n",
"textStyle": {}
}
}
],
"paragraphStyle": {
"namedStyleType": "NORMAL_TEXT",
"direction": "LEFT_TO_RIGHT"
}
}
}
]
}
}
}
]
},
|
Nella risposta sopra, il paragrafo contenente la riga "Testo dopo il suggerimento" mostra la differenza quando si utilizza SuggestionsViewMode. Con il
valore impostato su SUGGESTIONS_INLINE, il startIndex di
ParagraphElement
inizia da 51 e il endIndex si ferma a 81. Senza suggerimenti, l'intervallo startIndex e endIndex va da 32 a 62.
Recuperare i contenuti senza suggerimenti
Il seguente esempio di codice parziale mostra come recuperare un documento come anteprima con tutti i suggerimenti rifiutati (se presenti) impostando il parametro SuggestionsViewMode su PREVIEW_WITHOUT_SUGGESTIONS.
Java
final string SUGGEST_MODE = "PREVIEW_WITHOUT_SUGGESTIONS"; Document doc = service .documents() .get(DOCUMENT_ID) .setIncludeTabsContent(true) .setSuggestionsViewMode(SUGGEST_MODE) .execute();
Python
SUGGEST_MODE = "PREVIEW_WITHOUT_SUGGESTIONS" result = ( service.documents() .get( documentId=DOCUMENT_ID, includeTabsContent=True, suggestionsViewMode=SUGGEST_MODE, ) .execute() )
Omettere il parametro SuggestionsViewMode equivale a fornire DEFAULT_FOR_CURRENT_ACCESS come valore del parametro.
Suggerimenti di stile
I documenti possono anche avere suggerimenti di stile. Si tratta di modifiche suggerite alla formattazione e alla presentazione, anziché modifiche ai contenuti.
A differenza degli inserimenti o delle eliminazioni di testo, questi non compensano gli
indici, anche se potrebbero suddividere un
TextRun in
blocchi più piccoli, ma aggiungono solo annotazioni sulla modifica dello stile suggerita.
Una di queste annotazioni è un
SuggestedTextStyle,
composto da due parti:
textStyle, che descrive lo stile del testo dopo la modifica suggerita, ma non indica cosa è cambiato.Il
textStyleSuggestionState, che indica in che modo il suggerimento modifica i campi ditextStyle.
Puoi vedere questo nell'estratto della scheda del documento seguente, che include una modifica dello stile suggerita:
[01] "paragraph": {
[02] "elements": [
[03] {
[04] "endIndex": 106,
[05] "startIndex": 82,
[06] "textRun": {
[07] "content": "Some text that does not ",
[08] "textStyle": {}
[09] }
[10] },
[11] {
[12] "endIndex": 115,
[13] "startIndex": 106,
[14] "textRun": {
[15] "content": "initially",
[16] "suggestedTextStyleChanges": {
[17] "suggest.xymysbs9zldp": {
[18] "textStyle": {
[19] "backgroundColor": {},
[20] "baselineOffset": "NONE",
[21] "bold": true,
[22] "fontSize": {
[23] "magnitude": 11,
[24] "unit": "PT"
[25] },
[26] "foregroundColor": {
[27] "color": {
[28] "rgbColor": {}
[29] }
[30] },
[31] "italic": false,
[32] "smallCaps": false,
[33] "strikethrough": false,
[34] "underline": false
[35] },
[36] "textStyleSuggestionState": {
[37] "boldSuggested": true,
[38] "weightedFontFamilySuggested": true
[39] }
[40] }
[41] },
[42] "textStyle": {
[43] "italic": true
[44] }
[45] }
[46] },
[47] {
[48] "endIndex": 143,
[49] "startIndex": 115,
[50] "textRun": {
[51] "content": " contain any boldface text.\n",
[52] "textStyle": {}
[53] }
[54] }
[55] ],
[56] "paragraphStyle": {
[57] "direction": "LEFT_TO_RIGHT",
[58] "namedStyleType": "NORMAL_TEXT"
[59] }
[60] }
Nell'esempio sopra, il paragrafo è composto da tre esecuzioni di testo, a partire dalle righe 6, 14 e 50. Esamina l'esecuzione del testo centrale:
- Riga 16: è presente un oggetto
suggestedTextStyleChanges. - Riga 18:
textStylespecifica varie formattazioni. - Riga 36:
textStyleSuggestionStateindica che solo la parte in grassetto di questa specifica era il suggerimento. - Riga 42: lo stile in corsivo di questa esecuzione di testo fa parte del documento corrente (e non è interessato dal suggerimento).
Solo le funzionalità di stile impostate su true in textStyleSuggestionState fanno parte del suggerimento.
Creare e gestire i commenti
Puoi aggiungere commenti e risposte, modificare i commenti ed eliminare
commenti o risposte in modo programmatico utilizzando il documents.batchUpdate metodo.
Quando esegui aggiornamenti batch che coinvolgono commenti o suggerimenti, devi monitorare eventuali errori parziali. Per ulteriori informazioni, consulta Stato dell'aggiornamento di commenti e suggerimenti.
Inserire un commento
Per inserire un thread di commenti, utilizza l'InsertCommentRequest
oggetto. Devi fornire i contenuti del testo del commento e una posizione di ancoraggio (ad esempio un intervallo) a cui è allegato il commento.
Il seguente esempio JSON aggiunge un thread di commenti non assegnato all'intervallo specificato:
{
"requests": [
{
"insertComment": {
"content": "This is a comment added via the API.",
"range": {
"startIndex": 10,
"endIndex": 25
}
}
}
]
}
Puoi assegnare un commento a un utente specifico fornendo la sua email nel campo assigneeEmailAddress:
{
"requests": [
{
"insertComment": {
"content": "Please review this paragraph.",
"assigneeEmailAddress": "user@example.com",
"range": {
"startIndex": 10,
"endIndex": 25
}
}
}
]
}
Aggiungere una risposta o intraprendere un'azione
Per rispondere a un thread di commenti o suggerimenti oppure per risolvere o riaprire un thread,
utilizza AddCommentReplyRequest.
Una risposta è rappresentata da un Post oggetto.
L'oggetto Post contiene il content della risposta e può facoltativamente specificare un commentAction (per RESOLVE o REOPEN il thread).
Il seguente esempio risponde a un thread di commenti esistente:
{
"requests": [
{
"addCommentReply": {
"commentId": "comment_thread_id",
"post": {
"content": "Replying to the comment thread."
}
}
}
]
}
Il seguente esempio risolve un thread di commenti, che non richiede contenuti:
{
"requests": [
{
"addCommentReply": {
"commentId": "comment_thread_id",
"post": {
"commentAction": "RESOLVE"
}
}
}
]
}
Modificare un post
Per modificare il contenuto testuale di un post di cui sei l'autore, utilizza UpdateCommentPostRequest.
Devi specificare l'ID del thread (commentId o suggestionId), il postId del post che vuoi modificare e il nuovo content di testo normale.
Tieni presente che non puoi modificare il post principale di un thread di suggerimenti (in quanto questi vengono generati dalle modifiche in modalità suggerimento).
{
"requests": [
{
"updateCommentPost": {
"commentId": "comment_thread_id",
"postId": "post_id",
"content": "This is the updated comment text."
}
}
]
}
Eliminare commenti e risposte
- Eliminare un thread di commenti: per rimuovere un intero thread di commenti, utilizza
DeleteCommentRequest. Puoi eliminare un thread di commenti solo se sei l'autore del post principale del thread. - Eliminare una risposta: per eliminare un post di risposta specifico, utilizza
DeleteCommentReplyRequest. Puoi eliminare solo le risposte di cui sei l'autore. Non puoi eliminare i post di risposta che contengono azioni o assegnatari.
Il seguente esempio elimina un thread di commenti:
{
"requests": [
{
"deleteComment": {
"commentId": "comment_thread_id"
}
}
]
}
Scrivere suggerimenti e gestire i thread di suggerimenti
Puoi scrivere le modifiche come suggerimenti anziché come modifiche dirette e accettare, rifiutare o eliminare i thread di suggerimenti in modo programmatico.
Quando esegui aggiornamenti batch che coinvolgono suggerimenti, devi monitorare eventuali errori parziali. Per ulteriori informazioni, consulta Stato dell'aggiornamento di commenti e suggerimenti.
Creare suggerimenti utilizzando la modalità suggerimento
Per applicare le modifiche come suggerimenti, imposta il campo writeMode dell'oggetto WriteControl su SUGGEST nella richiesta di aggiornamento batch. Tutti gli aggiornamenti nella richiesta vengono elaborati come suggerimenti.
{
"requests": [
{
"insertText": {
"text": "suggested insertion text",
"location": {
"index": 1
}
}
}
],
"writeControl": {
"writeMode": "SUGGEST"
}
}
Richieste non supportate in modalità suggerimento
Quando utilizzi WriteMode.SUGGEST, i seguenti tipi di richiesta non sono supportati e restituiscono un errore:
AddDocumentTabCreateNamedRangeDeleteFooterDeleteHeaderDeleteNamedRangeDeleteTabUpdateDocumentTabPropertiesUpdateTableColumnProperties
Inoltre, non puoi suggerire modifiche al formato del documento o alle impostazioni di intestazioni/piè di pagina. In UpdateDocumentStyle, i suggerimenti non sono supportati per i seguenti tipi di stile:
documentFormatuseEvenPageHeaderFooteruseFirstPageHeaderFooter
Accettare, rifiutare o eliminare i thread di suggerimenti
Puoi gestire i thread di suggerimenti utilizzando le seguenti richieste:
- Accettare il suggerimento: utilizza
AcceptSuggestionRequestper accettare il suggerimento. Per questa operazione è necessario l'accesso in modifica al documento. - Rifiutare il suggerimento: utilizza
RejectSuggestionRequestper rifiutare il suggerimento. Per questa operazione è necessario l'accesso in modifica al documento o essere l'autore del suggerimento. - Eliminare il suggerimento: utilizza
DeleteSuggestionRequestper eliminare il suggerimento. Per questa operazione devi essere l'autore del suggerimento.
Il seguente esempio accetta un thread di suggerimenti:
{
"requests": [
{
"acceptSuggestion": {
"suggestionId": "suggestion_thread_id"
}
}
]
}
Stato dell'aggiornamento di commenti e suggerimenti
Le richieste che richiedono il salvataggio di thread di commenti o suggerimenti (ad esempio l'inserimento di commenti, l'aggiunta di risposte o la creazione di suggerimenti) potrebbero riscontrare errori parziali. In questi casi, le modifiche al modello del documento (ad esempio inserimenti o eliminazioni di testo) potrebbero essere state eseguite correttamente nel modello di Documenti, ma i commenti o i suggerimenti associati potrebbero non essere stati salvati.
Puoi verificare se gli aggiornamenti di commenti o suggerimenti sono stati applicati correttamente controllando il commentUpdateState field in the BatchUpdateDocumentResponse.
I seguenti stati vengono restituiti in CommentUpdateState:
NO_UPDATES_REQUESTED: nell'operazione batch non sono stati richiesti aggiornamenti di commenti o suggerimenti.ALL_SAVED: tutti gli aggiornamenti di commenti o suggerimenti richiesti sono stati applicati correttamente.ALL_FAILED_UNKNOWN_REASON: non è stato possibile salvare tutti gli aggiornamenti di commenti o suggerimenti richiesti, anche se le modifiche al modello di Documenti potrebbero essere state eseguite.