【发布时间】:2018-08-21 17:53:44
【问题描述】:
我在应用程序脚本中编写了一个原型函数
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);
}
}
使用 python 我能够传递这些 objectsArray 的列表,如下所示:
a_replace = {"toReplace": "A", "targetText": "object_a"};
b_replace = {"toReplace": "B", "targetText": "object_b"};
c_replace = {"toReplace": "C", "targetText": "object_c"};
request = {"function": "replaceWithObjects", "parameters": [poc_doc_id, [a_replace,b_replace,c_replace]]}
但是,对于 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;
}
我尝试将列表中的对象作为 json 字符串传递,或者实现 Serializable 类:
public static class Replace extends Object implements Serializable {
public String toReplace;
public String targetText;
public Replace(String toReplace, String targetText) {
this.toReplace = toReplace;
this.targetText = targetText;
}
public String getToReplace() {
return toReplace;
}
public String getTargetText() {
return targetText;
}
}
但无济于事。 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]
python尝试方法的执行脚本:
[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]
【问题讨论】:
标签: java python function object google-apps-script