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

我正在尝试使用 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 中相同:

问题二:

当我在请求中包含查询字符串参数时 url 我收到 400 错误请求。 同样,同样适用于 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; }

    }

使用 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