601,100 602,"TECH_TM1Documenter_CubeDependencies" 562,"CHARACTERDELIMITED" 586,"D:\Wim\TM1\TI processes\}CubeCaptions.RUX" 585,"D:\Wim\TM1\TI processes\}CubeCaptions.RUX" 564, 565,"yhjJ3@CNfeWFK39RSn\ewwLY@ak>GhrQ0aA1X<>x;6=YRpfL1U:2cXg>?WxH=dhhHHVl8f6=2jsGlM_Aa2od2olv@bU28mCmc4t>Zr7BjjX_ISDXV0GgX6JmL>_L`BG8:?1rhM`BaK:yxAL74TuUq91J0fNhTymjibMgN\v2u]F8c3Owt_fKpy:v1vl" 559,1 928,0 593, 594, 595, 597, 598, 596, 800, 801, 566,0 567," " 588,"," 589,"." 568,"" 570, 571, 569,0 592,0 599,1000 560,1 pCube 561,1 2 590,1 pCube,"" 637,1 pCube,"Cube name ?" 577,1 vRuxLine 578,1 2 579,1 1 580,1 0 581,1 0 582,1 VarType=32 ColType=827 931,1 0, 603,0 572,55 #****Begin: Generated Statements*** #****End: Generated Statements**** ############################ # Wim Gielis # November 2016 # http://www.wimgielis.com ############################ vTreatCube = 1; ## Skip a number of cubes #### ### If( Scan( 'tmp_', pCube ) = 1 ); ### vErrorMessage = 'The cube called ''' | pCube | ''' is skipped since it is a temporary cube.'; ### ProcessBreak; ### vTreatCube = 0; ### EndIf; ## Dynamic datasource selection based on parameter #### ### If( FileExists( pCube | '.RUX') = 0 ); ### vErrorMessage = 'No rules file was found for the cube called ''' | pCube | '''.'; ### ProcessBreak; ### vTreatCube = 0; ### EndIf; ### If( vTreatCube = 1 ); DataSourceType = 'CHARACTERDELIMITED'; DataSourceNameForServer = pCube | '.RUX'; DataSourceAsciiDelimiter = Char(1); DataSourceAsciiQuoteCharacter = ''; ## Retrieving constants from the kickoff process #### StringGlobalVariable( 'cRules_CubeName' ); cQuote = Char(39); cSemicolon = Char(59); ## Variables #### vRuxLine = ''; vRule = ''; vDependencyOn = 0; ### Else; ### DataSourceType = 'NULL'; ### DataSourceNameForServer = ''; ### EndIf; 573,3 #****Begin: Generated Statements*** #****End: Generated Statements**** 574,150 #****Begin: Generated Statements*** #****End: Generated Statements**** If( vTreatCube = 0 ); ItemSkip; EndIf; vRuxLine = Trim(Upper(vRuxLine)); ## Skip completely empty lines #### If(Long(vRuxLine) = 0); ItemSkip; EndIf; ## Skip comment lines #### If(Scan('#', vRuxLine) = 1); ItemSkip; EndIf; vRule = vRule | vRuxLine; If(Scan(cSemicolon, vRule) > 0); ## Skip lines without an opening bracket #### If(Scan('(', vRule) = 0); ItemSkip; EndIf; ## After the feeder statement, the dependency is the other way round #### If(Scan('Feeders;', vRule) > 0); vDependencyOn = 1; EndIf; ###### ## Scan the business rules ###### ################### ## DB Function #### vDimSiz = Dimsiz('}Cubes'); iLoop = 1; While(iLoop <= vDimSiz); vCube = Dimnm('}Cubes', iLoop); vSearch = 'DB(' | cQuote | Upper(vCube) | cQuote; If(Scan(vSearch, vRule) > 0); If(pCube @<> vCube); If(vDependencyOn = 0); CellPutN(1, cRules_CubeName, pCube, vCube, 'Dependency'); CellPutN(1, cRules_CubeName, pCube, vCube, 'Rule'); AddCubeDependency(vCube, pCube); Else; CellPutN(1, cRules_CubeName, vCube, pCube, 'Dependency'); If(Scan('=>' | vSearch, vRule) > 0); CellPutN(1, cRules_CubeName, vCube, pCube, 'Feeder'); EndIf; AddCubeDependency(pCube, vCube); EndIf; EndIf; EndIf; iLoop = iLoop + 1; End; ################### ## Conditional Feeders #### If(vDependencyOn = 1); vDimSiz = Dimsiz('}Cubes'); iLoop = 1; While(iLoop <= vDimSiz); vCube = Dimnm('}Cubes', iLoop); vSearch_Condition = '=>DB(IF'; vSearch_Cube = cQuote | Upper(vCube) | cQuote; If(Scan(vSearch_Condition, vRule) > 0 & Scan(vSearch_Cube, vRule) > 0); If(pCube @<> vCube); CellPutN(1, cRules_CubeName, vCube, pCube, 'Dependency'); If(Scan(vSearch_Cube | ',' | cQuote | cQuote, vRule) > 0 % Scan(cQuote | cQuote | ',' | vSearch_Cube, vRule) > 0); CellPutN(1, cRules_CubeName, vCube, pCube, 'Feeder'); EndIf; AddCubeDependency(pCube, vCube); EndIf; EndIf; iLoop = iLoop + 1; End; EndIf; ################### ## Attrs & ATTRN Function #### vDimSiz = Dimsiz('}Dimensions'); iLoop = 1; While(iLoop <= vDimSiz); vDimension = Dimnm('}Dimensions', iLoop); vCube = '}ElementAttributes_' | vDimension; If(CubeExists(vCube)>0); vSearchS = 'AttrS(' | cQuote | Upper(vDimension) | cQuote; vSearchN = 'AttrN(' | cQuote | Upper(vDimension) | cQuote; If(Scan(vSearchS, vRule) > 0 % Scan(vSearchN, vRule) > 0); If(pCube @<> vCube); CellPutN(1, cRules_CubeName, pCube, vCube, 'Dependency'); CellPutN(1, cRules_CubeName, pCube, vCube, 'Rule'); AddCubeDependency(vCube, pCube); EndIf; EndIf; EndIf; iLoop = iLoop + 1; End; vRule = ''; # the semicolon is not in the rux line, so do nothing with this line # Else; EndIf; 575,3 #****Begin: Generated Statements*** #****End: Generated Statements**** 576,CubeAction=1511 DataAction=1503 CubeLogChanges=0 930,0 638,1 804,0 1217,1 900, 901, 902, 938,0 937, 936, 935, 934, 932,0 933,0 903, 906, 929, 907, 908, 904,0 905,0 909,0 911, 912, 913, 914, 915, 916, 917,0 918,1 919,0 920,50000 921,"" 922,"" 923,0 924,"" 925,"" 926,"" 927,""