我正在编写一个C#框架来与IBM的PA Rest Api交互,我在poster中找到了我需要的调用,并使用这些示例将调用构建到我未来项目的框架中。
我对rest api和json相对陌生,所以这可能是一个真正的转储问题,但我不知道如何以最佳方式构建Body Parameter。让我给你看看:
request.AddParameter("application/json", "{rn "Cells": [rn {rn "Tuple@odata.bind": [rn "Dimensions('Version')/Hierarchies('Version')/Elements('Actual')",rn "Dimensions('Year')/Hierarchies('Year')/Elements('2018')",rn "Dimensions('Period')/Hierarchies('Period')/Elements('Jan')",rn "Dimensions('Currency')/Hierarchies('Currency')/Elements('Local')",rn "Dimensions('Region')/Hierarchies('Region')/Elements('England')",rn "Dimensions('Department')/Hierarchies('Department')/Elements('Executive General and Administration')",rn "Dimensions('Account')/Hierarchies('Account')/Elements('Meals')",rn "Dimensions('General Ledger Measure')/Hierarchies('General Ledger Measure')/Elements('Amount')"rn ]rn }rn ],rn "Value": "1234"rn}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
这个示例展示了将Value放入TM1时主体的外观,它是从Postman获得的。
所以Dimension Count和名称都是动态的,我只是有一个处理数组的想法,但这并不漂亮,我真的相信有人能为它找到一个简单的解决方案,我只是不知道。
谢谢你的帮助!
我现在这样解决了它,也许有人对它感兴趣,这可能不是最好的方法,但有效。
/// <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;
}