Làm việc với các đề xuất

Google Tài liệu cho phép cộng tác viên đưa ra đề xuất. Đây là những nội dung chỉnh sửa bị hoãn lại một cách hiệu quả và đang chờ phê duyệt.

Khi bạn dùng phương thức documents.get để tìm nạp nội dung tài liệu, nội dung đó có thể bao gồm cả những đề xuất chưa được giải quyết. Để kiểm soát cách documents.get biểu thị các đề xuất, hãy sử dụng tham số SuggestionsViewMode không bắt buộc. Bạn có thể sử dụng các điều kiện lọc sau đây với thông số này:

  • Nhận nội dung bằng SUGGESTIONS_INLINE, để văn bản đang chờ xoá hoặc chèn xuất hiện trong tài liệu.
  • Xem trước nội dung khi tất cả đề xuất đã được chấp nhận.
  • Nhận nội dung dưới dạng bản xem trước, không có đề xuất, với tất cả đề xuất bị từ chối.

Nếu bạn không cung cấp SuggestionsViewMode, Google Docs API sẽ sử dụng chế độ cài đặt mặc định phù hợp với đặc quyền của người dùng hiện tại.

Đề xuất và chỉ mục

Một lý do khiến SuggestionsViewMode trở nên quan trọng là các chỉ mục trong phản hồi có thể thay đổi tuỳ thuộc vào việc có đề xuất hay không, như minh hoạ bên dưới.

Nội dung có đề xuất Nội dung không có đề xuất
{
 "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"
        }
       }
      }
     ]
    }
   }
  }
 ]
},

Trong câu trả lời ở trên, đoạn văn có dòng "Text following the suggestion" (Văn bản theo đề xuất) cho thấy sự khác biệt khi sử dụng SuggestionsViewMode. Khi giá trị được đặt thành SUGGESTIONS_INLINE, startIndex của ParagraphElement bắt đầu ở 51 và endIndex dừng ở 81. Nếu không có đề xuất, phạm vi startIndexendIndex sẽ từ 32 đến 62.

Xem nội dung mà không có đề xuất

Mẫu mã sau đây cho thấy cách nhận một tài liệu dưới dạng bản xem trước với tất cả các đề xuất bị từ chối (nếu có) bằng cách đặt tham số SuggestionsViewMode thành 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()
)

Việc bỏ qua tham số SuggestionsViewMode tương đương với việc cung cấp DEFAULT_FOR_CURRENT_ACCESS làm giá trị tham số.

Đề xuất về phong cách

Tài liệu cũng có thể có đề xuất về kiểu. Đây là những thay đổi đề xuất về định dạng và cách trình bày, chứ không phải thay đổi về nội dung.

Không giống như việc chèn hoặc xoá văn bản, những thay đổi này không bù đắp chỉ mục (mặc dù có thể chia TextRun thành các phần nhỏ hơn), mà chỉ thêm chú thích về thay đổi kiểu được đề xuất.

Một chú thích như vậy là SuggestedTextStyle, bao gồm 2 phần:

  • textStyle mô tả cách văn bản được tạo kiểu sau khi thay đổi được đề xuất, nhưng không cho biết nội dung đã thay đổi.

  • textStyleSuggestionState, cho biết cách đề xuất thay đổi các trường của textStyle.

Bạn có thể thấy thông tin này trong đoạn trích thẻ tài liệu sau đây, bao gồm cả một thay đổi về kiểu được đề xuất:

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

Trong mẫu ở trên, đoạn văn bao gồm 3 đoạn văn bản, bắt đầu từ dòng 6, 14 và 50. Kiểm tra chuỗi văn bản ở giữa:

  • Dòng 16: Có một đối tượng suggestedTextStyleChanges.
  • Dòng 18: textStyle chỉ định nhiều định dạng.
  • Dòng 36: textStyleSuggestionState cho biết rằng chỉ phần in đậm của quy cách này là đề xuất.
  • Dòng 42: Kiểu chữ nghiêng của đoạn văn bản này là một phần của tài liệu hiện tại (và không bị ảnh hưởng bởi đề xuất).

Chỉ những tính năng kiểu được đặt thành true trong textStyleSuggestionState mới thuộc đề xuất.