Skip to main content

How to include an ActiveX control within an SB+ input screen

Kevin Drury, SB+ Programmer, IBM
Photo: Kevin Drury
Kevin Drury is the programmer of the server part of SB+. He has been working with SystemBuilder and SB+ for 19 years.
Pavel Smelianski, SBClient Expert, IBM
Photo: Pavel Smelianski
Pavel Smelianski is a specialist in the client and middle-tier technologies. He joined System Builder in 1993 as a compiler engineer.

Summary:  ActiveX technology provides a rich set of self-contained controls that can enhance the IBM®U2 SB+ user experience. This article takes you through two examples. In the first example, you see how to include a calendar control within an input screen. In the second example, see how to include an HTML object within an input screen.

Date:  14 Jun 2007
Level:  Intermediate
Activity:  425 views

Introduction

U2 is no longer an IBM brand

In October 2009, the U2 products became products of Rocket Software.

IBM U2 SB+ for UniData® and UniVerse® (SB+), is a cross-platform, complete, and powerful rapid application development and deployment environment that enables developers to focus on what they know best: their application, their business, and their users. SB+ lets you quickly design IBM U2 data server structures and develop applications using a comprehensive developer interface.

Prerequisites

These examples are designed to be implemented by running SBClient Version 5.4 or later in an SBDEMO account in GUI on SB+ Release 5.4 or later using UniData 6.1 or later on a UNIX® or Windows® OS or UniVerse 10.1 (Pick compatibility) or later on a UNIX or Windows OS.

Both of these examples use ActiveX controls, that are provided to you for free, that you should already have on your PC. The first example uses MSCAL.Calendar, which is shipped with SBClient. The second example uses Shell.Explorer, which is part of the Windows OS.

The first example is based on an ActiveX control in a screen that has been in SBDEMO for a number of years. You will see how to apply this example within a new screen in SBDEMO to help you utilize this idea within your application.

The second example shows how you can present data within an HTML object. Since this is HTML, you can make use of all the HMTL formatting and presentation capabilities. It also demonstrates how to embed a hypertext link within the HTML that is generated. Many developers may already be familiar with the concept of creating a new window to display HTML using the HTML,<url> style process, but this example displays the HTML within a field in a screen rather than in a new window.

Example 1: How to include an ActiveX control within an input screen

Register your ActiveX control as SB.MSCAL. Invoke the user classes registration (UCR) process, then complete the screen, as shown in Figure 1. The attributes for this control are:

  • ShowTitle
    0 will not show a title when you display the control
    1 will show a title of the month and year when you display the control
  • DayLength
    0 will show the first letter of the days of the week
    1 will show the first three letters of the days of the week

Figure 1. UCR for SB.MSCAL
UCR for SB.MSCAL

You then create a new file, MYFILE, using the File Create (FC) process in which we will create a screen that will access this new control.


Figure 2. Create MYFILE
Use FC to create a new file

In this file, we create the following fields using the Field Definition (FD) process:

  • MYKEY
  • FIRST.NAME
  • LAST.NAME
  • ENTRY.DATE

Figure 3. Create MYKEY
Use FD to create a new field 1

Figure 4. Create FIRST.NAME
Use FD to create a new field 2

Figure 5. Create LAST.NAME
Use FD to create a new field 3

Figure 6. Create ENTRY.DATE
Use FD to create a new field 4

You then create a screen using the Screen Definition (SD) process that contains these fields, called MY.SCREEN. Note that the coordinates and dimensions for the field ENTRY.DATE are used as the coordinates and the dimensions for the ActiveX control that you use in this screen:


Figure 7. Create MY.SCREEN
Use SD to create the screen

You then create a paragraph using the Paragraph Definition process (PD.P) called XDATE that creates the ActiveX SB.MSCAL object based on the dimensions and the coordinates of the field ENTRY.DATE:


Listing 1. XDATE paragraph
                
LOCAL HANDLE, FBG
IF NOT(@GUI) THEN EXIT
*
BEGIN CASE
CASE @PARAM = 1
   FBG = GETATTR(@FORM,G.BACKGROUND)
   HANDLE = OBJCREATE("SB.MSCAL", @FORM, "ENTRY.DATE", G.BACKGROUND, FBG)
   IF HANDLE = 0 THEN DISP 4,'OBJECT NOT CREATED'
CASE 1
   DISP 4,'In Paragraph, Event = ':@PARAM
END CASE

The paragraph XDATE is then called from the Process Before Screen Display field within the GUI Parameters screen for the Input Process definition that you will create to call the input screen:


Figure 8. Insert XDATE into the Process Before Screen Display field
Insert process name in input process definition

When you invoke the screen, you can see the ActiveX control displayed in the container that you specified for ENTRY.DATE.


Figure 9. Invoke the screen
Invoke the screen

The control is set to today's date when the input screen is empty, and is then set to the value that has been stored in ENTRY.DATE when the record is read and then displayed in this input screen. The user is able to select a date by selecting a month and a year from the drop-down boxes, and can then select a day within that month using the mouse.

Example 2: How to display an HTML object within an SB+ screen

The objective of this example is to demonstrate how to display HTML in a field within an SB+ screen. The first thing that you need to do is to register the ActiveX that you are going to use.


Figure 10. Register the BROWSER ActiveX control
Register the ActiveX control using UCR

Then, define the paragraph using the (PD.P) that will be used to handle events for this object, which in this example is called BROWSER.EVENT.HANDLER:


Listing 2. BROWSER.EVENT.HANDLER paragraph
                
LOCAL EVENTSTR,EVENT,OBJECT,PROCESS.NAME.POS,KEY.POS,L.DATA,L.PROCESS           
EVENTSTR = @PARAM                                                               
EVENT    = EVENTSTR<1>
OBJECT   = EVENTSTR<2>
* Find the position of the string that marks the beginning of the Process Name in the 
* passed parameter
PROCESS.NAME.POS = INDEX(EVENTSTR<3,2>,"#$",1)                                  
* Find the position of the string that marks the beginning of the Data in the 
* passed parameter
KEY.POS = INDEX(EVENTSTR<3,2>,"%20",1)                                          
*Extract the name of the process
L.PROCESS = EVENTSTR<3,2>[PROCESS.NAME.POS+2,(KEY.POS-PROCESS.NAME.POS-2)]      
*Extract the key to be passed to the process
L.DATA = EVENTSTR<3,2>[KEY.POS+3,(LEN(EVENTSTR<3,2>)-KEY.POS-3)]                
DATA L.DATA                                                                     
EXEC L.PROCESS

Then, define a paragraph using the (PD.P), to create and populate the HTML field, which in this example is called XBROWSER:


Listing 3. XBROWSER paragraph
                
LOCAL HANDLE, FBG, SET.VAL, L.REC                                               
IF NOT(@GUI) THEN EXIT                                                          
*                                                                               
BEGIN CASE                                                                      
CASE @PARAM = 1                                                                 
   FBG = GETATTR(@FORM,G.BACKGROUND)                                            
*                                                                               
* Create browser object                                                         
*                                                                               
   HANDLE = OBJCREATE("BROWSER", @FORM, "PSFIELD", G.BACKGROUND, FBG)           
   IF HANDLE = 0 THEN DISP 4,'OBJECT NOT CREATED'                               
*                                                                               
* Create HTML                                                                   
*                                                                               
   L.REC = '<HTML>'                                                             
   L.REC<2> = "<B>Title</B> ":@RECORD<4>:"<BR>"                                 
   L.REC<3> = "<B>First Name</B> :":@RECORD<2>:"<BR>"                           
   L.REC<4> = "<B>Surname</B> ":@RECORD<1>:"<BR>"                               
   L.REC<5> = "<B>Phone No</B> ":@RECORD<6>:"<BR>"                              

*
 * The following line contains the name of an SB+ process to call from within a hypertext 
* link and it also passes the current KEY to be data stacked into that process by the 
* BROWSER.EVENT.HANDLER  paragraph process that you created earlier
*
 L.REC<6> = '<A HREF="#$O*CUST*S1 ':@KEY:'$">This is a link to the enq screen</A>'
 L.REC<7> = "</HTML>"                                                         
*                                                                               
* Transfer the HTML to the client as the ActiveX control will only display HTML from a 
* Windows file
*                                                                               
   WRITE L.REC ON "CHWORK","HTMLREC":@PORT                                      
   EXEC "L:SB.TO.DOS CHWORK HTMLREC":@PORT:" TO C:\TEMP\MYOUTPUT.HTML (OZ"         
*                                                                               
* Put HTML into browser control Navigate2 is a method within Shell.Explorer
*                                                                               
   SET.VAL = GETATTR(HANDLE, '(Navigate2,C:\TEMP\MYOUTPUT.HTML)')                  
CASE 1                                                                          
   DISP 4,'In Paragraph, Event = ':@PARAM                                       
END CASE

Then, define a field using the FD process called PSFIELD (this field name should not contain any special characters) that is used as a container for the HTML control:


Figure 11. Define a field called PSFIELD
Define a field using FD called PSFIELD

Create a screen using the SD process, that contains PSFIELD. Note that the coordinates and dimensions for the field PSFIELD are used as the coordinates and the dimensions for the ActiveX control that you are going to use in this screen, and that the field must be an input field.


Figure 12. Create the screen using SD
Create the screen using SD

Insert XBROWSER,1 in the Process After Read Record field in the Screen Parameters window of the screen in which you wish to display the HTML, as shown in Figure 13.


Figure 13. Insert the process name XBROWSER in the Process After Read Record fiend
Insert the process name XBROWSER in the Process After Read Record field in the Screen Parameters window

When you invoke the screen and select a record, you see the following:


Figure 14. Invoke the screen
Invoke the screen and select a record

When you then click on the hyperlink that you have created, you invoke the enquiry screen that you specified in the HTML that you built in the paragraph XBROWSER:


Figure 15. Use the hyperlink
Use the hyperlink to invoke an SB+ process

Conclusion

These examples have demonstrated how to display a calendar control within an SB+ input screen and how to display a browser control within an input screen. Using these examples, you should get the idea of how easy it is to incorporate ActiveX controls within your application, and take advantage of the work that other people have done to improve the look and feel and also the usability of your application without a significant investment from you in programming time. Note that these examples only work in the GUI.


Resources

Learn

Get products and technologies

  • Build your next development project with IBM trial software, available for download directly from developerWorks.

Discuss

About the authors

Photo: Kevin Drury

Kevin Drury is the programmer of the server part of SB+. He has been working with SystemBuilder and SB+ for 19 years.

Photo: Pavel Smelianski

Pavel Smelianski is a specialist in the client and middle-tier technologies. He joined System Builder in 1993 as a compiler engineer.

Comments (Undergoing maintenance)



Trademarks  |  My developerWorks terms and conditions

Help: Update or add to My dW interests

What's this?

This little timesaver lets you update your My developerWorks profile with just one click! The general subject of this content (AIX and UNIX, Information Management, Lotus, Rational, Tivoli, WebSphere, Java, Linux, Open source, SOA and Web services, Web development, or XML) will be added to the interests section of your profile, if it's not there already. You only need to be logged in to My developerWorks.

And what's the point of adding your interests to your profile? That's how you find other users with the same interests as yours, and see what they're reading and contributing to the community. Your interests also help us recommend relevant developerWorks content to you.

View your My developerWorks profile

Return from help

Help: Remove from My dW interests

What's this?

Removing this interest does not alter your profile, but rather removes this piece of content from a list of all content for which you've indicated interest. In a future enhancement to My developerWorks, you'll be able to see a record of that content.

View your My developerWorks profile

Return from help

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=1
Zone=Information Management
ArticleID=229328
ArticleTitle=How to include an ActiveX control within an SB+ input screen
publish-date=06142007
author1-email=kevind@us.ibm.com
author1-email-cc=
author2-email=pavelsme@us.ibm.com
author2-email-cc=

My developerWorks community

Tags

Help
Use the search field to find all types of content in My developerWorks with that tag.

Use the slider bar to see more or fewer tags.

Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere).

My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Use the search field to find all types of content in My developerWorks with that tag. Popular tags shows the top tags for this particular content zone (for example, Java technology, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere).

Special offers