08-02-2024 05:47 PM
Hello community,
Has anyone used a cube view extender rule to change between the portrait/landscape paper orientation on a PDF report? In our example, we are trying to use a parameter that allows the user to select the column template set needed, and although the idea of calling out the CV column template name sounds logical, I don't think OS has the capability to do this, similar to a column name as shown in the below example. Putting it out there just in case, as I promised our user we will explore different avenues.
Solved! Go to Solution.
08-02-2024 06:10 PM - edited 08-02-2024 06:13 PM
Yes, we used a cube view extender BR and based upon the forecast scenario name it would change the orientation from portrait to landscape. Here is our code:
Namespace OneStream.BusinessRule.CubeViewExtender.CUSTOMER_PageOrientation
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As CVExtenderArgs) As Object
Try
Select Case args.FunctionType
Case Is = CVExtenderFunctionType.GetReportOptions
Dim cvER As CVExtenderReport = args.Report.CurrentUIItem.Report
Dim uiItem As CVExtenderReportUIItem = args.Report.CurrentUIItem
If uiItem.UIItemType = XFReportUIItemType.PageFooterPageNumber Then
uiitem.SetPageNumberDisplayInfo (True,"Page {0} of {1}")
End If
' --- Option 1: Using native DevExpress report classes , but requires Referenced Assembly to correct version of DevExpress.XtraReports.<version>.dll
' Dim xtraReport As DevExpress.XtraReports.UI.XtraReport = cver.XRReport
' xtraReport.Landscape = True
' --- Option 2: Using System.Reflection to query the DevExpress class through generic objects. Slower to execute, but doesn't require hard-configured Referenced Assembly to the exact server path + version of DevExpress
Dim cvERProperty As System.Reflection.PropertyInfo = cvER.GetType().GetProperty("XRReport")
Dim currScenario As String = ScenarioDimHelper.GetNameFromID(si, si.WorkflowClusterPk.ScenarioKey)
If cvERProperty IsNot Nothing Then
If CurrScenario.XFContainsIgnoreCase("01") Or CurrScenario.XFContainsIgnoreCase("04") Or CurrScenario.XFContainsIgnoreCase("07") Or CurrScenario.XFContainsIgnoreCase("10") Then
' Return "IsColumnVisible = True,Bold=True"
Dim xtraReport As Object = cvERProperty.GetValue(cvER)
xtraReport.Landscape = True
Else
Dim xtraReport As Object = cvERProperty.GetValue(cvER)
xtraReport.Landscape = False
End If
End If
End Select
' XFBR(CUSTOMER_XFBRStrings, QTRFcst, CurrScenario = |WFScenario|)
' Dim CurrScenario As String = args.NameValuePairs.XFGetValue("CurrScenario")
' If CurrScenario.XFContainsIgnoreCase("01") Or CurrScenario.XFContainsIgnoreCase("04") Or CurrScenario.XFContainsIgnoreCase("07") Or CurrScenario.XFContainsIgnoreCase("10") Then
' Return "IsColumnVisible = True,Bold=True"
' 'qtr end is extra columns and landscape
' Else
' Return "IsColumnVisible = False,Bold=False"
' 'non qtr end are less columns and potrait
' End If
Return Nothing
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class
End Namespace
Then in all the cube views where this applied, we added the rule here:
08-02-2024 06:10 PM - edited 08-02-2024 06:13 PM
Yes, we used a cube view extender BR and based upon the forecast scenario name it would change the orientation from portrait to landscape. Here is our code:
Namespace OneStream.BusinessRule.CubeViewExtender.CUSTOMER_PageOrientation
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As CVExtenderArgs) As Object
Try
Select Case args.FunctionType
Case Is = CVExtenderFunctionType.GetReportOptions
Dim cvER As CVExtenderReport = args.Report.CurrentUIItem.Report
Dim uiItem As CVExtenderReportUIItem = args.Report.CurrentUIItem
If uiItem.UIItemType = XFReportUIItemType.PageFooterPageNumber Then
uiitem.SetPageNumberDisplayInfo (True,"Page {0} of {1}")
End If
' --- Option 1: Using native DevExpress report classes , but requires Referenced Assembly to correct version of DevExpress.XtraReports.<version>.dll
' Dim xtraReport As DevExpress.XtraReports.UI.XtraReport = cver.XRReport
' xtraReport.Landscape = True
' --- Option 2: Using System.Reflection to query the DevExpress class through generic objects. Slower to execute, but doesn't require hard-configured Referenced Assembly to the exact server path + version of DevExpress
Dim cvERProperty As System.Reflection.PropertyInfo = cvER.GetType().GetProperty("XRReport")
Dim currScenario As String = ScenarioDimHelper.GetNameFromID(si, si.WorkflowClusterPk.ScenarioKey)
If cvERProperty IsNot Nothing Then
If CurrScenario.XFContainsIgnoreCase("01") Or CurrScenario.XFContainsIgnoreCase("04") Or CurrScenario.XFContainsIgnoreCase("07") Or CurrScenario.XFContainsIgnoreCase("10") Then
' Return "IsColumnVisible = True,Bold=True"
Dim xtraReport As Object = cvERProperty.GetValue(cvER)
xtraReport.Landscape = True
Else
Dim xtraReport As Object = cvERProperty.GetValue(cvER)
xtraReport.Landscape = False
End If
End If
End Select
' XFBR(CUSTOMER_XFBRStrings, QTRFcst, CurrScenario = |WFScenario|)
' Dim CurrScenario As String = args.NameValuePairs.XFGetValue("CurrScenario")
' If CurrScenario.XFContainsIgnoreCase("01") Or CurrScenario.XFContainsIgnoreCase("04") Or CurrScenario.XFContainsIgnoreCase("07") Or CurrScenario.XFContainsIgnoreCase("10") Then
' Return "IsColumnVisible = True,Bold=True"
' 'qtr end is extra columns and landscape
' Else
' Return "IsColumnVisible = False,Bold=False"
' 'non qtr end are less columns and potrait
' End If
Return Nothing
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class
End Namespace
Then in all the cube views where this applied, we added the rule here:
a month ago - last edited a month ago
Hi Teresa! Thank you for replying and providing us with the code you used. We were able to modify it to fit the reporting needs. Adding the code here for other users looking for this in the future.
The client wanted the cube view PDF report to change orientation to landscape when they selected a specific column template on their prompt.
If "Col_CVPeriod" was selected, the orientation defaulted to landscape = false (portrait)
If "Col_12M_Trend" was selected, the orientation changed to landscape = true
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As CVExtenderArgs) As Object
Try
Select Case args.FunctionType
Case Is = CVExtenderFunctionType.GetReportOptions
'change to landscape if certain column set is selected
Dim cvER As CVExtenderReport = args.Report.CurrentUIItem.Report
Dim cvERProperty As System.Reflection.PropertyInfo = cvER.GetType().GetProperty("XRReport")
Dim sValue As String = args.CubeView.CubeViewNameForSharingAllCols
If sValue.XFEqualsIgnoreCase("Col_12M_Trend")
Dim xtraReport As Object = cvERProperty.GetValue(cvER)
xtraReport.Landscape = True
End If
End Select
Return Nothing
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class