-
- Command line
- Server Settings
- Commands
- Session
- Authentication
- Custom authentication
- External authentication
- Basic authentication
- Folder Security
- Data manipulation
- Read one record
- Read many records
- Write one record
- Delete one record
- Direct Page/DQL
- Page data definition
- Directory listing
- File handling
- Prism lists
- Data Defintions
- Get data definitions
- Create data Definitions
- Update data definitions
- Delete data definitions
- Definition format
- run dql
- run script
- A web page
- Page definition
- DQL pages
- Single file/memo DQL
- Single file/memo Page
- LiveText tags
- Url commands
- Tags
- How data is triggered in a page
- About DataEaseConnect
- checkquery
- callbacksuccess
- clearrecord
- connectonfieldchange
- convertvaltonumber
- decodequery
- deletedata
- deletetdf
- displayerrormsg
- doaction
- ensurequry
- fetchrecord
- fetchrecords
- finddatatype
- findfieldindef
- formdata
- formdefs
- forminit
- forminitdone
- formloaded
- generateid
- getcookied
- getdata
- getelement
- getfield
- getmyhost
- getnumlines
- getrecordcontent
- getrecorddef
- getrecordnofromurl
- gettdf
- gettablefromurl
- istrueval
- login
- logout
- makenewline
- multirecordinit
- newdata
- newtdf
- rundql
- populateoneselect
- selectpopulate
- setcsrfheader
- setelement
- setfield
- singlerecordinit
- stringify
- stripsuffix
- updatedata
- updatetdf
- useisodatetime
- usenumber
- version
- About jsBridge.js
- Action names
- deCheckVersion
- DEOS
- getnumlines
- GetCurrent
- GetValue
- GetVar
- jsAction
- jsActionExt
- jsActionExt2
- jsAddClass
- jsDEOS
- jsDerivation
- jsDerivationDebug
- jsDocumentDelete
- jsDocumentEdit
- jsDocumentOpen
- jsExecDQL
- jsGetActiveDocState
- jsGetVar
- jsGetCurrent
- jsGetDocumentState
- jsGetValue
- jsGetPRISMValue
- jsHide
- jsInt21
- jsLiveText
- jsLog
- jsMemoExecDQL
- jsMenuItem
- jsNewBlankForm
- jsOpenAppCat
- jsPrismDerivation
- runPrismFunction
- jsRefreshDocuments
- jsReorganize
- jsReorganizeAll
- jsRemoveClass
- jsSetFixedValue
- jsSetVarFromField
- jsSetValue
- jsSetVar
- jsSetCurrent
- jsSetWebField
- jsSetWebFieldFromVar
- jsShow
- jsToggle
- jsToggleClass
- makenewline
- SetCurrent
- SetValue
- SetVar
- startdebugger
- About decommon.js
- The loader
- calccaretpos
- decodequery
- generateid
- insertitem
- loadfilelist
- loadfile
- loadinternals
- message
- rundql
- runpage
- savefile
- selectitem
- testdql
- version
- .end
- .form header
- .form trailer
- .items
- assign
- application status
- backup db
- begin transaction
- break
- call menu
- call program
- case
- cluster by
- commit
- connect
- copy all from
- data-entry
- db status
- delete records
- define
- disconnect
- do
- documents
- exec SQL
- else
- end
- enter a record
- error messages off
- error messages on
- exit
- export
- for
- global
- if
- import
- imports
- in
- input using
- install application
- into
- list records
- lock
- lock db
- modify records
- message
- named
- others
- prompt
- query selection
- record entry
- records
- reorganize
- restore db
- rollback
- run procedure
- servers
- temp
- then
- tran off
- tran on
- unclustered
- unlock
- unlock db
- via form
- while
- with
- abs
- acos
- addressof
- ampm
- anylookup
- asin
- atan
- atan2
- ceil
- CHR
- concat
- ConsoleCopy
- ConsoleMemoCopy
- ConsoleShow
- ConsoleWriteToFile
- cos
- cosh
- date
- DatePicker
- day
- DEOS
- DialogOpen
- DialogOpenRelated
- DocumentCloseName
- DoesObjectExist
- ExecDQL
- ExecuteFile
- exp
- FileExecDQL
- firstc
- firstlast
- firstw
- FixedWidth
- floor
- futurevalue
- GetCurrent
- GetVar
- hours
- if
- installment
- jointext
- julian
- lastc
- lastfirst
- lastw
- length
- log
- log10
- lower
- MemoChunk
- MemoCopy
- MemoDecodePair
- MemoExecDQL
- MemoFind
- MemoGetGlobal
- MemoLength
- MemoMemoCopy
- MemoMemoReplace
- MemoReadFromFile
- MemoReplace
- MemoSetGlobal
- MemoStringBetween
- MemoStringFrom
- MemoStringTo
- MemoWordCount
- MemoWriteToFile
- midc
- midw
- minutes
- mod
- month
- OpenForm
- OpenMenu
- OpenProcedure
- OpenReport
- periods
- power
- presentvalue
- proper
- random
- rate
- RefreshForm
- RefreshScreen
- RefreshStatus
- Remote
- Remote authentication
- Remote POP3
- Remote IMAP
- Remote SMTP
- Remote XML
- seconds
- SetColor
- SetCurrent
- SetFocus
- SetLabelText
- SetMemoValue
- SetState
- SetStyle
- SetValue
- SetVar
- sin
- sinh
- spellcurrency
- spelldate
- spellmonth
- spellnumber
- spellweekday
- sqrt
- StringBetween
- StringEscape
- StringFind
- StringFrom
- StringReplace
- StringTo
- tan
- tanh
- textpos
- timeampm
- ToText
- UniqueID
- upper
- Wait
- weekday
- WriteToFile
- year
- yearday
- yearweek
- " (quotation marks)
- () (parentheses)
- + (addition)
- , (comma)
- - (subtraction)
- . (period)
- -- (comment)
- / (division)
- * (multiplication)
- * (asterisk)
- ? (question mark)
- ~ (tilde)
- : (colon)
- := (assignment operator)
- ; (semicolon)
- < (less than)
- <= (less than or equal to)
- = (equals)
- > (greater than)
- >= (greater than or equal to)
- all
- all files
- and
- any
- between
- blank
- count
- count of
- file
- highest of
- in groups
- in groups with group-totals
- in order
- in reverse
- item (Statistical)
- item (Conditional Statistical)
- lock files
- lock nothing
- lock records
- lookup
- lowest of
- max
- mean
- mean of
- min
- not
- number
- numeric string
- or
- pause
- percent
- selected record
- std.dev.
- std.err.
- sum
- sum of
- text
- time
- to
- variance
- window
- @GetDefinition
- . document
- . listcommands
- . listdocuments
- . listdrives
- . listfiles
- . listfunctions
- . listinternals
- . listoperators
- . listrelated
- . listtables
- . object
- . table
- . testdql
- @SetDefinition
- . document
- . object
How data is triggered in a page
This section will describe how data is initialized and triggered in a page. When you loads a page from the server, this is done by two definitions. First you have a template with a body and then you have the page that is added to the body part of the template. Both of the definitions can have data. These are merged into a page data tree before generating the page.
How do a page tree look like
Root table 1 Child table 1 Children's child table 1 ... Children's child table N Child table 2 ... Child table N Root table 2 Root 2s child table 1 ... Root 2s child table N ... Root table N
There can be a lot of tables at each level of the tree and each of them can have their own children than can also have children etc. There can be a lot of tables at many levels, but usually it is just one at each level with data. There for we can make a simpler default model that is the one used in most of the reports generated from DataEase.
Root table Child table
This tree then become .header items .footer when we have two levels and two headers, one items and two footers if we have tree levels.
Added to this we also can have stats/aggregates. These are sum, count etc. added to a field. These will show up in all levels from the one it is defined in and up to the root.
Root table Child table with stats like sum and count Stats for Child table for child table level Stats for Child table for root level
Added to this again we can have groups with it's group header and group footer. What this means in the model is an extra level on a single field where each values this field can have is grouped together and listed separate. The data will then have two level with the same table name, where the first only have one field and the rest of the fields in the table are listed in the next level.
How next record is triggered
When a page is loaded, all data are generated before the page is generated. Before any page text is generated, all data is initialized to the point at the first record. The next record in a level is triggered by the end of a section.
".items" will trigger next record for it's own level at the end of items. This means that all items at the level will be sent to the page before any other data is added.
".footer" will trigger next record for the corresponding ".header" and restart processing at that header.
".group footer" will trigger next value in ".group header and initialize the corresponding record in the level below as these two are tied together. Then it will restart processing the corresponding ".groop header".
What is there is not enough headers, footers, group headers and group footers or even a missing items/end. As stated earlier, when a page is initialized for data processing all levels in the data tree is initialized to first record (it it exist, if not a empty record is added). The page generator knows how many header, group header and footers and group footers that are expected. The items work independent of headers and footers as they only do a list of all their data at once. If there are to few headers, a empty header are added for all levels up to the first that have a header. If no headers are found before the ".items" are reached, all empty headers are added before the ".items" are done. The same are done for footers. When the last footer found have come to the last record in it's level, the missing levels will be added directly after it.
<h1>Order [{OrderNo}]<h1> <table> .items <tr><td>[{StockCode}]</td><td>[{Description}]</td><td>[{Count}]</td><td>[{Price}]</td><td>[{TotalPrice}]</td></tr> .end </table> <p>Total: [{OrderTotal}]</p>
The following have two levels but do not have any headers or footers
<h1>Order [{OrderNo}]<h1> <table> .header .items <tr><td>[{StockCode}]</td><td>[{Description}]</td><td>[{Count}]</td><td>[{Price}]</td><td>[{TotalPrice}]</td></tr> .end </table> <p>Total: [{OrderTotal}]</p> .footer .end
The one executed will look like this for the page generator. If there where more levels more headers and footers would be added at the same locations. If there are headers or footers and there are to few, the extra headers will be added before the first real header and the extra footers would be added after the last real footer.
Examples
.dql for Address list records Name; EMail; .end <h1>Addressees</h1> <table> .items <tr><td>[{Name}]</td><td>[{Email}]</td></tr> .end </table>
Here in this simplest examples the .end of items will trigger next record and continue to loop through all the records in the Address table. If you had removed the .items/.end from the definition, only the first record in Address would be listed.