Forum Discussion
OS_Pizza
Contributor III
Can you share the excel file ( just keep 1 row). Also , Share the TEHandler rule and show what are you trying to achieve?
Nokhez
2 years agoNew Contributor II
Hi OS_Pizza,
Here is the trimmed TEHandler business rule.
Imports System
Imports System.Data
Imports System.Data.Common
Imports System.IO
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Linq
Imports Microsoft.VisualBasic
Imports System.Windows.Forms
Imports OneStream.Shared.Common
Imports OneStream.Shared.Wcf
Imports OneStream.Shared.Engine
Imports OneStream.Shared.Database
Imports OneStream.Stage.Engine
Imports OneStream.Stage.Database
Imports OneStream.Finance.Engine
Imports OneStream.Finance.Database
Namespace OneStream.BusinessRule.TransformationEventHandler.TransformationEventHandler
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As TransformationEventHandlerArgs) As Object
Try
Dim returnValue As Object = args.DefaultReturnValue
args.UseReturnValueFromBusinessRule = FALSE
args.Cancel = FALSE
'Evaluate the operation type in order to determine which sub-event is being processed
Select Case args.OperationName
Case Is = BREventOperationType.Transformation.ParseAndTrans.DeleteData
If args.IsBeforeEvent Then
Dim objTrans As Transformer = args.Inputs(0)
Dim errorCodes() As String = { "#VALUE!", "#NUM!","#N/A","#REF!" }
For Each dpValues In objTrans.Parser.DelimitedParsedValues
If errorCodes.Contains(dpValues, StringComparer.CurrentCultureIgnoreCase) Then
BRApi.ErrorLog.LogMessage(si,dpValues)
Throw New XFException(si,Nothing, Nothing, "Invalid Data: Excel file contains " + dpValues + " error in calculated cells")
End If
Next
End If
Case Is = BREventOperationType.Transformation.ParseAndTrans.ProcessTransformationRules
'Some Business logic
Case Is = BREventOperationType.Transformation.ParseAndTrans.StartParseAndTransform
'Do Nothing
Case Is = BREventOperationType.Transformation.ParseAndTrans.InitializeExcelRangeLayout
'Check the before / after flag, we want to handle the AFTER event
If Not args.IsBeforeEvent Then
Dim objRange As StageRangeContent = DirectCast(args.Inputs(1), StageRangeContent)
'Check the transformation rule cache to make sure the mappings are correct.
Dim objParser As Parser = DirectCast(args.Inputs(0), Parser)
Dim var As WorkflowUnitPk = objParser.Transformer.WorkflowUnitPk
Dim wfStatus As WorkflowInfo = BRApi.Workflow.Status.GetWorkflowStatus(si,var,False)
If wfStatus.Locked Then
Throw New XFException(si,Nothing,Nothing,"Cannot load data, the workflow Is locked.")
Else
If Not objRange Is Nothing Then
'Loop over the tokens and find the index of the time dimension
Dim timeIndex As String = SharedConstants.Unknown.ToString
For Each kvpToken As KeyValuePair(Of Integer, String) In objRange.DimensionTokens
'Parse the excel token
Dim token As StageTokenParts = StageConstants.MasterDimensionTokens.GetTokenParts(kvpToken.Value)
'Evaluate the token in order to see if it is time.
If token.DimensionName.Equals(StageConstants.MasterDimensionNames.Time, StringComparison.InvariantCultureIgnoreCase) Then
'< Perform input time validation >
End If
Next
End If
End If
End If
End Select
' Return returnValue
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class
End Namespace
And this is the sample Excel XFD range I am trying to load
C#:Local | E#:[11111] | P# | S#:[BUDGET] | V#:[Periodic] | A# | F# | O#:[Import] | IC#:[None] | U1#:[None] | U2#:[9999999] | U3#:[None] | U4#:[U4Base] | U5#:[None] | U6#:[None] | U7#:[None] | U8#:[None] | A1# | A2# | SI#:[9999999_ID] | AMT.ZS# | T#:[]:[]:[2023M1] | T#:[]:[]:[2023M2] | T#:[]:[]:[2023M3] |
123456 | EUR | 12345 | 0 | 111 | |||||||||||||||||||
123456 | EUR | 444 | #VALUE! | 333 |
Related Content
- 25 days ago
- 4 months ago
- 6 months ago
- 2 months ago