– the JukeBox toolkit – transparency, flexibility, speed and comfort! Brynjar Hasle, Chemistry as www.chemistry.no
Operational requirements: Slick and consistent User Interface Exceptional development speed (low, that is) Automation of trivial tasks Transparency client-server / appserver Minimal setup Very small client footprint
ResizeLib.p (free download from www.chemistry.no) AbHack! (PSDN) Tools: ABL (9.1d+) MS tabstrip and dynTreeView.w (alt. pure4GLtv on PSDN) or better: Controls.dll from www.williams-eng.com ResizeLib.p (free download from www.chemistry.no) AbHack! (PSDN) + A couple of nice AppBuilder extensions.
Basic Elements ObjLib.p User...w JBox...w UiLib.p AsLib.p Client: User...w JBox...w UiLib.p AsLib.p Server: Retrieve data: -getTempTableJoin.p -getFieldList.p getFieldValues.p (FIND) -getTempTable (input <fill>.p) -checkCurrentChanged.p .. + custom query procs Store data: -serverTrans.p -runProc.p -processQuery.p .. + custom BL procs
Client in OERA perspective ObjLib.p ”Component Model” User...w ”View” ttObject JBox...w ”View” UiLib.p ”Presenter” ttEvent ttObjectLink ttAttribute AsLib.p ”Service Adapter” ”Common infrastructure”
Server, get data (getTempTableJoin.p) Calculated fields - with runtime parameters and filter option Support for persistent procedures for calc.fields Filter on calculated fields Filter on joined buffers (subselect and not exists) Filter on values that are not even in query buffers.. Multiple joins to same table Sorting on calculated fields Query count, count distinct Accumulation of totals and subtotals Support for duplicate field names Support for extent-fields Validation of query against schema security Returns temp-table handle (and hence the data) pluss additional context info (read/write restrictions)
More on query service.. Paging implemented by keeping transfer count Server query always starts from FIRST/LAST Client rejects duplicates Sub-selects (pre-scan) Done by dynamically adding TT to query: Sub-select processes query “backwards” Index (EACH), timeout and record count check! All records (in query) are processed when Sorting on calculated values Querying distinct values Grand totals involve calculated fields All records are traversed when Doing record count or grand totals Ability to automatically change buffer sequence (!) Client feature Logging default enabled in development
Demo: Query features
Demo: Sport2000 order query with drill-down capability SalesRep Customer Order OrderLine Item FOR EACH Order NO-LOCK ,FIRST Customer OF Order NO-LOCK ,FIRST SalesRep OF Order NO-LOCK ,EACH OrderLine OF Order NO-LOCK ,FIRST Item OF OrderLine NO-LOCK