Skip to main content
December 4, 2025
Solved

Vary description vy user culture in XFBR

  • December 4, 2025
  • 2 replies
  • 1 view

Hello,

We are facing the following issue, we use the following xfbr to generate accounts in a cubeview rows and retrieve descriptions : XFBR(CCF_XFBR, GetCCFDrillDownWithDescription2,memberExp=[A#CashFlow_Gestion.TreeDescendantsInclusive], Time=|CVTime|).


However, the Cube View where this XFBR is applied always displays the descriptions in the default format. The description does not adapt based on the user’s culture settings.

How can we make the XFBR return descriptions that vary according to the user culture?
For reference, here is the XFBR code :

Public Function GetCCFDrillDownWithDescription2(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardStringFunctionArgs) As String
		Try
			
			'Get the Dim PK for Entity Dimension
			Dim accountDimPk As DimPk = BRApi.Finance.Dim.GetDimPk(si,args.SubstVarSourceInfo.WFAccountDim)
			Dim flowDimPk As DimPk = BRApi.Finance.Dim.GetDimPk(si,args.SubstVarSourceInfo.WFFlowDim)
			'Dim memberListClass As New OneStream.BusinessRule.Finance.CCF_FinanceLogics.MainClass
			Dim memFilterAccounts As List(Of MemberInfo) = BRAPi.Finance.Members.GetMembersUsingFilter(si, accountDimPk, args.NameValuePairs("memberExp"), True)
			
			If memFilterAccounts.Count = 0 Then
'				brapi.ErrorLog.LogMessage(si,"Cash flow Account Member Not found in CubeView member filter. Check XFBR syntax (GetCCFDrillDown) in Cube view")
				Return "A#None:F#None:Name(Please check memberfilter in cubeview. Cashflow Account not found)"
			End If
			'Use a text builder to build a string
			Dim resultString As New Text.Stringbuilder()
			Dim isfirstItem As Boolean = True
'			Dim accountFlowComb As String
'			Dim flowBaseMembers As List(Of Member)
			Dim objDataCellInfoUsingMemberScript As New DataCellInfoUsingMemberScript
					
			Dim tftEntityID As Integer = Brapi.Finance.Members.GetMemberId(si,dimTypeId.Entity, "CF")
		
			Dim objScenarioType As ScenarioType = BRApi.Finance.Scenario.GetScenarioType(si, args.SubstVarSourceInfo.WFScenario.MemberId)
			Dim timeReference As String = BRApi.Finance.Entity.Text(si, tftEntityID, 1, objScenarioType.Id, args.SubstVarSourceInfo.WFTime.MemberId)
			Dim MatrixTime As String = args.NameValuePairs("Time")
			Dim scenarioReference As String = BRApi.Finance.Entity.Text(si, tftEntityID, 2, objScenarioType.Id, args.SubstVarSourceInfo.WFTime.MemberId)
			If scenarioReference = String.Empty Then scenarioReference = args.SubstVarSourceInfo.WFScenario.Name
			Dim cashFlowSettings As DataTable = BRApi.Import.Data.FdxExecuteDataUnit(si, "PARAM_CF", "E#CF", "Local", objScenarioType.Id,"S#" & scenarioReference, "T#" & MatrixTime,  "YTD", True, "Amount <> 0", 4, False)
			'Dim cashFlowAdj As DataTable = BRApi.Import.Data.FdxExecuteDataUnit(si, "CONSO", "E#CF", "Local", objScenarioType.Id,"S#REEL","T#" & timeReference , "YTD", True, "Amount <> 0", 4, False)
			'Exit Function
			Dim CFSiN As Boolean = cashFlowSettings Is Nothing
			
			If cashFlowSettings Is Nothing Then
				Brapi.ErrorLog.LogMessage(si,"No CashFlow setting found")
				Return ""
				'Exit Function
			ElseIf cashFlowSettings.Rows.Count = 0 Then
				Brapi.ErrorLog.LogMessage(si,"No CashFlow setting found")
				Return ""
				'Exit Function
			End If
			Dim space As String = String.Empty
			Dim sign As String = String.Empty
			Dim AccountDescription As String
'			Dim AccountDescription2 As String
				For Each account As MemberInfo In memFilterAccounts
'					brapi.ErrorLog.LogMessage(si,"account " & account.NameAndDescription)
					space = " "
					For i = 0 To account.IndentLevel
						space = space & " "
					Next
					
					'Exit Function
					resultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None,")
					'resultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None:U7#MT_RETTFT,")
'					Cb#CONSO:E#EIMER:P#?:C#Local:S#REEL:T#2022M12:V#YTD:A#RD_T110:F#None:O#Top:I#Top:U1#None:U2#None:U3#Top:U4#None:U5#None:U6#None:U7#MT_RETTFT:U8#CF_CalcAmount


					'Ajout des ecritures
					Dim memberFilter As String = "MT_RETTFT"
					Dim UD7Desc As String  = BRApi.Finance.Metadata.GetMember(si, dimTypeId.UD7,memberFilter).Description
					'ResultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None:U7#MT_RETTFT:Name(" & UD7Desc & "),")
					
						
					If Not BRApi.Finance.Members.HasChildren(si, accountDimPk, account.Member.MemberId) Then	
						Dim cashFlowSettingRows() As DataRow = cashFlowSettings.Select("UD7 = '" & account.Member.Name & "' AND UD8 = 'None'")
						
						For Each row As DataRow In cashFlowSettingRows
							AccountDescription = BRApi.Finance.Metadata.GetMember(si, dimTypeId.Account,row("Account")).NameAndDescription
							If row("Amount") = -1 Then sign = "(-)"
							'ResultString.Append("A#" & row("Account") & ":Name( "& space & "     " & AccountDescription & "):F#" & row("Flow") & ":U7#" & account.Member.Name &",")
							'ResultString.Append("A#" & row("Account") & ":Name( "& space & "     " & AccountDescription & "):F#" & row("Flow") & ":U7#" & row("UD7") &",")
							ResultString.Append("A#" & row("Account") & ":Name( "& sign & space & AccountDescription & "):F#" & row("Flow") & ":U7#" & row("UD7") &",")
						Next
							ResultString.Append("A#" & account.Member.Name & ":Name( " & space & account.Member.Name & space &  UD7Desc & "):F#None:U7#MT_RETTFT:U8#None" &",")
						
						
						
						'ResultString.Append("A#" & account.Member.Name & ":Name(" & space & account.Member.NameAndDescription & "):F#None:U7#MT_RETTFT:Name(" & UD7Desc & "),")
					End If
						

	         	Next 
			Return resultString.ToString
				
		Catch ex As Exception
		    Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
		End Try      
End Function

 

Best answer by Manasa

In your code you can use ReadMemberDescriptionsNoCache function to pull the descriptions based on the user's culture

Dim member As String = "TrialBalance"
Dim list As List(Of MemberDescription) = BRApi.Finance.Members.ReadMemberDescriptionsNoCache(si, dimTypeId.Account, member)
Dim returnStr As String = list.FirstOrDefault(Function(x) x.MemberDescriptionPk.Language = si.Culture).Description
Return returnStr

 

2 replies

December 4, 2025

In the POV of the cube view you can either define a parameter and let the user pick a culture/language or you can pick current, which I believe will pick up users culture setting descriptions, if they are available:



 

December 4, 2025

I tried using the Current option for the culture setting, but it doesn’t work because the XFBR generates a :Name() function, which seems to take precedence over the global culture settings.

ManasaAnswer
December 4, 2025

In your code you can use ReadMemberDescriptionsNoCache function to pull the descriptions based on the user's culture

Dim member As String = "TrialBalance"
Dim list As List(Of MemberDescription) = BRApi.Finance.Members.ReadMemberDescriptionsNoCache(si, dimTypeId.Account, member)
Dim returnStr As String = list.FirstOrDefault(Function(x) x.MemberDescriptionPk.Language = si.Culture).Description
Return returnStr

 

December 10, 2025

Thanks Manasa, i modified the XFBR and after some trial and error it worked.