'encoding UTF-8 Do not remove or change this line! '************************************************************************* ' ' Licensed to the Apache Software Foundation (ASF) under one ' or more contributor license agreements. See the NOTICE file ' distributed with this work for additional information ' regarding copyright ownership. The ASF licenses this file ' to you under the Apache License, Version 2.0 (the ' "License"); you may not use this file except in compliance ' with the License. You may obtain a copy of the License at ' ' http://www.apache.org/licenses/LICENSE-2.0 ' ' Unless required by applicable law or agreed to in writing, ' software distributed under the License is distributed on an ' "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY ' KIND, either express or implied. See the License for the ' specific language governing permissions and limitations ' under the License. ' '************************************************************************* '* '* short description : Tools for Tables '* '************************************************************************ '* ' #1 fCloseRelationDesign ' #1 fCloseTableDesign ' #1 fCloseTableView ' #1 fCompareMatrixValues ' #1 fCreateRefFile ' #1 fCreateTable ' #1 fDeleteTable ' #1 fFindTable ' #1 fInsertIntoTable ' #1 fOpenRelationDesign ' #1 fOpenNew TableDesign ' #1 fOpenTable ' #1 fReadFile '* '\*********************************************************************** '------------------------------------------------------------------------------ function tCompareMatrixValues(sDSName as string, sRefFileUrl as string, cTable_or_Query as string, sTableName as string, iRowPos as integer, iColPos as integer, sWordSeperator as string) as integer 'sDSName = data source name f.e. Bibliography 'sRefFileUrl = URL to your reference file (os indipendent - extension .ttr) f.e. base\optional\input\reference_tables\test.ttr 'cTable_or_Query = differ between comparing reference file with a table (t) or a query-table (q) 'sTableName = name of table or query-table to compare with f.e. Table1 'iRowPos,iColPos = row and column amount of reference and comparing table (must have the same size ; begin with 1 ; 0 is leftout, but has to be added) dim i as integer dim j as integer 'counter' dim aMatrix(iRowPos, iColPos) as string printlog "" if cTable_or_Query = "t" then printlog "--- Compare Table with Reference Table ---" if cTable_or_Query = "q" then printlog "--- Compare Query with Reference Table ---" call fReadFile(sRefFileUrl, aMatrix(), sWordSeperator) call hNewDocument '/// open Beamer and open datasource ViewCurrentDatabase sleep(1) printlog "open database beamer" '/// switch between table and querie search dim bfind_ok as boolean 'placeholder if cTable_or_Query = "t" then bfind_ok = ffindTableInBeamer(sDSName,sTableName) printlog "found proper Table: " & sTableName endif if cTable_or_Query = "q" then bfind_ok = ffindQuery(sDSName, sTableName) printlog "found proper Query: " & sTableName endif if bfind_ok then '/// Choosing for the right table sleep(1) Kontext "DatabaseSelection" DatabaseSelection.TypeKeys "",TRUE ' # type CTRL + SHIFT + E to go from the DatabaseSelection to the TableView' sleep(1) printlog "found and opened proper table" '/// comparing data in table with reference table printlog "start comparing data in table with reference table" Kontext "TableView" dim ivalue_ok as integer ivalue_ok = 0 TableView.TypeKeys "",TRUE TableView.TypeKeys "",TRUE TableView.TypeKeys "",TRUE for i = 1 to iRowPos -1 for j = 1 to iColPos -1 setclipboard("") 'here the values are read out and put in clipboard for comparing TableView.TypeKeys "",TRUE TableView.TypeKeys "",TRUE 'printlog "i: " & i 'printlog "j: " & j 'printlog "getClipboard: " & getclipboard() 'printlog "matrix: " & aMatrix(i,j) 'here the values are compared if getclipboard() <> aMatrix(i,j) then ivalue_ok = ivalue_ok + 1 warnlog ivalue_ok & ". fault in pos(row/col): " & i & "/" & j & " - should be: " & aMatrix(i,j) & " but is: " & getclipboard() endif 'printlog ivalue_ok & ". No !!! foult but TEST - should be: " & aMatrix(i,j) & " but is: " & getclipboard() next j next i '/// Result part if ivalue_ok = 0 then printlog "** Comparing procedure without faults" tCompareMatrixValues = ivalue_ok else warnlog "Comparing procedure went wrong: " + ivalue_ok + " differences found!" tCompareMatrixValues = 1 endif else if cTable_or_Query = "t" then warnlog "Table: " + sTableName + " not found - Test aborted" if cTable_or_Query = "q" then warnlog "Query: " + sTableName + " not found - Test aborted" endif printlog "*** End Testcase" sleep 1 ViewCurrentDatabase hCloseDocument end function '------------------------------------------------------------------------------ function fCreateRefFile(sDSName as string, cTable_or_Query as string, sTableName as string, sWordSeperator as string) as string dim bfind_ok as boolean 'check if right table found dim iNumber as Integer 'needed for open reference file dim iColAmount as integer dim iRowAmount as integer 'counter dim sReadContCol as string dim sContColMem as string 'read out content string and its memo for getting table column ammount dim sCellValue as string dim sCellValueMem as string 'read out content string and its memo for writing in reference table dim sRefTableName as string sRefTableName = ConvertPath("user\work\" & sTableName & ".ttr") dim sRefFileUrl as string sRefFileUrl = gOfficePath & sRefTableName printlog "path for reference table: " & sRefFileUrl call hNewDocument '/// open Beamer and open datasource ViewCurrentDatabase sleep(1) printlog "open database beamer" '/// switch between table and querie search if cTable_or_Query = "t" then printlog "search for proper Table: " & sTableName bfind_ok = ffindTableInBeamer(sDSName,sTableName) endif if cTable_or_Query = "q" then printlog "search for proper Query: " & sTableName bfind_ok = ffindQuery(sDSName, sTableName) endif if bfind_ok then '/// jumping to the right table sleep(1) Kontext "DatabaseSelection" DatabaseSelection.TypeKeys "",TRUE ' # type CTRL + SHIFT + E to go from the DatabaseSelection to the TableView' sleep(1) '/// check the row and column amount printlog "check the row and column amount" Kontext "TableView" sReadContCol = 1 'init sContColMem = 1 'init iColAmount = 0 'init iRowAmount = AllRecords.caption() while sReadContCol = sContColMem sContColMem = sReadContCol sReadContCol = CurrentRecord.getText() TableView.TypeKeys "",TRUE TableView.TypeKeys "",TRUE iColAmount = iColAmount +1 wend iColAmount = iColAmount -1 'printlog "sReadContCol: " & sReadContCol printlog "size of table (columns/rows): " & iColAmount & "/" & iRowAmount fCreateRefFile = iColAmount & "," & iRowAmount TableView.TypeKeys "",TRUE TableView.TypeKeys "",TRUE TableView.TypeKeys "",TRUE sleep(1) '/// reading out values from table, create a reference table and input values in printlog "start reading out values from table and writing in ref table" iNumber = Freefile dim i as integer 'counter dim j as integer 'counter Open sRefFileUrl for Output as iNumber for i = 1 to iRowAmount for j = 1 to iColAmount Kontext "TableView" TableView.TypeKeys "" sCellValue = getclipboard() TableView.TypeKeys "" if j <> 1 then sCellValueMem = sCellValueMem & sWordSeperator endif sCellValueMem = sCellValueMem & sCellValue 'printlog i & j & " inhalt: " & sCellValue setclipboard("") next j print #iNumber, sCellValueMem sCellValueMem = "" next i Close #iNumber sleep(1) '/// warning if table not found - without proper table the test make no sense else warnlog "Table: " + sTableName + " not found." fCreateRefFile = "" endif sleep 1 ViewCurrentDatabase hCloseDocument end function '------------------------------------------------------------------------------ function fReadFile(sRefFileUrl as string, aMatrix() as string, sWordSep as string) 'connecting and opening file dim iNumber as Integer iNumber = Freefile 'position and content variables dim sColumn As String dim iRowPos as integer dim iColPos as integer dim iPos as integer dim iPos1 as integer 'pointer for searching position 'init position in matrix iRowPos = 1 iColPos = 1 '/// open reference file and store it into an array (matrix) printlog "search for the reference file, open it and store content in an array" sRefFileUrl = gOfficePath + ConvertPath(sRefFileUrl) Open sRefFileUrl for Input as iNumber while not eof(iNumber) Line Input #iNumber, sColumn iPos1 = 1 'startposition iPos = 1 'startposition while iPos <> 0 'if iPos = 0 then no more sWordSeperator found -> end of column reached iPos = Instr(iPos +1,sColumn,sWordSep) 'check column for sWordSeperator 'printlog "iPos: " & iPos 'printlog "iPos1: " & iPos1 if iPos <> 1 then '<> 1 -> no content found aMatrix(iRowPos,iColPos) = Mid(sColumn,iPos1,iPos - iPos1) 'cut content and put into array 'printlog "iRow: " & iRowPos 'printlog "iCol: " & iColPos 'printlog "aMatrix: " & aMatrix(iRowPos,iColPos) iPos1 = iPos +1 iColPos = iColPos +1 else warnlog "reference file is empty" endif wend iRowPos = iRowPos +1 iColPos = 1 wend printlog "**end of reading out reference table" end function '-------------------------------------------------------------------- function fCreateTable(aFieldTypeContent(),sTableName,optional sCatalog,optional sSchema) '/// create a table with the given FieldTypes '/// sSchema and sCatalog are optional. '/// If the optional parameter is not given then it's set to "" '/// parameter: '/// aFieldTypeContent: an arry with the table field data '///        the array have to look like the following '///        array(1,1) = first_field_name '///        array(1,2) = first_field_type '///        array(2,1) = second_field_name '///        array(2,2) = second_field_type '///        ... '/// sTableName: the name of the table '/// optional sCatalog: the name of the table catalog '/// optional sSchema: the name of the table schema Dim i as integer 'counter Dim iFieldNumber as integer 'counter dim iNoDS as integer 'number of data source in listbox Dim iNumberOfFieldTypes as integer 'field type memory Dim iFieldTypesCounter as integer 'counter Dim iIndex as integer 'counter Dim sFieldType as string 'help var for fieldtypes Dim sTypeName as String 'help var for fieldtypes if ( IsMissing(sCatalog) ) then sCatalog = "" endif if ( IsMissing(sSchema) ) then sSchema = "" endif call fDeleteTable(sTableName) ' delete the table if exists call fOpenNewTableDesign Kontext "TableDesignTable" for iFieldNumber = 1 to ubound(aFieldTypeContent) - 1 printlog "create field : " + aFieldTypeContent(iFieldNumber,1) Fieldname.TypeKeys aFieldTypeContent(iFieldNumber,1) , TRUE Fieldname.TypeKeys "" , TRUE sleep 1 sTypeName = "[ " + aFieldTypeContent(iFieldNumber,2) + " ]" iNumberOfFieldTypes = FieldType.getitemCount() for iFieldTypesCounter = 1 to iNumberOfFieldTypes sFieldType = FieldType.getitemText(iFieldTypesCounter) iIndex = Instr(sFieldType,sTypeName) if iIndex <> 0 then printlog "FieldType : " + sFieldType iFieldTypesCounter = iNumberOfFieldTypes ' stops the for loop if proper fieldtype found' endif next '/// choose proper field type FieldType.Select(sFieldType) 'listbox entry nr' sleep 1 FieldType.TypeKeys "" , TRUE Description.TypeKeys "" , TRUE if( CellDescription.isVisible() ) then CellDescription.TypeKeys "" , TRUE endif printlog "-------------------------------" next sleep(1) Kontext "TableDesignTable" TableDesignTable.usemenu MenuSelect MenuGetItemId (1) sleep(1) menuselect MenuGetItemId (7) sleep(1) Kontext "DatabaseTableSaveAs" printlog "save table as "+ sTableName TableName.setText sTableName sleep(1) '/// catalog handling if sCatalog <> "" then if Catalog.IsVisible then Catalog.SetText sCatalog printlog "inserting catalog name: " + sCatalog else warnlog "The Catalog-Name could not be inserted" endif endif '/// schema handling if sSchema <> "" then if Schema.IsVisible then Schema.SetText sSchema printlog "inserting schema name: " + sSchema else warnlog "The Schema-Name could not be inserted" endif endif DatabaseTableSaveAs.OK sleep 1 Kontext "Messagebox" if Messagebox.Exists(1) then Messagebox.Yes printlog "create a primary key " end if sleep 1 ' a sql exception appear. Try to get the error text Kontext "Messagebox" if Messagebox.Exists(1) then MessageBox.Click 5 ' click the more button Kontext "SQLException" if SQLException.exists() then warnlog Errortext.getText() SQlException.OK end if Kontext "MessageBox" MessageBox.OK end if call fCloseTableDesign end function '-------------------------------------------------------------------- function fDeleteTable(sTableName as string) '/// delete the table with the given name '/// parameter: '/// sTableName: the table which shall be deleted if ( fFindTable(sTableName) = true ) then printlog "Table found press delete" Kontext "ContainerView" 'TableTree.TypeKeys "" , true Delete ' uno-Slot .uno:DB/Delete sleep(1) Kontext "Active" Active.Yes fDeleteTable = true else fDeleteTable = false end if end function '-------------------------------------------------------------------- function fOpenTable(sTableName as string) '/// open the table with the given name '/// parameter: '/// sTableName: the table which shall be opened if ( fFindTable(sTableName) = true ) then printlog "Table found -> open" Kontext "ContainerView" OpenTable ' uno-Slot .uno:DB/Open sleep(1) fOpenTable = true else fOpenTable = false end if end function '-------------------------------------------------------------------- function fFindTable(sTableName as string) '/// select the table with the given name in the table container '/// parameter: '/// sTableName: the table which shall be selected Dim iNumbersOfTables as integer Dim i as integer Kontext "ContainerView" ViewTables fFindTable = false if ( Not TableTree.exists(1) ) then qaerrorlog "The table tree doesn't exists" ' May be a messagebox appear click OK to close it Kontext "MessageBox" if MessageBox.exists(1) then qaerrorlog MessageBox.getText() while MessageBox.exists() ' sometimes there are more then 1 message boxe MessageBox.OK wend endif exit function end if iNumbersOfTables = TableTree.getItemCount() ' this select the first entry TableTree.TypeKeys "" TableTree.TypeKeys "" for i = 1 to iNumbersOfTables TableTree.TypeKeys "" 'printlog "i = " + i 'printlog "TableName.getItemCount = " + TableTree.getItemCount if TableTree.getItemCount > iNumbersOfTables then iNumbersOfTables = TableTree.getItemCount() endif 'printlog "TableName.getSeltext = " + TableTree.getSeltext if TableTree.getSeltext = sTableName then fFindTable = true exit for endif TableTree.TypeKeys "" next sleep(1) end function '-------------------------------------------------------------------- function fInsertIntoTable( aFieldContent(), sTableName) '/// insert data into a table '/// parameter: '/// aFieldContent: an arry with the table data '///        the array have to look like the following '///        array(1,1) = first_value_for_first_record '///        array(1,2) = second_value_for_first_record '///        array(2,1) = first_value_for_second_record '///        array(2,2) = second_value_for_second_record '///        ... '/// sTableName: the name of the table Dim iCounterOfRecords as integer Dim iCounterOfFields as integer Dim iNumberOfRecords as integer Dim iNumberOfFields as integer iNumberOfRecords = ubound(aFieldContent) iNumberOfFields = ubound(aFieldContent,2) call fOpenTable(sTableName) Kontext "TableView" for iCounterOfRecords = 1 to iNumberOfRecords for iCounterOfFields = 1 to iNumberOfFields TableView.TypeKeys aFieldContent(iCounterOfRecords,iCounterOfFields),TRUE TableView.TypeKeys "",TRUE next next sleep 1 call fCloseTableView end function '------------------------------------------------------------------------- function fCloseTableDesign(optional bSave) '/// close an open table design '/// parameter: '/// optional bSave: if true then the table design is saved sleep(1) Kontext "TableDesignTable" TableDesignTable.UseMenu ' bug file / close close the whole database hMenuSelectNr(1) ' the file menu hMenuSelectNr(4) ' the Close Window 'hMenuSelectNr(6) ' the window menu 'hMenuSelectNr(1) ' the Close Window Kontext "Messagebox" if Messagebox.Exists(3) then Messagebox.No end if fCloseTableDesign = true end function '------------------------------------------------------------------------- function fCloseTableView() '/// close an open table view '/// parameter: sleep(1) Kontext "TableView" TableView.UseMenu ' bug file / close close the whole database 'hMenuSelectNr(1) ' the file menu 'hMenuSelectNr(4) ' the Close Window hMenuSelectNr(6) ' the window menu hMenuSelectNr(1) ' the Close Window ' if messages box appear because of unsaved record click no in the dialog Kontext "Messagebox" if Messagebox.Exists(3) then Messagebox.No end if fCloseTableView = true end function '------------------------------------------------------------------------- function fOpenRelationDesign() '/// open a new relation design '/// parameter: Kontext "DATABASE" if ( Database.NotExists(3) ) then fOpenRelationDesign = false exit function end if Database.MouseDown(50,50) Database.MouseUp(50,50) sleep(1) Database.UseMenu hMenuSelectNr(5) hMenuSelectNr(1) fOpenRelationDesign = true end function '------------------------------------------------------------------------- function fCloseRelationDesign(optional bSave) '/// close an open relation design '/// parameter: '/// optional bSave: if true then the relation design is saved Kontext "RelationDesign" RelationDesign.UseMenu ' bug file / close close the whole database hMenuSelectNr(1) ' the file menu hMenuSelectNr(4) ' the Close Window 'hMenuSelectNr(6) ' the window menu 'hMenuSelectNr(1) ' the Close Window Kontext "Messagebox" if Messagebox.Exists(3) then if ( IsMissing( bSave ) ) then Messagebox.No else if bSave then Messagebox.Yes else Messagebox.No endif endif end if fCloseRelationDesign = true end function '------------------------------------------------------------------------- function fOpenNewTableDesign printlog "fOpenNewTableDesign called" printlog "check if Database exists" Kontext "DATABASE" Database.MouseDown(50,50) Database.MouseUp(50,50) if ( Database.NotExists(3) ) then fOpenNewTableDesign = false warnlog "The Database windows doesn't exists" exit function end if sleep(1) printlog "open new table design" NewTableDesign sleep(2) fOpenNewTableDesign = true end function '------------------------------------------------------------------------- function fOpenTableInDesign(sTableName as String) printlog "fOpenTableInDesign called" printlog "check if Database exists" Kontext "DATABASE" Database.MouseDown(50,50) Database.MouseUp(50,50) if ( Database.NotExists(3) ) then fOpenTableInDesign = false warnlog "The Database windows doesn't exists" exit function end if sleep(1) printlog "open new table design" call fFindTable(sTableName) EditTable Kontext "TableDesignTable" if ( not TableDesignTable.exists(3) ) then warnlog "The Table design doesn't open" fOpenTableInDesign = false exit function end if fOpenTableInDesign = true end function '------------------------------------------------------------------------- function fFindTableInBeamer(sDSName1,sTableName1) '/// select a table with the given name in the beamer '/// parameter: '/// sDSName1: the name of the datasource '/// sTableName1: the name of the table dim i as integer dim bfindTable as boolean dim iNoDS as integer dim iNoTable as integer bfindTable = false Kontext "DatabaseBeamer" Kontext "DatabaseSelection" iNoDS = DatabaseSelection.getItemCount for i = 1 to iNoDS DatabaseSelection.Select i if DatabaseSelection.getText = sDSName1 then i = iNoDS bfindTable = true endif next i if (bfindTable = false) then warnlog "Datasource " + sDSName1 + " not found!" exit function else printlog "Datasource " + sDSName1 + " found!" ' I set the bfindTable flag again back to false ' for the next test of the table bfindTable = false endif wait 500 DatabaseSelection.TypeKeys "" , true wait 500 DatabaseSelection.TypeKeys "" , true wait 500 DatabaseSelection.TypeKeys "" , true wait 500 DatabaseSelection.TypeKeys "" , true wait 500 DatabaseSelection.TypeKeys "" , true wait 500 iNoTable = DatabaseSelection.getItemCount dim ii as integer ii = DatabaseSelection.GetSelIndex for i = ii to iNoTable DatabaseSelection.Select i if DatabaseSelection.getText = sTableName1 then i = iNoTable sleep 1 bfindTable = true endif next i fFindTableInBeamer = bfindTable end function '------------------------------------------------------------------------- function fStartTableWizard() '/// start the table wizard '/// parameter: Kontext "DATABASE" if ( Database.NotExists(3) ) then fStartTableWizard = false exit function end if Database.MouseDown(50,50) Database.MouseUp(50,50) sleep(1) ViewTables StartTableWizard sleep(2) fStartTableWizard = true end function