Forum Discussion

rhankey's avatar
rhankey
Contributor
2 years ago

Referencing a custom structure from a referenced assembly

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?

  • 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.)

  • JackLacava's avatar
    JackLacava
    Honored Contributor

    #WorksForMe, dude, at least between Finance rules... I'd suggest to check for typos, there were a lot of them in the code.

     

     

    • rhankey's avatar
      rhankey
      Contributor

      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?

       

       

       

       

       

      • JackLacava's avatar
        JackLacava
        Honored Contributor

        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.)