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
|