New Features in Panther 4.60

 

 

This document describes the new features in Panther 4.60.

 

 

Windows/COM

 

·         Multi-line tooltips are available for Windows applications.  When necessary, use %n to indicate carriage returns.

·         Panther COM component can now create another COM component through an external C function.

·         ActiveX support has changed so that Panther yields control to ActiveX keyboard controls.

·         Panther screens can now be set to dialog boxes (as opposed to MDI frames) at runtime by setting the following:

@screen_num(0)->dialog = PV_YES

·         Box widgets now support the SUNKEN line/box style.  Under Identity, set Line/Box Style to Sunken.

·         A pop-up menu can be invoked from a dialog box at runtime.  (See the following section.)

 

Invoking a Pop-up Menu from a Dialog Box

 

    1. Create a dialog box using Panther editor.

 

    1. At runtime, right click on the screen to view the pop-up menu.

 

Note: Remember to set the following property in your prol4w32.ini file:
          StackedWindowType=Dialog

 

 

Motif

 

·         Panther/Motif now supports 24 bit bitmaps.  Earlier versions only supported 256-color BMPs.

 

Web

 

·         SM_DECIMAL now supports European number/currency formats.  Regional Settings should also be set to Decimal.

·         You can have an event hook in Web applications with sm_web_set_onevent which allows you to install a C function event hook.  Click here for documentation.

·         HTML Templates

o        Performance improvements were implemented for HTML templates.

o        There are new metatags for HTML templates, {{ws:off}} and {{ws:on}}.  {{ws:off}} will not generate white space after the end of a meta tag.  {{ws:on}} restores the default behavior.

·         There is a new EJB interface to access Panther Web reports.

·         For security reasons, certain options have been disabled for reports invoked from a URL.  Click here for a list of the disabled options.

·         A new external caching option is available for Web applications.  You can cache the Web application state externally by setting ExternalCache=1 in the Web ini file.

·         You can set HTTP headers with sm_web_set_http_header.

·         You can place the webid in an HTTP header in order to automate testing of a Panther Web application.  Two additional options enable this feature:

o        WebIdHeader—Specify the text of the header you want to send, using %s to embed where the webid should appear.

o        QsWebIdHeader—Obtain the value of @webid in the last QUERY_STRING rather than the current webid.

·         sm_mw_get_instance can now also be used in Windows Web applications to get the Windows instance handle of jserver.exe.

 

Reports

 

·         Multiple devservers can be deployed to run remote reports.  This helps facilitate load balancing in a multiple user scenario.

Note:  In order to gain a performance increase, you may need to re-configure your system.

·         The user interface has been improved for the Library TOC and Repository TOC.

·         For remote reports, the length allotted for the parameter list has been increased.

·         In the Report Structure window, Ctrl+C, Ctrl+V and Ctrl+X are now supported.

·         For security reasons, the following options have been disabled when a report is invoked from a URL:

device

spool

printer

output

service

view

print

printtofile

remote

async

overwrite

append

 

 

JPL

 

·         JPL once again supports Dynamic data exchange using the sm_dde* functions.

 

Databases

 

·         SQL Server now has outer join support.

·         In SQL Server, you can now access the following database error codes in JPL: @dmengerrcode, @dmengerrmsg, @dmengwarncode, @dmengwarnmsg.

·         Oracle 9i DBI drivers are available for Panther.

·         You can have an event hook in the database interface with dm_set_onevent which allows you to install a C function event hook.  Click here for documentation.

 

Debugger

 

·         The debugger has a new option, Bypass Keychange Function on the Options submenu.  When selected, processing inside the keychange function is not reported.

 

 

 

dm_set_onevent

Install a C function event hook

 

 

dm_set_onevent (name);

char *name;

 

 

 

Description

This function allows the user to install a database interface event hook.  The name should be the name of a function installed in the prototype function list.  The prototype is:

 

   event_hook(char *, char *, char *, char *, int)

    i.e.

   event_hook(s,s,s,i)

 

A hook function may be installed at any time, and it is deinstalled by calling the function with an empty string.

 

If an onevent hook function is installed, Panther records the start time before ONENTRY is (or would be) called, and then calls the hook function after ONEXIT is (or would be) called.  The parameters passed are:

 

   event_hook (char *command, char *path_info,
       char *arg, int elapsed_time);

 

The first parameter is a string constant describing the event.  The following constants are currently available:

 

ALIAS

AUTOCOMMIT

BEGIN

BINARY

BLOB

BLOB_INFO

BLOB_READ

BLOB_WRITE

BROWSE

BUFFER_DEFAULT

CANCEL

CATQUERY

CHECKPT_INTERVAL

CLOSE CONNECTION

CLOSE CURSOR

CLOSE TRANSACTION

CLOSE_ALL_CONNECTIONS

CLOSE_ALL_TRANSACTIONS

COLUMN_NAMES

COMMIT

CONNECT

CONTINUE

CONTINUE_BOT

CONTINUE_BOTTOM

CONTINUE_DOWN

CONTINUE_TOP

CONTINUE_UP

COUNT

CREATE_PROC

CREATE_TRIGGER

DECLARE CONNECTION

DECLARE CURSOR

DECLARE TRANSACTION

DESCRIBE

DISCONNECT

DROP_PROC

DROP_TRIGGER

ERROR

ERROR_CONTINUE

EXEC

EXECUTE

FLUSH

FORMAT

LOCKLEVEL

LOCKTIMEOUT

LOGOFF

LOGON

NEXT

OCCUR

ONENTRY

ONERROR

ONEXIT

PREPARE_COMMIT

PRINT

PROC

QUERY

REDIRECT

RETURN

RETVAR

ROLLBACK

RUN

SAVE

SAVEPOINT

SELECT_ALIASES

SERIAL

SET

SET_BUFFER

SET_NULL

SQL

START

STORE

SUPREPS

TRANSACTION

TYPE

UNIQUE

UPDATE

USE

WARN

 

The second parameter is the arg passed to the command.  It is the same as passed to the ONENTRY/ONEXIT hooks or retrieved by sm_dbigettext.

 

The third parameter is non-0 only if the WITH CURSOR phrase had been used.  In that case it is the SQL that the cursor had been prepared with.  This is  useful for commands like EXECUTE.

 

The last parameter is the elapsed time in milleseconds. For commands that do not go to the database (e.g. ALIAS) this is often 0.  If a hook is installed in or after ONENTRY, the DBi code will not have recorded a start time.  In this case, elapsed time will be 0.

 

In the current implementation only C onevent hook functions are supported.  JPL is not supported for the hook function itself.  However dm_set_onevent is in funclist and can be called from JPL:

 

   call dm_set_onevent("hook_function")

 

 

 

sm_web_set_onevent

Install a C function event hook

 

 

sm_web_set_onevent (name);

char *name;

 

 

 

Description

This function allows the user to install a Web event hook.  The name should be the name of a function installed in the prototype function list.  The prototype is:

 

   event_hook(char *, char *, char *, char *, int)

    i.e.

   event_hook(s,s,s,i)

 

 

If an The Web code records the start time before every event and then calls the hook function after it has completed.  The parameters passed are:

 

   event_hook (char *command, char *path_info,
       char *arg, int elapsed_time);

 

The first parameter is a string describing the event.  The current list of available commands is:

 

GET

POST

 

The second parameter is the path_info as returned by sm_web_get_cgi_info.  The third parameter is the query string for GET and the form name for POST.

 

The last parameter is the elapsed time in milliseconds.  For commands that do not do much processing (for example, a GET for a bitmap), this may be 0.  The hook function is normally installed via initjpl but can be installed in a screen entry or exit function.

 

In the current implementation only C hook functions are supported.  JPL is not supported for the hook function itself.  However sm_web_set_onevent is in funclist and can be called from JPL:

 

   call sm_web_set_onevent("hook_function")