J
James Palmer
Guest
PROCEDURE CreateBrowse: /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ip-TableHandle AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER ip-BrowseHandle AS HANDLE NO-UNDO. DEFINE VARIABLE lv-ColList AS CHARACTER NO-UNDO. IF VALID-HANDLE(lv-DefaultBufferHandle) THEN lv-DefaultBufferHandle:EMPTY-TEMP-TABLE(). EMPTY TEMP-TABLE tt-Columns. lv-RecordCount = 0. CREATE BUFFER lv-Buffer FOR TABLE ip-TableHandle
EFAULT-BUFFER-HANDLE. FieldLoop: DO lv-i = 1 TO lv-Buffer:NUM-FIELDS: lv-Field = lv-Buffer:BUFFER-FIELD(lv-i). /* IF GetAttribute(lv-Field:HELP,"Display") EQ "No" THEN*/ /* NEXT FieldLoop. */ CREATE tt-Columns. ASSIGN tt-Columns.ColumnName = lv-Field:NAME tt-Columns.ColumnLabel = lv-Field:COLUMN-LABEL tt-Columns.ColumnFormat = lv-Field:FORMAT tt-Columns.OrigDataType = lv-Field
ATA-TYPE tt-Columns.DataType = IF GetAttribute(lv-Field:HELP,"DataType") NE "" THEN GetAttribute(lv-Field:HELP,"DataType") ELSE lv-Field
ATA-TYPE tt-Columns.ColumnOrder = lv-i tt-Columns.DisplayCol = GetAttribute(lv-Field:HELP,"Display") NE "No". END. IF VALID-HANDLE(lv-TTHandle) THEN DO: DELETE OBJECT(lv-TTHandle). lv-TTHandle = ?. END. CREATE TEMP-TABLE lv-TTHandle. FOR EACH tt-Columns BY tt-Columns.ColumnOrder: lv-TTHandle:ADD-NEW-FIELD(tt-Columns.ColumnName,tt-Columns.DataType,?,tt-Columns.ColumnFormat,?,tt-Columns.ColumnLabel,tt-Columns.ColumnLabel). END. lv-TTHandle:TEMP-TABLE-PREPARE("tt-" + ip-BrowseHandle:NAME). lv-DefaultBufferHandle = lv-TTHandle
EFAULT-BUFFER-HANDLE. CREATE QUERY lv-Query. lv-Query:SET-BUFFERS(lv-Buffer). lv-QueryString = "FOR EACH " + ip-TableHandle:NAME. lv-Query:QUERY-PREPARE(lv-QueryString). lv-Query:QUERY-OPEN. DO WHILE lv-Query:GET-NEXT(): lv-RecordCount = lv-RecordCount + 1. lv-DefaultBufferHandle:BUFFER-CREATE. FOR EACH tt-Columns: IF tt-Columns.OrigDataType NE tt-Columns.DataType THEN DO: CASE tt-Columns.DataType: WHEN "CHARACTER" THEN lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = STRING(lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE). WHEN "DECIMAL" THEN lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = DEC(lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE). WHEN "INTEGER" THEN lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = INT(lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE). END CASE. END. ELSE lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE. END. END. lv-Query:QUERY-CLOSE. DELETE OBJECT lv-Query. CREATE QUERY lv-Query. lv-Query:SET-BUFFERS(lv-DefaultBufferHandle). IF lv-TheSortColumn NE "" THEN lv-QueryString = "FOR EACH " + lv-TTHandle:NAME + " BY " + lv-TTHandle:NAME + "." + lv-TheSortColumn + (IF lv-UpDown EQ "Down" THEN " DESC" ELSE ""). ELSE lv-QueryString = "FOR EACH " + lv-TTHandle:NAME. lv-Query:QUERY-PREPARE(lv-QueryString). ASSIGN ip-BrowseHandle:QUERY = lv-Query. FOR EACH tt-Columns WHERE tt-Columns.DisplayCol: tt-Columns.ColumnHandle = ip-BrowseHandle:ADD-LIKE-COLUMN(lv-TTHandle:NAME + "." + tt-Columns.ColumnName). END. lv-Query:QUERY-OPEN. IF lv-Query:NUM-RESULTS GT 0 THEN APPLY "VALUE-CHANGED" TO ip-BrowseHandle. ASSIGN ip-BrowseHandle:SENSITIVE = TRUE ip-BrowseHandle:COLUMN-MOVABLE = FALSE ip-BrowseHandle:ALLOW-COLUMN-SEARCHING = TRUE ip-BrowseHandle:COLUMN-RESIZABLE = TRUE. ON "START-SEARCH" OF ip-BrowseHandle PERSISTENT RUN "StartSearch" IN THIS-PROCEDURE (INPUT ip-BrowseHandle). RUN GenerateBrowsePopupMenu IN THIS-PROCEDURE (INPUT ip-BrowseHandle). IF lv-TheSortColumn NE "" THEN RUN RedoSort IN THIS-PROCEDURE (INPUT ip-BrowseHandle). END PROCEDURE.
Continue reading...
Continue reading...