Utiliser les suggestions

Google Docs permet aux collaborateurs de faire des suggestions, qui sont en fait des modifications différées en attente d'approbation.

Lorsque vous utilisez la méthode documents.get pour récupérer le contenu d'un document, celui-ci peut inclure des suggestions non résolues. Pour contrôler la façon dont documents.get représente les suggestions, utilisez le paramètre facultatif SuggestionsViewMode. Les conditions de filtre suivantes sont disponibles avec ce paramètre :

  • Obtenez du contenu avec SUGGESTIONS_INLINE pour que le texte en attente de suppression ou d'insertion s'affiche dans le document.
  • Obtenez un aperçu du contenu avec toutes les suggestions acceptées.
  • Obtenez un aperçu du contenu, sans suggestions, toutes les suggestions étant refusées.

Si vous ne fournissez pas SuggestionsViewMode, l'API Google Docs utilise un paramètre par défaut adapté aux droits d'accès de l'utilisateur actuel.

Suggestions et index

L'une des raisons pour lesquelles SuggestionsViewMode est important est que les index de la réponse peuvent varier selon qu'il y a des suggestions ou non, comme indiqué ci-dessous.

Contenu avec suggestions Contenu sans suggestions
{
 "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"
        }
       }
      }
     ]
    }
   }
  }
 ]
},

Dans la réponse ci-dessus, le paragraphe contenant la ligne "Texte suivant la suggestion" montre la différence lorsque vous utilisez SuggestionsViewMode. Si la valeur est définie sur SUGGESTIONS_INLINE, le startIndex de ParagraphElement commence à 51 et le endIndex s'arrête à 81. Sans suggestions, les valeurs startIndex et endIndex sont comprises entre 32 et 62.

Obtenir du contenu sans suggestions

L'exemple de code partiel suivant montre comment obtenir un aperçu d'un document avec toutes les suggestions refusées (le cas échéant) en définissant le paramètre SuggestionsViewMode sur 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()
)

Omettre le paramètre SuggestionsViewMode équivaut à fournir DEFAULT_FOR_CURRENT_ACCESS comme valeur de paramètre.

Suggestions de style

Les documents peuvent également contenir des suggestions de style. Il s'agit de suggestions de modifications de la mise en forme et de la présentation, et non du contenu.

Contrairement aux insertions ou suppressions de texte, elles ne décalent pas les index (bien qu'elles puissent diviser un TextRun en plus petits morceaux), mais ajoutent simplement des annotations sur le changement de style suggéré.

Une de ces annotations est SuggestedTextStyle, qui se compose de deux parties :

  • Le textStyle décrit le style du texte après la modification suggérée, mais ne précise pas ce qui a changé.

  • textStyleSuggestionState, qui indique comment la suggestion modifie les champs de textStyle.

Vous pouvez le voir dans l'extrait suivant de l'onglet "Document", qui inclut une modification de style suggérée :

[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] }

Dans l'exemple ci-dessus, le paragraphe se compose de trois séries de texte, qui commencent aux lignes 6, 14 et 50. Examinez l'exécution du texte au milieu :

  • Ligne 16 : il existe un objet suggestedTextStyleChanges.
  • Ligne 18 : textStyle spécifie différentes mises en forme.
  • Ligne 36 : textStyleSuggestionState indique que seule la partie en gras de cette spécification était la suggestion.
  • Ligne 42 : la mise en italique de cette série de texte fait partie du document actuel (et n'est pas affectée par la suggestion).

Seules les caractéristiques de style définies sur true dans textStyleSuggestionState font partie de la suggestion.