Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何执行数据传输API?_Google Apps Script_Google Admin Sdk_Google Data Api - Fatal编程技术网

Google apps script 如何执行数据传输API?

Google apps script 如何执行数据传输API?,google-apps-script,google-admin-sdk,google-data-api,Google Apps Script,Google Admin Sdk,Google Data Api,我有几个账户需要将所有权转移到另一个账户。我在谷歌表单上列出了所有的电子邮件地址。我希望使用下面的代码来执行它,但我不确定使用什么来执行代码 我感谢你的时间和帮助!蒂亚 function dataTransfer() { var ss = SpreadsheetApp.openById("SHEETID") var sheet = ss.getSheetByName("SHEETNAME"); var start = 2

我有几个账户需要将所有权转移到另一个账户。我在谷歌表单上列出了所有的电子邮件地址。我希望使用下面的代码来执行它,但我不确定使用什么来执行代码

我感谢你的时间和帮助!蒂亚

function dataTransfer() {
      var ss = SpreadsheetApp.openById("SHEETID")
      var sheet = ss.getSheetByName("SHEETNAME");
      var start = 2;
      var end = sheet.getLastRow();
      
      var range = sheet.getRange(start,1,end,sheet.getLastColumn());
      var values = range.getValues();
      
      for (var i = 0; i < values.length-1; i++) {
        
        /* transfer the data ownership to */
        var A = "aUser@company1.com";
        var B = "bUser@company1.com";
        var C = "cUser@company1.com";
       
        var email = values[i][0];
        var company = values[i][1];
        var status = values[i][3];
        
        if (status === "Complete") {continue;}
        
        if (company == "A") {
            /* transfer of the ownership of user data between users. */
          var transferObject = {
            "kind": "admin#datatransfer#DataTransfer",
            "oldOwnerUserId": email,
            "newOwnerUserId": A,
            "applicationDataTransfers": [
              {
                "applicationId": XXXXXX,
                "applicationTransferParams": [{
                  "key": "PRIVACY_LEVEL",
                  "value": [
                    "PRIVATE",
                    "SHARED"
                  ]
                }],     
              "applicationId": XXXXX,
                "applicationTransferParams": [{
                  "key": "RELEASE_RESOURCES",
                  "value": true
                }],
              }],
          }
          **admin.datatransfer....** /* what do I use here to execute the above code */
          sheet.getRange(start+i,4,1,1).setValue("Complete");      
        }
    }
  }
}
函数数据传输(){
var ss=电子表格应用程序openById(“SHEETID”)
var sheet=ss.getSheetByName(“SHEETNAME”);
var启动=2;
var end=sheet.getLastRow();
var range=sheet.getRange(开始、1、结束、sheet.getLastColumn());
var values=range.getValues();
对于(变量i=0;i
回答: 使用
UrlFetchApp
您需要向
https://admin.googleapis.com/admin/datatransfer/v1/transfers
。您必须设置一个GCP项目,并启用数据传输API来实现这一点

更多信息: 使用数据传输API的先决条件,根据州(我自己的重点):

在使用数据传输API之前,您需要以下基本配置:

  • 拥有Google帐户并创建管理员。该API适用于Google Workspace、教育、政府、分销商和ISP帐户
  • 熟悉Admin.Google.com上的Google Workspace管理控制台。有关管理控制台的更多信息,请参阅使用管理控制台
  • 从Google Workspace管理控制台启用API访问,以便向数据传输API发出请求。
您可以通过转到上菜单栏上的
googlecloudplatform
旁边的下拉菜单并从中创建一个新项目来完成此操作

然后,使用汉堡包菜单遵循
≡ > API和服务>库
并搜索
管理SDK API
。单击匹配结果,然后在新页面上单击启用按钮

接下来,您需要将此GCP项目链接到您的应用程序脚本项目

返回汉堡包菜单,按照
≡ > 主页>仪表板
并复制项目信息
区域下显示的12位项目编号

回到您的脚本,按照
资源>云平台项目…
菜单项,粘贴12位数字,然后单击
设置项目。这将通过启用的API将应用程序脚本项目链接到新创建的GCP项目

您现在可以安全地关闭此模式

根据以下文件:

插入数据传输请求

HTTP请求
POSThttps://admin.googleapis.com/admin/datatransfer/v1/transfers

请求主体 请求主体包含的实例

代码: 首先,作为一个快速代码修复程序,
applicationDataTransfers/applicationTransferParams/value
需要是,因此应该是:

"applicationId": XXXXX,
  "applicationTransferParams": [
    {
      "key": "RELEASE_RESOURCES",
      "value": [
        "TRUE"
      ]
    }
  ],
// ...
除此之外,
oldOwnerUserId
newOwnerUserId
值必须是从端点获得的用户ID值。谷歌电子邮件地址无法替代此地址。完整的请求示例如下:

var payload = {
  "kind": "admin#datatransfer#DataTransfer",
  "oldOwnerUserId": "113412843513541354193",
  "newOwnerUserId": "118387348413214353832",
  "applicationDataTransfers": [
    {
      "applicationId": "14186345432",
      "applicationTransferParams": [
        {
          "key": "PRIVACY_LEVEL",
          "value": [
            "PRIVATE",
            "SHARED"
          ]
        }
      ]
    },
    {
      "applicationId": "546343454353",
      "applicationTransferParams": [
        {
          "key": "RELEASE_RESOURCES",
          "value": [
            "TRUE"
          ]
        }
      ]
    }
  ]
}
关于发出
HTTP
请求:

consturl=”https://admin.googleapis.com/admin/datatransfer/v1/transfers"; 
变量头={
“授权”:“承载者”+ScriptApp.getOAuthToken(),
};
变量选项={
“方法”:“发布”,
“标题”:标题,
“contentType”:“application/json”,
“有效载荷”:JSON.stringify(有效载荷)
};    
重要注意事项:当您将脚本的令牌作为OAuth令牌直接使用API时,您需要使用所需的作用域更新应用程序脚本清单

按照
View>Show manifest file
菜单项,将您的作用域添加到项目中。完整清单文件应如下所示:

{
  "timeZone": "Europe/Paris",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/admin.datatransfer"
  ]
}
脚本.external_请求
是必需的,因此您可以调用
UrlFetchApp
,而
admin.datatransfer
是调用目录插入端点所需的作用域

我希望这对你有帮助

参考资料:

谢谢你,拉法。我感谢您的回复,并将按照概述的说明进行操作。我希望我能够毫无问题地执行它。