Forum Discussion

Davy's avatar
Davy
Contributor
3 years ago

view the POV of the datacell executing BusinessRule.DashboardStringFunction XFBR business rule?

How do I view the POV of the datacell executing BusinessRule.DashboardStringFunction XFBR business rule?
I think I can run this statement:
Dim viewMember As ViewMember = ViewMember.GetItem(api.Pov.View.MemberPk.MemberId)

BRapi.ErrorLog.LogMessage(si, "view = "  & viewMember.tostring)

Is there a faster way to view all 10 dimesions in POV of the datacell ?

These do not work:

Dim POV As POV = ViewMember.GetItem(api.Pov.MemberPk.MemberId)

BRapi.ErrorLog.LogMessage(si, "view = "  & POV.tostring)

 

 

  • It is an UD8 member formula and it has to be used together with a text view member like annotation:

     

     

    The member formula might look like this:

    ' Test if the cell is a text-based dataCell.
    If api.View.IsAnnotationType() Then
    	'Has the cell a cell text or an attachement?
    	If Not api.Data.HasDataAttachments("O#Forms:V#Periodic:Ud8#None") Then
    		'Retrieves the cells to test		
    		Dim amount As DataCell = api.Data.GetDataCell("O#Top:V#Periodic:UD8#None")
    		Dim budget As DataCell = api.Data.GetDataCell("O#Top:V#Periodic:UD8#None:S#BudgetV2")
    		'Calculate the variance percent
    		Dim variance As Decimal = (amount.CellAmount - budget.CellAmount  ) / budget.CellAmount
    
    		'Is there a negative variance?
    		If variance < 0 Then
    			Return "<== Explantion Required"
    		Else 
    			Return Nothing
    		End If
    	Else
    		Return Nothing		
    	End If
    End If
    
    Return Nothing

     

  • ChristianW's avatar
    ChristianW
    Valued Contributor

    There are plenty of great use cases for xfbr, including for conditional formatting, but you need to understand how it works. 5 years ago, we hadn't conditional formatting, but for some years now, it is a function of cubeviews.

    There might be a much simpler solution for your problem.

     

    I work for Onestream.

  • ChristianW's avatar
    ChristianW
    Valued Contributor

    Yes, there is a faster way: api.Pov.GetDataCellPk.GetMemberScript(si)

    This only works for financial business rules and member formula.

  • ChristianW's avatar
    ChristianW
    Valued Contributor

    The XFBR function in a cubeview, will be resolved before the system retrieves the datacells, so there is no way for the rule to get the POV of a cell (because it doesn't exist yet).

    The problem are dynamic queries like A#IS.descendants, when the xfbr is executed, the query isn't resolved yet.

    There are several ways to work around this limitation, can you help us to understand, what you try to achieve?

     

    • Davy's avatar
      Davy
      Contributor

      Wow!! I have no idea what the differences are between XFBR vs using formula and financial business rules. Obviously, you are some big shot developer at 1S. Or are you a consultant? If yes, which company do you work for?

      I was studying some XFBR code written over 5 years ago, that I inherited.  I suspected there was some issue with XFBR not being able to read the cell's POV.  I think what you wrote is true- which means that case, 1S consultants' use of XFBR to do conditional formatting is flawed.
      I guess my first question is - why would anyone use XFBR, except to process something before retrieving datacells!! 

       

       

    • Davy's avatar
      Davy
      Contributor

      I am asked to color a cell yellow if a user added annotation into that cell.  This cell stores annotations of users who enter an explanation for why there is a variance on the row of that cell.
      You just told me that I have to use a formula or a finance rule as I need the cell POV before I can retrieve the contents of the cell to see if it has text.

      Koemets wrote this:
      Annotations are attachments by nature, so they can't be treated as regular data cell in your code. So you need to attach them to the respective datacells> Koemets

      Someone recommended the following lines of code. Do you have a better suggestion?

       

       

      Dim yourText As String = api.Data.GetDataCellEx("A#variance:U8#CommentAvB").DataCellAnnotation

      api.Data.SetDataAttachmentText("A#variance:U8#CommentAvB",yourText,False)  ‘I don’t even know what this line does

      If yourText.Equals(String.Empty) Then

                  ' color cell pink to show that user entered text into this cell 

                                                                                Return "Pink"

      • ChristianW's avatar
        ChristianW
        Valued Contributor

        Why are you not just showing the annotation in a column next to the data?

        You solution with a pink cell is probably possible, but I need to know the dimensions in the rows and the columns. Today is a little late in Europe to start such a project, but I will try to build something this week.