Forum Discussion

Guru_Prasad's avatar
Guru_Prasad
New Contributor
26 days ago

Meta Data UD2 DIM

We have some group of base customers under different parents with text property, and we are planning to block input to those customers in all the input forms if we use dimension property Allow input 'false' then it will block input but after that update during close FPA team should do adjustments for those Customers. Can we do it with irrespective of that dimension property false update. Is there any option that without updating input forms (CUBE VIEWS) with customer (UD2) parameter or with the help of business rule can we override that dimension property Allow input 'True' by running DM Step for certain customers when we give them in DM JOB and revert again to false after inputs through DM step. Please suggest your solutions. 

4 Replies

  • T_Kress's avatar
    T_Kress
    Valued Contributor

    The "In Use" setting on the dimensions turns the intersection pink so that it appears as an invalid intersection, for all users (even native administrators):

    And the "Allow Input" setting on the dims turns the intersection green so it appears read only, again for all users including native administrators:

    There are many ways to handle this requirement:

    • Create a form where those customer UDs are not shown thus now allowing input (.Where(Text# = 'whatever') and only grant access to that WF profile and form to the users whom you do not want inputting
    • Create another form where the FP&A folks can get to it and those intersections are shown
    • Create a WF Channel on U2 and use the WF channel combined with the WF profiles and forms to control which WF profiles people can get into to enter data
    • If the Customer U2 is a parameter in the form, create a security group that you attach to the "Display Member Group" on those UDs and allow some people display access and others not.  The "Display Member Group" security property is a good way to "hide" members from pick lists and parameters
    • Use a NoInputBR on the cube where if users are in a specific security group (or certain WF profile), you grant them access and if not you turn those intersections to read only
    • Use Slice security on the cube(s) to grant all access or only read access to those intersections

    You may be able to get the DM job and BR to flip the In Use or Allow Input from True to False, but this seems more complicated and less elegant than perhaps one of the above options.

    Others may have ideas too, these are just some that came to mind for me.  If this is just a requirement around forms data entry and the U2 is a pick list parameter on the forms, I would probably lean towards using the "DisplayMemberGroup" on those customers and create a security group that some people can see (FP&A) and others cannot see (people who should not input).  That will remove those U3 customers as a choice in the parameter on the form. 

    • Guru_Prasad's avatar
      Guru_Prasad
      New Contributor

      Hi T_Kress, I assigned specific FPA channel to the customer for adjustments that can be done for only FPA but in 'Standard' workflow channel the customer is allowing input to the site user even though we assigned FPA channel to that customer. If 'No Input' BR is available, can you please give any example or reference for BR. it should show for all users and all workflows but should allow input for only FPA workflow channel.

      we already have too many input forms so we cannot change customer filter in all the forms can we flip allow input for some datatypes it is very help full.

      • T_Kress's avatar
        T_Kress
        Valued Contributor

        There should be an example in the Golf Stream app. But if you do not have access, here is one example of this Finance BR.

        Namespace OneStream.BusinessRule.Finance.BR_NoInput
        	
        	Public Class MainClass
        		
        		Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As FinanceRulesApi, ByVal args As FinanceRulesArgs) As Object
        
        			Try
        				Select Case api.FunctionType
        					
        					Case Is = FinanceFunctionType.ConditionalInput
        			            
        			            Dim pov_account As String = api.Pov.Account.Name
        			            Dim pov_scenario As String = api.Pov.Scenario.Name
        			            Dim pov_consolidation As String = api.Pov.Cons.Name
        			            Dim pov_origin As String = api.Pov.Origin.Name
        			            Dim pov_entity As String = api.Pov.Entity.Name
        						Dim pov_entity_Curr As String = api.Entity.GetLocalCurrency.Name
        
        			            Dim pov_u1 As String = api.Pov.UD1.Name
        			            Dim pov_u2 As String = api.Pov.UD2.Name						
        			            Dim pov_u3 As String = api.Pov.UD3.Name
        			            Dim pov_u4 As String = api.Pov.UD4.Name
        			            Dim pov_u5 As String = api.Pov.UD5.Name
        			            Dim pov_u6 As String = api.Pov.UD6.Name						
        			            Dim pov_u7 As String = api.Pov.UD7.Name
        			            Dim pov_u8 As String = api.Pov.UD8.Name						
        			            Dim pov_ICP As String = api.Pov.IC.Name
        			            Dim pov_flow As String = api.Pov.Flow.Name							
        						Dim CurrTime As String = api.Pov.Time.Name
                                Dim pov_year As String = TimeDimHelper.GetSubComponentsFromName(CurrTime).Year
                                Dim pov_period_num As String = TimeDimHelper.GetSubComponentsFromName(CurrTime).Month
        
        						If pov_u7="NotDefined" And pov_entity<>"Entity_Admin" And pov_account<>"PCON" And pov_account<>"POWN" Then
        							Return ConditionalInputResultType.NoInput
        						End If					
        		
                                If (pov_scenario = "None" Or pov_entity = "None" Or pov_account = "None" Or pov_flow = "None" Or pov_u1 = "None" Or pov_u2 = "None" Or pov_u3 = "None" Or pov_u4 = "None" Or pov_u5 = "None" Or pov_u6 = "None" Or pov_u7 = "None" Or pov_u8 = "None")
                                    Return ConditionalInputResultType.NoInput
                                End If
        							
        						Return ConditionalInputResultType.Default
        						
        				End Select
        
        				Return Nothing
        			Catch ex As Exception
        				Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
        			End Try
        		End Function
                
        	End Class
        End Namespace

        In this case they are testing the POV of the user to flip to ConditionalInputResultType.NoInput.

        In your case, you would want to check that the user is in a specific security group and have that determine the NoInput BR.

        You would then attach this BR to the cube(s).

        Good luck!