Rally API创建ConversationPost
通过下面的代码,我试图为这个功能创建新的对话帖子。但是它说 由于I/O错误,无法将输入流解析为JSON文档:解析错误:应为“{”但为“saw”' [字符读取=>>> Logger.log(错误)); } 功能选项POST(方法、有效载荷){ var rallyApiKey=“”; 如果(rallyApiKey!=“”){ PropertiesService.getScriptProperties().setProperty(“RallyApiKey”,RallyApiKey); }否则{ rallyApiKey=PropertiesService.getScriptProperties().getProperty(“rallyApiKey”); } if(rallyApiKey==null)返回null; 返回{ 标题:{“ZSESSIONID”:rallyApiKey}, 有效载荷:有效载荷, 方法:方法 }; } 我看不出有什么问题。 你能帮忙吗? 非常感谢。Rally API创建ConversationPost,api,google-apps-script,post,rally,payload,Api,Google Apps Script,Post,Rally,Payload,通过下面的代码,我试图为这个功能创建新的对话帖子。但是它说 由于I/O错误,无法将输入流解析为JSON文档:解析错误:应为“{”但为“saw”' [字符读取=>>> Logger.log(错误)); } 功能选项POST(方法、有效载荷){ var rallyApiKey=“”; 如果(rallyApiKey!=“”){ PropertiesService.getScriptProperties().setProperty(“RallyApiKey”,RallyApiKey); }否则{ r
Petr我认为从您的错误消息来看,负载可能需要作为JSON数据发送。如果我的猜测是正确的,那么下面的修改如何 修改脚本: 发件人: 致: 注:
- 在此修改中,它假定
和有效负载
的值是使用API的有效值。请注意这一点rallyApiKey
- 当上述修改不是您问题的dierct解决方案时,您能提供您想要使用的API的官方文件吗?通过这一点,我想确认一下
- 感谢您的快速响应。
有以下几点
var payload = {"ConversationPost":{"Artifact": "/portfolioitem/capability/"+objId,"Text": post}};
var method = "POST";
var options = optionsPost_(method, payload);
及
它给了我
由于JSON文档的I/O错误,无法将输入流解析为JSON文档:解析错误:预期为“{”,但看到了“h”[chars read=>>>h>{“headers”:{“ZSESSIONID”:“{YCHACSD2QZSF8KBKQ0R1YHJHUVSZUYAS0CAAPHT2A},我找不到任何差异,但这实际上已开始工作。 我相信问题是由多个错误造成的。我删除了一个问题,但可能会添加另一个问题。 下面是一个有效的代码
function createPost(objId, post) {
objId = '313878829908';
post = "<p>MindMap:Hello from GAS.</p>"
var url = "https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create";
var payload = {'ConversationPost':{'Artifact': '/portfolioitem/capability/'+objId,'Text': post}};
var method = 'POST';
//var options = optionsPost_(method, payload);
var response = UrlFetchApp.fetch(url, optionsPost_(method, payload));
var content = JSON.parse(response.getContentText());
content.CreateResult.Errors.forEach(error => Logger.log(error));
}
function optionsPost_(method, payload) {
var rallyApiKey = "";
if (rallyApiKey != "") {
PropertiesService.getScriptProperties().setProperty("RallyApiKey", rallyApiKey);
} else {
rallyApiKey = PropertiesService.getScriptProperties().getProperty("RallyApiKey");
}
if (rallyApiKey == null) return null;
var options={
'headers': {'ZSESSIONID': rallyApiKey },
'payload': JSON.stringify(payload),
'method': method,
'contentType':'application/json'
};
return options;
}
函数createPost(objId,post){
objId='313878829908';
post=“思维导图:加油站的你好。”
变量url=”https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create";
var payload={'ConversationPost':{'Artifact':'/portfolioitem/capability/'+objId,'Text':post};
var方法='POST';
//var选项=选项POST(方法、有效载荷);
var response=UrlFetchApp.fetch(url,optionsPost(方法,负载));
var content=JSON.parse(response.getContentText());
content.CreateResult.Errors.forEach(error=>Logger.log(error));
}
功能选项POST(方法、有效载荷){
var rallyApiKey=“”;
如果(rallyApiKey!=“”){
PropertiesService.getScriptProperties().setProperty(“RallyApiKey”,RallyApiKey);
}否则{
rallyApiKey=PropertiesService.getScriptProperties().getProperty(“rallyApiKey”);
}
if(rallyApiKey==null)返回null;
var期权={
'headers':{'ZSESSIONID':rallyApiKey},
“有效负载”:JSON.stringify(有效负载),
“方法”:方法,
“contentType”:“application/json”
};
返回选项;
}
谢谢塔奈克的帮助。我真的很感激。谢谢塔奈克。@Petr Sedláček感谢你的回复。我为给你带来的不便表示歉意。我注意到你将当前情况作为答案发布。我想建议将其添加到你的问题中。关于官方文件,我无法看到,因为我没有账户。对此我深表歉意。您是否有关于您想要使用的API的任何其他文档?此外,从官方文档中,我想确认请求的
有效负载
和标题
的格式。嗨,Tanaike。感谢您的快速响应。很抱歉,我没有意识到只有在登录后才能访问文档在帐户中…我没有发现它通常可用,所以我想我无法共享它。如果我找到联系人,我将尝试寻求支持。这可能会有所帮助?@Petr Sedláček感谢您的回复。现在我注意到您的问题已经解决。我很高兴。当我看到您添加的答案时,您的答案似乎与m相同y建议的答案。因此我无法理解这个问题是由错误组合造成的。
。我为自己的英语水平低下而道歉。我能问一下你添加的答案和我建议的答案之间的差异的细节吗?我想确认一下,并从中学习。
return {
headers: { "ZSESSIONID": rallyApiKey },
payload: JSON.stringify(payload),
method: method,
contentType: "application/json"
};
var payload = {"ConversationPost":{"Artifact": "/portfolioitem/capability/"+objId,"Text": post}};
var method = "POST";
var options = optionsPost_(method, payload);
var options={
headers: { "ZSESSIONID": rallyApiKey },
payload: payload,
method: method,
contentType:"application/json"
};
var options={
headers: { "ZSESSIONID": rallyApiKey },
payload: JSON.stringify(payload),
method: method,
contentType:"application/json"
};
function createPost(objId, post) {
objId = '313878829908';
post = "<p>MindMap:Hello from GAS.</p>"
var url = "https://rally1.rallydev.com/slm/webservice/v2.0/conversationpost/create";
var payload = {'ConversationPost':{'Artifact': '/portfolioitem/capability/'+objId,'Text': post}};
var method = 'POST';
//var options = optionsPost_(method, payload);
var response = UrlFetchApp.fetch(url, optionsPost_(method, payload));
var content = JSON.parse(response.getContentText());
content.CreateResult.Errors.forEach(error => Logger.log(error));
}
function optionsPost_(method, payload) {
var rallyApiKey = "";
if (rallyApiKey != "") {
PropertiesService.getScriptProperties().setProperty("RallyApiKey", rallyApiKey);
} else {
rallyApiKey = PropertiesService.getScriptProperties().getProperty("RallyApiKey");
}
if (rallyApiKey == null) return null;
var options={
'headers': {'ZSESSIONID': rallyApiKey },
'payload': JSON.stringify(payload),
'method': method,
'contentType':'application/json'
};
return options;
}