คู่มือนี้อธิบายวิธีเขียนบันทึกและข้อความแสดงข้อผิดพลาดที่กำหนดเองซึ่งช่วย แก้ปัญหาขั้นตอนที่ทำงานไม่สำเร็จในแท็บกิจกรรมของ Workspace Studio
โดยค่าเริ่มต้น แท็บกิจกรรมจะบันทึกชื่อของขั้นตอนที่เรียกใช้ตามที่กำหนดไว้ใน ไฟล์ Manifest คุณควรเขียนบันทึกที่กำหนดเองสำหรับขั้นตอนด้วยเพื่อช่วยให้เข้าใจสิ่งที่เกิดขึ้นระหว่างการเรียกใช้ขั้นตอน หากผู้ใช้พบพฤติกรรมที่ไม่คาดคิดขณะเรียกใช้ขั้นตอนของคุณ บันทึกจะช่วยให้ผู้ใช้เข้าใจสิ่งที่เกิดขึ้นได้
รายการบันทึกที่เป็นประโยชน์จะมีแอตทริบิวต์ 2 รายการ ดังนี้
- ชิปที่มีไฮเปอร์ลิงก์ไปยังทรัพยากรที่ขั้นตอนสร้างหรืออัปเดต เช่น หากขั้นตอนของคุณสร้าง Google เอกสาร ให้ใช้ชิปเพื่อ ลิงก์ไปยัง Google เอกสารที่สร้างขึ้น
- ข้อความแสดงข้อผิดพลาดโดยละเอียดที่อธิบายสาเหตุที่ขั้นตอนทำงานไม่สำเร็จและวิธี แก้ไขปัญหา
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีที่ onExecuteFunctionCreateDocument() สามารถบันทึกการทำงานที่สำเร็จและข้อผิดพลาดไปยังแท็บกิจกรรม
ไฟล์ Manifest มีดังนี้
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Log and Error Demo",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/gsuite_addons/v6/web-24dp/logo_gsuite_addons_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "log_and_error_demo",
"state": "ACTIVE",
"name": "Log and Error Demo",
"description": "Display a log message when executed successfully, display a error message and retry execution instead.",
"workflowAction": {
"inputs": [
{
"id": "value1",
"description": "value1",
"cardinality": "SINGLE",
"dataType": {
"basicType": "INTEGER"
}
}
],
"outputs": [
{
"id": "result",
"description": "execution result",
"cardinality": "SINGLE",
"dataType": {
"basicType": "STRING"
}
}
],
"onConfigFunction": "onConfigFunctionCreateDocument",
"onExecuteFunction": "onExecuteFunctionCreateDocument"
}
}
]
}
}
}
โค้ดตรรกะของแอปพลิเคชันมีดังนี้
Apps Script
function onConfigFunctionCreateDocument() {
const firstInput = CardService.newTextInput()
.setFieldName("value1")
.setTitle("First Value") //"FieldName" must match an "id" in the manifest file's inputs[] array.
.setHint("Input 1 to successfully execute the step, 0 to fail the step and return an error.")
.setHostAppDataSource(
CardService.newHostAppDataSource()
.setWorkflowDataSource(
CardService.newWorkflowDataSource()
.setIncludeVariables(true)
)
);
let cardSection = CardService.newCardSection()
.addWidget(firstInput);
return CardService.newCardBuilder()
.addSection(cardSection)
.build();
}
function onExecuteFunctionCreateDocument(event) {
// true if the document is successfully created, false if something goes wrong.
var successfulRun = event.workflow.actionInvocation.inputs["value1"].integerValues[0];
console.log("The user input is: ", successfulRun);
// If successful, return an activity log linking to the created document.
if (successfulRun == 1) {
let logChip = AddOnsResponseService.newTextFormatChip()
.setTextFormatIcon(
AddOnsResponseService.newTextFormatIcon()
.setMaterialIconName("edit_document")
)
.setUrl("https://docs.google.com/document/d/{DOCUMENT}")
.setLabel("Mock Document");
let output = AddOnsResponseService.newVariableData()
.addStringValue("Created Google Doc");
const workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.addVariableData("result", output)
// Set the user-facing error log
.setLog(
AddOnsResponseService.newWorkflowTextFormat()
.addTextFormatElement(
AddOnsResponseService.newTextFormatElement()
.setText("Created Google Doc")
)
.addTextFormatElement(
AddOnsResponseService.newTextFormatElement()
.setTextFormatChip(logChip)
)
.addTextFormatElement(
AddOnsResponseService.newTextFormatElement()
.setText("Created doc detailing how to improve product.")
)
);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
// Otherwise, return an activity log containing an error explaining what happened and how to resolve the issue.
else {
let errorChip = AddOnsResponseService.newTextFormatChip()
.setTextFormatIcon(
AddOnsResponseService.newTextFormatIcon()
.setMaterialIconName("file_open")
)
.setLabel("Mock Document");
const workflowAction = AddOnsResponseService.newReturnElementErrorAction()
.setErrorActionability(AddOnsResponseService.ErrorActionability.ACTIONABLE)
.setErrorRetryability(AddOnsResponseService.ErrorRetryability.NOT_RETRYABLE)
// Set the user-facing error log
.setErrorLog(
AddOnsResponseService.newWorkflowTextFormat()
.addTextFormatElement(
AddOnsResponseService.newTextFormatElement()
.setText("Failed to create Google Doc.")
)
.addTextFormatElement(
AddOnsResponseService.newTextFormatElement()
.setTextFormatChip(errorChip)
)
.addTextFormatElement(
AddOnsResponseService.newTextFormatElement()
.setText("Unable to create Google Document because OAuth verification failed. Grant one of these authorization scopes and try again: https://www.googleapis.com/auth/documents, \nhttps://www.googleapis.com/auth/drive, \nhttps://www.googleapis.com/auth/drive.file")
)
);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
return AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
}
}