NetTalk Upgrade to NetTalk 8
Note: NetTalk Web Services requires xFiles
version 2.51 or later
Introduction
This document works through the major changes between NetTalk 7and NetTalk 8. It is designed for users, currently experienced with NetTalk
7 to quickly
identify and use the new features in NetTalk 8.
It covers things that are likely to break when you upgrade your app, and
instructions on how to correct the application to allow for a smooth
upgrade. It also covers other new features which you may wish to
make use of in your application.
Quick Bits
The goal of this section is a quick overview of things that have
changed since NetTalk 7 which experienced NetTalk 7 users will want to know about.
Since there are a few changes in NetTalk 8 which invalidate things that were true in NetTalk 7,
and unlearning previously sound information and habits is hard, please pay
particular attention to this section.
Clarion 5.5, 6 and 7 are no longer supported.
NetTalk 8 requires Clarion 8 or later.
PACKET and LOC:OPTIONS have changed, PacketLen removed
Some p_Web Method names have been tweaked
Check for Orphaned Embeds in the WebHandler procedure
Changes Required to Convert your App from NetTalk
7 to NetTalk 8
All New Packet variable
The local variable called
PACKET is now a StringTheory object, not a String.
If you have set, or added to the Packet variable in your embed code,
then that code will need to be slightly altered.
replace
packet =
clip(packet) & 'whatever'
with
packet.append('whatever')
replace
packet = whatever
with
packet.SetValue('whatever')
While the
first construction will result in an error (
Cannot call procedure as
function) the second construction above (
packet = something) will not.
In order to identify the places in your code where you may have this
construction, you should
- Go to the Application Global Extensions,
to the Activate NetTalk Web Server
extension, Advanced tab and set the
Packet Variable Name to something other
than packet, like for example, pkt
- Compile the application. Only hand-code use of the
Packet variable should result in errors.
Replace the hand-code with the correct code as described above
(using the new name you set in step 1.)
- When the app compiles cleanly then it is recommended (although
not mandatory) that you go back to step 1, reset the variable name
to Packet, and recompile again. On this
pass through change pkt back to
packet. This step is not strictly
necessary, but will make supporting the app in the longer term much
easier. We recommend taking a few minutes to do this.
The PacketLen variable has been deprecated
the PacketLen variable
(generated by the templates) is no longer used, and has been removed.
You can get the length of the packet, if necessary using
packet.Length()
All New Loc:options variable
The local variable
loc:options is now a
StringTheory object, not a
String. This means that if you have used this variable in your hand
code, then your hand-code will need to change slightly. The biggest
difference is that the
SetOption method no longer returns the string.
For example;
loc:options = p_web.SetOption(loc:options,'setting','value')
becomes
p_web.SetOption(loc:options,'setting','value')
While the
first construction will result in an error (
Cannot call procedure as
function) the second construction above (
loc:options = something) will not.
In order to identify the places in your code where you may have this
construction, you should
- Go to the Application Global Extensions,
to the Activate NetTalk Web Server
extension, Advanced tab and set the
Options Variable Name to something other
than loc:options, like for example, jOptions
- Compile the application. Only hand-code use of the
loc:options variable should result in errors.
Replace the hand-code with the correct code as described above
(using the new name you set in step 1.)
- When the app compiles cleanly then it is recommended (although
not mandatory) that you go back to step 1, reset the variable name
to loc:options, and recompile again. On this
pass through change jOptions back to
loc:options. This step is not strictly
necessary, but will make supporting the app in the longer term much
easier. We recommend taking a few minutes to do this.
Web Server Log List Format Updated
More fields have been added to the LogQueue in the WebServer, so you need to do one of the following;
- Delete the Log Control Template, and add it back again OR
- Use the Format-List functionality in the Window Editor to map the columns to the items in the LogQueue structure OR
- Use the Window Source Editor, to replace the FORMAT() property of the LIST control to
FORMAT('51L(2)|M~IP Address~@s30@28L(2)|M~Socket~@n7@28L(2)|M~Thread~@n3@51L(2)|M~Date~@D17B@36L(2)|M~Time~@T4B@1020L(2)|M~Description~@s255@')
_NoColon method renamed to NoColon
If you have used p_web._nocolon in your hand-code then replace it with
p_web.NoColon. Check the WebHandler procedure for orphaned embeds.
File Methods have been renamed
The file methods _OpenFile,
_CloseFile, _AddFile,
_PrimeFile, _GetFile,
_UpdateFile and
_DeleteFile have been renamed to OpenFile,
CloseFile, AddFile,
PrimeFile, GetFile,
UpdateFile and
DeleteFile respectivly.
If you have used these in your
hand-code then remove the leading _. Check the
WebHandler procedure for orphaned embeds.
Note that it is perfectly ok for you to use normal ABC file
handling methods in your own hand-code. The file methods are included in
the class to cater for non-ABC programs. there is a slight performance
gain when using the ABC file methods over the p_web
methods.
SetProgress Method has changed
The
SetProgress method now takes three parameters instead of two. If you have called
SetProgress in your own code (as described in
the
Report
documentation) then you will need to review that code to use the extra parameter.
If you have used it in your code, then the compiler will generate an error
No Matching Prototype Available
Web Client
Structure Changes
Net:simpleSSLCertificateOptionsType
- CARootFile, CertificateFile and PrivateKeyFile fields extended
to bigger strings.
- ServerName property Added
Net:SimplePacketType
- SharedMemory property added
- _Reserved property size reduced
Security
Equates for TLS1.1 and TLS1.2 added as possibilities for
SSLMethod property.
Equate
for all TLS (1.0, 1.1 and 1.2) added.
Equate for SSLv3, TLS 1.0, TLS1.1
and TLS 1.2 added.
Performance
Although unglamorous, a number of performance enhancements have been made. The following list contains some
of the more important ones;
Shared Ram for Static File Downloads
RAM is one of the biggest constraints of
the web server. A 32 bit program can only access, at most, 3 Gigs of
memory. In NetTalk 7 static files are loaded into RAM before they are
sent to the browser. In NetTalk 8 these memory blocks are shared,
meaning that if the server is busy sending a (large) file to one
browser, and another user requests the same file, then the second
request can share the same file-in-memory as the first request.
Support for keep-alive
Support for the Keep-alive header has been added. This allows a connection between the browser and the server to be kept open
for a small period of time after a request is made (and replied to.) This allows the browser to make another request, across
the same connection if desired, which in turn is faster because it does not have to negotiate a new connection. This improvement
is most applicable to SSL connections where the connection setup can take a bit of time.
Auto-Cache
NetTalk now caches small static files up to a maximum cache size. This
improves delivery of common small static files, such as CSS, JS and
Image files. You can adjust the size of the cache, and the maximum size
of files being cached on the new WebServer Performance tab.
Various Code Optimizations
Web Services
Note: NetTalk Web Services requires xFiles
version 2.51 or later
NetTalk 8 contains new templates for creating Web Services. That is
discussed
here.
Form
Maps
A new Form Field type called "Map" has been added. Maps consist of a
base layer (for example a map or satellite image) provided by a
Provider, combined with data from your database. Data can be
expressed as "Markers" on the map, or it can be expressed as an "Area"
on the map. A single map can contain multiple data sources.
You
can read more about the Maps feature
here.
YouTube
A new Form Field Type called "YouTube" has been added. This allows you to
embed a YouTube video inside your application. All the Google options
for an embedded video are exposed via the template interface.
The
settings for the YouTube control are documented
here.
Webcam
A new Form Field Type called "Webcam" has been added.
This allows you to access the Webcam on the client machine (if the user
gives you permission to do so.) This field uses the
GetUserMedia API which is currently not available in
some browsers.
The settings for the Webcam control are documented
here.
External
A new Form Field Type called "External" has been added. This allows you to
fetch data from a second server (called an Agent) and include that data
on a web form.
The settings for the External control are documented
here.
Procedure
Up to NetTalk 7 the Procedure form field type did not allow a Form to be
embedded on a form. NetTalk 8 removes this restriction for a specific
case.
A new template option
Generate <FORM> tag has been added to
MEMORY forms. If this is OFF then no
<form> and
</form> HTML tags will
be generated, thus allowing this form to become includable on a parent
form.
Start Button
Progress Bar
- Template option to set the width of the progress bar.
- Client-Side resets for Progress bar - fields are refreshed when progress completes.
Browse
Export Button
Use of this feature
requires xFiles version 2.51
or later. For
more on xFiles see the
CapeSoft Web Site.
An Export button has been added to browses.
When this is clicked the server will create an Excel spreadsheet (as xml),
based on the browse, and send it to the user. They can then open the file in
Excel, save it locally and so on.
The button is declared globally (WebServer
/ Buttons) and can be activated or deactivated globally (WebServer /
Defaults). You can include, or exclude the button locally as well.
Other
- Locator Type option on sort tab for browse fields. Allows you to specify a locator type for a specific column.
Wizard Changes
- The Wizard(s) now let you generate a WebService and WebServiceMethods for the (selected) tables in your dictionary.
- Support for
xFiles (required by web services
and Export button) and
OddJob (required for
serving PHP pages) global extensions added to the wizard.
NetWebPage Changes
- Include Standard Header, and Include Standard Footer options added to NetWebPages.
Reports
Using the Media control, and the new Progress Bar and Start button
functionality, it is possible to include generated reports directly onto a
form. The Example
PDFReportRequiresEE (13) has been updated to reflect these
new options. The
Reports Documentation has also been updated to document how
it is done.
Global WebServer Extension
Advanced Tab
- As mentioned above, you can set the name of the PACKET variable on
the WebServer Global Extension. This is very useful to do to identify
the use of PACKET in hand code (which may now be incorrect).
- New option on the Advanced tab to set the
Maximum Threads
limit.
Settings Moved
- Default HTML Editor : Now on Defaults / Form
- Theme : Now on Defaults / General
WebServer Procedure
Advanced Tab
- Combine Common Files, Serve Pre-compressed Files, Compress Static
Files, Compress Dynamic Files and Auto-Check Cached Files have all been
changed to an Expression instead of a checkbox. This allows these
settings to be set at runtime using an INI field, or Settings field or
whatever.
Garbage Collection
Files in the \web\reports folder which are dated before yesterday, are automatically deleted.
Updated Scripts
External JavaScript Updates
- jQuery - version 1.11.0
- jQuery-UI - version 1.10.4
- Modernizr - version 2.7.1
- jQuery File Upload Plugin - 5.40.1
- jQuery.SignaturePad - 2.5.0
- AD Gallery - 1.2.7
- Redactor - 9.2
- Tiny MCE 4.0.19
New p_web Properties and Methods
Properties
Property | Description |
ShortSOAPAction (String) | contents of the SOAPAction
header field, but with the Host name (if it exists) removed. |
SOAPAction (String) | contents of the SOAPAction
header field |
ServiceErrorQueue (&ServiceErrorQueueType) | A queue
which is populated with errors when a service method has been
called. |
WSDL (&NetWSDL) | Pointer to a NetWSDL Class. Used when
generating WSDL files. |
xml (Long) | Set to 1 (and p_web.GetValue('xml') is
primed, if the incoming request has a content-type of text/xml
or application/soap+xml |
| |
Methods
Method | Description |
AddServiceError | Adds an entry to the
ServiceErrorQueue |
ClarionTimePicture (pic) | Takes a Clarion time
picture and returns an example string of that picture (like
hh:mm) |
CreateMapDiv | |
CreateYouTube | |
GetBrowseHash | |
GetLatLng | |
SetMapZoom | |
SetMapDevIdOptions | |
WrapOptions | |
Methods refactored to use StringTheory thus removing string length limitations: CreateHyperLink,
CreateSelect, CreateMedia, CreateInput, CreateRadio, CreateTextArea
Examples
PDFReportRequiresEE (13)
Using the Media control, and the new Progress Bar and Start button
functionality, it is possible to include generated reports directly onto a
form. The Example
PDFReportRequiresEE (13) has been updated to reflect these
new options. The
Reports Documentation has also been updated to document how
it is done.
Media (74)
The Media (74) example has been updated to include YouTube videos on a Form, and as a child of
a Browse.
Maps (76)
A new example, Maps (76) has been added. This shows the use of the MAP
form field in various places in the application.
WebService (77)
A new example WebService (77) has been added. This contains several
services, and multiple methods which acts as a demonstrator of several
common WebService techniques. This example requires xFiles version 2.51
or later.
ExportRequiresXFiles (78)
A new example ExportRequiresXFiles (78) has been added. This requires
xFiles, and demonstrates
the ability to export a browse to an Excel spreadsheet.
Webcam (79)
A new example Webcam (79) has been added. This demonstrates the ability to use a webcam to take a photo
of the user on a NetWebForm.
ExternalServer (80)
A new example ExternalServer (80) has been added. This demonstrates reading data from a second web server (called an AGENT)
to provide information to the form. In this case the agent program reads in strings in a COM port (using WinEvent) and provides that to the web page.
This has the effect of allowing local hardware (such as a barcode or prox-tag reader) to be attached to the client
computer, and for the web page to access the information coming from that hardware.
The example is in two parts, the normal web80.app program, and
an agent.app program that runs on the client machines, and accesses the
client hardware. Note the settings tab on this app which allows you to
set the COM port being read, and also the port number to run the agent
on.
[End of this document]