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 中同样有效的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 查询 Maximo 域?

Maximo Anywhere 搜索 WO

Maximo/Oracle SQL 语句从连接表中返回不需要的数据

IBM Maximo - 转到自定义应用程序(提供 Where 子句)

如何以编程方式在谷歌云运行 api 中获取当前项目 ID

Spring Security 3 以编程方式登录