Google apps script 如何将Google应用程序脚本项目迁移到不同的帐户?
有没有什么简单快捷的方法可以将Google应用程序脚本项目迁移到另一个帐户 假设我为一个客户机处理一个项目,一旦它准备好了,我就想迁移它。但是这个脚本连接到GoogleSheets,还有一个时间触发器。该项目还充当web应用程序 我认为,如果客户创建了一个项目,并与我共享该项目,并授权脚本通过自己运行脚本来访问Google工作表,这将解决“迁移”问题。但它看起来不像。当我运行脚本时,它也会要求我授权对工作表的访问。我不知道它将如何与触发器和web应用程序一起工作Google apps script 如何将Google应用程序脚本项目迁移到不同的帐户?,google-apps-script,Google Apps Script,有没有什么简单快捷的方法可以将Google应用程序脚本项目迁移到另一个帐户 假设我为一个客户机处理一个项目,一旦它准备好了,我就想迁移它。但是这个脚本连接到GoogleSheets,还有一个时间触发器。该项目还充当web应用程序 我认为,如果客户创建了一个项目,并与我共享该项目,并授权脚本通过自己运行脚本来访问Google工作表,这将解决“迁移”问题。但它看起来不像。当我运行脚本时,它也会要求我授权对工作表的访问。我不知道它将如何与触发器和web应用程序一起工作 有人能解释一下吗?如何确保项目最
有人能解释一下吗?如何确保项目最终以最终客户权限运行,使用他们的配额等?有多个要点需要讨论:
ScriptApp
设置触发器,并使用应用程序脚本API进行部署。这将重复配置GCP并手动设置项目清单()。下面是我编写的一段代码,它在所有设置都正确时起作用:
//
//此文件用于轻松设置项目。
//
/**
*删除所有已安装的触发器,并使其在列表中
*/
函数remakeTriggers(){
//为此用户删除此项目的所有触发器
ScriptApp.getProjectTriggers().forEach(触发器=>ScriptApp.deleteTrigger(触发器))
//重拍触发器
//根据需要更改以设置所需的触发器
ScriptApp.newTrigger('myTimer')
.基于时间的()
.atHour(2)
.每天(1)
.create()
ScriptApp.newTrigger('myTimer')
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
.onEdit()
.create()
}
const DEPLOYMENT_ID_KEY='deploymentId'
/**
*将此脚本部署为WebApp。
*/
函数部署(){
常量属性=PropertiesService.getScriptProperties()
常量版本=新版本
const deploymentId=properties.getProperty(部署ID密钥)
如果(!deploymentId){
log(`Creating new deployment to version${version.versionNumber}`)
const deployment=newDeploy(version.versionNumber)
properties.setProperty(部署\u ID\u键,部署.deploymentId)
}否则{
log(`Updating deployment to version${version.versionNumber}`)
updateDeploy(deploymentId,version.versionNumber)
}
}
/**
*制作一个新版本。
*/
函数newVersion_u389;(){
const response=UrlFetchApp.fetch(
`https://script.googleapis.com/v1/projects/${ScriptApp.getScriptId()}/versions`,
{
方法:“POST”,
muteHttpExceptions:true,
标题:{
'Authorization':`Bearer${ScriptApp.getOAuthToken()}`
},
},
)
返回parseResponse(响应)
}
/**
*进行新的部署
*/
函数newDeploy(版本号){
const response=UrlFetchApp.fetch(
`https://script.googleapis.com/v1/projects/${ScriptApp.getScriptId()}/deployments`,
{
方法:“POST”,
有效负载:JSON.stringify({versionNumber}),
contentType:'application/json;charset=utf-8',
标题:{
'Authorization':`Bearer${ScriptApp.getOAuthToken()}`
},
muteHttpExceptions:true,
},
)
返回parseResponse(响应)
}
/**
*重新部署
*/
函数updateDeploy(部署ID,版本号){
const response=UrlFetchApp.fetch(
`https://script.googleapis.com/v1/projects/${ScriptApp.getScriptId()}/deployments/${deploymentId}`,
{
方法:'放',
有效负载:JSON.stringify({
部署配置:{
版本号
}
}),
contentType:'application/json;charset=utf-8',
标题:{
'Authorization':`Bearer${ScriptApp.getOAuthToken()}`
},
muteHttpExceptions:true,
},
)
返回parseResponse(响应)
}
/**
*Helper函数解析获取的JSON响应。处理错误。
*
*@param{UrlFetchApp.HTTPResponse}对解析的响应
*@returns{Object}解析的JSON响应
*/
函数parseResponse(响应){
const result=response.getContentText()
常量代码=response.getResponseCode()
如果(代码<200 | |代码>=400){
投掷结果
}
返回JSON.parse(结果)
}
请记住更改remakeTriggers
,以便它创建所需的触发器
我的清单是这样的:
{
[…]
“oauthScopes”:[
"https://www.googleapis.com/auth/spreadsheets.currentonly",
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/script.projects",
"https://www.googleapis.com/auth/script.deployments"
],
“网络应用”:{
“访问”:“任何人”,
“executeAs”:“用户\部署”
}
}
请注意,我们正在这里配置webapp
(无法通过API进行配置),需要手动定义OAuth2作用域。设置好所有内容后,最终用户只需转到脚本文件并根据需要执行功能(remakeTriggers
重新生成触发器,然后deploy
执行此操作)
<