Google apps script 如何将Google应用程序脚本项目迁移到不同的帐户?

Google apps script 如何将Google应用程序脚本项目迁移到不同的帐户?,google-apps-script,Google Apps Script,有没有什么简单快捷的方法可以将Google应用程序脚本项目迁移到另一个帐户 假设我为一个客户机处理一个项目,一旦它准备好了,我就想迁移它。但是这个脚本连接到GoogleSheets,还有一个时间触发器。该项目还充当web应用程序 我认为,如果客户创建了一个项目,并与我共享该项目,并授权脚本通过自己运行脚本来访问Google工作表,这将解决“迁移”问题。但它看起来不像。当我运行脚本时,它也会要求我授权对工作表的访问。我不知道它将如何与触发器和web应用程序一起工作 有人能解释一下吗?如何确保项目最

有没有什么简单快捷的方法可以将Google应用程序脚本项目迁移到另一个帐户

假设我为一个客户机处理一个项目,一旦它准备好了,我就想迁移它。但是这个脚本连接到GoogleSheets,还有一个时间触发器。该项目还充当web应用程序

我认为,如果客户创建了一个项目,并与我共享该项目,并授权脚本通过自己运行脚本来访问Google工作表,这将解决“迁移”问题。但它看起来不像。当我运行脚本时,它也会要求我授权对工作表的访问。我不知道它将如何与触发器和web应用程序一起工作


有人能解释一下吗?如何确保项目最终以最终客户权限运行,使用他们的配额等?

有多个要点需要讨论:

  • 当我在共享项目中设置触发器时,会发生什么
  • 在共享项目中部署时,使用的配额是谁
  • 如何更容易地设置它
  • 这是一个很好的关于何时执行哪些权限的概述

    1.当我在共享项目中设置触发器时,会发生什么? 引述:

    当您在项目上协作时,您创建的任何可安装触发器都不会与那些有权访问您的项目的人共享。[……]

    所以基本上,如果你制作了一个可安装的触发器,它会在你使用配额时执行

    2.在共享项目中部署时,使用的配额是谁? :

    您可以使用共享驱动器在web应用程序上进行协作。部署共享中的web应用时,选择“随您执行”会导致web应用在部署它的用户的权限下执行(因为没有脚本所有者)

    3.如何更容易地设置它? 您可以使用
    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
    执行此操作)

    <