C# - OLAP TM1 的 JSON 正文参数 - 通过 RestSharp 进行补丁调用
Posted
技术标签:
【中文标题】C# - OLAP TM1 的 JSON 正文参数 - 通过 RestSharp 进行补丁调用【英文标题】:C# - JSON Body Parameter for OLAP TM1 - Patch Call via RestSharp 【发布时间】:2021-01-27 15:14:54 【问题描述】:我正在编写一个 C# 框架来与 IBM 的 PA Rest Api 交互,我在 postman 中找出了我需要的调用,并使用示例将调用构建到我未来项目的框架中。
我是 rest api 和 json 的相对新手,所以这里可能是一个非常垃圾的问题,但我不知道如何以最佳方式构建 Body Parameter。让我告诉你:
request.AddParameter("application/json", "\r\n \"Cells\": [\r\n \r\n \"Tuple@odata.bind\": [\r\n \"Dimensions('Version')/Hierarchies('Version')/Elements('Actual')\",\r\n \"Dimensions('Year')/Hierarchies('Year')/Elements('2018')\",\r\n \"Dimensions('Period')/Hierarchies('Period')/Elements('Jan')\",\r\n \"Dimensions('Currency')/Hierarchies('Currency')/Elements('Local')\",\r\n \"Dimensions('Region')/Hierarchies('Region')/Elements('England')\",\r\n \"Dimensions('Department')/Hierarchies('Department')/Elements('Executive General and Administration')\",\r\n \"Dimensions('Account')/Hierarchies('Account')/Elements('Meals')\",\r\n \"Dimensions('General Ledger Measure')/Hierarchies('General Ledger Measure')/Elements('Amount')\"\r\n ]\r\n \r\n ],\r\n \"Value\": \"1234\"\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
这个例子展示了将一个值放入 TM1 中的主体必须如何看待,这是从 Postman 那里得到的。
所以维度计数也是动态的名称,我只是有使用数组的想法,但这并不漂亮,我真的确定有人有一个很好且简单的解决方案,我只是不知道。
感谢您的帮助!
【问题讨论】:
【参考方案1】:我现在就这样解决了,也许有人对此感兴趣,它可能不是最好的方法,但有效。
/// <summary>
/// Update string or numeric cells in TM1
/// </summary>
/// <param name="Value">The Value you want to insert, for numeric values u have to convert it to a string before calling the methode</param>
/// <param name="Cube">Target cube</param>
/// <param name="Dimensions">2 Dimensional Array, the 2nd dimension contains the TM1 dim infos, 0 = DimName, 1=Hierarchy name (can be empty), 2 = Element Name</param>
/// <returns></returns>
public string CellPutValue(string Value, string Cube, string[,] Dimensions )
//create body header
string body = @"
""Cells"":[
""Tuple@odata.bind"": [";
for (int i = 0; i < Dimensions.GetLength(0); i++)
//check if array data is correct...
if (Dimensions[i, 0] == "")
break;
//for cleanness, used temp vars for reading out the array and build the body
string dim = Dimensions[i, 0];
string hierarchy = Dimensions[i, 1] == null ? Dimensions[i, 0] : Dimensions[i, 1];
string dimEl = Dimensions[i, 2];
//loop through the array and construct the body json
if (i < Dimensions.GetLength(0)-1)
body = body + @"
""Dimensions('" + dim + @"')/Hierarchies('" + hierarchy + @"')/Elements('" + dimEl + @"')"",";
else
body = body + @"
""Dimensions('" + dim + @"')/Hierarchies('" + hierarchy + @"')/Elements('" + dimEl + @"')""";
//add body footer
body = body + @"
]
],
""Value"":""" + Value + @"""
";
var request = new RestRequest("Cubes('" + Cube + "')/tm1.Update",Method.POST);
request.AddCookie(sessionCookie.Name, sessionCookie.Value);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = restClient.Execute(request);
//return response
return response.Content;
【讨论】:
以上是关于C# - OLAP TM1 的 JSON 正文参数 - 通过 RestSharp 进行补丁调用的主要内容,如果未能解决你的问题,请参考以下文章
Rest API Post Json 使用带有两个参数的 C#
如何使用 C# 在 POST 请求中发送 json 请求正文数据
如何在 C# 中为 Postman 生成的代码在 JSON 正文中设置可变数据