MAXIMO API 7.6.1 POST 以编程方式创建服务请求创建空记录,但在 POSTMAN 中同样有效
Posted
技术标签:
【中文标题】MAXIMO API 7.6.1 POST 以编程方式创建服务请求创建空记录,但在 POSTMAN 中同样有效【英文标题】:MAXIMO API 7.6.1 POST to create service requests programmatically creates null records, but the same work in POSTMAN 【发布时间】:2019-11-17 14:41:19 【问题描述】:我正在尝试使用 MAXIMO 7.6.1 API 以编程方式通过 POST 请求在 MAXIMO 中创建请求。
问题一:
问题是,尽管 POST 是成功的,即我得到了 201。
只创建空记录。
但是,使用 POSTMAN 完成相同的请求时效果很好。
这是我的程序化实现:
var jsonData = JsonConvert.SerializeObject(somemodel);
string MaximoUrl = @"someurl/maxrest/oslc/os/mxapisr";
WebRequest request = (HttpWebRequest)WebRequest.Create(MaximoUrl);
request.Headers["authheaderkey"] = "authheadervalue";
request.Headers["properties"] = "*";
request.Method = "POST";
request.ContentType = "application/json";
using (var RequestStream = new StreamWriter(request.GetRequestStream()))
RequestStream.Write(jsonData);
string ResponseResult;
HttpWebResponse RequestResponse = (HttpWebResponse)request.GetResponse();
using (var ResponseReader = new StreamReader(RequestResponse.GetResponseStream()))
ResponseResult = ResponseReader.ReadToEnd();
上面创建了一条记录,但是创建了空记录。
在 POSTMAN 中也是如此:
问题 2:
当我在请求 url 中包含查询字符串参数时,我收到 400 Bad Request。 同样,在 POSTMAN 中也是如此。
这行得通:
string MaximoUrl = @"someurl/maxrest/oslc/os/mxapisr";
这不是:
string MaximoUrl = @"someurl/maxrest/oslc/os/mxapisr?lean=1";
我认为这是 MAXIMO 如何理解请求的问题。
正在发送的模型:
public class obj
public Int64 ticketuid get; set;
public string ticketid get; set;
public string description get; set;
public string reportedby get; set;
public int rc get; set;
public string workt get; set;
public string ownergroup get; set;
public string siteid get; set;
public string reportedemail get; set;
public string affectedemail get; set;
public DateTime? changedate get; set;
public DateTime? affecteddate get; set;
public DateTime? reportdate get; set;
public DateTime? statusdate get; set;
public DateTime? desireddate get; set;
public string description_longdescription get; set;
public string assetnum get; set;
public string location get; set;
public string status get; set;
【问题讨论】:
我假设您正确使用 MAXAUTH 标头道具进行身份验证? developer.ibm.com/static/site-id/155/maximodev/restguide/… 看起来 Maximo 无法将请求正文中的字段映射到您的 Maximo 对象结构中包含的字段,从而创建一个空记录。将正文添加到问题的详细信息中会有所帮助。 我能够通过 API 在 maximo 中成功验证并创建请求。问题出在正文中,我给出的 JSON 正文没有反映。仅创建空记录。 如果您不提供lean=1 参数,Maximo 将查找每个字段的命名空间,这可能是每个字段都以null 结尾的原因。 @JPTremblay lean=1 成功了,真不敢相信我怎么会错过它:)如果你写一个答案,我可以接受:)非常感谢! 【参考方案1】:当使用 Maximo REST API 在 Maximo 中创建对象时,不要忘记使用 lean 标志。如果您不指定此参数,则需要在请求正文中使用其命名空间来限定每个属性。
不带 lean 标志的示例:
http://maximohost/maximo/oslc/os/MXASSET
如果没有精益标志,您需要为每个属性提供命名空间:
"spi:assetnum": "PUMP01",
"spi:description": "Some Pump",
"spi:siteid": "BEDFORD"
如果您不提供命名空间限定符,您将获得空记录,因为 Maximo 无法将请求正文中的任何属性与对象结构的定义进行映射。
此外,请确保您要设置的属性未在对象结构级别排除。
参考:https://developer.ibm.com/static/site-id/155/maximodev/restguide/Maximo_Nextgen_REST_API.html
【讨论】:
是的,我可以同意这个答案。我们遇到了类似的问题,这让我们有一段时间摸不着头脑。尤其是因为 maximo 不会给您任何有意义的错误(或任何错误!) 刚刚为我工作!谢谢,IBM,像往常一样提供可怕的错误消息!大声笑以上是关于MAXIMO API 7.6.1 POST 以编程方式创建服务请求创建空记录,但在 POSTMAN 中同样有效的主要内容,如果未能解决你的问题,请参考以下文章
Maximo/Oracle SQL 语句从连接表中返回不需要的数据