03-30-2023
09:07 AM
- last edited on
05-02-2023
04:21 PM
by
JackLacava
I am trying to figure out how to share a structure between OS BR files.
In an Extender BR file named ExtenderBR I have:
Public Structure MyStruct
Public Element1 As String
Public Element2 As Boolean
Public Element3 As Integer
End Structure
Public Function MyFunct1() As String
Return ""
End Function
Public Function MyFunct2() As MyStruct
Return New MyStruct
End Function
In my Finance BR file, I include the BR\ExtenderBR from above and include a line
Dim ExtenderBR As New OneStream.BusinessRule.Extender.ExtenderBR.MainClass
Dim xx As String=ExtenderBR.MyFunct1() 'This works
ExtenderBR.MyFunct2() 'Generates error, as the Finance rule doesn't know about the custom Structure
Any thoughts how to share MyStruct across multiple OS Business Rules files?
Solved! Go to Solution.
03-30-2023 01:52 PM
It's just a namespacing issue. My code above worked because the type was not declared at compilation time, so typing information would only be (successfully) looked up at runtime; but yours wants types available at compilation time, so you have to import the namespace at the top:
Imports OneStream.BusinessRule.Extender.ExtenderBR.MainClass
That should solve your compilation issues.
(For the record, you don't need to mark "Contains Global Functions for Formulas" to go cross-rule, that option is just if you plan to actually reference it from the Member Formula properties on dimension members, something that typically only Finance rules concern themselves with.)
03-30-2023 11:26 AM
#WorksForMe, dude, at least between Finance rules... I'd suggest to check for typos, there were a lot of them in the code.
03-30-2023 01:39 PM
I apologize if there were typos, or it appears I cut some corners in attempting to demonstrate the issue. Below, I will show screen shots using the same hypothetical example.
Here is a screenshot of the relevant portion of the ExtenderBR that is to contain the common Structure & Function:
And since you mentioned it might be an issue with using an Extender for the common Structure/Function, here's a screen shot of the same structure/functions replicated into a Finance Rule file too:
And here is its properties tab showing that it has been tagged with having global functions:
And now we move on to the Finance rule where I want to use the common structure and function. In this rules file, I have included calls to both the common Extender and the common Finance rule file to kill two birds with one stone. I have placed comments on lines 28:36 indicating the compiler issues I receive:
And here is the properties tab:
As I hope to have demonstrated above, there are no issues referencing the Public functions (and simple variables) defined in other BR files. I do this sort of stuff a lot with no issue. But I cannot reference custom structures defined in other BR files.
Any ideas how I can access a custom structure that I have defined in another BR file?
03-30-2023 01:52 PM
It's just a namespacing issue. My code above worked because the type was not declared at compilation time, so typing information would only be (successfully) looked up at runtime; but yours wants types available at compilation time, so you have to import the namespace at the top:
Imports OneStream.BusinessRule.Extender.ExtenderBR.MainClass
That should solve your compilation issues.
(For the record, you don't need to mark "Contains Global Functions for Formulas" to go cross-rule, that option is just if you plan to actually reference it from the Member Formula properties on dimension members, something that typically only Finance rules concern themselves with.)
03-30-2023 02:05 PM
I can confirm either of the following did resolve the issue.
Imports OneStream.BusinessRule.Extender.ExtenderBR.MainClass
or
Imports OneStream.BusinessRule.Finance.FinanceCommonBR.MainClass
Thanks for the pointer.