通过Java/Python将dto传递给Google Apps脚本方法

通过Java/Python将dto传递给Google Apps脚本方法,java,python,function,object,google-apps-script,Java,Python,Function,Object,Google Apps Script,我已经在应用程序脚本中编写了一个原型函数 function replaceWithObjects(documentId, objectsArray) { Logger.log("replaceWithObjects call: documentId:" + documentId + " objectsArray:" + objectsArray); var body = DocumentApp.openById(documentId).getBody(); var length =

我已经在应用程序脚本中编写了一个原型函数

function replaceWithObjects(documentId, objectsArray) {
  Logger.log("replaceWithObjects call: documentId:" + documentId + " objectsArray:" + objectsArray);
  var body = DocumentApp.openById(documentId).getBody();
  var length = objectsArray.length;
  for (i = 0; i < length; i++) {
    var toReplace = '#{' + objectsArray[i].toReplace + '}';
    var targetText = objectsArray[i].targetText;
    Logger.log("To replace: " + toReplace + " with: " + targetText);
    body.replaceText(toReplace, targetText);
  } 
}
但是,对于Java及其ExecutionRequest对象,在使用其setParameters方法设置对象列表时,我无法执行相同的操作

private static ExecutionRequest getExecutionRequest(String function, List<Object> parameters) {
        ExecutionRequest executionRequest = new ExecutionRequest().setFunction(function);
        if (parameters != null && !parameters.isEmpty()) {
            executionRequest.setParameters(parameters);
        }
        return executionRequest;
    }
但是没有用。python的使用能够使.toReplace和.targetText提供正确的值,但java方面仍然存在挑战。文档建议:“只能传递和返回基本类型,如字符串、数组、对象、数字和布尔值。”并且还没有找到传递对象的java示例。如果像python的概念验证一样支持对象传递,那么我在Java方面还缺少什么呢

Java尝试该方法的执行记录:

[18-08-21 10:38:13:109 PDT] Starting execution
[18-08-21 10:38:13:116 PDT] Logger.log([replaceWithObjects call: documentId:1mfwAj_egf_00TrgP_ztjnr7zYJVc4rTy4vd140MvBwE objectsArray:[object Object],[object Object],[object Object], []]) [0 seconds]
[18-08-21 10:38:13:394 PDT] DocumentApp.openById([1mfwAj_egf_00TrgP_ztjnr7zYJVc4rTy4vd140MvBwE]) [0.276 seconds]
[18-08-21 10:38:13:394 PDT] Document.getBody() [0 seconds]
[18-08-21 10:38:13:395 PDT] Logger.log([To replace: #{undefined} with: undefined, []]) [0 seconds]
[18-08-21 10:38:13:396 PDT] Body.replaceText([#{undefined}, undefined]) [0 seconds]
[18-08-21 10:38:13:396 PDT] Logger.log([To replace: #{undefined} with: undefined, []]) [0 seconds]
[18-08-21 10:38:13:397 PDT] Body.replaceText([#{undefined}, undefined]) [0 seconds]
[18-08-21 10:38:13:398 PDT] Logger.log([To replace: #{undefined} with: undefined, []]) [0 seconds]
[18-08-21 10:38:13:398 PDT] Body.replaceText([#{undefined}, undefined]) [0 seconds]
[18-08-21 10:38:13:400 PDT] Execution succeeded [0.284 seconds total runtime]
[18-08-21 10:49:04:524 PDT] Starting execution
[18-08-21 10:49:04:531 PDT] Logger.log([replaceWithObjects call: documentId:18BJyN3F0khcF9B4jrW89XMGtaVpOEZ3X-1c6-KakczM objectsArray:[object Object],[object Object],[object Object], []]) [0 seconds]
[18-08-21 10:49:04:576 PDT] DocumentApp.openById([18BJyN3F0khcF9B4jrW89XMGtaVpOEZ3X-1c6-KakczM]) [0.044 seconds]
[18-08-21 10:49:04:577 PDT] Document.getBody() [0 seconds]
[18-08-21 10:49:04:578 PDT] Logger.log([To replace: #{A} with: object_a, []]) [0 seconds]
[18-08-21 10:49:04:579 PDT] Body.replaceText([#{A}, object_a]) [0 seconds]
[18-08-21 10:49:04:579 PDT] Logger.log([To replace: #{B} with: object_b, []]) [0 seconds]
[18-08-21 10:49:04:580 PDT] Body.replaceText([#{B}, object_b]) [0 seconds]
[18-08-21 10:49:04:581 PDT] Logger.log([To replace: #{C} with: object_c, []]) [0 seconds]
[18-08-21 10:49:04:582 PDT] Body.replaceText([#{C}, object_c]) [0 seconds]
[18-08-21 10:49:04:647 PDT] Execution succeeded [0.052 seconds total runtime]
python尝试该方法的执行记录:

[18-08-21 10:38:13:109 PDT] Starting execution
[18-08-21 10:38:13:116 PDT] Logger.log([replaceWithObjects call: documentId:1mfwAj_egf_00TrgP_ztjnr7zYJVc4rTy4vd140MvBwE objectsArray:[object Object],[object Object],[object Object], []]) [0 seconds]
[18-08-21 10:38:13:394 PDT] DocumentApp.openById([1mfwAj_egf_00TrgP_ztjnr7zYJVc4rTy4vd140MvBwE]) [0.276 seconds]
[18-08-21 10:38:13:394 PDT] Document.getBody() [0 seconds]
[18-08-21 10:38:13:395 PDT] Logger.log([To replace: #{undefined} with: undefined, []]) [0 seconds]
[18-08-21 10:38:13:396 PDT] Body.replaceText([#{undefined}, undefined]) [0 seconds]
[18-08-21 10:38:13:396 PDT] Logger.log([To replace: #{undefined} with: undefined, []]) [0 seconds]
[18-08-21 10:38:13:397 PDT] Body.replaceText([#{undefined}, undefined]) [0 seconds]
[18-08-21 10:38:13:398 PDT] Logger.log([To replace: #{undefined} with: undefined, []]) [0 seconds]
[18-08-21 10:38:13:398 PDT] Body.replaceText([#{undefined}, undefined]) [0 seconds]
[18-08-21 10:38:13:400 PDT] Execution succeeded [0.284 seconds total runtime]
[18-08-21 10:49:04:524 PDT] Starting execution
[18-08-21 10:49:04:531 PDT] Logger.log([replaceWithObjects call: documentId:18BJyN3F0khcF9B4jrW89XMGtaVpOEZ3X-1c6-KakczM objectsArray:[object Object],[object Object],[object Object], []]) [0 seconds]
[18-08-21 10:49:04:576 PDT] DocumentApp.openById([18BJyN3F0khcF9B4jrW89XMGtaVpOEZ3X-1c6-KakczM]) [0.044 seconds]
[18-08-21 10:49:04:577 PDT] Document.getBody() [0 seconds]
[18-08-21 10:49:04:578 PDT] Logger.log([To replace: #{A} with: object_a, []]) [0 seconds]
[18-08-21 10:49:04:579 PDT] Body.replaceText([#{A}, object_a]) [0 seconds]
[18-08-21 10:49:04:579 PDT] Logger.log([To replace: #{B} with: object_b, []]) [0 seconds]
[18-08-21 10:49:04:580 PDT] Body.replaceText([#{B}, object_b]) [0 seconds]
[18-08-21 10:49:04:581 PDT] Logger.log([To replace: #{C} with: object_c, []]) [0 seconds]
[18-08-21 10:49:04:582 PDT] Body.replaceText([#{C}, object_c]) [0 seconds]
[18-08-21 10:49:04:647 PDT] Execution succeeded [0.052 seconds total runtime]

长话短说,将对象直接转换为hashmap节省了时间:

public Object asHashMap() {
            HashMap<String, String> hashMap = new HashMap<>();
            hashMap.put("toReplace", toReplace);
            hashMap.put("targetText", targetText);
            return hashMap;
        }
[18-08-21 12:09:29:338 PDT] Starting execution
[18-08-21 12:09:29:345 PDT] Logger.log([replaceWithObjects call: documentId:1rHYqdUSbfgUjAa1T4x_FxFY1sN907ClcEuFKgjKbPuA objectsArray:[object Object],[object Object],[object Object], []]) [0 seconds]
[18-08-21 12:09:29:404 PDT] DocumentApp.openById([1rHYqdUSbfgUjAa1T4x_FxFY1sN907ClcEuFKgjKbPuA]) [0.058 seconds]
[18-08-21 12:09:29:405 PDT] Document.getBody() [0 seconds]
[18-08-21 12:09:29:406 PDT] Logger.log([To replace: #{A} with: hashmap_a, []]) [0 seconds]
[18-08-21 12:09:29:407 PDT] Body.replaceText([#{A}, wiggle_a]) [0 seconds]
[18-08-21 12:09:29:407 PDT] Logger.log([To replace: #{B} with: hashmap_b, []]) [0 seconds]
[18-08-21 12:09:29:408 PDT] Body.replaceText([#{B}, luke_b]) [0 seconds]
[18-08-21 12:09:29:408 PDT] Logger.log([To replace: #{C} with: hashmap_c, []]) [0 seconds]
[18-08-21 12:09:29:409 PDT] Body.replaceText([#{C}, insane_c]) [0 seconds]
[18-08-21 12:09:29:490 PDT] Execution succeeded [0.065 seconds total runtime]