The ISSUG Infobase contains archived postings from our on-line discussion forums. Nothing here may be quoted without the written permission of the author(s) of the original postings. The Infobase is organised into 12 sections concerning different topics.

FAQ content: Ram Malladi

                         

Part 6: Design

  6.1) Unix BATCH commit strategy
  6.2) Renaming the Data Structure List (DSL) objects
  6.3) Writing Help for Composer Applications
  6.4) Null values in Composer 4
  6.5) How to enable Composer applications on the web?
  6.6) Batch Performance in Composer 4
  6.7) Oracle Composer 4 RI differences
  6.8) How to inform the client that a long running job is over?
  6.9) CBD, model-architecture, and RI
  6.10) How to flow across load modules of different project/model?
  6.11) DB/2 Database Modifications - RI Problems/Features
  6.12) Timestamp Precision
  6.13) DBMS Default Values in Cool:Gen
  6.14) How to create database in Oracle by Composer 4
  6.15) How to pass command line parameters to UNIX batch?


6.1) Unix BATCH commit strategy

Kevin Bingham, Dated  : 21 February, 1997 at 14:10
Subject: Unix BATCH commit strategy
 
Hi,

The project that I am working on has a batch processing component to it. This process will be initiated every 15 minutes, on a UNIX box, and will need to process up to 5000 records of data per run. These will be placed onto an Oracle database.

Does anyone have any sound advice on a commit strategy for this type of application?

The information I am looking for includes the following:
- commit frequency (every xx no. of records)
- application design (procedure step logic/flow logic)
- restart facility (???)

Any remarks are welcome.

Regards
Kevin Bingham
MBA South Africa
====

Kevin Bingham, Dated  : 24 February, 1997 at 10:28
Subject: Re: Unix BATCH commit strategy...further ideas?
 
We are aware of two possibilities at present:

1. Cause a transfer dialog flow back to the main procedure step.
2. Through the use of an EAB.....

Does anyone have any sound advice on which route is better to follow, or even another/better route to take?

Comments appreciated ASAP.

Thanks
Kevin Bingham
Mike Bergen & Associates
====

Darius Panahy, Dated  : 24 February, 1997 at 14:06
Subject: Re: Unix BATCH commit strategy...further ideas?
 
I would go for a simple EAB containing a COMMIT statement whenever possible.

You cannot do this for IMS/DC. You also need Composer 3's ability to generate a 'cursor with hold' if targetting DB2 and want to issue the commit whilst cursors are open.

The main reason for preferring this over self referencing dialog flows is simplicity of design:

- Do not need to pass restart data across dialog flow
- Link flows are preserved
- Can commit from within a used action blok without having to return up calling chain
- Do not need to re-open cursors, etc.
 
 Regards
 Darius Panahy
 Information Engineering Technology Ltd



6.2) Renaming the Data Structure List (DSL) objects
 
 Mr Mika Alimattila, Dated : 20 December, 1996 at 15:07
 Subject: DM/DSL: renaming the DSL objects?
 
 Hi!
 
 I think that this bulletin board is great idea!
 
 My concern is that is it wise to do many changes in the Data Structure List after transforming/retransforming the data model. We are trying to give data model objects meaningful (i.e long) names that follow some standardized format, but then we also would like to see the current technical naming standard (depends on the environment) in use. One area where I "disagree" with Composer transformer is the foreign key naming. I would like to keep the similarities between the original attribute and the foreign key field (either fully identical or just prefixed with FK).  One example is to help ad hoc queries using tools like SAS. Now Composer is creating names that are meaningful only to Composer itself.
 
 So we are trying to make some (as little as possible) changes to Data Structure List. Is there a better way or is this one fact of life.
 
 Any ideas or comments?
 
 Thank you!
 ========
 
 Kieran Branagan, Dated  : 21 December, 1996 at 01:26
 Subject: Re: DM/DSL: renaming the DSL objects?
 
 Hi Mike,
 
 One approach that I was involved in in the past with regard to Foreign Key naming, was first of all to name the Foreign Keys meaningfully, this is especially useful to the DBA. If you use a Table Prefix you can include this which helps the DBA see at a glance to which table the key belongs.
 
 We then maintained the Composer FK name to the new FK name mapping in an ISPF table. Then as necessary we update the MVS CE directly using the ISPF table. This worked really well for us, and involved a bit of Clist / Rexx and some SQL.
 
 However you need someone with good CE internals knowledge to work this one through.
 
 Regards,
 Kieran.
 ========
 
 Andy Ward, Dated  : 23 December, 1996 at 10:28
 Subject: Re: DM/DSL: renaming the DSL objects?
 
 Hi Mike,
 
 Yes it is a problem, and one that I cannot assist on, except to say that my company also has to do as you do. The only good thing is that it is a 'one-off' exercise. We do not retransform things unless it is necessary, and as such only implement new entities. This means that we only have the task to do once. We too use table identifiers, and as such our foreign keys are named FK_xxx_something where xxx is the table identifier. As George suggested, this looks like a good case for an enhancement request to TI.
 
 Merry Christmas
 
 Andy Ward
 ========
 
 Darius Panahy, Dated  : 13 January, 1997 at 22:12
 Subject: Re: DM/DSL: renaming the DSL objects?
 
 I agree that there should be an enhancement. The ideal would be to have the ablity to specify the foreign key names as DSD name properties of the relationship so that these could be used in the re-transformation. I will post an enhancement request for this if one doesn't already exist.
 
 I also agree with Andy's comment that DSD maintenance is nearly always best performed by using the ability to add individual tables, columns etc rather than using retransformation. Retransformation also adds in indexes on all of the foreign keys which you had probably also spent some time modifying or deleting.
 
 On the subject of DSD maintenance, I think it would be useful to specify whether the RI is IEF or DBMS in the data model rather than the TD since the RI mechanism wouldn't get overwritten if you run the RI process.


6.3) Writing Help for Composer Applications

Preben Nilsson, Dated  : 22 January, 1997 at 07:57
Subject: GUI help for C/S systems

I am investigating the possibilities of creating more serious help for the client part of a C/S system than Composer itself delivers.
I was therefore wondering whether any of you good people have tried any 3. party products that can create help texts (for Win 3.x and NT)

I have seen a product called ROBOHELP (by blue-sky), and that seems to able to do the trick. But are there other / better help creation products that fit together with Composer ?
========

George Hawthorne, Dated  : 22 January, 1997 at 09:21
Subject: Re: GUI help for C/S systems

We looked at RoboHelp but instead used something else.' ForHelp', I think, which worked well. I'll get one of my colleagues who knows about it to post a reply in the next day or two.

George
========

Armin Sterk, Dated  : 22 January, 1997 at 13:35
Subject: Re: GUI help for C/S systems

Hi all,
Well, we use Robohelp. It is easy to use and not difficult to learn. I don't know 'ForeHelp'. Can you tell me some differences between the two products? (Always looking for improvements)

Thanks.

Armin
========

Darius Panahy, Dated  : 22 January, 1997 at 15:32
Subject: Re: GUI help for C/S systems
 
I am using Doc-to-Help from WexTech Systems to maintain the documentation for GuardIEn and IRIS. This product converts a Word for Windows document to a Windows Help File. It supports the new help file formats found in Windows Nt 4.0 and Windows 95.

I haven't yet used it to link controls in Composer to the relevant help topic in the help file, but this is possible and I will be doing it soon.

See www.wextech.com for more details.
========

Mike Scott, Dated  : 22 January, 1997 at 17:59
Subject: Re: GUI help for C/S systems
 
The product George is referring to is ForeHelp from ForeFront Technology.

We have used it on a couple of Composer projects and a few non Composer projects.  It provides a WYSIWYG editing tool with a database of topics so moving around is easy, you just click on the hypertext links. It will also embed bitmaps and create hotspots from within the editor. The two really useful features we used were the macro editor and the header file import and alias utility.

We used the macro editor to create context sensitive jumps to generic topics, i.e. If the same button was on more than one window we created only one help topic which had a 'Window' link.  When the user clicks the window link the help system navigates to the window help for the window on which the button was placed (if you have tried this in windows help you will know how dificult it is!).

The header file import allows you to import the context numbers and strings from a composer generated header file ([LM].h) and alias them to the help topics.  This allows the help file to be created independently of the application and linked together at implementation time (we employed one of our trainers to produce the help files so that we could get on with the 'exciting' stuff). Using this method we acually delivered the Windows help system, the System User Guide and the Process Manual as a group of interlinked help files.

The only problem we encountered was due to Composer renumbering the Help Context numbers each time the window is changed and regenerated.  This meant that we had to reimport the header file and re-alias it for each new delivery, we eventually got this down to a five minute per window job.

You can download an evaluation version (limited to 10 help topics) from the ForeFront web site at http://www.ff.com/
Mike
========

Karl Erik Bergaust, Dated  : 26 January, 1997 at 14:43
Subject: Re: GUI help for C/S systems

We are curently trying to do this at Statoil:
Window based help (all help ids within a window is pointing to a "window id".
We are developing one global help file which will contain all the global help references.

The .h and .hlp files will be generated by Composer.

Is it then possible to make the .hlp file to transfer to a global helpfile with a arbitrary helptopic? Or should all .exe look for the same global help file by altering the .rc file?

How was it solved at BT?

Cheers
Karl Erik
========

Jarmo Komi, Dated  : 27 January, 1997 at 10:09
Subject: Re: GUI help for C/S systems
 
At Sampo Insurance Company, we have dummy .hlp files for each Composer generated .exe file. Those dummy .hlp files contain one topic that has automatic jump to the real help file, which is designed using Doc-To-Help.

All controls in a window are assigned to the same Composer help id which will appear in the generated .h file.

Help project file (.hpj) for dummy helps contains include for the Composer generated .h file and alias definition that matches the help id in Composer with the topic in the dummy help.

Cheers
Jarmo Komi
========

Karl Erik Bergaust, Dated  : 27 January, 1997 at 10:34
Subject: Re: GUI help for C/S systems

Thanks for your answer.
I am not experienced with programming windows help. We are doing the same thing at Statoil, but haven't been able to jump to the global help file with a topic.

How is the jump from the "dummy" help file done at Sampo? And, is the topic passed along when jumping?

Cheers
Karl Erik
========

Jarmo Komi, Dated  : 27 January, 1997 at 11:13
Subject: Re: GUI help for C/S systems

The topic in the dummy help file has to have a jump footnote attached to it.

The footnote in .rtf file looks something like this:
! JC(`realhelp.hlp',5450)

If you are using Doc-To-Help, jumps are easily defined using Doc-To-Help's functionality.

Cheers,
Jarmo
========

Mike Scott, Dated  : 27 January, 1997 at 13:13
Subject: Re: GUI help for C/S systems
 
At BT we also have 'dummy' help files as described by Jarmo.  We package each window procedure in a seperate load module so we have a seperate dummy help file for each window.  We have created windows help macro's for each help file (ForeHelp has a macro editor, I don't know how you would do this in Doc-To-Help but I believe it can do it).

The macros we have created allow us to create context sensitive help for generic buttons and work thus:

The open macro in the 'dummy' help file jumps to a window help topic in the 'real' help file.

The window help topic has an open macro which creates a 'WindowContext' marker.

The control help topic has a jump macro which jumps to the relevant help topic in the 'real' help file.

In each of the context sensitive help topics we have an 'Is placed on window' link which links to a macro which jumps to the 'WindowContext' marker set at 2.

The user only sees the jump into the control help topic in the 'real' help file.

I know this seems to be a complicated way of getting to a help topic but it was the only way that we could get the benefits of having generic help topics whilst retaining the window context that the users wanted. It is not very elegant but it does work.

Mike

P.S.  Does anyone know why Composer passes help context numbers to the help system as well as context strings?
========

Ram Malladi , Dated  : 10 May, 1997 at 15:08
Subject: Writing Help for Composer4 GUI
 
Hello...
We are in the process of writing help for Composer4 GUI runnning on Windows NT 4/3.51 and also Windows 95. In the begining we are aiming to write Hyperlinked Windows *.hlp file. Would you please share your experience in this regard, like how to create this help file so that it will run in all the above 3 environments and
hyperlink them (initially in the help itself, later on to the web).

Also we have some system design documents on the intranet. Is it possible to link the Composer 4 help file (*.hlp) to the documents on the web (http://www.xx.com/design.html)?

Any suggestions are well appreciated.
Ram Malladi
========

george simpson, Dated  : 18 May, 1997 at 19:32
Subject: Re: Writing Help for Composer4 GUI
 
One problem w/ composer and help is that composer will renumber the help id's when you add or delete window items, or add or delete commands from a business system.  What we do is sort the header it generates, then renumber the helpid's starting at 3000, so our help id's don't change.

TI ---> enhancement request <---

We are using a product called forehelp, which will generate .hlp files or html files.  Wish I had further info for you.

Regards,
George
========

Sean Hansen, Dated  : 19 May, 1997 at 17:05
Subject: Re: Writing Help for Composer4 GUI
 
Ram,
Every time a I see a posting from you, it seems like we're working on the same project (just for different companies). Anyway, it is possible to link .hlp files to pretty much any other application (including a system registered web browser), so you can have a a hyperlink from the help file to a HTML file.

I am currently working on a mechanism to automate links between C4 generated windows and Web base help files.  Check out Netscape's concept of NetHelp at http://home.netscape.com/eng/help/index.html
I am a big advocate of the concept since it is truly cross platform!  (I just wish TI saw the benefit of cross-platform help - and would build it into the next version).  If anyone else has attempted this, please let me know.

P.S. I have the layout of the web pages - very win help like - if anyone would like to see it.
========

Steve Thomas, Dated  : 21 May, 1997 at 16:47
Subject: Re: Writing Help for Composer4 GUI
 
In doing a research study for a client last year, we examined the different methods of generating help in different client platforms: Windows 3.1, Win95, WinNT, OS/2, DEC, and Mainframe block mode.

We found that a common creation platform for help is possible, and we recommended plain vanilla MS Word.  From there several tools are available to convert this text to .hlp, .html, .txt, and even leave it in .doc word format.

Our overall finding is that there is no one way to do all this, and a common CREATION platform was of benefit.  There are tools to convert .txt and .doc files to .htm, and .htm to .hlp and vice-versa.  Sort of the same approach we use with Composer, creating the system in a platform that is portable and can be converted to other platforms.
========

Judy Eccles, Dated  : 23 July, 1997 at 07:44
Subject: Using external help with Composer
 
I am looking for advice on how to compile a help system which was designed using an external help editor (Wysihelp) into a Composer 3 application.  I have tried the instructions which come with Composer, where they suggest you compile the Composer application, take the .h (header) file across to the external help system, and then compile the help system using Windows Help compiler.  This uses the Composer .h file, to create a compiled .hlp file, which can then be used with the Composer load module.  The help file must have the same name as the load module, with a .hlp extension.  The error I get is "topic not found" when trying to initiate help from the application.  I have also tried putting a help id onto the window before compiling the application, but still get the same error.  Can anyone help?
========

Karl Erik Bergaust, Dated  : 23 July, 1997 at 10:55
Subject: Re: Using external help with Composer
 
Hello,

There was a thread here a while ago, where I asked about the same.

If I remember right, here is how:
The Composer generated helpfiles are only gateways to the global help file.

1. All controls within a window (or CRUD) has the same helpid defined.
2. Generate composer helpfiles (hpj, rc and h) for each loadmodule.
3. Collect all helpids defined in a user defined .h file - Looks like: #define PEGC035 3500 #define PEGC036 3600
4. Refer to the .h file in the .rc file
5. Edit .gml file for each loadmodule to only contain:
 #{\footnote <"The Helpid"}
 !{\footnote ! JC("The global help file", "The Helpid")}
 example:
 #{\footnote <PEGC035}
 !{\footnote ! JC("global.HLP", PEGC035)}
 The rest of the gml can be discarded.
6. Build your global help file with the user defined .h file.
7. Build global and gateway helpfiles.

Good luck!
Karl Erik
========

george simpson, Dated  : 23 July, 1997 at 14:22
Subject: Re: Using external help with Composer (correction*2)
 
Karl,

Thanks ! Here's a little more.  Cool:gen has an uncool flaw, in that when you add or subtract controls from the window or add or subtract commands from a business system, then regenn your window, the numeric values of the helpid's change in the gened header file ( .h).  What we do here is place a few calls in the win32bld.bat file to straighten that mess out.

Fisrt we sort the file ... sort %3.h > %3.h ... something like that, then we parse the file, and anything that doesn't start with #define RC whatever,  we renumber starting at 3000.  This way the clickers don't have to reimport the header file and recomplile and  their help everytime a window gets genned.

We also comment out the help compile step in the intdbclm.scr. In 4.1 we get it to skip that step by not defining a help compiler in the build tool's setup file.

We're using a year old version of Forehelp, new versions generate HTML.

Regards,
George
========

Ram Malladi, Dated  : 24 July, 1997 at 18:19
Subject: Re: Using external help with Composer
 
Hi Judy,

I also had the same problem. I resolved it finally by using hc31.exe instead of hcw.exe. The former comes with VC++2.0 and the later VC++4.2. So get hold of hc31.exe (which is a help compiler) and give a try. You have to change the settings in "Build Tool" --> "Setup" for Composer to use the right help compiler. If it works/does not work, please send me a mail.

Regards, Ram
========

Paul Willems, Dated  : 22 October, 1997 at 14:29
Subject: Help editor
 
I'm sorry if this question has already been asked (I do try to keep up with affairs on this BBS).

The question is: What is considered to be the best help editor to use with Composer?

We are using Doc to Help at this moment, but the procedures are difficult and overhead, in time and problemsolving, is very high. We have also writen some changes in scripts and batchfiles to link the help-files to the Composer application on their socalled MAPnumbers. This results in a complete recompile step of the helpfile whenever a single object on a window is rearranged, added or changed.

We also tried the Robohelp by Blue Sky Software which claims to analyse my executables on pushbuttons, windows, etc. My demo download does not do this with every item that I want it to.

So: is there a help editor that does not cost much time in maintenance, procedures, etc. to run with Composer executables?

Thanks
Paul
========

george simpson, Dated  : 22 October, 1997 at 15:29
Subject: Re: Help editor,, yet another nonanswer !
 
Paul,

I'm terrible at posting and not answering.....

We're using forehelp,, don't know if it's best but it is adequate, and has gotten high reviews. Most our the editing is done in Word,, we just use forehelp to do the compile.

What interests me about your post is the process you go through when you make a window change.  The value of the "MAP numbers" will change whenever you add or delete a window control or whenever you add or delete a darn command (sheeesh).

The workaround we've implemented is to sort the header file (.h) in the win32bld.bat file then we parse the guy renumbering every thing not starting with a RC or PI starting at 3000 :

sort  <%3.h>dummy.srt
start /min /wait fixhelp %3

That way we don't need to redo the help every time I regen the window.

Regards,
George
========

Ram Malladi, Dated  : 16 September, 1997 at 10:03
Subject: Missing CR in GUI Help!
 
Hello,
This may be simple, but important to us. In our C4 GUI help, when the help is entered through "Help Description" on Window Design and compiled through HC31.exe, all the Carriage Returns (CR) are missing (The entire help appears on a single line).

 Obviously, it is annoying to the users. Has this been experienced before? and what is the proposed solution? (Do I have to edit the GML?, if yes, what is the equivalent of CR in a GML file?)

Thanks a million
Ram
======

Ram Malladi, Dated  : 17 September, 1997 at 10:55
Subject: Re: Missing CR in GUI Help!
 
Looks like the solution is adding "\par" to the help description. With the double quotes removed. But now my help description is unreadable in Composer 4 model ;-) So looks like having the readable help in Composer 4 model is not
possible

Ram
========

Ram Malladi, Dated  : 23 October, 1997 at 09:45
Subject: Re: Help editor
 
Paul,
 In our project, we needed an electronic help. Some of our projects are using forehelp, etc..
In our project we decided to use Composer 4 help (Without any additional help tool).

Every Window object has got help id and help description. In this way, all the help is contained in the model itself (instead of storing in an external object, like MS Word etc.). The help is then compiled using HC31.exe (Visual C++ Help compiler), which automatically comes with the C Compiler. Just by pressing 'F1' we can get the help on the desired object.

Our users are happy with the level of help that they get on the windows.

Advantages of this approach are...
- No Extra cost of buying another help tool.
- All in One approach (Help is contained in the model itself).
- When things change on window, we regenerate the window and install as usual. No extra process.

Disadvantages...
- Limited help (maximum 10 lines) per object
- Help is not Flashy (Not like MS office help)

If you want more info., I will mail you on how to do it.
Ram
======

Chris Uttley, Dated  : 27 October, 1997 at 15:44
Subject: Re: Help editor
 
Theres a C4 project here at CSF that is using Robohelp to manage all the help data. I dug up some info regarding the interface between C4 and Robohelp and I've pasted some of the info. This is not a marketable product. I just thought you might be interested in the approach. Hope it helps. If you have more questions, let me know.

What is CSFHelpFix?
CSFHelpFix is a Windows 95/Windows NT 32 Bit application that is used in conjunction with Composer C generated code and Win Help Office to create consolidated help files.

Prior to the development of CSFHelpFix each load module for a composer system required a separate Windows help file. This limitation was cumbersome because any overlapping or common help between load modules required a "cut and paste" approach to developing the individual help files. This duplication among multiple help files increased the chances for missed updates and inconsistencies. The duplication also increased the footprint of the help files shipped with a product, and did not allow end users to navigate using the "back/forward" buttons in help since each request for help was likely to load a new help file into the WinHelp sub-system.

How does WinHelp work, and what are Resource ID's?

The WinHelp sub-system is called each time the user requests help from any windows based application. This system is passed two items with each request for help: the name of the help file, and the help resource ID number for context sensitive help on a field/control/dialog. These two pieces of information are stored in the .Exe for the application. WinHelp takes these two pieces of information and attempts to load the given help file and then search that file for the given help resource ID. Prior to compilation these two pieces of information are stored in two separate source file locations. The name of the help file is stored in the .RC or Resource Definitions file under the RCTRL_HELP section. The resource ID's name and value for each help topic are stored in the .H or header map file for a load module.

What prevents us from using standard Composer load module source files pointing to one central help file?

Composer generates the values for each help resource ID (and non-help resource ID) for a given load module. These ID's are stored in the load module's C header file. The system Composer uses for number these ID's is simple: start at 100 for each load module resource ID's value and increment by one for every resource ID that follows. This system has an obvious flaw when applied to help ID's: each load module has a set of help ID values which are only unique for that load module. ID's across multiple load modules are almost guaranteed to have conflicts with other ID's in other load modules. These conflicts translate to incorrect links to help topics within a central help file. This limitation prevents developers from using one central help file across multiple load modules.

What does CSFHelpFix do to allow for multiple load modules using a single help file?

The CSFHelpFix overcomes the inability of Composer to use a central help file by directly modifying the generated source code output of the composer system prior to compiling the code into an executable form. CSFHelpFix modifies two files for each load module: the .rc resource definitions file is changed so that it points to a central help file; and the .h resource ID header file is modified so that help ID values are reassigned to guaranteed globally unique numbers.
========

Arun Kalavath
Dated  : 12 December, 1997 at 08:32
Subject: Re: External Help
 
Giles,
 I have successfully linked Microsoft VC++ help workshop (comes with VC++) generated help files with Composer 4.0 generated code. This was the first time I tried. It took me a while to get the idea of how to create the help file using help workshop. But linking is easy. Basically you create one help file for each load module and when you compile the help file give the loadmodule.h file (created by Composer) as a source of your help ids.
 The problem is that whenever we add a new object to the window, the help ids will change (not the help ids we give in the help id filed, but composer assigns a numeric equivalent to this ids and this numeric value changes) so you will have to recompile the help file.
 I think there are some ways to prevent this happening. But I didn't try much as all of our windows are almost in the final stage and we don't expect any major changes to them.
 I hope this is helpful. I am on holiday from tomorrow. So I won't be able to follow this up. But I am sure there are lots of people out there who could help you with your specific doubts.

Regards,
Arun.



6.4) Null values in Composer 4

Tony Winmill, Dated  : 16 September, 1997 at 06:46
Subject: Nulls and C4
 
Hi from Canberra Australia.
We are using C4 in Client Server with servers running on CICS DB2.  Under C4 we are able to write creates setting optional attributes to NULL.  The client here also has a policy of using NULL columns in lieu of defaults.  The problem arises when we want to conditionally set attributes in a create based upon an import view.  Composer initialises empty views to defaults such as spaces and zero.  It is not possible to test the import view and set fields to null if the import view is a default value.  Nor is it possible to test for defaults and set a work view to NULL prior to a create.  Our only option is to have a conditional update inside the when successful clause of the create.  This will get messy on large batch jobs with 4 or more optional attributes.  I have tried to write an EAB in c to return null value in a work set attribute and have performed a create setting the field to the work view.  This doesn't work, the return from eab resets to view to zero length string.  Reading a null and setting a field to the NULL CURRENT entity view doesn't work, composer initialises to default somewhere between the read and the create.  We have not played with an MVS eab to set a view to null but I suspect strongly this will not work either.  Sterling Support have this logged as an enhancement request :-(  Anyone else seen this problem??

Heellllppppp!
========

george simpson, Dated  : 16 September, 1997 at 16:22
Subject: Re: Nulls and C4
 
Tony,

Yep this ain't good, thanks for the heads up.

Due to the internal workings of Oracle all text fields should be marked as varchar. They only support char because it's ansi standard. Cool:gen will set the value to a single space, which will make your dba cry.

Fortunately @ least thru version 8.0 tick space tick ' ' will equivalate to a null in a where expression.  Oracle says this is incorrect and they will drop support in 8.1. So Cool:gen correctly reads null values populated with other tools. Thx Oracle ! The problem is when you use a non cool:gen app, which of course every does,,, eg a query tool.

I notice in the window manager if you blank a numeric field he resets it to zero before returning to the procedure.
Hopefully it doesn't put spaces in the text field.  Why intarnation do they gen all those missing flags if their not going to use them.

Anyway this is turning into a rant... nice request... i hope they atleast fix the text,, I'm going to ask my DBA about putting triggers on all our text fields,, (450 tables of em) to trim the ' ' to a null.

Regards,
George
=====

Keith Norris, Dated  : 17 September, 1997 at 07:15
Subject: Re: Nulls and C4
 
I'm not sure that your solution will work at all in composer. The problem that I is that we don't generate null indicator variables with insert statements. And if we did it is these that you would have to fill to get the null value into the database. I'm no db2 expert but I spoke to a few people here who confirmed for me that there is no value that you can use in db2 in the host variable to represent null.
========

Kevin Bingham, Dated  : 17 September, 1997 at 08:02
Subject: Re: Nulls and C4
 
Hi there,

I am not using C4 yet, and neither am I genn'ing for MVS/DB2/CICS, but I do have some DB2 DBA experience, which tells me the following..... I hope that it is helpful

If your DDL stipulates that a column in a table is nullable, then your HOST variable targeting that column should be a complex structure containing a half word integer (2 byte) called the indicator variable, and the data structure for the actual column, be it text or numeric. Now DB2 will set the value of the column to NULL if the indicator variable is set to -1,
REGARDLESS of the value in the data structure for the column. For more detailed information, I can recommend looking in the DB2 SQL reference, particularly for information concerning HOST variables, NULLS and
INDICATOR variables.

Armed with this information, your EAB woes should improve......

Regards
Kevin Bingham
kevinb@mba.co.za
MBA, Cape Town, South Africa


6.5) How to enable Composer applications on the web?

Don Granquist
Dated  : 27 February, 1997 at 14:24
Subject: WEB Enabling Composer Applications
 
Has anyone out there taken an existing Composer application and put it out on the WEB. We currently have an IEF 5.3 Client/Server application running in a UNIX/Oracle environment. I am in the process of converting to Composer 4. Once converted, I would like to make the application available on our Intranet.

Any information regarding how to generate this application for WEB access would be appreciated. Also, any lessons learned and potential problems would be helpful.
====

Heather Ford
Dated  : 28 February, 1997 at 20:39
Subject: Re: WEB Enabling Composer Applications
 
I am creating Web access to our existing Block Mode application on CICS, which was designed as Client/Server format. I have had lots of headaches configuring CSE/Arranger/Webcenter/Oracle and extracting a model from mainframe CE into CSE.

I am now writing CGI in Visual Basic using the skeleton generated by Arranger.

If you install the WebCenter, you will find Webcenter programming guide in the intall directory.  As we know, TI does not provide robust documentation. I wouldnt be surprised if the programming guide is not bug free.

I would be interested in finding out how Webcenter works in UNIX.
====

George Hawthorne, Dated  : 28 February, 1997 at 23:42
Subject: Re: WEB Enabling Composer Applications
 
Heather,

WebCenter doesn't work at all under Unix. It uses OLE2 which is not available in that environment.

I'm sure TI will, at some point, provide facilities for the many companies which aren't satisfied with some aspects of NT server (scalability, security loopholes etc.), but I don't know how soon.

George
TI Software User Group
====

Mike Thigpen, Dated  : 02 March, 1997 at 19:34
Subject: Re: WEB Enabling Composer Applications
 
There are several ways to web enable your Composer applications.

1. WebCenter
- Currently available only for a NT server.
- Requires Arranger, Web Center, and Visual Basic (for CGI).
- Can target a application on any TI supported application server platform.
- NOT a integrated Composer solution.
- Only works within a Cooperative processing style.
- Can have security implications due to user funnel open listening port.
- Allows reuse of existing Composer servers.
 
 2. TI Connector component
- Works on NT and UNIX servers (ansi c lib so theoretically could work for any supported platform)
- No other products or product knowledge necessary.
- Can target applications on ant TI supported platoform.
- Integrated Composer solution (written and handled all in Composer).
- Supports multiple Composer application styles.
- Removes security implications for internet applications through support of alternate Composer application styles.
- Can allow reuse of existing Composer Servers.
- Supports use of Templates with dynamic data. This feature can also be used for creating reports dynamically.
- Comes with external file support.
- Supports logging and tracing.
- Not yet commercially released.
 
 3. Write your own EAB's for CGI support.
 
 Although I have used both, WebCenter and TIConnector are both different architectures. However, the TIConnector component tends to be more a more flexible solution for multiple platforms.
 
 Regards,
 Mike
 Webmaster for CMI, a TI Strategic alliance partner
 ====
 
 Stefan Fuchs, Dated  : 03 March, 1997 at 07:18
 Subject: Re: WEB Enabling Composer Applications
 
 We are going to transform a Blockmode / 3270- Application into a Web-Based Client-Server architecture. I'm naturally very interested in hearing more about the TI Connector Component which you mentioned. So I am asking you if you could tell me where I can get more information about it.
 
 Regards,
 Stefan
 Systor AG
 ====
 
 Jake Harris, Dated  : 03 March, 1997 at 18:18
 Subject: Re: WEB Enabling Composer Applications
 
 I would like to clarify some issues as they relate to WebCenter.
 
 The WebCenter 1.1 product supports all of the Client Manager's networking protocols, so you can access Composer-generated servers on *any* of the composer platforms - not just NT.
 
 The restriction is that the *Web server* must exist on a Windows NT system, which we are fining more common these days.  WebCenter 1.1 communicates with the Netscape and Microsoft Web servers.
 
 There are several advantages of WebCenter 1.1 that have not been mentioned:
 
- Remote administration is supported
 
- Integration Assistant plugs-in to Arranger to generate VB code automatically
 
- Interactive test gateway provides debugging support outside of the web server environment
 
- Web Object Interface - provide TP monitor support for transactions that does not use conventional CGI processing.  WebCenter server modules (Gateway programs) stay loaded in memory to improve performance.
 
- Enterprise Security Model - works with the web server using authentication technology to provide security that re-uses Composer 4 enhanced security.

Regards,
Jake Harris
Texas Instruments Software


6.6) Batch Performance in Composer 4

Dee Wauchope, Dated  : 24 October, 1997 at 10:01
Subject: C4 batch performance
 
I've heard a little rumourette that batch code performance in C4 is slower than
in C3 for some reason. Has anyone had any experience of this? Is it true / false?
We're just about to implement quite a large project in C4 so would be very interested in knowing...
Dee
========

Arun Kalavath, Dated  : 24 October, 1997 at 13:36
Subject: Re: C4 batch performance
 
Dee,
       Yes, this seems to be true!. My current project has some batch programs whose speed has a big impact on the system. Apparently when we switched to C4 from C3, the execution time of some of these programs became 4 times the original. The problem seems to be in the areas of string functions and the work around we used was to use C3 function object files for string functions (confused?).
       If you would like to know more about this please contact Rob Jehan(rob.jehan@intec.co.za).
Arun
========

Dee Wauchope, Dated  : 24 October, 1997 at 15:26
Subject: Re: C4 batch performance
 
Thanks for your comments, Arun.
I raised a query with Sterling on this and they said an issue had been raised in
the past when converting from IEF 5.2 to C4 - again for areas using a lot of
functions. Issue is 75560. The workaround in this case was to use the 5.2 runtime.
A PTF request has been raised (PTF RTH4102) but only for COOL:Gen 4.1a! I've emailed
Rob so will see what he says.
Dee
========

george simpson, Dated  : 27 October, 1997 at 16:31
Subject: Re: WOW !!! C4 batch performance
 
Dee, Rob, Anybody,

Our problem is that we're in version 4.1a and don't have the version 3 to
compare against.  The problem is complicated by the fact that we are an
AIX shop.  TI (Sterling ???) hardly does (did,, will ??) any PTF's for
AIX, with such a small install base.  I asked them to apply the PTF
Dee referred to (RTH4102 (as yet unposted))to AIX.  Support asked me for
some numbers when I called (cripes). I do have access to the Composer
3 runtime.  I'm pretty desperate here as we have a DSS (an ODS)with
250 tables, so tuning is a large undertaking, and a mistake like
this, well, I'd be more stupid than I regularly am !!

Any Ideas ? HELP !!!!!!

Thanks,
George
========

Ram Malladi, Dated  : 28 October, 1997 at 08:59
Subject: Re: C4 batch performance
 
This is intriguing. Even though I have no stats to compare against C3 batch, I would like to
add these 2 lines.
1) Trim, Concat functions in C4 are really slow. After Trims are removed from
our file handling statements (to format 40 attributes), the speed improved by
60 times. (Yes, 60 times!)

2) In general our C4 batch performance is alrght. In a massively parallel system, each
program is giving a performance of between 6 records/sec to 80 records/sec on a Oracle database.

Hope there is more information on this issue
Ram
========

Darius Panahy, Dated  : 28 October, 1997 at 21:22
Subject: Re: C4 batch performance
 
From the above comments, it appears that the problems relate to UNIX platforms.
Is this correct, and what other platforms have experienced problems?

Regards
Darius
========

Cherina, Dated  : 13 November, 1997 at 15:49
Subject: Re: C4 batch performance
 
Oh boy ! We are due to switch to C4 during 1998, I am already nervous after the
fun of C3 and are thus waiting for C4 to settle. IEF functions have always been
notorious for their delightful performance!  We have had a great time tuning
our C3 batch programs in a CBD environment and after your comments about C4
being even slower, well ...such anticipation!!!
Seen as the functions, even in earlier versions, have always been a performance
headache, one would've thought that it would have been improved by now!!
We avoid using any type of Functions within our batch programs unless there is
absolutely no other way.

We had one job which ran for 18 actual hours, this job made extensive use of
functions as well as a few other exciting bits.  After removing the functions
and tidying up a bit in the code and on the database, our end result
was 12 minutes.
So I can offer you lots of empathy from Cape Town....


6.7) Oracle Composer 4 RI differences
 
 Ram Malladi, Dated  : 06 April, 1997 at 16:35
 Subject: Oracle - Composer 4 RI Differences
 
 Hello...
 Posting this request to solve the following problem.
 
 General Description: We are using Oracle 7.33 remote database on HP-UX 10 which is targetted by Composer 4.
 
 Problem: Entities A and B have Mandatory associations on both ends. When we create A, we also create B (Create within Create in the same action block). In this scenario, when the RI is handled by Composer 4, both the creates work fine and there is no problem. But when the RI is handled by the Database (Oracle), we get Run time errors (batch programs crash).
 
 What causes this difference and how do we handle Mandatory A/B with Oracle RI, without changing one association to optional?
 
 Regards,
 Ram Malladi
 ========
 
 Ram Malladi, Dated  : 09 April, 1997 at 09:08
 Subject: Re: Oracle - Composer 4 RI Differences
 
 We solved the above problem by trial and error for CREATE statements, by ordering the associate statements.
 
 However when we changed the Delete properties (changed from disallow deletion to Cascade delete), we had to generate the RI for Composer 4 and install (even though we specified that all the RIs will be handled by DBMS, in this case Oracle 7.33).
 
 I am wondering now where lies the boundary between Composer 4 RI and DBMS RI?
 ========
 
 John Lemon, Dated  : 15 April, 1997 at 16:07
 Subject: Re: Oracle - Composer 4 RI Differences
 
 I don't know about oracle, but I know with some db's you can instruct the constraints to be evaluated at verb or at commit time.  Can you instruct Oracle to evaluate the RI at commit?


6.8) How to inform the client that a long running job is over?

Mike Scott
Dated  : 19 December, 1996 at 19:17
Subject: Asynchronous Transactions
 
I am currently investigating the use of Composer on a project which involves starting long running transactions from a GUI window.  The transactions can take up to 24 hours to run and produce a large amount of text output. The system which currently starts the jobs has a progress monitor and a facility to notify the users when the job has finished.

Does anyone have any ideas as to how I can reproduce this behaviour in Composer? The server must notify the user, polling is not an option because of the load on the server.
========

Kieran Branagan, Dated  : 21 December, 1996 at 01:39
Subject: Re: Asynchronous Transactions
 
Hi Mike,

The problem faced here is that being a client / server system, the client may not be still logged on after the job completes. In addition links could be down, even if the client and all links are up and that Composer does not support asynchronous flows, how does the server know who to return the message to ?.

When you say polling is not feasible then I assume you mean regular polling every few timeslices (whatever they may be). An alternative may be just to get the client to check on startup or, on execution of a particular transaction. You could extend this to checking once an hour or whatever, in order keep load on the server to a minimum.

One other possibility may be to keep a table of logged on users with their network address. Then as users log on this table is updated with the network node address (eg Netbios machine name) where they logged on. It would then be possible to send them an automated message at log on or at job completion to say the job finished.

Regards,

Kieran.
========

Mike Scott, Dated  : 07 January, 1997 at 17:16
Subject: Re: Asynchronous Transactions

Hello Kieran,
Thanks for your reply.  The problem with polling is the number of users expected on the system (10,000 spread over 18 servers).  Polling every five or ten minutes is the realistic maximum because some of the higher volume jobs only take a minute or so to complete.
Your point about the client logging off mid job is a good one so whatever we finally implement will have to be tolerant of this eventuality.

We are currently looking at notification and posting of results via email.  However we still have the problem of a job monitor which notifies the client of status changes.  One idea we are throwing around at present is to write an EAB which interrogates WINSOCK for messages sent to the client from a non Composer server.  We think we can make it work but it is not going to be very elegant and would prefer to keep within Composer as much as possible.

Regards,

Mike
========

Jan van Der Vyver, Dated  : 10 January, 1997 at 15:43
Subject: Re: Asynchronous Transactions

If your server output goes into a queue and the client (progress monitor) are programmed to get the result of the queue and not directly from the server then the server can crunch away and report to the queue even if the progress monitor is not available at the time. When the progress monitor is fired up again at a later stage it can get the output of the Queue. Using this method the polling can be shifted to the client code. It may even be possible to implement an
interrupt type solution using this kind of middleware?

If seen a demo on a product called MQ-Series and I think there is Composer Support for this middleware. IBM product. This was more than a year ago!

Have fun.


6.9) CBD, model-architecture, and RI

Kim Hjortholm
Dated  : 28 August, 1997 at 16:52
Subject: CBD, model-architecture, and RI
 
Hello fellow-Penguins - must be the right term with all that COOL stuff around :)

An inquiry from a new COOL-installation which intend to use the CBD-concept in full-scale;

Wth base in the CBD-concept you apparently (following the theory strictly) don't maintain a data-model covering a system, Buisness Area, Company etc. but end up with a lot of small model each covering a component.

Q1) When you do the physical implementation you will typical  implement several components at the same time in the form of X-numbers of tables and you want to  map this implementation back to this "group of components" ........ how do you do that ???  ..... is there any recommandations/experiences on how to  administrate this

Q2) CBD-design and physical RI don't go to well hand in hand ..... ..... is there any recommandations/experiences on what to do - what works/what doesn't work ??

thanks for any response

Kim Hjortholm, Kommunedata, Denmark
====

Mike Scott
Dated  : 01 September, 1997 at 16:47
Subject: Re: CBD, model-architecture, and RI
 
Hello Kim,

We have polar bears, snow leopards, arctic terns and whales as well as penguins.

Use of CBD does not prevent you from producing a business model, CBD is a design and build method. John Dodd from Sterling Software has produced a twelve (and a half) step method to break a business model into components.

A1)  The idea behind CBD is that each component can be individually implemented.  Therefore each implementation should be targeted to a particular component specification.  The thing that glues all the components together is the application (not everything needs to be a component). The time consuming part is mapping each implementation to a component specification.  The method that we have used is to produce 'Mapper' action blocks which translate the specification model on to the implementation model.  These are not very exciting to produce but do give a nice buffer layer between the implementation and the specification.

A2)  We have had little practical experience in this area but have considered two schemes:
a)  Let the applications handle referential integrity and have built in fault tollerance if it goes wrong.
b)  Produce a generic RI component (this is only really practical if you use object ids instead of business keys).

Hope this helps
Mike


6.10) How to flow across load modules of different project/model?

John Grigsby, Dated  : 09 September, 1997 at 19:04
Subject: flows from server proc. of project A to server proc. of project B
 
I would like to flow from a server load module associated with one project/model to another server load module associated with a different project/model.  I know that I can use NEXTLOCATION and client manager to do this, but isn't there a way of going server to server?  I was thinking about calling a server EAB which would setenv AEPATH to point to the other project's AEPATH, and then I started thinking about how the French Foreign Legion might not be such a bad career option.  I would really appreciate any ideas!

John
========

Rob Dowson, Dated  : 10 September, 1997 at 10:01
Subject: Re: flows from server proc. of project A to server proc. of project B
 
If you both procedures are to run on the same machine, you should be able to use the procedure step of the other. To do this you will first need to migrate a stub of the server proc in project B to project A. This stub is just to contain the views for matching purposes. From there, the theory is, to use the "USE PROCEDURE STEP" statement available in Composer 4.

I have not tried this myself, but from discussions with others, this should work.

Note that the server procedure of project B must be implemented, and not the one in project A, and that the packaging should be the same in both models.

Good luck.
========

John Grigsby, Dated  : 10 September, 1997 at 14:53
Subject: Re: flows from server proc. of project A to server proc. of project B
 
Thanks!  This puts me much further along than before.  Since the procedure I want to use is on -another- box, I could create a link from the directory on the first box to that executable, however there is still control (lock) that is placed on the executable by the Asynchronous Daemon, or whatever you want to call the stuff that handles load balancing, etc.  But maybe this doesn't matter.  I'll have to determine what sort of contention could arise.  If the lock only prohibits deletion of the executable, then perhaps I am ok.

Does anyone have any further suggestions?

Much appreciated.
John
========

Paul Hardwick, Dated  : 02 October, 1997 at 15:20
Subject: Re: flows from server proc. of project A to server proc. of project B
 
John,

The only way you can do any server to server flows with composer in a non MVS environment is by using the ODC product. This works in conjunction with a third party middleware product, either DCE or MQ Series.

We use it for server to server flows using PStep Use, and to have those flows across models is possible providing you adhere to a few ground rules first.

Please bear in mind though that DCE/ODC/MQS is not something you just install to get a bit more functionality, it is a completely new approach to disributed processing applications.

If you would like to discuss this further please send me an E-Mail to hardwicp@it.postoffice.co.uk

Cheers
========

John Grigsby, Dated  : 03 October, 1997 at 17:11
Subject: Re: flows from server proc. of project A to server proc. of project B
 
Thanks -

You beat Sterling in getting back to me on this!

The bad news for us is that while we can junk TI's middleware, Tuxedo is something is being actively explored, and, if I understand your point, not only will not be part of a solution, but cannot.  The reason Tuxedo is being used is performance. Not knowing more than the slightest about DCE, I wonder, in an HP/UX server environment, whether DCE serves the same purpose (increasing performance), or if we'd have to plug in yet another package on top for that reason.

Yikes!
John
========

Paul Hardwick, Dated  : 07 October, 1997 at 14:17
Subject: Re: flows from server proc. of project A to server proc. of project B
 
John,

From my experience with Composer and DCE vs Composer & Client Mgr, there is no great increase in end to end performance. DCE really comes into it's own in an enterprise wide environment, and this is where it leaves traditional Composer middleware standing. Apart from the server to server stuff, it also adds security, directory services, time services etc etc..
DCE itself does not really add any kind of Tuxedo type TP monitor support to help performance / managability. As you mention, you have to plug in another package such as Encina to do this. Composer/COOL:gen will be supporting Encina next year apparently...

Cheers
Paul

p.s. Thanks for the compliment about beating SSW on this one. I used to work for them until a month ago !!
========

John Grigsby, Dated  : 08 October, 1997 at 22:07
Subject: Re: flows from server proc. of project A to server proc. of project B
 
I spoke with a techie at BEA (which sells Tuxedo). He described how, using an EAB on one server, I can "flow" to another server's load module, passing it a structure containing data, and return with the result.  So, thankfully, Tuxedo can continue to be our solution (not that I decide these things).


6.11) DB/2 Database Modifications - RI Problems/Features

Andy Ward, Dated  : 13 March, 1997 at 14:56
Subject: DB/2 Database Modifications - RI Problems/Features
 
Does anyone have any tips for Database modification management in a DB/2 environment. Composer (Version 5.31) allows you to generate DDL for a tablespace. This causes the statements to Create the tablespace, any tables and indexes contained therein and any Alter statements that pertain to that table only. For example assume that table A relates 1 to many B and A also relates many to 1 C. If we drop table A (in order to perform modifications to its structure) and then generate the DDL to recreate it, we would get table a and all its columns and indexes created OK, and we would get the foreign key on A (pointing to C) also created. However, Composer would NOT generate the Alter statements to Create the foreign key on B pointing to A. This would have been removed by DB/2 when the Drop of A took place.

In order to get round this, we always generate all the DDL for all databases that have cross relationships, and then scan it for any occurrence of table A. We then extract any alter statements on these other tables that point to A, and include them at the end of the single table DDL.

This is rather tedious. Any suggestions would be welcome on this specific feature of Composer, and generally regarding techniques people use in database management.

Please dont tell me its fixed in C4 or C5.!!

Thanks and regards

Andy Ward
====

Piergiorgio Ardizzi, Dated  : 13 March, 1997 at 17:03
Subject: Re: DB/2 Database Modifications - RI Problems/Features
 
Andy,

We also handle this situation manually.

Before dropping table A, we run a QMF query on the DB2 Catalog that extracts all the relationships where table A is parent. The form related to the query automatically converts the data extracted in the Alter statements that have to be submitted after table A has been re-created.

If you find this procedure less tedious than yours, let me know, and I will provide you the QMF query and form.

Pier
====

Steve Aughinbaugh [Texas Instruments], Dated  : 17 March, 1997 at 20:47
Subject: Re: DB/2 Database Modifications - RI Problems/Features
 
BMC's DB/2 Alter product is a good product that can take an existing
database and the modified or new DDL and then produce DDL that can be
used to ALTER the existing database.

Over the years we have looked at adding this sort of capability, but the BMC product does such a good job of it that we felt that it would be hard to compete with it.


6.12) Timestamp Precision

Martin Gierlinger, Dated  : 16 July, 1997 at 10:08
Subject: Comp3: Timestamp precision DB2 -> MS SQL-Server
 
We have converted our Composer3 development-environment from OS2/DB2/2
to NT 4.0/SQL-Srv65. Most of our applications work fine.

We have one special application that makes intensive use of the DB2 timestamp data-type fields (even as key-fields!).

The application receives timestamp-values with milli-seconds from other non-composer-applications and sometimes generates new records with calculated timestamp-values with intervals until 1/million secs.

The datetime-datatype of MS-SQL-Server and the ODBS-interface of MS Access (which we use for preparing our test data) only support a precision of secs (I think so...).

When loading data from the host-application we receive duplicate-key-values because
SQL-Server cuts off the portion after the secs in the timesatamp-key-fields.

Any help would be greatly appreciated!
========

John McIntyre, Dated  : 16 July, 1997 at 10:51
Subject: Re: Comp3: Timestamp precision DB2 -> MS SQL-Server
 
We had a similiar problem with ORACLE.

Because ORACLE supports record level locking they (ORACLE) see no need to support a greater granularity in timestamp that 1 sec. (Date/Time/Timestamp are all stored in ORACLE as a DATE field anyway.)

The implication is obviously that you should not use timestamp in a key.

As a means to avoid the issue we simply added a second to the timestamp to achieve uniqueness but ultimately the only way around the problem for us was to remove timestamp as a unique key element.
The point of all of this is that it looks like SQL-Srv65 is behaving like ORACLE

Sorry.
========

Mel Collins, Dated  : 17 July, 1997 at 21:13
Subject: Re: Comp3: Timestamp precision DB2 -> MS SQL-Server
 
I can sympathise with your problem.  We have gone thru a similar "learning curve" with SQL Server 6.5 and Composer 3.  We did the same workaround as John McIntye by incrementing the seconds portion.  Which I regard as not the desired solution.

There are several other Composer 3/SQL Server 6.5 timestamp issues such as:
 1) Difficulty in setting a "non null" timestamp to a "null" timestamp.
 2) Times between midnight and 00:59 being read as midday -> 12:59.
 3) Between the hours of 1am and 10am, the leading digit of the time is translated to a space instead of zero.  These last 2 issues result in a problem comparing timestamps.   See the support page for the Inquiry/PTF no's.

We use timestamp for record locking ie ensuring that the row read hasn't been changed before the update/delete takes place.  An interesting situation arises with the above problems is that update/deletes prior to 10am are rejected due to  timestamp differences.

Luckily our production environment is AIX, DB2/6000.

I would be interested to hear from anyone who has worked with Composer 4, NT, (DB2 or SQL Server 6.5) and whether the problem persists in these environments as well.
========

Kevin Bingham, Dated  : 21 July, 1997 at 07:22
Subject: Re: Comp3: Timestamp precision : Oracle
 
Hi there,

We also have had similar problems on HPUnix/Oracle. Setting a null timestamp while testing under OS/2:DB2/2 was no problem, but once we implemented onto the target platform, this action caused strange errors, e.g.  "ORA-01843 - not a valid month."

The work around that we came up with was to set a local timestamp field to null, using the mask of 'YYYY-MM-DD-HH.MM.SS.SSSSSS' (DB2 standard), and then do the read/create using this view. GES3007 & GES3022 (GEN3021 on NT) were also helpful when doing a READ sorted by a timestamp.

We still have occasional problems with the way Oracle uses the DATE format, especially with the default for the NLS_DATE_FORMAT variable, which uses the mask 'DD-MON-YY', which immediately causes comparison problems when using timestamps.

Anyone who has a consistent solution, speak up....
 

Regards
Kevin Bingham,
Cape Town, South Africa
========

Guru, Dated  : 31 October, 1997 at 12:05
Subject: Re: Oracle Timestamps
 
It is a good idea not use time stamps as identifiers in Oracle as
Oracle can't cope with it. Oracle has 1 sec. precision. Whereas DB2 can handle upto
Micro Seconds.

Guru
=====

Guru, Dated  : 03 November, 1997 at 12:41
Subject: Re: Oracle Timestamps
 
Raymond,
 It is not a problem with Composer that can't implement Timestamps. It is
with Oracle. You can't have Microsecond precision in Oracle, where as it is supported by DB2.
So it is a problem with the Database (not Composer). However Composer has problems in NULL
implementation.

Guru
========

Guru, Dated  : 03 November, 1997 at 12:51
Subject: Re: Oracle Timestamps
 
Reymond,
 How about using some sort of Sequence generated numbers as Unique keys
(Or something more sensible in business terms, like Composite keys) than using
Timestamps?

 If it is necessary use Timestamps as it is a huge DB2 system already implemented,
How about using (YYYY-MON-DD:HH24:MI:SS) from the Oracle database and adding the
Micro Seconds bit (By a Random Generator) later on? This will need changing the Domain
from Timestamp (20) to Char(20).

Please post whatever you are thinking of doing as it is useful to others.
Guru
========

George, Dated  : 03 November, 1997 at 16:01
Subject: Re: Oracle Timestamps
 
Raymond,

Dogbert say redesign, then resign,,  (create a huge mess so you can
come back as a consultant )

Use the Oracle sequence number it is very fast.
Oracle was designed around UNIX, DB/2 was designed around MVS.
They are quite different (eg all text should be varchar in Oracle)
You're really gonna like ORACLE when you get used to it.
Karl's posting is informative, and the null problems the guru
is talking about are with COOL:gen.  Unforuntately IEF grew up in DB/2
cobol environment where the char data type didn't give them a
proper grasp of NULL (cripes) .

Happy Oracaleing and COOL:genning,
George
(it's monday so i not sick of the word cool yet,, wednesday is different)


6.13) DBMS Default Values in Cool:Gen

Ram Malladi, Dated  : 12 December, 1997 at 19:36
Subject: DBMS default values in Cool:Gen
 
Description
---------------
 We are in the process of moving from Composer 3 to Cool:Gen 4.1a. One of the features being tested is the "Enforce Default Values within a DBMS" checkbox on the Data Structure List window.

 That checkbox is supposed to implement the DBMS (Db2 in this case) defauls values on Mandatory attributes. Looks like this is a good feature.

Problem
-----------
1) This checkbox is disabled on "Date" attributes. So we can't enforce DB2 default date. Instead I guess it forces us to use Coll:Gen default date (01-01-0001). Does it mean that both Cool:Gen defulat and DB2 default for dates are the same? Or What is it?

2) On a converted model from C3, the above checkbox is disabled on SOME of the Non-date attributes as well. It does not happen if the model is a brand new Cool:Gen model.

Any suggestions?
Thank you
Ram Malladi


6.14) How to create database in Oracle by Composer 4
 
 Ken Montoya, Dated  : 02 March, 1997 at 16:38
 Subject: Database creation under NT 4.0/C4/Oracle 7.2
 
 I am looking for instructions on how to create databases/tables using Composer 4 and Oracle 7.2 on a Windows NT 4.0 workstation.  It is my understanding that this process is not seamless as in an OS/2 to DB2/2 environment, but you must first generate the DDL and then import to SQL*Plus.  I also heard you must first grant the Composer ID access to the general DB in Oracle.  Any help here will
 be greatly appreciated.
 
 Thanks,
 Ken
 ========
 
 Darius Panahy, Dated  : 05 March, 1997 at 09:14
 Subject: Re: Database creation under NT 4.0/C4/Oracle 7.2
 
 I was hoping that someone would have posted the definitive answer by now, since the approach that I have used (C3, Oracle 7.2) has been along the lines that you mention and I thought that maybe there was a better alternative. Seems not...
 
 Anyway, I have done it as follows:
 
 1) Use SQL*DBA or SQL*PLus to GRANT CONNECT, RESOURCE TO userid IDENTIFIED BY password where userid and password are the userid and password that you will connect to the database with. Composer defaults these both to database name, but you can choose anything.
 
 2) Generate the DDL. You can try and get the IT to install the database. I haven't bothered and instead use SQL*Plus to install. Logon to SQL*Plus using the userid and password  as above and then run the DDL file, i.e. @ddlfile.sql where ddlfile is the filename.
 
 You should now have the tables installed.
 
 3) The fun starts when you want to execute the code. You will need to logon to Oracle. On windows 95 (same for NT 4 I think) a logon dialog box appears asking for the database, userid and password. The database string should be '2:' without the quotes, and the userid and password should be the same.
 
 You can pre-fill these values on the command line to start the program, i.e. loadmod.exe trancode /db=2:
 
 and also provide the userid and password in the c:\windows\iefgdic.ini file, e.g.
 
 [MaxDatabases]
 Max=100
 
 [ORACLE]DatabaseCount=1Database1=2:Trancode1=
 LoadModule1=
 Server1=
 SQLid1=userid
 SQLPassword1=password
 In C3 there is a bug whereby the logon box is still displayed even if the values are correct! I understand that this is fixed in C4.
 Finally, each connection to Oracle (i.e. starting a new load module) is slow (example 2 second delay), so package many procedure steps per load module.
 
 Hope this helps, and if anyone has a more elegant solution, please tell us!
 
 Regards
 
 Darius Panahy
 Information Engineering Technology
 dpanahy@iet.co.uk
 ========
 
 Ken Montoya, Dated  : 09 March, 1997 at 21:24
 Subject: Re: Database creation under NT 4.0/C4/Oracle 7.2
 
 Okay, here's the scoop.  I spoke to a few people down in Plano and received the following information on setting up the Build Tool for seamless installation of Oracle v7.2 tables using Composer 4.
 
 1. Create an new user named COMPOSER with a password of COMPOSER using either SQL*DBA,SQL*Plus or Oracle Navigator (I perferred Navigator). Grant CONNECT,RESOURCE to this user with the following command:
 
     GRANT CONNECT,RESOURCE TO COMPOSER IDENTIFIED BY COMPOSER;
 
 2. Start the C4 Build Tool and go to setup.  Edit the following parameters:
 
     OPT.DSUSER              COMPOSER
     OPT.DSPSWD              COMPOSER
     OPT.DBCONNECT           LOCAL   (this can also be '2:' without the quotes)
     OPT.SQLPLUS_OR_SQLDBA   SQLDBA72.EXE
 
 3. Generate the DDL with the install option.  The build tool will connect to the local database using COMPOSER and create the tables seamlessly.
 
 4. See Darius's note for runtime considerations.  Many thanks Darius for your feedback!
 
 Ken Montoya
 ========
 
 David Rothschild, Dated  : 13 March, 1997 at 15:30
 Subject: Re: Database creation under NT 4.0/C4/Oracle 7.2
 
 I am working in C3 ORACLE 7.1 and have followed all of your instructions.  I am able to get the DDL to gen fine, but when I execute the code with the /db=2: I always fail at the first SQL statement with a message of not logged on.  I have tried updating the iefdgic.ini file with both the user and password, just the user, and no user and password.  I get the ORACLE logon window if both the user and password are not provided, but I still get the same error.
 
 What should the Composer Database name be? Does it have to be something special?
 ========
 
 Darius Panahy, Dated  : 13 March, 1997 at 17:25
 Subject: Re: Database creation under NT 4.0/C4/Oracle 7.2
 
 Are you using Oracle 7.2 or 7.3? And if 7.2, have you applied the ORAFIX changes to the runtimes? If not, you should obtain a copy of ORAFIX from the TI support web site.
 https://www-s.ti.com/software/docs/support/misc/
 
 The above will work for 7.2 but not for 7.3.
 
 With Oracle 7.3, I always get a TIRM039E DB LAST STATUS=DB on the first SQL statement. I think that this is because there hasn't been a succesful connect issued.
 
 I have developed a workaround for 7.3, but this involves external action blocks to issue the Oracle connect and commits since it would appear that Oracle 7.3 is not supported by the
 ORAFIX runtimes. This is work in progress, so I may be wrong.
 
 In the above notes, I was referring to me work with Composer 3 not Composer 4. ORAFIX is for Composer 3.
 Hope the above helps.
 Regards
 Darius Panahy
 Information Engineering Technology Ltd


6.15) How to pass command line parameters to UNIX batch?

Hakan Turan, Dated  : 08 December, 1997 at 10:37
Subject: Command line parameters for UNIX batch
 
Hello,
The project I am working on has the need to call a UNIX batch {online/without
display} procedure. This has import views defined, and I need to pass parameters
to the procedure using these import views. At present I am using the syntax
{lmname TRNCODE param1}. This doesn't work. Does anyone have other ideas.
Thank you in advance for your help.
Greetings from Istanbul...
Hakan
========

Darius Panahy, Dated  : 08 December, 1997 at 11:08
Subject: Re: Command line parameters for UNIX batch
 
Unfortunately the logic to parse the command line parameters requires a screen, so if you have a non-screened transaction, you cannot use clear screen input parameters.

One option that I have used is to set environment variables before calling the program and then use an EAB to read them from the environment.

Another is to write them to a file and then read the file.

A third possibility that I have not tried is to create a dummy screen to enable you to use clear screen input parms and then use an EAB to stop the program at the end of the procedure step before the screen is displayed. If you use this approach, you will not return back to the dialog manager and therefore you will need to code your own rollback logic since you will not be able to use a rollback exit state.

This option is not as bad as it might appear because an empty iefae screen is also displayed at the end of a non-screened procedure step, and you normally have to have some trick to avoid it anyway.

Regards

Darius Panahy
Information Engineering Technology Ltd
========

George Simpson, Dated  : 08 December, 1997 at 16:02
Subject: Re: Command line parameters for UNIX batch
 
Hey Darius,

That is a big unfortunate.  We have a data warehouse where we
are taking files from various sources and tieing them all
together.  We have to load all those tables to a staging table
then do a READ EACH to process them.  I suppose we could have
alternatively written externals.  Those two steps could be
completely disgarded if clear screen input had nothing
to do with a screen.  Also note that those two steps are
very resource intensive. I guess the word screen is what threw
the design of this feature off ( 1988 ?? ).  Anyway if you
have any pull with the design committee on enhancement requests,
and are in agreement, I'm sure several of us would be happy.

Thanks for the point,
George
======

Karl Erik, Dated  : 08 December, 1997 at 17:43
Subject: Re: Command line parameters for UNIX batch
 
Hello,

In a project at Statoil, we used the environment parameter approach (using unix).
One common external to pass values and kick off the batch program.
One common external to to read the values from the environment.

One great benefit is that the values are attached to the process.
It works.

Regards
Karl Erik
========

Glenn Smyth, Dated  : 08 December, 1997 at 17:57
Subject: Re: Command line parameters for UNIX batch
 
We have online no display procedures under NT and start them as you describe and
the parameter (we only pass one but more shouldn't be an issue) is available
no problem in the COMMAND field.

We are using COOL::Gen 4.1a so maybe it is new in there but unless my memory is
abandoning me completely (it is the xmas party season after all so its possible)
I am sure that I have done this before under MVS and also OS/2 in previous
versions and had no problem.

The same dialog manager is generated irrespective of whether or not the procedure
is display or no display so at first glance without detailed investigation it would
seem to me not to make sense that clear screen input cannot be used with non display
online procedures (in fact I always took it that this was one of the main differences
 between a batch procedure and a non-display online procedure).

However, I seem to be in disagreement with some prominent other responders so
maybe I'm wrong or it is a version and/or target environment issue.

If you get this resolved a quick posting detailing the result would be appreciated

Glenn
========

Glenn Smyth, Dated  : 09 December, 1997 at 10:02
Subject: Re: Command line parameters for UNIX batch
 
I checked this out last night as I remembered after the posting that the routine
we have originally ran on all platforms and so I checked out the code. The
following logic is used on NT, OS2 and SUN Solaris and starts online no display
procedures such that the passed parameter(s) is/are available in the command field.
The comments refer to token as this is the parameter that we send.
 
Code follows :

#ifdef OS2
    /* If the load module name contains a '.' then truncate the name
        at that point. */
        {
                for (i=0;i<strlen(target_lm_name) ;i++ ) {
          if (target_lm_name[i]=='.') {
             target_lm_name[i]='\0';
             break;
          } /* endif */
                } /* endfor */
        }
#endif

    /* Copy the loadmodule name to a second area to be used as parameter 1 to
        the executable. If the name contains a path (signalled by either a backslash
        or a forward slash, then remove the path. */
    if (p=strrchr(target_lm_name,'\\')) {
       strcpy(parm1,++p);
    } else {
       if (p=strrchr(target_lm_name,'/')) {
          strcpy(parm1,++p);
       } else {
          strcpy(parm1,target_lm_name);
       } /* endif */
    } /* endif */

#ifdef OS2
        {
            char  commandLine[256];

                sprintf(commandLine,"%s %s %s",
                          trim(target_lm_name),        /* Load Module */
                          trim(parm1),                  /* Dummy Trancode */
                          myToken                      /* Token passed as command */
                   );
                runrc=system(commandLine);
        }
#else
#ifdef SOLARIS
// For Solaris, we have to use the fork / exec construct, sadly.
        // Remove any extension from parm1
        {
                char *ii;
                ii=strrchr(parm1,'.');
                if (ii) *ii='\0';
        }

        // Create a child process
        if ((pid=fork()) < 0)
          {
            perror("fork");
            runrc = -1;
          }

        if (pid == 0)
          {
            // This code is running as the child process
            execl(target_lm_name, target_lm_name, inStructure, myToken, NULL);
 
            // We should never get here.
            perror("exec");
            // exit(1);
            runrc = -1;
          }

        // Wait for the child process to complete.
        while (wait ( (int *)0) != pid)
          continue;
#else
        // Remove any extension from parm1
        {
                char *ii;
                ii=strrchr(parm1,'.');
                if (ii) *ii='\0';
        }

        runrc=_spawnlp(_P_WAIT,target_lm_name,target_lm_name,parm1,myToken,NULL);
#endif
#endif

Hope this helps,
Glenn
========

Darius Panahy, Dated  : 09 December, 1997 at 10:38
Subject: Re: Command line parameters for UNIX batch
 
Interesting...

My tests were done many years ago using IEF 4.2 and we couldn't get a non-screened IMS/DC tranaction to accept command line input parameters for import views, but we never tried just the COMMAND field.

The answer from TI at the time was that the validation routines to check the domain and length of the import views were in the screen map and therefore it needed as screen. It may be that they don't validate the command field in the same way since this has a fixed data type and can also contain 80 chars.

The other need for a screen was that if the command line parameters were of the wrong length, domain or the wrong number of parameters were entered, it displayed the screen map highlighting the fields in error rather than executing the procedure step logic.

Darius
========

george simpson, Dated  : 10 December, 1997 at 21:35
Subject: Re: Command line parameters for UNIX batch
 
Glenn,

Nice save Glenn !

Did this change since 4.0 or have I been confused from the get go ?
Also many thanks for sharing the c code.
Hope those Christmas parties don't damage your brain, we need it (you ?) around.
If your about to read my other post on this thread don't it is invalid.

Regards,
George