NetTalk Upgrade to NetTalk 8
     Note:
        NetTalk Web Services requires xFiles version 2.86 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.86 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.86 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.86 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]