FirstClass Application Services Build 3243
Release History
FirstClass Application Services 3.2 Build 3243.
FirstClass Application Services 3.1 Build 3212
FCAS 3.2 Build 3243 Features, Fixes and New Functionality
- Fix for form hiding issues (RAD.fcx, etc.)
- Fix for missing filename attributes on opened ServerFiles used in message attachments
- Fix for crash on long strings as parameters to Val() command
- Update to fix <div> in tables on FC<->HTML conversion
- Fixed crash on consecutive reads on a ServerFile when a new file of smaller size is opened
- Prevent console line/debug window on Debug = TRUE
- Fixed multiple ServerFile attachments to a single EMail object
- Added length check to ServerFile filename and increased filename length
- Added protected file deletion to ServerFile.Delete
- Fixed UNIX translation of literal strings in Windows FCXes
- Fixed UNIX UCase on extended characters
- Fixed spurious error on date translation from string
- Fixed missing BCC entries on EMail objects
- Corrected default charset for FC<->HTML translation
- Corrected handling of literal decimal assignments in Danish localised environments
- Fixed client login application launch when the server is restarted but FCAS is not
- Fixed possible crash on a mangled path passed to ServerFile.Delete
- Fixed reported crash on packets from a closed form
- Improved CPU usage on UNIX platforms
- Optimized string concatenation operations for faster string handling and Replace() command on large strings
- Corrected ServerFile translation of document bodies on fetch to match assignment translation
- Fixed a possible crash on form termination
- Corrected 8.3 character translation on MacRoman 8.3 server/client combos when translating from Unicode in client emulation mode
- Fix for leaked objects on ServerFile.Type(Path)
- Corrected handling of translation against 8.3 MacRoman servers in UTF backwards translation mode
- Prevented code execution until after Declarations are complete
- Fix app hang when multiple form open/close actions are executed before first server response
- Fixed potential crash on zero-length bodies
- Corrected return of final item in a 799-byte static list
- Fixed redisplay of forms that have been hidden
- Fix for bad translation of >800 character list parts
- Replaced missing unload events on frm.hide
- Fixed a spurious syntax error on File.Position
- Corrected a crash when ServerFile.OpenFile was called in fcAppend mode with a bad path
- Fixed DateValue to obey localized day/month order
- Fixed fcReadWrite ServerFile replacement of existing files (Profiles)
- Automatically expand box arrays for indexes out of range
- Fixed stack overwrite on long console logging
- Corrected handling of decimal delimiters on the Val command
- Reduced end of transaction delay to prevent a RAD.fcx error
- Added support for multiple character delimiters in StrSplit to match StrToken
- Fixed negative return from GetItemNumber when label numbers are provided
- Corrected ServerFile.OpenFile update/deletion bug (affects Profiles)
- Fixed crash on some 64k+ unicode translations
- Added GetItemNumber editable list method
- Removed spaces from all default control names
- Fixed Linux only crash in strftime
- Fixed Linux only memory overwrite crash on certain startup conditions
- Corrected a problem with caption-based controls not correctly updating the listcount
- Corrected serverfile delete and openfile to avoid multiple cached items of the same name
- Fixed serverfile open deletion of a parent container
- Corrected mangled names on some built applications
- Fixed some cases of string setting in serverfiles
- Fixed translation of filenames for FCX files
- Fixed project creation with UTF8 characters
- Fixed translation of the startupstring
- Enhanced UCase function to work on extended characters
- Enhanced LCase function to work on extended characters
- Suppress error dialogs for Login applications
- Fixed two timing conditions which could cause hung apprecords on login apps
- Enhanced ServerFile FindFirst/FindNext extended character support
- Fixed return of a serverfile as a file in message attachments
- Fixed a crash on multiple to/cc/bcc attachments above 10
- Added support for .Attachment for ServerFiles
- Fix for infinite loop on comments after End Sub/Function lines
- Fixed E-Mail delivery 1005 issue
- Fixed an issue which could cause hung processes with no console
- Fixed a timing related crash on getting CID
- Fixed a crash when improper delimiters are used to parse stats
- Corrected stat event timestamps for timezone
- Corrected flipping of stat event parts
- Fixed indexed text data
- Fixed memory leak if a login app is removed while the server is still in login app mode
- Fixed a crash when a goto jumped out of a select
- Close *all* open objects on a serverfile.closefile
- Corrected caching of deleted containers
- Resolved startup failure on some Linux platforms
- File Exists will ignore deleted
- Applications sessions no longer stick when many applications are closed by a logout
- High scale sites will see better performance per app with large numbers of instances running
- Performance is slightly improved over B3212
- Fixed 8000-byte memory leak in non-debug applications using the debug command
- Support for longer names on CreateFile
- Corrected new file creation timing on fcReadWrite
- Corrected translation of long text fields
This version is validated to work against 8.3 build 400 (and later) release and 9.0 build 542 release (and later) FirstClass Servers only.
FCAS 3.1 Build 3212 Features and New Functionality
Application Backwards Compatibility
Applications built with the RAD.DLL version will continue to function on FCAS with no changes, no rebuilding and no code changes in most cases. There are a few exceptions due to the fact that FCAS can be run on a separate machine from the server. Applications which are coded to do file access on files that are located on the server machine and either cannot be moved to the FCAS machine or have changed paths hardcoded into the application will need to be updated. The FCPOFolder command will now return the directory that FCAS.exe was launched from so that applications using this can continue to function without modification. Datasources on the new machine will need to be updated to match the server's configuration or if hardcoded into the application, the application may need to be updated.
Performance Differences
FCAS is independent of the server's DBAPI call structure for the execution of code. As a result, many applications will run far faster on the new platform. Server load will not impact the speed of code execution, only the speed at which parts are relayed to the client. Poorly implemented RAD code will not bog down the performance of the server.
ServerFile.CreateFile Support
ServerFiles can now be created on the server. This functionality allows the creation of any type of object anywhere that the FCAS gateway can access and has permissions to do so. The CreateFile method takes parameters for the path, type, FormID, IconID, and position of the item to be created, but only the type is required. The object type can be any object type and corresponds to internal object types. Constants are provided for major types:
fcConference
fcFolder
fcConfItem
fcMessage
fcText
fcFile
fcForm
fcChat
fcSysInfo
fcFormDoc
fcHitList
fcDocument
fcPermStationery
fcTempStationery
Example Code:
Dim sf as ServerFile
sf.CreateFile("TestFolder|TestDoc1",22) ' Create a document in TestFolder with default values
sf.CreateFile("TestFolder|TestDoc1",22,10000) ' Create a document in TestFolder with FormID 10000
sf.CreateFile("TestFolder|TestDoc1",22,10000,8000) ' Create a document in TestFolder with FormID 10000, IconID 8000
sf.CreateFile("TestFolder|TestDoc1",22,10000,8000,10,100) ' Create a document in TestFolder with FormID 10000, IconID 8000, position x 10, position y 100
sf.CreateFile("TestFolder|SubFolder",2) ' Create a folder in TestFolder with default values
ServerFile.Exists(path)
This ServerFile member allows you to check whether a file exists at a given path.
Example Code:
Dim sf as ServerFile
If (sf.Exists("FCAS Config|About this folder") Then
Debug "This one exists"
End If
If (sf.Exists("FCAS Config|About this potato") Then
Debug "This one doesn't"
End If
ServerFile.Type(path)
ServerFile.Type
This ServerFile member allows you to check the type of an object. It can be used with an already open file or with a path specified. If a path is specified, the return fcInvalid indicates that the item wasn't found.
Example Code:
Dim sf as ServerFile
If (sf.Type("FCAS Config|About this folder"=fcDocument) Then
Debug "This one is a document"
End If
sf.OpenFile("FCAS Config|About this potato")
If (sf.Type=fcDocument) Then
Debug "Yep, still a document"
End If
ServerFile.FormID
This ServerFile member allows you to check the FormID of an object. It can only be used with an already open file.
Example Code:
Dim sf as ServerFile
sf.OpenFile("FCAS Config|About this potato")
Debug sf.FormID
ServerFile.Field Support
ServerFile objects support retrieving and setting field data by FieldID. If there is no data for a field, an empty string will be returned. Remember that type is important when assigning data to a ServerFile.Field, since the server is not aware of what form may be used to retrieve the data, so be certain that if you want a string, you assign a string rather than depending on the RAD's automatic type conversion. Form data which is stored as numeric, text, or binary data is supported.
Example Code:
Dim sf as ServerFile
Dim str1 as String
sf.OpenFile("TestFolder|TestDoc",fcRead)
sf.Field(1000) = "TestString"
str1 = sf.Field(1001)
ServerFile.Delete Support
The Delete keyword when used with ServerFiles allows you to delete items from the server's store. It uses the same path notation as OpenFile.
Example Code:
Dim sf as ServerFile
sf.Delete("FCAS Config:testitem")
EMail.Field Support
EMail objects can use the .Field attribute to assign field data to the EMail object. Field data can be arbitrary and is assigned with the same syntax as ServerFile.Field.
Example Code:
Dim msg as EMail
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Field Data Test"
msg.Field(1000)="Test String"
msg.Send
EMail.Expiry Support
EMail objects allow the Expiry attribute to be set to change from the default expiry. Constants are provided for default and never, but the attribute is an integer in days.
Example Code:
Dim msg as EMail
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Field Data Test"
msg.Expiry=5 ' Set expiry to five days
msg.Send
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Field Data Test"
msg.Expiry=fcNever ' Set expiry to never
msg.Send
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Field Data Test"
msg.Expiry=fcDefault ' Set expiry to default (this would happen anyway)
msg.Send
EMail.To, EMail.CC, EMail.BCC Multiple Entry Support
The To, CC, and BCC attributes all support multiple recipients by treating the attribute as an array. Backwards compatibility to previous code is retained.
Example Code:
Dim msg as EMail
msg.To="Administrator"
msg.To(1)="Administrator"
msg.CC="Administrator"
msg.CC(1)="Administrator"
msg.BCC="Administrator"
msg.BCC(1)="Administrator"
msg.From="Administrator"
msg.Subject="Multiple Recipient Test"
msg.Send
EMail.FormID Support
This new attribute allows the FormID of the EMail message to be set.
Example Code:
Dim msg as EMail
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Form Test"
msg.FormID=1000
msg.Send
EMail.Icon Support
This new attribute allows the icon of the EMail message to be set.
Example Code:
Dim msg as EMail
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Icon Test"
msg.Icon=8000
msg.Send
EMail.Attachment Support
The EMail object now supports assigning a File or ServerFile variable to the Attachment property of the object. The attachment will only contain data that has been read into the File object. If no data is present, the file is not attached. Multiple attachments can be attached by calling Attachment as if it were an array.
Example Code:
Dim f as File
Dim msg as EMail
f.OpenFile("c:\boot.ini",fcRead)
f.Read(1024)
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="Attachment Test"
msg.Attachment=f
msg.Attachment(1)=f
msg.Attachment(2)=f
msg.Send
ServerFile.BodyType and EMail.BodyType Support
The BodyType attribute of these two objects can be set to fcPlainText, fcHTML, or fcETF. The default setting is assumed to be fcPlaintext and is backwards compatible with previous source. If you assign HTML to the body of an object and set the body type to fcHTML, it will be translated automagically into FC styled text. Likewise, if you are reading the body and wish to get the styled content, it will be translated into the format requested. Keep in mind that retrieving a body which was initially created as styled text in FC, modifying it in HTML and writing it back could potentially lose fidelity. The HTML translation is done using the same method as IS and the client.
Example Code:
Dim msg as EMail
msg.To="Administrator"
msg.From="Administrator"
msg.Subject="HTML Test"
msg.Body="<B>Bold</B><U>Underlined</U>"
msg.BodyType=fcHTML
msg.Send
New Debug Syntax
The Debug keyword has been expanded to allow a new function. If you assign Debug to true or false, you can programmatically turn debugging on and off.
Example Code:
Debug "This line will be seen"
Debug = false
Debug "This line will NOT be seen"
Debug = true
Debug "This line will be seen"
EOL Character Constants
End of line character constants are now provided.
Example Code:
str1 = "Line One" & fcCR
str2 = "Line Two" & fcLF
str3 = "Line Three" & fcCRLF
SharedGlobal Variable Support
Variables defined as SharedGlobal can be shared across all applications running on a given FCAS instance. They can be treated just as local or global variables within a program, but any program using them may change their value or even Redim or Redim Preserve them. SharedGlobal variables can be of any type, including user-defined types. They cannot be passed into Subs or Functions as they are global to the program and can be referenced at any point. SharedGlobal variables will not interfere with local or global variable naming unless they are defined in the program. Keep in mind when using arrays that another program may redfine the dimensions of the array. Also be aware that a SharedGlobal may change value from one line to the next if another program is also changing the value, however they are
completely "thread safe" in that you cannot cause application crashes using them, however you could introduce logic problems in your code if you fail to account for the value changing unexpectedly. Unique names are encouraged to prevent multiple developers from using the same name and inadvertently overlapping with another program's variable name.
Example Code:
Dim Test(2) as String SharedGlobal
Redim Test(3) as String SharedGlobal
Redim Preserve Test(4) as String SharedGlobal
DateToMacDate keyword support
This function converts RAD date variables into Macintosh style dates.
Example Code:
Dim sf as ServerFile
Dim d as Date
d = Now
sf.Field(1000) = DateToMacDate(d) ' Where field 1000 is a date picker
DateToWinDate keyword support
This function converts RAD date variables into Windows style dates.
Example Code:
Dim d as Date
d = Now
Debug DateToWinDate(d)
MacDateToDate keyword support
This function converts Macintosh style dates into RAD date variables.
Example Code:
Dim sf as ServerFile
Dim d as Date
d = MacDateToDate(sf.Field(1000)) ' Where field 1000 is a date picker
Debug d
WinDateToDate keyword support
This function converts Windows style dates into RAD date variables.
Example Code:
Dim i as Integer
i = GetAWindowsDateFromSomewhere()
Debug WinDateToDate(i)
fcAppGatewayID keyword support
This keyword returns the gateway's UserID for the cluster that the application is running against.
fcAppServerStartup keyword support
This keyword returns the startup time for the current run of FCAS.
fcAppServerPlatform keyword support
This keyword can be checked against fcWindows for Windows FCAS, fcMacintosh for OSX FCAS, or fcUNIX for Linux FCAS and is used to tell what platform the FCAS server is running on for purposes of application OS portability.
Colour Picker Support
The new keywords Red, Green, Blue, and Alpha allow you to split out the respective value from a colour picker value.
Major fixes in FCAS 3.1 Build 3212
- Corrected application instance count
- Fixed 3003 disconnect on the next launch after a server app terminates
- Corrected 24 hour time format
- Session limits set in apps are respected again
- RAD.fcx is exempt from session limits
- Idle apps take less CPU time to run
- Binary to string assignments no longer leak memory
- Resolved crash when worker threaded ODBC call was still active on app shutdown
- Corrected handling of On Error jumps when error handling is left on between subroutines
- Added support for UTF8 server switch
- Fixed 1027 not responding state
- Corrected memory leak on multiply derived controls
- Fixed default value of combo boxes
- Added memory check on application launch
- Fix for crash when a session is forced off with a database query still active on a worker
- Fixed batch admin translation for some >32k replies
- Fixed a crash on certain long console output operations
- Plugged memory leak on continually refilling a form text field
- Sort will now properly sort the final element in an array
- Removed spurious control type -1 error message
- Fill performance issue resolved
- Fixed error message in RAD.fcx when modules are opened before prefs file is saved (updated RAD.fcx)
- ODBC driver crashes will now purposefully leak the dead object to avoid further hangs in the ODBC subsystem
- Fixed multiple EMail send from different objects
- Added FindFirst/FindNext conditional parameter, you must add ,fcRead on the FindFirst call to get this functionality
- Corrected bad FindFirst/FindNext behaviour on ServerFiles
- Fixed crash in DBNextPart on NULL cMsgBoxStrings
- Fixed timing condition causing pointer warnings and crashes
- Fixed StringWithIcon fields to only update icon instead of blanking the text when only the icon is updated
- Corrected cLaunchLogin in forms
- Updated file and serverfile openfile methods to match documentation
- Fixed icon display before form.show
- Fixed server apps not shutting down properly
- Fixed updating of changed controls in source databases
- Corrected date display correction to avoid fractional second errors when dates are compared
- Listcount of empty fixed lists now return a listcount of zero
- File.Write now supports Integer and Long parameters for writing single binary bytes, including zero bytes
- Fixed a problem with StrSplit indeces going negative
- Fixed possible infinite loop if translation is done on strings already translated
- Corrected Listcount return when only one entry is in the list
- Fixed Server Applications being unable to launch RunApp commands due to callback changes
- Corrected leak in SetValDate
- Fixed service control response mechanism on Windows
- Fixed a huge ugly memory leak in certain keywords where strings were reused
- Fixed string array Erase command to function correctly
- Fixed a crash assigning a date when uninitialized
- Fixed improper length on batch admin input strings due to character translation
- Fixed creation of new controls in existing forms
- Fixed a date rounding error which could cause some specific dates to be off by one second when assigned to a date control
- Increased the filename limit on built projects to 255 characters (limited by RAD.fcx to 63)
- Fixed a fieldid conflict with field 1003 on the config form
- Updated a few URLs in the string files
- Modified all dev environment forms to resize properly and open without scroll bars on buggy clients
- Optimized form template decoding for existing controls
- Added Show Workers debug menu item
- Added support for checkboxes to Field()
- Fixed a crash on sending a long part when there was no buffer available
- Fixed a problem with translated text controls chopping final characters
- Fixed a problem which caused text bytes to be order swapped
- Fixed a double translation on text controls
- Modified default BatchAdmin input character translation to ON
- Corrected performance problem relating to callbacks on client translation
- Fixed a bug in linked list management that could allow a duplicate free or crash
- Fixed application shutdown when multiple forms were open to avoid leaving the application hanging
- Added additional app shutdown code for process shutting down
- Added support for double indeces to arrays
- Fixed a crash when subject was not set before a message was sent
- Fixed memory leaks in output windows
- Fixed crash on dev environment stop while print output is incoming
- Fixed garbled data on string/binary concatenation
- Fixed a crash in StatementFree
- Fixed a memory leak on Windows worker threads
- Fixed crash on message to addressing
- Fixed crash on LoadApplication due to error
- Added traceback and ignore to crashed ODBC calls
- Fixed obscure crash when rtrim and a few others are passed a NULL string
- Added support for clustered server applications launching other applications in new servers
- Fixed memory leak on database connections
- Fixed memory leak on dataless controls with captions
- Improved console logging performance and wrapping
- Added support for dropout detection
- Added support for sampler reporting
- Corrected double disk logging to FCAS.LOG
- Improved callback return speed
- Improved worker thread queuing for ODBC calls
- Fixed crash on SetUse
|