<% '================================================== ' Module: ots_table.asp ' ' Synopsis: Object Task Selector Table Formatting Functions ' ' Copyright (c) Microsoft Corporation. All rights reserved. '================================================== %> <% ' ' -------------------------------------------------------------- ' T A B L E O B J E C T ' -------------------------------------------------------------- ' Const OTS_TABLE_DIM = 22 Const OTS_TABLE_OBJECT = 0 Const OTS_TABLE_TYPE = 1 Const OTS_TABLE_CAPTION = 2 Const OTS_TABLE_DESC = 3 Const OTS_TABLE_COLS = 4 Const OTS_TABLE_ROWS = 5 Const OTS_TABLE_ID = 6 Const OTS_TABLE_TASKS = 7 Const OTS_TABLE_SORT = 8 Const OTS_TABLE_TASKS_TITLE = 9 Const OTS_TABLE_PKEY_NAME = 10 Const OTS_TABLE_MULTI_SELECT = 11 Const OTS_TABLE_AUTO_INIT = 12 Const OTS_TABLE_SEARCHING = 13 Const OTS_TABLE_PAGING = 14 Const OTS_TABLE_PAGE_MAX = 15 Const OTS_TABLE_PAGE_MIN = 16 Const OTS_TABLE_PAGE_CURRENT = 17 Const OTS_TABLE_PAGE_RESET = 18 Const OTS_TABLE_SORT_COL = 19 Const OTS_TABLE_SORT_SEQ = 20 Const OTS_TABLE_SORT_SET = 21 Const OTS_TABLE_OBJECT_ID = "Table" ' Note: DO NOT LOCALIZE Const OTS_TABLE_TYPE_BASIC = 1 DIM OTS_TABLE_NEXT_ID OTS_TABLE_NEXT_ID = 1 ' -------------------------------------------------------------- ' ' Function: OTS_CreateTable ' ' Synopsis: Create a new object task selection object ' ' Arguments: [in] Caption for the table ' [in] Description of what the table contains ' ' Returns: The Table object ' ' -------------------------------------------------------------- Public Function OTS_CreateTable(ByVal TableCaption, ByVal TableDescription) Dim Table() ReDim Table(OTS_TABLE_DIM) SA_ClearError() Table(OTS_TABLE_OBJECT) = OTS_TABLE_OBJECT_ID Table(OTS_TABLE_TYPE) = OTS_TABLE_TYPE_BASIC Table(OTS_TABLE_CAPTION) = TableCaption Table(OTS_TABLE_DESC) = TableDescription Table(OTS_TABLE_COLS) = Null Table(OTS_TABLE_PKEY_NAME) = "PKey" Table(OTS_TABLE_MULTI_SELECT) = FALSE Table(OTS_TABLE_AUTO_INIT) = TRUE Table(OTS_TABLE_SEARCHING) = FALSE Table(OTS_TABLE_PAGING) = FALSE Table(OTS_TABLE_PAGE_MAX) = 0 Table(OTS_TABLE_PAGE_MIN) = 1 Table(OTS_TABLE_PAGE_CURRENT) = 1 Table(OTS_TABLE_PAGE_RESET) = FALSE Table(OTS_TABLE_SORT_COL) = 0 Table(OTS_TABLE_SORT_SEQ) = "A" Table(OTS_TABLE_SORT_SET) = FALSE OTS_CreateTable = Table End Function ' -------------------------------------------------------------- ' ' Function: OTS_IsValidTable ' ' Synopsis: Verify that the reference object is a valid table. To ' be valid it must be an array, of the correct size, ' which has OTS_TABLE_OBJECT_ID as the first element ' ' Note: This is the only function in this package ' that DOES NOT RETURN FAILURE CODES. If ' the table is valid it returns true. Otherwise ' it returns false. ' ' Returns: True if the table is valid, otherwise false ' ' -------------------------------------------------------------- Private Function OTS_IsValidTable(ByRef Table) Dim bisValidTable bisValidTable = false If (IsArray(Table)) Then If ( UBound(Table) >= OTS_TABLE_DIM ) Then Dim tableObject tableObject = Table(OTS_TABLE_OBJECT) If (tableObject = OTS_TABLE_OBJECT_ID) Then bisValidTable = true Else SA_TraceOut "OTS_IsValidTable", "(tableObject <> OTS_TABLE_OBJECT_ID)" End If Else SA_TraceOut "OTS_IsValidTable", "(UBound(Table) >= OTS_TABLE_DIM)" End If Else SA_TraceOut "OTS_IsValidTable", "(IsArray(Table))" End If OTS_IsValidTable = bisValidTable End Function ' -------------------------------------------------------------- ' ' Function: OTS_IsAutoInitEnabled ' ' Synopsis: Check and return the state of the auto initialization ' option. ' ' Arguments: [in] Table ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_IsAutoInitEnabled(ByRef Table) Dim rc OTS_IsAutoInitEnabled = FALSE SA_ClearError() If (OTS_IsValidTable(Table)) Then OTS_IsAutoInitEnabled = Table(OTS_TABLE_AUTO_INIT) Else Call SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsAutoInitEnabled") End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_EnableAutoInit ' ' Synopsis: Toggle the auto initialization option. ' ' Arguments: [in] Table ' [in] bEnabled boolean flag, TRUE to enable, FALSE to disable ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_EnableAutoInit(ByRef Table, ByVal bEnable) Dim rc OTS_EnableAutoInit = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_AUTO_INIT) = bEnable Else OTS_EnableAutoInit = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_EnableAutoInit") End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_IsSearchEnabled ' ' Synopsis: Check and return the state of the searching option ' ' Arguments: [in] Table ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_IsSearchEnabled(ByRef Table) Dim rc OTS_IsSearchEnabled = FALSE SA_ClearError() If (OTS_IsValidTable(Table)) Then Dim aColAttributes Dim colCount If ( 0 = OTS_GetColumnAttributes(Table, aColAttributes)) Then For colCount = 0 to UBound(aColAttributes)-1 If (aColAttributes(colCount) AND OTS_COL_SEARCH) Then OTS_IsSearchEnabled = TRUE End If Next End If Else Call SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsSearchEnabled") End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_EnableSearch ' ' Synopsis: Toggle the search capability ' ' Arguments: [in] Table ' [in] bEnabled boolean flag, TRUE to enable, FALSE to disable ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- 'Public Function OTS_EnableSearch(ByRef Table, ByVal bEnable) ' Dim rc ' OTS_EnableSearch = gc_ERR_SUCCESS ' ' SA_ClearError() ' If (OTS_IsValidTable(Table)) Then ' Table(OTS_TABLE_SEARCHING) = bEnable ' Else ' OTS_EnableSearch = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_EnableSearch") ' End If ' 'End Function ' -------------------------------------------------------------- ' ' Function: OTS_IsPagingEnabled ' ' Synopsis: Check and return the state of the paging option ' ' Arguments: [in] Table ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_IsPagingEnabled(ByRef Table) Dim rc OTS_IsPagingEnabled = FALSE SA_ClearError() If (OTS_IsValidTable(Table)) Then OTS_IsPagingEnabled = Table(OTS_TABLE_PAGING) Else Call SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsPagingEnabled") End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_EnablePaging ' ' Synopsis: Toggle the paging capability ' ' Arguments: [in] Table ' [in] bEnabled boolean flag, TRUE to enable, FALSE to disable ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_EnablePaging(ByRef Table, ByVal bEnable) Dim rc OTS_EnablePaging = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_PAGING) = bEnable Table(OTS_TABLE_PAGE_MAX) = -1 Table(OTS_TABLE_PAGE_MIN) = 1 Table(OTS_TABLE_PAGE_CURRENT) = 1 Else OTS_EnablePaging = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_EnablePaging") End If End Function Public Function OTS_SetPagingRange(ByRef Table, ByVal iMin, ByVal iMax, ByVal iCurrent) Dim rc OTS_SetPagingRange = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_PAGE_RESET) = TRUE Table(OTS_TABLE_PAGE_MAX) = iMax Table(OTS_TABLE_PAGE_MIN) = iMin Table(OTS_TABLE_PAGE_CURRENT) = iCurrent Else OTS_SetPagingRange = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetPagingRange") End If End Function Private Function OTS_IsPagingReset(ByRef Table) Dim rc OTS_IsPagingReset = FALSE SA_ClearError() If (OTS_IsValidTable(Table)) Then OTS_IsPagingReset = Table(OTS_TABLE_PAGE_RESET) Else Call SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsPagingReset") End If End Function Public Function OTS_GetPagingRange(ByRef Table, ByRef bEnabled, ByRef iPageMin, ByRef iPageMax, ByRef iPageCurrent) If ( OTS_IsPagingEnabled(Table) ) Then bEnabled = TRUE If ( Len(Trim(Request.QueryString(FLD_PagingPageCurrent))) > 0 ) Then iPageMin = CInt(SA_GetParam(FLD_PagingPageMin)) iPageMax = CInt(SA_GetParam(FLD_PagingPageMax)) iPageCurrent = CInt(SA_GetParam(FLD_PagingPageCurrent)) Else If ( OTS_IsPagingReset(Table) ) Then iPageMax = CInt(Table(OTS_TABLE_PAGE_MAX)) iPageMin = CInt(Table(OTS_TABLE_PAGE_MIN)) iPageCurrent = CInt(Table(OTS_TABLE_PAGE_CURRENT)) Else iPageMin = CInt(SA_GetParam(FLD_PagingPageMin)) iPageMax = CInt(SA_GetParam(FLD_PagingPageMax)) iPageCurrent = CInt(SA_GetParam(FLD_PagingPageCurrent)) End If End If Else bEnabled = FALSE iPageMin = 1 iPageMax = 0 iPageCurrent = 1 End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTableTasksTitle ' ' Synopsis: Set the tasks title ' ' Arguments: [in] Table ' [in] Title ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_SetTableTasksTitle(ByRef Table, ByVal TasksTitle) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_TASKS_TITLE) = TasksTitle Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTableTasksTitle") End If OTS_SetTableTasksTitle = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableTasksTitle ' ' Synopsis: Get the tasks title ' ' Arguments: [in] Table ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_GetTableTasksTitle(ByRef Table, ByRef tasksTitle) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then tasksTitle = Table(OTS_TABLE_TASKS_TITLE) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTableTasksTitle") End If OTS_GetTableTasksTitle = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTableMultiSelection ' ' Synopsis: Enable OTS table multi selection capability. ' ' Arguments: [in] Table ' [in] bEnableMultiSelect set to TRUE to enable, FALSE to disable ' ' Return gc_ERR_SUCCESS or error code ' ' History: Added SAK 2.0 ' ' -------------------------------------------------------------- Public Function OTS_SetTableMultiSelection(ByRef Table, ByVal bEnableMultiSelect) SA_ClearError() OTS_SetTableMultiSelection = gc_ERR_SUCCESS If (OTS_IsValidTable(Table)) Then Call SA_TraceOut("OTS_TABLE", "Setting multi selection to " + CStr(bEnableMultiSelect)) Table(OTS_TABLE_MULTI_SELECT) = bEnableMultiSelect Else OTS_SetTableMultiSelection = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsTableMultiSelection") End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_IsTableMultiSelection ' ' Synopsis: Check to see if multi selection is enabled. ' ' Arguments: [in] Table ' ' Return TRUE if multi selection is enabled, otherwise false ' ' History: Added SAK 2.0 ' ' -------------------------------------------------------------- Public Function OTS_IsTableMultiSelection(ByRef Table) SA_ClearError() OTS_IsTableMultiSelection = FALSE If (OTS_IsValidTable(Table)) Then OTS_IsTableMultiSelection = Table(OTS_TABLE_MULTI_SELECT) Else Call SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsTableMultiSelection") End If End Function ' -------------------------------------------------------------- ' ' Function: OTS_EnableTableSort ' DEPRECATED in SAK 2.0 Replaced with OTS_SortTable ' ' Synopsis: Enable table sorting. If sorting is enabled it is performed ' inside ServeTable before the table is rendered. ' ' ' Arguments: [in] Table ' [in] EnableSort true to sort, false to not sort ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_EnableTableSort(ByRef Table, ByVal EnableSort) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_SORT) = EnableSort Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_EnableTableSort") End If OTS_EnableTableSort = rc End Function ' --------------------------------------------------------------------------- ' ' Function: OTS_SetTableSortCriteria ' ' Synopsis: Set the advanced sorting options for the OTS table. If the table is sorted ' externally, this API can be used to indicated the current sort column and ' sort sequence, which is indicated visually in the UI by display of a sort ' sequence image in the current sort column. It's unnecessary to call this ' API if the table is sorted using OTS_SortTable. ' ' Arguments: [in] Table ' [in] sortCol Index number of current sort column ' [in] sortSeq Sort sequence, "A" for ascending, "D" for descending ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_SetTableSortCriteria(ByRef Table, ByVal sortCol, ByVal sortSeq) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_SORT_COL) = sortCol Table(OTS_TABLE_SORT_SEQ) = sortSeq Table(OTS_TABLE_SORT_SET) = TRUE Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTableSortCriteria") End If OTS_SetTableSortCriteria = rc End Function Private Function OTS_IsColumnSortEnabled(ByRef Table) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then rc = Table(OTS_TABLE_SORT_SET) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsColumnSortEnabled") End If OTS_IsColumnSortEnabled = rc End Function Private Function OTS_GetTableSortSequence(ByRef Table, ByRef sortSequence) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then sortSequence = SA_GetParam(FLD_SortingSequence) If ( Len(Trim(sortSequence)) <= 0 ) Then sortSequence = Table(OTS_TABLE_SORT_SEQ) End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTableSortSequence") End If OTS_GetTableSortSequence = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableSortColumn ' ' Synopsis: Get the sort column number ' ' Arguments: [in] Table ' [out] sortCol zero (0) based index of soft column ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableSortColumn(ByRef Table, ByRef sortCol) Dim columns Dim col Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then ' ' If SAK 2.0 If ( SA_GetVersion() >= gc_V2 ) Then ' ' Use the current sort column parameter if available sortCol = SA_GetParam(FLD_SortingColumn) If ( Len(Trim(sortCol)) > 0 ) Then sortCol = CInt(sortCol) OTS_GetTableSortColumn = rc Exit Function ' ' Else if the sort criteria was set then use it ElseIf ( TRUE = Table(OTS_TABLE_SORT_SET) ) Then sortCol = Table(OTS_TABLE_SORT_COL) OTS_GetTableSortColumn = rc Exit Function ' ' Otherwise drop through and use SAK 1.x logic Else End If End If If (IsArray(Table(OTS_TABLE_COLS))) Then Dim colCount Dim count Dim found found = false columns = Table(OTS_TABLE_COLS) colCount = UBound(columns) For count = 0 to colCount-1 Dim bIsColSort rc = OTS_IsColumnSort(columns(count), bIsColSort) If ( rc <> gc_ERR_SUCCESS) Then OTS_GetTableSortColumn = rc Exit Function End If If (bIsColSort) Then sortCol = count found = true count = colCount+1 End If Next If (NOT found) Then sortCol = 0 End If Else rc = SA_SetLastError(OTS_ERR_NO_COLUMNS, "OTS_GetTableSortColumn") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTableSortColumn") End If OTS_GetTableSortColumn = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_IsTableSortEnabled ' ' Synopsis: Check to see if table sorting is enabled ' ' Arguments: [in] Table ' [out] bIsSortEnabledOut set with value of sort enabled flag ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_IsTableSortEnabled(ByRef Table, ByRef bIsSortEnabledOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then bIsSortEnabledOut = Table(OTS_TABLE_SORT) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_IsTableSortEnabled") End If OTS_IsTableSortEnabled = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_AddTableTask ' ' Synopsis: Add a Task to the table ' ' Arguments: [in] Table ' [in] Task to be added to the table. Task must have been ' created with the CreateTask API. ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_AddTableTask(ByRef Table, ByRef Task) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If (OTS_IsValidTask(Task)) Then Dim tasks Dim currentTasks Dim taskCount ' ' Get the array ' currentTasks = Table(OTS_TABLE_TASKS) If IsArray(currentTasks) Then ' ' Resize the array ' tasks = currentTasks taskCount = UBOUND(tasks) taskCount = taskCount + 1 ReDim Preserve tasks(taskCount) Else ' ' Create the array ' taskCount = 1 ReDim tasks(taskCount) End If ' ' Store the new task ' tasks(taskCount-1) = Task ' ' Update the OTS_TABLE_TASKS ' Table(OTS_TABLE_TASKS) = tasks Else rc = SA_SetLastError(OTS_ERR_INVALID_TASK, "OTS_AddTableTask") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_AddTableTask") End If OTS_AddTableTask = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_AddTableColumn ' ' Synopsis: Add a column to the table ' ' Arguments: [in] Table ' [in] Column to be added to the table ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_AddTableColumn(ByRef Table, ByRef Column) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If (OTS_IsValidColumn(Column)) Then Dim cols Dim currentCols Dim colCount ' ' Get the current column array ' currentCols = Table(OTS_TABLE_COLS) If IsArray(currentCols) Then ' ' Resize the existing cols array ' cols = currentCols colCount = UBOUND(cols) colCount = colCount + 1 ReDim Preserve cols(colCount) Else ' ' Create the cols array ' colCount = 1 ReDim cols(colCount) End If ' ' Store the new column ' cols(colCount-1) = Column ' ' Update the OTS_TABLE_COLS ' Table(OTS_TABLE_COLS) = cols Else rc = SA_SetLastError(OTS_ERR_INVALID_COLUMN, "OTS_AddTableColumn") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_AddTableColumn") End If OTS_AddTableColumn = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_AddTableRow ' ' Synopsis: Add a row to the table ' ' Arguments: [in] Table ' [in] RowIn row array to be added to the table, ' must be an array type. ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_AddTableRow(ByRef Table, ByRef RowIn) Dim rows Dim currentRows Dim rowCount Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If (IsArray(RowIn)) Then ' ' Get the current rows array ' currentRows = Table(OTS_TABLE_ROWS) If IsArray(currentRows) Then ' ' Resize the existing array ' rows = currentRows rowCount = UBOUND(rows) rowCount = rowCount + 1 ReDim Preserve rows(rowCount) Else ' ' Create the array ' rowCount = 1 ReDim rows(rowCount) End If ' ' Store the new row ' rows(rowCount-1) = RowIn ' ' Update the OTS_TABLE_COLS ' Table(OTS_TABLE_ROWS) = rows Else rc = SA_SetLastError(OTS_ERR_ROW_NOT_ARRAYTYPE, "OTS_AddTableRow") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_AddTableRow") End If OTS_AddTableRow = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTableRow ' ' Synopsis: Set a row to the table ' ' Arguments: [in] Table ' [in] RowIn row array to be set in the table, ' must be an array type. ' [in] RowNumber zero (0) based index of the row to ' be set. ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_SetTableRow(ByRef Table, ByVal RowNumber, ByRef RowIn) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then ' ' If the rows have not been presized, do it now ' If (NOT IsArray(Table(OTS_TABLE_ROWS))) Then rc = OTS_SetTableRowCount(Table, RowNumber+1) End If ' ' Grow the rows array if necessary ' If (UBound(Table(OTS_TABLE_ROWS)) <= RowNumber) Then rc = OTS_SetTableRowCount(Table, RowNumber+1 ) End If ' ' Row data must be Array type ' If (IsArray(RowIn) ) Then Table(OTS_TABLE_ROWS)(RowNumber) = RowIn Else rc = SA_SetLastError(OTS_ERR_ROW_NOT_ARRAYTYPE, "OTS_SetTableRow") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTableRow") End If OTS_SetTableRow = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTableRowCount ' ' Synopsis: Set the number of rows in the table. This function can ' be used to initialize the size of the rows array or to ' grow or shrink the size of the rows array. Previous ' contents of the rows array are preserved. ' ' Arguments: [in] Table ' [in] RowCount ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_SetTableRowCount(ByRef Table, ByVal RowCount) Dim rows Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If (IsArray(Table(OTS_TABLE_ROWS))) Then ' ' Resize the existing rows array ' rows = Table(OTS_TABLE_ROWS) ReDim Preserve rows(rowCount) Table(OTS_TABLE_ROWS) = rows Else ' ' Create the rows array ' ReDim rows(rowCount) Table(OTS_TABLE_ROWS) = rows End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTableRowCount") End If OTS_SetTableRowCount = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTablePKeyName ' ' Synopsis: Get the name of the PKey query string ' ' Arguments: [in] Table ' [out] PKeyName ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTablePKeyName(ByRef Table, ByRef pKeyName) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then pKeyName = Table(OTS_TABLE_PKEY_NAME) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTablePKeyName") End If OTS_GetTablePKeyName = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTablePKeyName ' ' Synopsis: Set the name of the PKey query string ' ' Arguments: [in] Table ' [in] PKeyName ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_SetTablePKeyName(ByRef Table, ByVal pKeyName) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then Table(OTS_TABLE_PKEY_NAME) = pKeyName Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTablePKeyName") End If OTS_SetTablePKeyName = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetKeyColumnForTable ' ' Synopsis: Get the key column number ' ' Arguments: [in] Table ' [out] keyCol zero (0) based index of key column ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetKeyColumnForTable(ByRef Table, ByRef keyCol) Dim columns Dim col Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If (IsArray(Table(OTS_TABLE_COLS))) Then Dim colCount Dim count Dim found found = false columns = Table(OTS_TABLE_COLS) colCount = UBound(columns) For count = 0 to colCount-1 Dim bIsColKey rc = OTS_IsColumnKey(columns(count), bIsColKey) If ( rc <> gc_ERR_SUCCESS) Then OTS_GetKeyColumnForTable = rc Exit Function End If If (bIsColKey) Then keyCol = count found = true count = colCount+1 End If Next If (NOT found) Then keyCol = 0 End If Else rc = SA_SetLastError(OTS_ERR_NO_COLUMNS, "OTS_GetKeyColumnForTable") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetKeyColumnForTable") End If OTS_GetKeyColumnForTable = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTableRows ' ' Synopsis: Set all rows for the table ' ' Arguments: [in] Table ' [in] RowsIn Two dimensional array of table rows ' ' Returns: gc_ERR_SUCCESS if rows returned ' OTS_ERR_NO_ROWS if no rows exist ' OTS_ERR_INVALID_TABLE if the table is invalid ' ' -------------------------------------------------------------- Private Function OTS_SetTableRows(ByRef Table, ByRef RowsIn) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If ( IsArray( RowsIn ) ) Then Table(OTS_TABLE_ROWS) = RowsIn Else rc = OTS_ERR_NO_ROWS End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTableRows") End If OTS_SetTableRows = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableRows ' ' Synopsis: Get all rows for the table ' ' Arguments: [in] Table ' [out] RowsOut Two dimensional array of table rows ' ' Returns: gc_ERR_SUCCESS if rows returned ' OTS_ERR_NO_ROWS if no rows exist ' OTS_ERR_INVALID_TABLE if the table is invalid ' ' -------------------------------------------------------------- Private Function OTS_GetTableRows(ByRef Table, ByRef RowsOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then If ( IsArray( Table(OTS_TABLE_ROWS)) ) Then RowsOut = Table(OTS_TABLE_ROWS) Else rc = OTS_ERR_NO_ROWS End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTableRows") End If OTS_GetTableRows = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableRow ' ' Synopsis: Get a row for the table ' ' Arguments: [in] Table ' [out] RowOut array variable for a single row ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableRow(ByRef Table, ByVal RowNumber, ByRef RowOut) Dim rows Dim rc rc = gc_ERR_SUCCESS SA_ClearError() rc = OTS_GetTableRows(Table, rows) If ( rc = gc_ERR_SUCCESS ) Then If (RowNumber < UBound(rows) ) Then If IsArray(rows(RowNumber)) Then RowOut = rows(RowNumber) Else rc = SA_SetLastError(OTS_ERR_ROW_NOT_ARRAYTYPE, _ "OTS_GetTableRow") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_ROW, _ "OTS_GetTableRow") End If Else ' ' Error already set by GetTableRows ' End If OTS_GetTableRow = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableTasks ' ' Synopsis: Get the table tasks ' ' Arguments: [in] Table ' [out] TasksOut Two dimensional array of table tasks ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableTasks(ByRef Table, ByRef TasksOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then If (IsArray(Table(OTS_TABLE_TASKS))) Then TasksOut = Table(OTS_TABLE_TASKS) Else rc = SA_SetLastError(OTS_ERR_TASK_NOT_ARRAYTYPE, _ "OTS_GetTableTasks") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_GetTableTasks") End If OTS_GetTableTasks = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableColumns ' ' Synopsis: Get the table columns ' ' Arguments: [in] Table ' [out] ColumnsOut array of table columns ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableColumns(ByRef Table, ByRef ColumnsOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then If (IsArray(Table(OTS_TABLE_COLS))) Then ColumnsOut = Table(OTS_TABLE_COLS) Else rc = SA_SetLastError(OTS_ERR_NO_COLUMNS, _ "OTS_GetTableColumns") End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_GetTableColumns") End If OTS_GetTableColumns = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetColumnAttributes ' ' Synopsis: Get the array of column attributes ' ' Arguments: [in] Table ' [out] AttributesOut array of column attributes, one ' element for each column. ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetColumnAttributes(ByRef Table, ByRef AttributesOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then Dim columns rc = OTS_GetTableColumns(Table, columns) If (rc = gc_ERR_SUCCESS) Then Dim count Dim index Dim Attributes() count = UBound(columns) ReDim Attributes(count) For index = 0 to (count-1) Dim colAttr rc = OTS_GetColumnFlags(columns(index), colAttr) if ( rc <> gc_ERR_SUCCESS) Then OTS_GetColumnAttributes = rc Exit Function End If Attributes(index) = colAttr Next AttributesOut = Attributes Else ' ' Error set by GetTableColumns ' End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_GetColumnAttributes") End If OTS_GetColumnAttributes = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableCaption ' ' Synopsis: Get the table heading ' ' Arguments: [in] Table ' [out] CaptionOut the caption ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableCaption(ByRef Table, ByRef CaptionOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then CaptionOut = Table(OTS_TABLE_CAPTION) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_GetTableCaption") End If OTS_GetTableCaption = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableDescription ' ' Synopsis: Get the table description ' ' Arguments: [in] Table ' [out] TitleOut the title ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableDescription(ByRef Table, ByRef TitleOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then TitleOut = Table(OTS_TABLE_DESC) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_GetTableDescription") End If OTS_GetTableDescription = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableID ' ' Synopsis: Get the table's HTML ID TAG. If the table ID has ' not been set then we initialize it here. ' ' Arguments: [in] Table ' [out] TableId id of the table ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableID(ByRef Table, ByRef TableIdOut) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then If (IsEmpty(Table(OTS_TABLE_ID))) Then Table(OTS_TABLE_ID) = OTS_TABLE_OBJECT_ID _ + CStr(OTS_TABLE_NEXT_ID) OTS_TABLE_NEXT_ID = OTS_TABLE_NEXT_ID + 1 End If TableIdOut = Table(OTS_TABLE_ID) Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTableID") End If OTS_GetTableID = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_SetTableID ' ' Synopsis: Set the table ID ' ' Arguments: [in] Table ' [in] TableID table id ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Public Function OTS_SetTableID(ByRef Table, ByVal TableID) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table) ) Then Table(OTS_TABLE_ID) = TableID Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_SetTableID") End If OTS_SetTableID = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_GetTableSize ' ' Synopsis: Calculate the table size in Rows and Columns ' ' Arguments: [in] Table ' [out] RowsOut rows in longest column ' [out] ColsOut number of columns ' ' Return gc_ERR_SUCCESS or error code ' ' -------------------------------------------------------------- Private Function OTS_GetTableSize(ByRef Table, ByRef RowsOut, ByRef ColsOut) Dim rowCt Dim colCt Dim count Dim columns Dim rows Dim rc rc = gc_ERR_SUCCESS SA_ClearError() If (OTS_IsValidTable(Table)) Then rc = OTS_GetTableColumns(Table, columns) If (rc = gc_ERR_SUCCESS) Then colCt = UBound(columns) rc = OTS_GetTableRows(Table, rows) If (rc = gc_ERR_SUCCESS) Then rowCt = UBound(rows) RowsOut = rowCt ColsOut = colCt Else If ( rc = OTS_ERR_NO_ROWS ) Then rc = gc_ERR_SUCCESS SA_ClearError() RowsOut = 0 ColsOut = colCt End If End If Else ' ' GetTableColumns set last error ' End If Else rc = SA_SetLastError(OTS_ERR_INVALID_TABLE, "OTS_GetTableSize") End If OTS_GetTableSize = rc End Function ' -------------------------------------------------------------- ' ' Function: OTS_ServeTable ' ' Synopsis: Render the specified table as HTML ' ' -------------------------------------------------------------- Public Function OTS_ServeTable(ByRef Table) OTS_ServeTable = OTS_ServeTaskViewTable(Table) End Function Public Function OTS_ServeTaskViewTable(ByRef Table) Dim rc rc = gc_ERR_SUCCESS SA_ClearError() ' ' Validate the table ' If (NOT OTS_IsValidTable(Table)) Then ' ' This is a big function so I am short circuiting the exit point ' to make it easier to follow the logic. ' OTS_ServeTaskViewTable = _ SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_ServeTaskViewTable") Exit Function End If ' ' Check sorting option, this SAK 1.X backward compatibility feature. ' SAK 2.0 uses should be calling OTS_SortTable(Table, sortCol, sortSequence, bUseCompareCallback) ' If ( SA_GetVersion() < gc_V2 ) Then Dim bSortEnabled rc = OTS_IsTableSortEnabled(Table, bSortEnabled) If ( rc <> gc_ERR_SUCCESS ) Then ' ' IsTableSortEnabled set the last error. I am short circuiting the ' exit point to make the logic easier to follow. ' OTS_ServeTaskViewTable = rc Exit Function End If If ( bSortEnabled ) Then 'Call SA_TraceOut("OTS_TABLE", "Sorting table") Dim sseq Call OTS_GetTableSortSequence(Table, sseq) Dim keyCol Call OTS_GetTableSortColumn(Table, keyCol) rc = OTS_SortTable(Table, keyCol, sseq, FALSE) End If End If ' ' Outer Table for nifty border and Caption ' If OTS_IsAutoInitEnabled(Table) Then OTS_EmitAutoInitJavascript(Table) End If 'Response.Write(""+vbCrLf) ' ' Caption ' Dim tableCaption rc = OTS_GetTableCaption(Table, tableCaption) If ( rc <> gc_ERR_SUCCESS) Then OTS_ServeTaskViewTable = rc Exit Function End If ' Page Title bar was moved into FRAMEWORK in SAK 2.0. Following code is to allow ' SAK 1.x code to continue working. If ( NOT SA_IsCurrentPageType(PT_AREA)) Then Response.Write("
") End If ' ' Description ' Dim tableDescription rc = OTS_GetTableDescription(Table, tableDescription) If ( rc <> gc_ERR_SUCCESS) Then OTS_ServeTaskViewTable = rc Exit Function End If 'Response.Write("
") 'Response.Write(Server.HTMLEncode(tableDescription)+"
") Response.Write(Server.HTMLEncode(tableDescription)) 'Put it in a div to center everything ' Response.Write("
") Response.Write("

") ' ' Inner Table containing Items, spacer column, and Tasks ' Response.Write("
"+vbCrLf) Call OTS_RenderTableToolBar(Table) ' ' Inner Table has one row Response.Write(""+vbCrLf) ' ' First cell contains items ' Response.Write(""+vbCrLf) ' ' Second cell is a divider between items and tasks ' 'Response.Write(""+vbCrLf) ' ' Third cell contains tasks ' Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write("
"+vbCrLf) ' ' DIV to handle scrolling of items: I thing this DIV is obsolete... ' If ( OTS_IsExplorer() ) Then Response.Write("
"+vbCrLf) End If ' ' Render the items ' rc = OTS_RenderTaskItems(Table) If ( rc <> gc_ERR_SUCCESS ) Then OTS_ServeTaskViewTable = rc End If Dim sPKeyParamName Call OTS_GetTablePKeyName(table, sPKeyParamName) Dim bColumnSortingEnabled bColumnSortingEnabled = OTS_IsColumnSortEnabled(Table) Dim sortCol Call OTS_GetTableSortColumn( Table, sortCol) Dim sortSequence Call OTS_GetTableSortSequence(Table, sortSequence) sortSequence = SA_GetParam(FLD_SortingSequence) If ( Len(Trim(sortSequence)) <= 0 ) Then sortSequence = "A" End If Dim iPageMin Dim iPageMax Dim iPageCurrent Dim bPagingEnabled Call OTS_GetPagingRange( Table, bPagingEnabled, iPageMin, iPageMax, iPageCurrent) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) if ( bPagingEnabled ) Then Response.Write(""+vbCrLf) Else Response.Write(""+vbCrLf) End If If ( bColumnSortingEnabled ) Then Response.Write(""+vbCrLf) Else Response.Write(""+vbCrLf) End If Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) If ( OTS_IsExplorer() ) Then Response.Write("
"+vbCrLf) End If Response.Write("
 "+vbCrLf) ' ' Render the tasks ' rc = OTS_RenderTasks(Table) If ( rc <> gc_ERR_SUCCESS ) Then OTS_ServeTaskViewTable = rc End If Response.Write("
"+vbCrLf) If ( SA_GetVersion() >= gc_V2 ) Then ' ' Form tag is emitted by Framework Else Response.Write(""+vbCrLf) End If 'Response.Write(""+vbCrLf) 'Response.Write(""+vbCrLf) 'Response.Write(""+vbCrLf) 'Response.Write(""+vbCrLf) Call OTS_OutputTasksScript(Table) OTS_ServeTaskViewTable = rc End Function Private Function OTS_RenderTableToolBar(ByRef Table) DIM columns Dim maxRows Dim maxColumns Dim rc Dim rowCount Dim colCount Dim columnObject Dim attributesForColumns Dim bMultiSelect ' ' Get the table extents (Max rows and columns) ' rc = OTS_GetTableSize(Table, maxRows, maxColumns) If (rc <> gc_ERR_SUCCESS ) Then ' ' GetTableSize set the last error ' OTS_RenderTableToolBar = rc Exit Function End If ' ' Get the table columns ' rc = OTS_GetTableColumns(Table, columns) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTableToolBar = rc Exit Function End If ' ' Get attributes for all the columns ' rc = OTS_GetColumnAttributes(Table, attributesForColumns) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTableToolBar = rc Exit Function End If If OTS_IsTableMultiSelection(table) Then bMultiSelect=1 Else bMultiSelect=0 End If ' ' OPTIMIZATION: ' From here on we want the upper limit for the column count ' maxColumns = maxColumns - 1 Dim bEnableSearch Dim bEnablePaging Dim iPageMin Dim iPageMax Dim iPageCurrent bEnableSearch = OTS_IsSearchEnabled(Table) Call OTS_GetPagingRange(Table, bEnablePaging, iPageMin, iPageMax, iPageCurrent) If ( bEnableSearch OR bEnablePaging ) Then Response.Write(""+vbCrLf) Response.Write("") Response.Write("") Response.Write("") If ( bEnableSearch ) Then Dim L_SEARCH_TEXT Dim L_SEARCH_BUTTON Dim iCurrentSelectedCol L_SEARCH_TEXT = GetLocString("sacoremsg.dll", "40200BBA", "") L_SEARCH_BUTTON = GetLocString("sacoremsg.dll", "40200BBB", "") iCurrentSelectedCol = Int(SA_GetParam(FLD_SearchItem)) Response.Write("") Response.Write("") Response.Write("") Response.Write("") End If If ( bEnablePaging ) Then Dim sAttributes Dim sImage Dim sPageID Dim L_NEXT_BUTTON Dim L_PREVIOUS_BUTTON Dim L_PAGE_X_OF_Y Dim aParam(2) Dim repString aParam(0) = CStr(iPageCurrent) aParam(1) = CStr(iPageMax - iPageMin + 1) repString = aParam L_PAGE_X_OF_Y = GetLocString("sacoremsg.dll", "40200BBE", repString) If ( bEnableSearch ) Then Response.Write("") End If L_NEXT_BUTTON = "" L_PREVIOUS_BUTTON = "" If ( iPageCurrent > iPageMin ) Then sAttributes = " title="""+Server.HTMLEncode(L_PAGE_X_OF_Y)+ """" sImage = "images/butPagePreviousEnabled.gif" Else sAttributes = "DISABLED title="""+Server.HTMLEncode(L_PAGE_X_OF_Y)+ """" sImage = "images/butPagePreviousDisabled.gif" End If Response.Write("") If ( iPageCurrent < iPageMax ) Then sAttributes = " title="""+Server.HTMLEncode(L_PAGE_X_OF_Y)+ """" sImage = "images/butPageNextEnabled.gif" Else sAttributes = "DISABLED title="""+Server.HTMLEncode(L_PAGE_X_OF_Y)+ """" sImage = "images/butPageNextDisabled.gif" End If Response.Write("") End If Response.Write("") Response.Write(""+vbCrLf) Response.Write("
"+L_SEARCH_TEXT+"") Response.Write("") Response.Write("") Response.Write("") Response.Write("") Response.Write("") Call SA_ServeOnClickButton(L_SEARCH_BUTTON, "images/butSearchEnabled.gif", "javascript:OTS_SubmitSearch();", 40, 28, "") Response.Write("") Response.Write("      ") Response.Write("") Call SA_ServeOnClickButton(L_PREVIOUS_BUTTON, sImage, "javascript:OTS_SubmitPageChange('prev');", 0, 0, sAttributes) Response.Write("") Call SA_ServeOnClickButton(L_NEXT_BUTTON, sImage, "javascript:OTS_SubmitPageChange('next');", 0, 0, sAttributes) Response.Write("") Response.Write("
") Response.Write("") Response.Write(""+vbCrLf) End If OTS_RenderTableToolBar = rc End Function Private Function OTS_RenderTaskItems(ByRef Table) DIM columns Dim maxRows Dim maxColumns Dim rc Dim rowCount Dim colCount Dim columnObject Dim colAlign Dim attributesForColumns Dim keyColumn Dim sInputType Dim bMultiSelect Dim L_CELLTRUNCATION_TEXT Dim sortCol L_CELLTRUNCATION_TEXT = GetLocString("sacoremsg.dll", "40200BBC", "") ' ' Validate the table ' If (NOT OTS_IsValidTable(Table)) Then OTS_RenderTaskItems = SA_SetLastError(OTS_ERR_INVALID_TABLE, _ "OTS_RenderTaskItems") Exit Function End If ' ' Get the table extents (Max rows and columns) ' rc = OTS_GetTableSize(Table, maxRows, maxColumns) If (rc <> gc_ERR_SUCCESS ) Then ' ' GetTableSize set the last error ' OTS_RenderTaskItems = rc Exit Function End If ' ' Get the table columns ' rc = OTS_GetTableColumns(Table, columns) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If ' ' Get Key column for table ' rc = OTS_GetKeyColumnForTable(Table, keyColumn) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If ' ' Get attributes for all the columns ' rc = OTS_GetColumnAttributes(Table, attributesForColumns) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If If OTS_IsTableMultiSelection(table) Then sInputType = "checkbox" bMultiSelect=1 Else sInputType = "radio" bMultiSelect=0 End If Response.Write(""+vbCrLf) ' ' OPTIMIZATION: ' From here on we want the upper limit for the column count ' maxColumns = maxColumns - 1 ' ' Write column headings ' Response.Write(""+vbCrLf) Dim bIsFirstVisibleCol bIsFirstVisibleCol = true Dim sSortSequence Dim sSortImage Dim sSortImageURL Call OTS_GetTableSortSequence(Table, sSortSequence) If (Trim(UCase(sSortSequence)) = "A") Then sSortSequence = "A" sSortImageURL = "images/butSortAscending.gif" Else sSortSequence = "D" sSortImageURL = "images/butSortDescending.gif" End If Call OTS_GetTableSortColumn(Table, sortCol) For colCount = 0 to (maxColumns) Dim sOnClickColHeading If (attributesForColumns(colCount) AND OTS_COL_FLAG_HIDDEN) Then ' ' Column is hidden ' Else Dim colHeading Dim bIsSortable columnObject = columns(colCount) If ( attributesForColumns(colCount) AND OTS_COL_SORT ) Then bIsSortable = TRUE Else bIsSortable = FALSE End If rc = OTS_GetColumnHeading(columnObject, colHeading) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If rc = OTS_GetColumnAlign(columnObject, colAlign) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If sSortImage = "" sOnClickColHeading = " " If ( SA_GetVersion() >= gc_V2 ) Then If ( TRUE = bIsSortable ) Then sOnClickColHeading = " onClick=""OTS_SubmitSort('"+CStr(colCount)+"', '"+sSortSequence+"');"" " If ( colCount = sortCol ) Then sSortImage = "" End If End If End If If (bIsFirstVisibleCol) Then bIsFirstVisibleCol = false If ( bMultiSelect ) Then Response.Write("") Else Response.Write("") End If Response.Write("") Else Response.Write("") End If End If Next Response.Write(""+vbCrLf) ' ' Write table data ' Dim keyId Dim selectId Dim tableId rc = OTS_GetTableID(Table, tableId) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If selectId = Quote("TVItem_"+tableId) Dim selectRowClass If (OTS_IsExplorer()) Then selectRowClass = "SelectedRow" Else selectRowClass = "AlternatingDark" End If Dim thisRowClass Dim maxDispRows Dim minDispRows minDispRows = 9 'We will always output at least 1+ this many rows maxDispRows = Max(minDispRows, (maxRows - 1)) If ( maxRows > 0 ) Then For rowCount = 0 to (maxDispRows) Dim rowData Dim sOnRowClicked ' ' OnClick handler only applies to data rows ' If ( rowCount < maxRows ) Then sOnRowClicked = "onClick=""return OTS_RowClicked('"+CStr(rowCount)+"')"" " Else sOnRowClicked = "" End If If ( rowCount Mod 2 ) Then ' onselectstart='return false;' ' onmousemove=""OTS_OnMouseMove('"+CStr(rowCount)+"', '"+CStr(bMultiSelect)+"');"" ' onmousedown=""return OTS_OnMouseDown('"+CStr(rowCount)+"', '"+CStr(bMultiSelect)+"');"" ' onmouseup=""return OTS_OnMouseUp('"+CStr(rowCount)+"', '"+CStr(bMultiSelect)+"');"" Response.Write(""+vbCrLf) thisRowClass = "AlternatingLight" Else If (rowCount = 0) Then Response.Write(""+vbCrLf) Else Response.Write(""+vbCrLf) End If thisRowClass = "AlternatingDark" End If If ( rowCount < maxRows ) Then rc = OTS_GetTableRow(Table, rowCount, rowData) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTaskItems = rc Exit Function End If ' ' Verify row has correct number of columns ' If (maxColumns < UBound(rowData)) Then SA_TraceOut "ServeTaskViewTable", ("maxColumns:"+_ CStr(maxColumns)+_ " < UBound(rowData):"+_ CStr(UBound(rowData))) Exit Function End If ' ' Extract the key column ' keyId = CStr(rowData(keyColumn)) ' ' Write the first column ' Dim onClickHandler keyId = FormatJScriptString(keyId) onClickHandler = " onClick=""return OTS_OnItemClicked('"+keyId+"','"+CStr(rowCount)+"');"" " 'If (OTS_IsExplorer()) Then ' onClickHandler = " onClick='OTS_OnItemClicked("""+keyId+""","""+CStr(rowCount)+""");' " 'Else ' onClickHandler = " onClick='OTS_OnItemClicked("""+keyId+""","""+CStr(rowCount)+""");'" 'End If 'No vertical line on the first cell, it contains the input(radio/checkbox) control Response.Write(""+vbCrLf) For colCount = 0 to maxColumns Dim cellData If (attributesForColumns(colCount) AND OTS_COL_FLAG_HIDDEN) Then ' ' Column is hidden ' Else If ( rowCount < maxRows ) Then Dim sCellTitle Dim iCellWidth ' ' Column is visible ' cellData = rowData(colCount) colAlign = (columns(colCount))(OTS_COL_ALIGN) sCellTitle = "" If ( OTS_IsColumnWidthDynamic(columns(colCount)) ) Then Call OTS_GetColumnWidth( columns(colCount), iCellWidth) If ( LEN(cellData) > iCellWidth ) Then sCellTitle = " title=""" + Server.HTMLEncode(cellData) + """ " cellData = Left(cellData, iCellWidth) + L_CELLTRUNCATION_TEXT End If End If Response.Write(""+vbCrLf) Else 'output a blank cell Response.Write(""+vbCrLf) End If End If Next ' Columns Response.Write(""+vbCrLf) Next ' Rows Else For rowCount = 0 to minDispRows If ( rowCount Mod 2 ) Then Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) For colCount = 0 to (maxColumns) If (attributesForColumns(colCount) AND OTS_COL_FLAG_HIDDEN) Then Else Response.Write(""+vbCrLf) End If Next Else Response.Write(""+vbCrLf) Response.Write(""+vbCrLf) For colCount = 0 to (maxColumns) If (attributesForColumns(colCount) AND OTS_COL_FLAG_HIDDEN) Then Else Response.Write(""+vbCrLf) End If Next End If Response.Write(""+vbCrLf) Next End If Response.Write("
") Response.Write("") Response.Write(" "+_ Server.HTMLEncode(colHeading)+" "+sSortImage+" "+_ Server.HTMLEncode(colHeading)+" "+sSortImage+" 
"+vbCrLf) 'Response.Write("") If ( rowCount = 0 ) Then If ( bMultiSelect = 1 ) Then Response.Write("") Else Response.Write("") End If Response.Write("") 'Need to make sure that we have an array so we will send a hidden radio button If ( maxRows = 1 ) Then Response.Write("") Response.Write("") End If Else Response.Write("") Response.Write("") End If Else 'output a blank cell Response.Write(" "+vbCrLf) End If Response.Write(vbCrLf+""+vbCrLf) ' ' Write the cell data ' If cellData="" then Response.Write(" ") Else Response.Write(Server.HTMLEncode((cellData))) End If Response.Write(" 
  
  
"+vbCrLf) OTS_RenderTaskItems = rc End Function Private Function OTS_RenderTasks(ByRef Table) Dim rc DIM tasks DIM rowCount DIM maxRows DIM tasksTitle DIM pKeyName Dim bMultiSelect rc = gc_ERR_SUCCESS ' ' Validate the table ' If (NOT OTS_IsValidTable(Table)) Then OTS_RenderTasks = SA_SetLastError(OTS_ERR_INVALID_TABLE,_ "OTS_RenderTasks") Exit Function End If ' ' Get tasks data ' rc = OTS_GetTableTasks(Table, tasks) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTasks = rc Exit Function End If ' ' Get tasks title ' rc = OTS_GetTableTasksTitle(Table, tasksTitle) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTasks = rc Exit Function End If Dim selectId Dim tableId rc = OTS_GetTableID(Table, tableId) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTasks = rc Exit Function End If rc = OTS_GetTablePKeyName( Table, pKeyName) If (rc <> gc_ERR_SUCCESS) Then OTS_RenderTasks = rc Exit Function End If If OTS_IsTableMultiSelection(table) Then bMultiSelect = 1 Else bMultiSelect = 0 End If selectId = "TVItem_"+tableId Response.Write(""+vbCrLf) ' ' Task Table Header Response.Write("") Response.Write("") Response.Write(""+vbCrLf) ' ' Write task table ' maxRows = UBound(tasks) For rowCount = 0 to (maxRows-1) Dim taskName Dim taskDesc Dim taskLink Dim task Dim taskHoverText Dim taskPageType Response.Write("") task = tasks(rowCount) If (NOT IsArray(task)) Then OTS_RenderTasks = SA_SetLastError(OTS_ERR_TASK_NOT_ARRAYTYPE,_ "OTS_RenderTasks") Exit Function End If taskName = task(OTS_TASK_TASK) 'taskDesc = FormatJScriptString(task(OTS_TASK_DESC)) taskDesc = Server.HTMLEncode(SA_EscapeQuotes(task(OTS_TASK_DESC))) taskHoverText = " title=""" + Server.HTMLEncode(task(OTS_TASK_DESC)) + """" taskLink = task(OTS_TASK_LINK) taskLink = FormatJScriptString(taskLink) taskPageType = task(OTS_TASK_PAGE_TYPE) 'Response.Write("") Response.Write("") ' ' Navigator is not compliant with HTML 4.0, work around uses hyperlink ' 'Else ' Response.Write("") ' Response.Write(Server.HTMLEncode(taskName)) ' Response.Write("") 'End If Response.Write("") Response.Write(""+vbCrLf) Next Response.Write("
") Response.Write(Server.HTMLEncode(tasksTitle)) Response.Write("
") Response.Write("") ' ' Output a task row ' ' ' IExplorer properly supports onclick event in SPAN's (HTML 4.0) ' 'If (OTS_IsExplorer() ) Then Response.Write("
") 'Response.Write("
") 'Response.Write("  ") Response.Write(Server.HTMLEncode(taskName)) 'Response.Write("
 
"+vbCrLf) OTS_RenderTasks = rc End Function Private Function OTS_OutputTasksScript(ByRef Table) Dim rc DIM tasks DIM task DIM rowCount DIM maxRows DIM taskFunction rc = gc_ERR_SUCCESS ' ' Validate the table ' If (NOT OTS_IsValidTable(Table)) Then OTS_OutputTasksScript = SA_SetLastError(OTS_ERR_INVALID_TABLE,_ "OTS_OutputTasksScript") Exit Function End If ' ' Get tasks data ' rc = OTS_GetTableTasks(Table, tasks) If (rc <> gc_ERR_SUCCESS) Then Response.Write(""+vbCrLf) OTS_OutputTasksScript = rc Exit Function End If ' ' Write task table ' maxRows = UBound(tasks) Response.Write(""+vbCrLf) OTS_OutputTasksScript = rc End Function Public Function Quote(s) Quote = "'"+s+"'" End Function ' -------------------------------------------------------------- ' ' Function: Max ' ' Synopsis: Calculate the maximum between two values ' ' -------------------------------------------------------------- Private Function Max(ByVal op1, ByVal op2) If ( op1 > op2 ) Then Max = op1 Else Max = op2 End If End Function Function OTS_IsExplorer() If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") Then OTS_IsExplorer = true Else OTS_IsExplorer = false End If End Function Private Function OTS_EmitAutoInitJavascript(ByRef table) Response.Write(""+vbCrLf) End Function %>