The OneStream Community is temporarily frozen until June 29th due to the ongoing maintenance. Please read the blog post here to learn more.
Forum Discussion
hoaphan
4 years agoNew Contributor III
REST API USE
Hello OneStream Community,
I'm working on how to implement a REST API in OS, but i'm not sure to understand all the steps, i've already read the documentation and i've found it very hard to understand, can anyone please explain how can we implement it in OS what are the steps to follow, i started by downloading and installing POSTMAN for the tests but i don't know what should do i do after, please any help will be much appreciated.
I'm also woundering if there any data management that should be used for this
Thanks and merry christmas.
Ahhh, thank you CoPilot. I got it to work with this code:
Private Function GetSourceDataREST(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Transformer) As DataTable Try Dim strEntityWF As String = api.WorkflowProfile.Name.Split(".")(0) ' Use already encoded credentials (eg.,In Postman) key Dim wdCreds As String = "<CREDENTIALS>" 'Call the REST API Dim wc As New WebClient wc.Encoding = Encoding.UTF8 wc.Headers("cache-control") = "no-cache" wc.Headers("ContentType") = "application/json" wc.Headers("Accept") = "application/json" wc.Headers("Authorization") = "Basic " & wdCreds Dim jsonURL As String = "<AURL>" Dim json As String = wc.DownloadString(jsonurl) Dim pullData As DataTable = ParseJsonToDataTable(json, strEntityWF) 'Close Web connection wc.dispose 'Return the dataset Return pullData Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End Function Function ParseJsonToDataTable(json As String, EntityName As String) As DataTable Dim dataTable As New DataTable() dataTable.Columns.Add("entity", GetType(String)) dataTable.Columns.Add("displayName", GetType(String)) dataTable.Columns.Add("amount", GetType(Integer)) Dim jObject As JObject = JObject.Parse(json) Dim dataArray As JArray = jObject("employees") For Each item As JObject In dataArray Dim row As DataRow = dataTable.NewRow() row("entity") = EntityName row("displayName") = item("displayName") row("amount") = 1 dataTable.Rows.Add(row) Next Return dataTable End Function
15 Replies
- Sai_MagantiContributor II
Here is a connector BR we used to import from workday. You can use this as a starting point/reference and build your BR and use this connector BR in a DataSource. Original code provided by OneStream (courtesy Joakim Kulan)
Imports System Imports System.Data Imports System.Data.Common Imports System.IO Imports System.Collections.Generic Imports System.Globalization Imports System.Linq Imports Microsoft.VisualBasic Imports System.Windows.Forms Imports OneStream.Shared.Common Imports OneStream.Shared.Wcf Imports OneStream.Shared.Engine Imports OneStream.Shared.Database Imports OneStream.Stage.Engine Imports OneStream.Stage.Database Imports OneStream.Finance.Engine Imports OneStream.Finance.Database Imports System.Net Imports System.Web.Script.Serialization Imports newtonsoft.json Imports newtonsoft.json.linq Imports System.Xml Namespace OneStream.BusinessRule.Connector.FTE_Workday Public Class MainClass Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Transformer, ByVal args As ConnectorArgs) As Object Try 'Get the Field name list or load the data Select Case args.ActionType Case Is = ConnectorActionTypes.GetFieldList 'Return Field Name List if using Field List Method to get field list in GetFieldList '----------------------------------------------------------- Dim fieldList As List(Of String) = GetFieldList(si, globals, api) Return fieldList Case Is = ConnectorActionTypes.GetData Dim sourceDataREST As DataTable = GetSourceDataREST(si, globals, api) api.Parser.ProcessDataTable(si, sourceDataREST, False, api.ProcessInfo) Return Nothing End Select Return Nothing Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End Function 'Create the field list items to get field list (Recommended) '----------------------------------------------------------- Private Function GetFieldList(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Transformer) As List(Of String) Try Dim fields As New List(Of String) fields.add("Field1") fields.add("Field2") .. fields.add("FieldN") Return fields Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End Function 'Create the data load Statement Private Function GetSourceDataREST(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Transformer) As DataTable Try ' Dim wdUser As String = "" ' Dim wdPass As String = "" ' Dim wdCreds As String = encodebase64(wdUser & ":" & wdPass) ' Use already encoded credentials (eg.,In Postman) key Dim wdCreds As String = "<encodedkey>" 'Call the REST API Dim wc As New WebClient wc.Encoding = Encoding.UTF8 wc.Headers("cache-control") = "no-cache" wc.Headers("ContentType") = "application/json" wc.Headers("Accept") = "application/json" wc.Headers("Authorization") = "Basic " & wdCreds Dim jsonURL As String = "<webapiurl>?Format=json&<paramname>=" & <paramvalue> Dim json As String = wc.DownloadString(jsonurl) 'Convert result in API to table format ' Dim pulldata As DataTable = jsonConvert.DeserializeObject(Of DataTable)(json) Dim dataSet As DataSet = jsonConvert.DeserializeObject(Of DataSet)(json) Dim pullData As DataTable = dataSet.Tables(0) 'Close Web connection wc.dispose 'Return the dataset Return pullData Catch ex As Exception Throw ErrorHandler.LogWrite(si, New XFException(si, ex)) End Try End Function End Class End Namespace- hoaphanNew Contributor III
Ok thanks for the BR, for now what im trying to test is to connect Onestrem to POSTMAN via the URL of my application and i have already a data management sequence created and i want to execute this sequence from POSTMAN, but i can't the URL is invalid in Postman i don't know why
Thanks for your help 🙂- Sai_MagantiContributor II
I think the key to this is setting up the one of the Authentication providers OneStream supports. The design and reference guide explains how you set this up. I hope you've already done this.
If you can provide more information like what error message you're getting 400, 404 etc from postman, someone might be able to help you.
- WernerNContributor II
Life saving contribution. Thank you so much for sharing your code.
- Sridhar_MContributor
Thank you Sai for sharing the snippet. This is really helpful.
I've a question, your using this connector to load directly to a register table ? If yes May I know how your calling this business rule ?
- Sai_MagantiContributor II
Sridhar
I used this in a connector BR to import FTE actuals from workday.
Best
Sai
- Sai_MagantiContributor II
Are you trying to import data into OneStream using an api call? or export data out of OneStream?
- hoaphanNew Contributor III
Hello Sai_Maganti,
i'm trying to import data into OS using an API call,
Thanks for your help
Related Content
- 4 months ago
- 1 year ago
- 4 years ago