RE: (forte-users) Domain Classes
Hi,
This thread coinsides with a recent posting I made on formatting percents
(attached at end).
The complication here is that the data field is part of an array field and
is:
1) editable
2) part of an array of BObjects that are mapped to the array field
There is no separation therefore between a BO and a DO, at least in the
current implementation. Furthermore, the user may or may not want percent to
be the display format. What I think I need is one field that actually has
two values, a display value and a 'true' value, and each would probably need
its own numeric format as well (one for data entry and one for display).
I've never used a domain class, but do you know if such a beast be possible?
-----Original Message-----
I want to provide the option for a user to display values in percents or
not, and finding this surprisingly tricky.
Although its easy to make a DecimalData with a value of .08 look like 8% by
changing the scale and multiplying by its value by 100, I don't see how to
do this in a way that the variable still knows its value is .08.
Jason,
Domain Classes can also store FieldWidget information associated with them.
For example, Widget type, Max Characters, Input Mask, Size Policy, Help
Text, etc. This means that when a developer adds the domain to the window
workshop it will automatically have all the settings that were previously
defined on the domain, therefore giving a standard look and feel, as well
as, behaviour(fillstring and SetValue).
Regards,
Allister
Xpedior
www.xpedior.com
Ph: +61-8-9320-7604
Fax: +61-8-9486-8650
-----Original Message-----
From: Jason de Cean [mailto:[email protected]]
Sent: Thursday, 21 October 1999 9:30
To: 'Forte Users'
Subject: (forte-users) Domain Classes
Hi,
Can anyone tell me the advantage of using a domain class ?
We have subclassed DecimalData (FormattedDecimal) and overridden the
FillString and SetValue methods to implement other formatting. This is
then used as an attribute on our data classes and appears to work fine
when mapped to forms.
So, why would we use a Domain Class instead of just sub classing
DecimalData ?
Jace.
Jason de Cean
Genisys Team
Lumley Technology Ltd.
Lvl. 8, 55 Sussex St
Sydney, NSW 2000 Australia
Ph: 02 9248 1321
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]
Similar Messages
-
Re: (forte-users) Dynamic Class Loading andUnloading
If you are using TOOL libraries, perhaps you can use the CL level feature of
Forte to load libraries.
If the initial meta data libraries are CL0, your external data used to load
the library can specify "cl0". Then you update the libraries, make them CL1,
update your external data to specify "cl1" and then when the next time you
need to load a class, it will open the library set as "cl1". Since cl0 and
cl1 are effectively two totally different libraries from Forte's point of
view, they can both exist and need not be unloaded per se.
Of course once you go to cl1, you cannot go back to the cl0 level if you
want to modify code in the library. The next step is cl2, cl3 etc.
Could this be an option for your problem?
Theo de Klerk
Architecture & Application Integration
Professional Services
Compaq Computer Corp. - the NetherlandsIf you are using TOOL libraries, perhaps you can use the CL level feature of
Forte to load libraries.
If the initial meta data libraries are CL0, your external data used to load
the library can specify "cl0". Then you update the libraries, make them CL1,
update your external data to specify "cl1" and then when the next time you
need to load a class, it will open the library set as "cl1". Since cl0 and
cl1 are effectively two totally different libraries from Forte's point of
view, they can both exist and need not be unloaded per se.
Of course once you go to cl1, you cannot go back to the cl0 level if you
want to modify code in the library. The next step is cl2, cl3 etc.
Could this be an option for your problem?
Theo de Klerk
Architecture & Application Integration
Professional Services
Compaq Computer Corp. - the Netherlands -
RE: R : RE: Domain Classes
I think Kal's point was that you shouldn't follow the advice in the
"Customizing Forte Express Applications"
manual on page 90, which suggests creating a DBSession service object
and putting a method on a domain
with a SQL call that uses that session. There are several alternatives
to this, including the one you've outlined.
From: Tomacelli Cristina[SMTP:[email protected]]
Sent: Thursday, April 03, 1997 1:56 AM
To: Inman, Kal
Cc: Forte
Subject: R : RE: Domain Classes
First, it requires you to define a dbsession other than the one defined
by your business model. As you talk of business model, I think you are using Express.
Really it's not necessary defining a new dbsession and executing your sql
across the network.
What you should do is:
- create a method in your domain that takes as a parameter the business
client, construct the query you require and pass it to the select method of
the business client.
It's the business client that makes the work for you, passing the query to
the business service manager, so no sql goes from the client to the server
through the network.
The select method of the business client finally returns an array of
business class objects and you can use the array content to populate your
droplist.
Hope this helps.
Regards,
Cristina Tomacelli - CSI Piemonte
Corso Unione Sovietica, 216 - 10134 TORINO - ITALY
E-mail address: [email protected]
Telephone Number: +39-11-4618387
Da: Inman, Kal
A: blunda; chiaberto; tamietti; tomacelli;
[email protected]
Cc: [email protected]
Oggetto: RE: Domain Classes
Data: mercoled? 2 aprile 1997 16.08
Word of caution on the use of domains.
The "Customizing Forte Express Applications" manual, uses as an example,
defining a domain as a droplist. They go on to tell you how to create a
method that executes SQL to populate the droplist. This sounds very
encapsulated, but it has some strings.
First, it requires you to define a dbsession other than the one defined
by your business model. This is because your domain project supplies
you busness services, thus not giving access to the business services
dbsession.
Second, when executing the GUI that has this domain as a widget, the sql
is executed from the client across the network. This will cause
performance problems.
Third, the sql is executed every time you page to a new record. You
must provide your own caching.
If you choose to use domains to populate lists, build a caching object
and have the method constructed in the domain populate from this object.
Your caching object can be constructed to go through your existing
business services to retrieve information, eliminating the need for
another dbsession.
Good luck
Kal
From: Don Nelson[SMTP:[email protected]]
Sent: Wednesday, April 02, 1997 4:04 AM
To: [email protected]
Cc: [email protected]
Subject: Re: Domain Classes
Jennifer,
Domain classes act exactly the same as sub-classes of the nullable versions
of DataValue. The only real difference is their ability to be associated
with a widget. Can't think of any cons, offhand.
Don
At 11:09 AM 3/27/97 -0400, [email protected] wrote:
Jennifer Medeiros
03-27-97 11:09 AM
I am researching the pros and cons of domain classes. Can anyone give
me
some information? (I know how to create them and how to use them.)
Thanks for your time --
===================================
Don Nelson
Senior Consultant
Forte Software, Inc.
Denver, CO
Corporate voice mail: 510-869-3400 x2209
Cell: 414-416-4557
===================================Jason,
Domain Classes can also store FieldWidget information associated with them.
For example, Widget type, Max Characters, Input Mask, Size Policy, Help
Text, etc. This means that when a developer adds the domain to the window
workshop it will automatically have all the settings that were previously
defined on the domain, therefore giving a standard look and feel, as well
as, behaviour(fillstring and SetValue).
Regards,
Allister
Xpedior
www.xpedior.com
Ph: +61-8-9320-7604
Fax: +61-8-9486-8650
-----Original Message-----
From: Jason de Cean [mailto:[email protected]]
Sent: Thursday, 21 October 1999 9:30
To: 'Forte Users'
Subject: (forte-users) Domain Classes
Hi,
Can anyone tell me the advantage of using a domain class ?
We have subclassed DecimalData (FormattedDecimal) and overridden the
FillString and SetValue methods to implement other formatting. This is
then used as an attribute on our data classes and appears to work fine
when mapped to forms.
So, why would we use a Domain Class instead of just sub classing
DecimalData ?
Jace.
Jason de Cean
Genisys Team
Lumley Technology Ltd.
Lvl. 8, 55 Sussex St
Sydney, NSW 2000 Australia
Ph: 02 9248 1321
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected] -
RE: (forte-users) Help on 'The class has been voided andcannot be insta
PB Solved.
The symtom was that my 'windows' plan that I distrubute call
the StartMethod of a class defined higher in the hierarchy,
and I had to specify that plan as direct supplier plan of my
new project for the 'voided' not to happen.
cheers
j-p
-----Message d'origine-----
De: Jean-Paul Gabrielli [mailto:Jean-Paul.Gabriellisema.fr]
Date: mercredi 5 juillet 2000 12:08
À: Klerk, Theo de
Objet: RE: (forte-users) Help on 'The class has been voided and cannot
be instanciated' plz
the issue is as follows:
I distribute a plan A
I want to rename the plan,
and create a plan B that has A as supplier.
Distributing B wor'ks
Running it fails with that issue.
Actually I recreated supplierplans in B as they were defined in A,
and the problem disappeared.
thansk for your time
j-paul
-----Message d'origine-----
De: Klerk, Theo de [mailto:Theo.de.Klerkcompaq.com]
Date: mardi 4 juillet 2000 22:31
À: 'Jean-Paul.Gabriellisema.fr'
Objet: RE: (forte-users) Help on 'The class has been voided and cannot
be instanciated' plz
Jean-Paul,
It would help if you have a bit more description around thesituation when
this error happens.
Could it be you have two service objects that refer to each other
while the
partition is still starting up? (SO's are not supposed to talk to
each other
during partition startup).
Or was the partition up and running?
Has the service object been in existence and used before itbecame voided?
Is the partition compiled or interpreted?
Theo de Klerk
Architecture & Application Integration
Professional Services
Compaq Computer Corp. - the Netherlands
PGP Fingerprint: 5A70 DD56 F3BA FE04 9DCA 1ACE 8581 0A2F F057 FA6E
-----Original Message-----
From: Jean-Paul Gabrielli [mailto:Jean-Paul.Gabriellisema.fr]
Sent: Tuesday, 04 July, 2000 18:17
To: Forte-Users
Subject: (forte-users) Help on 'The class has been voided and
cannot be
instanciated' plz
Hi,
Here's the stack I get:
SYSTEM ERROR: Failed to create service object
BOS.MyServicesMgrSO.
Class: qqsp_ResourceException
Error Time: Tue Jul 4 18:05:07
Exception occurred (locally) on partition "BC_cl0_Part3",
(partitionId =
AF3B67A0-3335-11D4-BE9D-963C5A7FAA77:0x224, taskId =
[AF3B67A0-3335-11D4-BE9D-963C5A7FAA77:0x224.6]) in application
"BC_cl0", pid 10328 on node MyServerin environment
CentralEnv.
SYSTEM ERROR: The class MyServericesMgr has been voided and cannot
be
instantiated in this partition.
Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
Error #: [201, 14]
Detected at: qqlo_VoidedClassException at 1
Error Time: Tue Jul 4 18:05:07
Exception occurred (locally) on partition
"BC_cl0_Part3",
(partitionId =
AF3B67A0-3335-11D4-BE9D-963C5A7FAA77:0x224, taskId
=
[AF3B67A0-3335-11D4-BE9D-963C5A7FAA77:0x224.6]) in
application
"BC_cl0", pid 10328 on node MyServer in
environment
CentralEnv.
aud Tue Jul 4 18:05:07 : Shutting down partition due to
failure of this
partition.
aud Tue Jul 4 18:05:07 : Shutting down partition as requested.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe,
send in a new
email the word: 'Unsubscribe' to:
forte-users-requestlists.xpedior.comHi Sylvain
Try using window.smallIconImage =
ImageData(<TitleBarIcon>.ImageValue) ;
This should work.
Jairaj Rampershad
System Concultant
--- Sylvain_Porée <Sylvain.Poreesophia.sema.fr>
wrote:
Hi Forte Gurus,
I have tried to set an icon using this statement :
window.SmallIconImage =
aIconFile.<TitleBarIcon>.imagevalue;
where <TitleBarIcon> is a PictureGraphic in my
window workshop.
I have tried 16*16 16 colours as well as many other
arrangements. It does
not work. I use windows NT.
Any ideas ?
Thanks
Sylvain
PS : For info (forte help):
SmallIconImage
Data Type ImageData
Source Class Window
Settable? Yes
The SmallIconImage attribute (ImageData) provides
the small icon to be used
when the window is iconized, for example, in the
task bar. The image size
for a small icon should be 16 by 16 pixels. Although
the image will be
scaled if you provide one of a different size, for
best results, we
recommend that you create your icons in the same
size in which they will be
displayed.
Windows 95/NT only
This feature is available on Windows 95/NT only. On
other platforms, the
attribute is ignored.
For the archives, go to:
http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To
unsubscribe, send in a new
email the word: 'Unsubscribe' to:
forte-users-requestlists.xpedior.com -
RE: (forte-users) Class compatibility
Pascal,
Basically the way to work with objects as parameters is to ensure that
sending and receiving parties have the same knowledge of the underlying
classes of these objects.
o Partitions in one application, generated at distribution time always are
"in sync" with one another as they use the same class definitions specified
through the supplier plan relationships of the main project
o Applications distributed independently that exchanging objects only
understand the common set of class definitions.
For example, a Forte Conductor engine object is built using the standard
Forte Framework classes. Its API specifies things like "DataValue" objects.
Sending it a TextData is fine, sending it MyOwnTextData is not - the other
application has no clue what that (sub)class is supposed to be as it did not
know at the time it was built.
This is also true in cases where applications use libraries and these are
given objects of (sub)classes it knows nothing about.
All of these generate serialisation errors of some sort since the flattened
object that is sent across the wire cannot be reconstructed at the receiving
end by lack of a blueprint (class definition) on how to create such an
object.
Theo de Klerk
Architecture & Application Integration
Professional Services
Compaq Computer Corp. - the Netherlands
PGP Fingerprint: 5A70 DD56 F3BA FE04 9DCA 1ACE 8581 0A2F F057 FA6ETheo,
I understand all of that. Of course we make sure that all components use the
same blueprints for all classes. However, in case we managed to get these
blueprints out of sync, we don't want the application to simply crash. We
want to trap this exception and print a message that says: "There seems to
be a compatability problem between components. Please make sure the latest
version of all application components have been installed."
Of course we can trap all exceptions (GenericException) and ignore all of
them after displaying them, but that seems like a blunt-axe-approach. I'm
looking for the scalpel.
Pascal Rottier
Origin Nederland (BAS/West End User Computing)
Tel. +31 (0)10-2661223
Fax. +31 (0)10-2661199
E-mail: Pascal.Rottiernl.origin-it.com
++++++++++++++++++++++++++++
Philip Morris (Afd. MIS)
Tel. +31 (0)164-295149
Fax. +31 (0)164-294444
E-mail: Rottier.Pascalpmintl.ch
-----Original Message-----
From: Klerk, Theo de [mailto:Theo.de.Klerkcompaq.com]
Sent: Wednesday, October 18, 2000 5:15 PM
To: Rottier, Pascal; 'Forte Users'
Subject: RE: (forte-users) Class compatibility
Pascal,
Basically the way to work with objects as parameters is to ensure that
sending and receiving parties have the same knowledge of the underlying
classes of these objects.
o Partitions in one application, generated at distribution time always are
"in sync" with one another as they use the same class definitions specified
through the supplier plan relationships of the main project
o Applications distributed independently that exchanging objects only
understand the common set of class definitions.
For example, a Forte Conductor engine object is built using the standard
Forte Framework classes. Its API specifies things like "DataValue" objects.
Sending it a TextData is fine, sending it MyOwnTextData is not - the other
application has no clue what that (sub)class is supposed to be as it did not
know at the time it was built.
This is also true in cases where applications use libraries and these are
given objects of (sub)classes it knows nothing about.
All of these generate serialisation errors of some sort since the flattened
object that is sent across the wire cannot be reconstructed at the receiving
end by lack of a blueprint (class definition) on how to create such an
object.
Theo de Klerk
Architecture & Application Integration
Professional Services
Compaq Computer Corp. - the Netherlands
PGP Fingerprint: 5A70 DD56 F3BA FE04 9DCA 1ACE 8581 0A2F F057 FA6E
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com -
Hi Jagadish,
The OLE error code of 0x80020003 translates to "Member not found." This may
indicate that the parameter is not properly defined as a Parameter field in
the Crystal Report you're using.
Additionally, the date format you're using is wrong. Crystal requires that
you pass a date as "Date(yyyy, mm, dd)." Your example, then, should read:
l_tdParam : TextData = New();
l_tdParam.SetValue('Date(2000, 03, 15)');
l_CrystalRepObj.PutParameterFields(0, l_tdParam.Value);
I hope this helps.
-Katie
Katie Tierney
Akili Systems Group
601 Jefferson, Suite 3975
Houston, Texas 77002
Office: (713) 655-1400
Cell: (409) 255-1643
"The bitterness of poor quality remains long after the sweetness of low
price is forgotten" --Larry Anderson
-----Original Message-----
From: Jagadish_Kumarnacre.com [mailto:Jagadish_Kumarnacre.com]
Sent: Wednesday, March 15, 2000 9:11 PM
To: Katie Tierney; kamranaminyahoo.com
Subject: RE: (forte-users) Any inputs on PutFormulas(...) method of
Crystal Report's ActiveX object
Hi Katie,
I am thankful for your time and effort.
I have a problem here. I did exactly the way you have suggested, but I get
this
exception.
SYSTEM ERROR: Error during Invoke; status code: -2147352573(0x80020003)
Class: OLEException with ReasonCode: OLE_ER_RESOURCE
Last TOOL statement: method DebugState.RaiseException
The parameter I want to set is a date type. This is the only parameter in
the
report.
First trial:
l_tdParam : TextData = New();
l_tdParam.SetValue('03/15/2000');
l_CrystalRepObj.PutParameterFields(0, l_tdParam.Value);
Second Trail:
l_dtdParam : DateTimeData = New();
l_dtdParam.SetCurrent(DR_DAY);
l_CrystalRepObj.PutParameterFields(0, l_dtdParam.TextValue.Value);
Do you think I am going wrong somewhere here. Please suggest.
Once again, I am thankful for your time and effort.
Regards,
Jagadish K Kumar
May I suggest:
1. Talk to Forte Consulting and get ReportKit. It's inexpensive, and the
Forte Consultant can help you get it set up quickly. It's a great product.
2. The following code has worked for me in the past (I have no way of
testing it now, but think it should still work):
// ptd_Parameter_Array is an ARRAY of TextData containing the
// VALUES to be placed in the parameter fields.
// Since Crystal Reports uses a zero-based array numbering
// scheme, we need to set up a counter and set its initial
// value to 0.
li_Counter : integer = 0;
for eachParam in ptd_Parameter_Array do
self.PutParameterFields(index = li_counter, param2 =
eachParam.Value);
li_Counter = li_counter + 1;
end for;
The VariantVoidResult is NIL by default, and you shouldn't need to worry
about it at all. It's the result that the Crystal OCX sends back to Forte.
The Index starts at 0, and continues to the number of parameters - 1.
The Param2 value is the string that contains the actual parameter value.
For example, if I have defined a Crystal parameter called "Country," then I
would send "USA" as the string value for param2.
I hope this helps (and I STRONGLY suggest ReportKit).
Regards,
-Katie
Katie Tierney
Akili Systems Group
601 Jefferson, Suite 3975
Houston, Texas 77002
Office: (713) 655-1400
Cell: (409) 255-1643
"The bitterness of poor quality remains long after the sweetness of low
price is forgotten" --Larry Anderson
-----Original Message-----
From: Jagadish_Kumarnacre.com [mailto:Jagadish_Kumarnacre.com]
Sent: Wednesday, March 15, 2000 9:43 AM
To: kamranaminyahoo.com
Subject: (forte-users) Any inputs on PutFormulas(...) method of Crystal
Report's ActiveX object
Hi,
Could someone give me inputs on how to use PutFormulas(index: i2, param2:
string, _VariantVoidResult = NIL) method of Crystal ActiveX object.
I want to use this method to modify Crystal Report formulas. I would like to
know
1. index parameter - what is the domain, or expected values to this
parameter
2. param2 parameter - How to formulate this?; a sample template please;
3. _VariantVoidResult parameter - what is the significance of this
parameter?
A working example will help me a lot.
Thanks in advance.
Jagadish K KumarHi Katie,
I am thankful for your time and effort.
I have a problem here. I did exactly the way you have suggested, but I get this
exception.
SYSTEM ERROR: Error during Invoke; status code: -2147352573(0x80020003)
Class: OLEException with ReasonCode: OLE_ER_RESOURCE
Last TOOL statement: method DebugState.RaiseException
The parameter I want to set is a date type. This is the only parameter in the
report.
First trial:
l_tdParam : TextData = New();
l_tdParam.SetValue('03/15/2000');
l_CrystalRepObj.PutParameterFields(0, l_tdParam.Value);
Second Trail:
l_dtdParam : DateTimeData = New();
l_dtdParam.SetCurrent(DR_DAY);
l_CrystalRepObj.PutParameterFields(0, l_dtdParam.TextValue.Value);
Do you think I am going wrong somewhere here. Please suggest.
Once again, I am thankful for your time and effort.
Regards,
Jagadish K Kumar
May I suggest:
1. Talk to Forte Consulting and get ReportKit. It's inexpensive, and the
Forte Consultant can help you get it set up quickly. It's a great product.
2. The following code has worked for me in the past (I have no way of
testing it now, but think it should still work):
// ptd_Parameter_Array is an ARRAY of TextData containing the
// VALUES to be placed in the parameter fields.
// Since Crystal Reports uses a zero-based array numbering
// scheme, we need to set up a counter and set its initial
// value to 0.
li_Counter : integer = 0;
for eachParam in ptd_Parameter_Array do
self.PutParameterFields(index = li_counter, param2 =
eachParam.Value);
li_Counter = li_counter + 1;
end for;
The VariantVoidResult is NIL by default, and you shouldn't need to worry
about it at all. It's the result that the Crystal OCX sends back to Forte.
The Index starts at 0, and continues to the number of parameters - 1.
The Param2 value is the string that contains the actual parameter value.
For example, if I have defined a Crystal parameter called "Country," then I
would send "USA" as the string value for param2.
I hope this helps (and I STRONGLY suggest ReportKit).
Regards,
-Katie
Katie Tierney
Akili Systems Group
601 Jefferson, Suite 3975
Houston, Texas 77002
Office: (713) 655-1400
Cell: (409) 255-1643
"The bitterness of poor quality remains long after the sweetness of low
price is forgotten" --Larry Anderson
-----Original Message-----
From: Jagadish_Kumarnacre.com [mailto:Jagadish_Kumarnacre.com]
Sent: Wednesday, March 15, 2000 9:43 AM
To: kamranaminyahoo.com
Subject: (forte-users) Any inputs on PutFormulas(...) method of Crystal
Report's ActiveX object
Hi,
Could someone give me inputs on how to use PutFormulas(index: i2, param2:
string, _VariantVoidResult = NIL) method of Crystal ActiveX object.
I want to use this method to modify Crystal Report formulas. I would like to
know
1. index parameter - what is the domain, or expected values to this
parameter
2. param2 parameter - How to formulate this?; a sample template please;
3. _VariantVoidResult parameter - what is the significance of this
parameter?
A working example will help me a lot.
Thanks in advance.
Jagadish K Kumar -
RE: (forte-users) Forte External Connection - PhysicalPort
Hi Ronald,
I think that ExternalConnection class is only aplicable for communication
using TCP, DECnet or Unix Domain Sockets, and is not applicable to work with
COM ports.
I think that to use COM port you must employ C with the Forté WRAPPER.
Daniel
-----Mensaje original-----
De: Ronald Celis <[email protected]>
Para: Daniel <[email protected]>; Ming Yan, Lam <[email protected]>
CC: Jose Ignacio <[email protected]>; Manuel_Fernández <[email protected]>;
Federico_Muñoz <[email protected]>; Lista_Forté <[email protected]>
Fecha: lunes 20 de diciembre de 1999 16:33
Asunto: RE: (forte-users) Forte External Connection - Physical Port
Did you try to use the ExternalConnection Class??????????????
it's documented in the "Integrating with External Systems" Forte Manualpage 228 )
>
Hope this help
--- Daniel <[email protected]> wrote:
Hello Lam,
I had some experience about this problem and first answer is that you
MUST
use the wrapper. You must realize that if you could develope Forté based
RS-232 functions they would't be portable to any other machines that have
not the same architecture than the one you use to develope.That's not the
philosophy of portability of Forté.
I suggest to create a few single task C programs,
1) Open serial port.
2) Close serial port.
3) Write to serial port.
4) Read from serial port.
5) Check if there is something in serial port.
and "put them into a library" to make them usable by TOOL via a portable
Forté class.
Best regards,
Daniel.
Daniel GonzáLucas
EAM Sistemas Informáticos S.L.
tel. + 34 983 35 29 22
fax.+ 34 983 35 21 15
e-mail:[email protected]
-----Mensaje original-----
De: Ming Yan, Lam <[email protected]>
Para: Forte Users Group <[email protected]>
Fecha: jueves 16 de diciembre de 1999 8:55
Asunto: (forte-users) Forte External Connection - Physical Port
Hi,
If anyone out there have tried to use Forte to communicate (transmit
data) to an external connection, which is a physical port such as Com 1,
Com 2, Xyplex. I would like to know how does Forte handle this type of
connection or does it have to use C program for this?
Thanks in advance
Ming Yan
BASS Consulting Sdn. Bhd.
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a
new
email the word: 'Unsubscribe' to: [email protected]
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]
=====
Ronald Celis
[email protected]
Forte Consultant
International Business Corporation
http://www.ibcweb.com
Do You Yahoo!?
Thousands of Stores. Millions of Products. All in one place.
Yahoo! Shopping: http://shopping.yahoo.com
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]Did you try to use the ExternalConnection Class??????????????
it's documented in the "Integrating with External Systems" Forte Manual ( page 228 )
Hope this help
--- Daniel <[email protected]> wrote:
Hello Lam,
I had some experience about this problem and first answer is that you MUST
use the wrapper. You must realize that if you could develope Forté based
RS-232 functions they would't be portable to any other machines that have
not the same architecture than the one you use to develope.That's not the
philosophy of portability of Forté.
I suggest to create a few single task C programs,
1) Open serial port.
2) Close serial port.
3) Write to serial port.
4) Read from serial port.
5) Check if there is something in serial port.
and "put them into a library" to make them usable by TOOL via a portable
Forté class.
Best regards,
Daniel.
Daniel González de Lucas
EAM Sistemas Informáticos S.L.
tel. + 34 983 35 29 22
fax.+ 34 983 35 21 15
e-mail:[email protected]
-----Mensaje original-----
De: Ming Yan, Lam <[email protected]>
Para: Forte Users Group <[email protected]>
Fecha: jueves 16 de diciembre de 1999 8:55
Asunto: (forte-users) Forte External Connection - Physical Port
Hi,
If anyone out there have tried to use Forte to communicate (transmit
data) to an external connection, which is a physical port such as Com 1,
Com 2, Xyplex. I would like to know how does Forte handle this type of
connection or does it have to use C program for this?
Thanks in advance
Ming Yan
BASS Consulting Sdn. Bhd.
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]
=====
Ronald Celis
[email protected]
Forte Consultant
International Business Corporation
http://www.ibcweb.com
Do You Yahoo!?
Thousands of Stores. Millions of Products. All in one place.
Yahoo! Shopping: http://shopping.yahoo.com -
RE: (forte-users) Serialisation
Singh,
Any message sent across partition boundaries is serialized. This includes
method invokations, events and exceptions. The signature of the message
itself is serialized, as well as the values of all parameters/attributes.
Serializing a scalar value requires less overhead then serialising an
object, however, the difference isn't as big as you might think. Objects
have more attributes then just the value you're interested in and these
attributes are serialised as well. Each object is an instance of a class and
each class has a UUID, which is added to the serialized stream as well.
However, methods are NOT serialised. What happens is this. Forte serializes
an object into a stream containing only the values of the attributes
(including nested attributes). This stream is given a header which sais of
which class this object is an instance (the UUID is used for that). The
receiving partition reads the serialized stream, finds the definition of the
class (defined by UUID) in its own code, creates an instance of this class
and fills the data out of the serialized stream into this new object.
You can imagine what might happen if there is a mismatch between the
class-definitions in both partitions. You either get
serialization-deserialization errors, or the receiving partition complains
that it doesn't even know the UUID of the received streamed object, or you
get no errors at all and just have an object that displays different
behaviour, depending what partition it's in.
If there are no problems, then the main issue is the
serializing-deserializing overhead. Note that the receiving partition has to
instantiate a new object for every serialized object it receives and will
therefore execute all code in the Init() method. This overhead is not
required for scalar types, for which Forte only needs to reserve a small
amount of memory space on the stack.
Any call to a database is also a message sent across partitions and is
therefore serialized. However, one partition is a Forte partition and the
other one isn't. Therefore, Forte's internal serialization mechanism isn't
used. Forte serializes the SQL-query into a format understood by the
database (which is different for every vendor). Forte then receives a stream
back which has a different format for every different database type. This
stream is deserialized and written to attributes that Forte has reserved to
contain the data. Whether these are scalar, datavalues or domains only
impacts performance inside the Forte partition. It has no effect on the
communication with the database.
Pascal Rottier
Atos Origin Nederland (BAS/West End User Computing)
Tel. +31 (0)10-2661223
Fax. +31 (0)10-2661199
E-mail: Pascal.Rottiernl.origin-it.com
++++++++++++++++++++++++++++
Philip Morris (Afd. MIS)
Tel. +31 (0)164-295149
Fax. +31 (0)164-294444
E-mail: Rottier.Pascalpmintl.ch
-----Original Message-----
From: Singh [mailto:fortelistyahoo.com]
Sent: Thursday, February 22, 2001 3:30 AM
To: forte-userslists.xpedior.com
Subject: (forte-users) Serialisation
Hello All
I have a question that has been bugging me for some
time.
We all know that it is better to use scalar data
types, as opposed to objects, when passing data across
a network.
The reason, if I understand correctly, is that when
you send an object across a network, the whole object
(properties, attributes and methods) is deserialised
into zero's and one's before being sent across and
then serialised back into the object when it gets to
the other side. This would take longer for an object
since for a scalar value, just the value is
deserialised and serialised.
But when you are writing to a database from the tier
before the database to the database, does it matter
what type you use. The reason for saying this is that
the values are serialised before they go across and
then deserialised when they get to the base, in other
words, they are sent as zero's and one's. For a scalar
- just the value is sent across but for an object -
does just the value go across or the complete object.
If just the value of the object goes across, then it
doesn't really matter whether a scalar or object is
sent across.
Am I correct in this assumption.
Thanks in advance for your help.
Regards,
Singh
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.comHi,
I cannot get hold of Tech Note 10398..... can anyone email me a copy?
Tx
Etienne
-----Original Message-----
From: Klerk, Theo de [SMTP:Theo.de.Klerkcompaq.com]
Sent: Wednesday, February 09, 2000 4:26 PM
To: 'Jason de Cean'; 'Forte Users'
Subject: RE: (forte-users) Serialisation
There are a number of flags that will show you some of the required
information in a log file (not within the application itself). Technote
10398 has many more flags listed for a variety of obscure, useful, not so
useful and exotic information:
trc:cm:*:4 and *:8 - show packet serialisation, open, closes between
partition communication
trc:do:*:2 - proxy creation/deletion, exception events
trc:do:*:5 - individual message tracing between proxies
trc:do:*:8 - serialisation information
Theo
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com -
Re: [Re: (forte-users) formatting Percents]
You can create a Domain Class for this and manipulate the setvalue and
FillString methods to do this. You can see the help for knowing more about
this.
--Krishna
"Natarajan Balasubramanian" <[email protected]> wrote:
You may use virtual attribute mapping to your real attribute having .08 and
in the getvalue method of the virtual attribute change the real attribute
value to show as 8%.
Hope this helps,
Nat Balasubramanian.
From: "Fingerhut, Eric" <[email protected]>
To: "'[email protected]'" <[email protected]>
Subject: (forte-users) formatting Percents
Date: Wed, 20 Oct 1999 11:26:51 -0400
I want to provide the option for a user to display values in percents or
not, and finding this surprisingly tricky.
Although its easy to make a DecimalData with a value of .08 look like 8% by
changing the scale and multiplying by its value by 100, I don't see how to
do this in a way that the variable still knows its value is .08.
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]You can create a Domain Class for this and manipulate the setvalue and
FillString methods to do this. You can see the help for knowing more about
this.
--Krishna
"Natarajan Balasubramanian" <[email protected]> wrote:
You may use virtual attribute mapping to your real attribute having .08 and
in the getvalue method of the virtual attribute change the real attribute
value to show as 8%.
Hope this helps,
Nat Balasubramanian.
From: "Fingerhut, Eric" <[email protected]>
To: "'[email protected]'" <[email protected]>
Subject: (forte-users) formatting Percents
Date: Wed, 20 Oct 1999 11:26:51 -0400
I want to provide the option for a user to display values in percents or
not, and finding this surprisingly tricky.
Although its easy to make a DecimalData with a value of .08 look like 8% by
changing the scale and multiplying by its value by 100, I don't see how to
do this in a way that the variable still knows its value is .08.
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected]
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: [email protected] -
Re: (forte-users) Formatting DecimaNullable withTemplate
Hello Fabrizio,
i don't look at your window, but we has the problem to check the input of a
DecimalData
with a specific mask. If the user type in wrong data (prescale/sucscale)
then we have
to inform the user and discard the changes.
E.g. template='##,##'
User types 5,123 Exception (Too many sucscale)
User types -5,12 Exception (no Minus allowed)
User types 123, Exception (Too many prescale)
User types 12,12 No Exception (Value is accepted)
User types 12,12+ No Exception (Value is accepted)
The template check is implemented in the FillString/SetValue method of an
inherited DecimalNullable-Class. I am wondering, if it is not possible to
find a way
reacting on your behaviour. You use a Domain.
1. You have to implement the SetValue/Fillstring method for this domain.
2. You must turn on KeyStroke reacting.
3. You have to implement an EventHandler for reacting on the input which must
be registered on your Display-based Event-Loop.
4. MayBe som Code must be called from your Domain-Class on AfterValueChange
Event
at your Domain.
A lot of work, i know. Maybe a lot of code for every Domain-Use in your
Event-Loop. We
made an Enhancement-Request for our problem, but there ar no solution now
(2 years).
The next problem you may have, if you use many attributes in your Domain.
Because
the transport (Serialize/Deserialize/Allocation) eats a lot of Performance.
Direct filling from Database maybe a risk (SetValue-method with Parameter
string).
You have to check if you fill your class from implizit methods
(GetValue-Method from
DBDataSet) and so on that no code will running (Performance).
Good Luck
Joseph Mirwald
PS: Use Decode-Method if possible instead of own implementation of
string-manipulation
because Framework-Lib-Calls ar much mor performant.
At 11:19 17.02.01 +0100, Genesio, Fabrizio wrote:
Hallo there,
I wonder if there is someone who ever tried to obtain the following
behavior.
Using a user-defined domain based on a DecimalNullable, we would like to
set the input mask (and/or its template) in order to have the widget
behaving like a normal desk or pocket calculator. That is when start
typing, you enter the integer part of the number (with thousand
separator), and only when the dot is entered, you can type in the
decimal part.
We tried different templates but we never got what we want. Moreover,
using 3.0.N.0 we also discovered a bug while using as first character
in the template.
Enclosed there is a little test window.
Is there anybody who could help?
Thank you in advance for your attention
Ciao,
Fabrizio Genesio
Datasign AG für Informatik
fabrizio.genesiodatasign.ch <mailto:fabrizio.genesiodatasign.ch>
<<Atest.zip>>Thank you Joseph and thank you Zenon, for your answers.
Yes, we tried with domain, implementing the FillString/Setvalue methods,
and using the Decode method. And indeed is the decode method that always
(no matter which regional settings you have) round the decimal part to 2
digit.
Nonetheless, I would be interested to receive if possible the domain you
implemented, Joseph. We may still discover something... ;-)
Thank you
Fabrizio Genesio
Datasign AG für Informatik
ch. d'Eysins 53a
CH-1260 Nyon
Switzerland
Tel.: +41 22 361 04 04
Fax: +41 22 361 01 10
e-mail: fabrizio.genesiodatasign.ch
<mailto:fabrizio.genesiodatasign.ch>
URL: www.datasign.ch <http://www.datasign.ch>
-----Original Message-----
From: Joseph Mirwald [SMTP:jomirweb.de]
Sent: Saturday, 17 February 2001 12:32
To: Genesio, Fabrizio; 'forte-userslists.xpedior.com'
Subject: Re: (forte-users) Formatting DecimaNullable with
Template
Hello Fabrizio,
i don't look at your window, but we has the problem to check the
input of a
DecimalData
with a specific mask. If the user type in wrong data
(prescale/sucscale)
then we have
to inform the user and discard the changes.
E.g. template='##,##'
User types 5,123 Exception (Too many sucscale)
User types -5,12 Exception (no Minus allowed)
User types 123, Exception (Too many prescale)
User types 12,12 No Exception (Value is
accepted)
User types 12,12+ No Exception (Value is
accepted)
The template check is implemented in the FillString/SetValue
method of an
inherited DecimalNullable-Class. I am wondering, if it is not
possible to
find a way
reacting on your behaviour. You use a Domain.
1. You have to implement the SetValue/Fillstring method for this
domain.
2. You must turn on KeyStroke reacting.
3. You have to implement an EventHandler for reacting on the
input which must
be registered on your Display-based Event-Loop.
4. MayBe som Code must be called from your Domain-Class on
AfterValueChange
Event
at your Domain.
A lot of work, i know. Maybe a lot of code for every Domain-Use
in your
Event-Loop. We
made an Enhancement-Request for our problem, but there ar no
solution now
(2 years).
The next problem you may have, if you use many attributes in
your Domain.
Because
the transport (Serialize/Deserialize/Allocation) eats a lot of
Performance.
Direct filling from Database maybe a risk (SetValue-method with
Parameter
string).
You have to check if you fill your class from implizit methods
(GetValue-Method from
DBDataSet) and so on that no code will running (Performance).
Good Luck
Joseph Mirwald
PS: Use Decode-Method if possible instead of own implementation
of
string-manipulation
because Framework-Lib-Calls ar much mor performant.
At 11:19 17.02.01 +0100, Genesio, Fabrizio wrote:
>Hallo there,
>
>I wonder if there is someone who ever tried to obtain the
following
>behavior.
>Using a user-defined domain based on a DecimalNullable, we
would like to
>set the input mask (and/or its template) in order to have the
widget
>behaving like a normal desk or pocket calculator. That is when
start
>typing, you enter the integer part of the number (with thousand
>separator), and only when the dot is entered, you can type in
the
>decimal part.
>
>We tried different templates but we never got what we want.
Moreover,
>using 3.0.N.0 we also discovered a bug while using as first
character
>in the template.
>
>Enclosed there is a little test window.
>
>Is there anybody who could help?
>
>Thank you in advance for your attention
>
>Ciao,
>
>Fabrizio Genesio
>Datasign AG für Informatik
>fabrizio.genesiodatasign.ch
<mailto:fabrizio.genesiodatasign.ch>
>
> <<Atest.zip>> -
RE: (forte-users) 3J= 3M new to me error
Hi Thomas,
Thanks for your email but I think it will be interesting for Brenda not me.
It is exactly what I have expected from Forte Support: detailed information
about bugs and workarounds. But what I cannot understand is that #53398 was
released without any information about possible reasons for this problem or
suggested workarounds. My first reaction after reading this bugreport was to
open a new case at CallCenter to get more information about it. Please
release more information with your bug reports !
Regards
Zenon Adamek
Information Services
Senior Programmer Analyst
Tel: 905 712-1084 ext. 3628
Fax: 905 712-6709
E-mail: zadamekpurolator.com
-----Original Message-----
From: Thomas Degen - Sun Germany Forte Tools - Bonn
[SMTP:thomas.degensun.com]
Sent: Wednesday, September 27, 2000 9:49 AM
To: Adamek, Zenon
Cc: 'Brenda Cumming'; Forte-userslists.xpedior.com
Subject: RE: (forte-users) 3J=>3M new to me error
Hi Zenon,
bug #53398 is not a bug which will likely get fixed, it's an informational
bugreport.
You might see an errorstack like Brenda has reported (and described in
informational
bugreport #53398) probably when you are doing something illegal that is
possible
via Forte Tool but Forte is not trapping it for performance reasons. Hence
you will see
the error coming from your illegal operation only at runtime, probably
only
while
running interpreted in the Forte IDE, but in worst case it might be even a
segmentation
violation.
Technotes 12448 'Sudden client partition crashes at runtime' and 11225
'Don't reparent
mapped Widgets between UserWindows at runtime' explain this matter . See
attached.
But maybe Brenda is much more experiencing a problem as described by Forte
Technote 11398 'Read Only Workspace Errors using ListViews or ActiveX
control'
that might get easily resolved via setting of FORTE_YIELD_THROTTLE=0.
Good Luck and Best Regards !
BTW: I've logged bug #53398, so I've felt responsible to explain its real
background.
Thomas
Thomas Degen
Sun Microsystems - Forte Tools
Forte CTE & Sustaining Group
Technical Support Germany
tel.:+49.228/91499-50
MailTo:thomas.degensun.com
Technote 11398 Read Only Workspace Errors using ListViews or ActiveX
control
SCENARIO:
Getting some unusual interpreter errors that result in an error stating
that
the workspace has been set to read only. Please see Enclosures for the
two
most common error stacks that have been encountered. The abbreviated
versions of the errors are:
- Can't read record (record size = -1)
- Id in index does not match id in record header in data file
- Recursive deserialization attempted.
- Unknown Mark type in deserialization
- Could not read record (64,74615) from repository data file.
Header
is corrupt.
These errors can be happening in either the development environment when
running from one of the development workshops, or with the deployed
application.
The bug outlined in this Technote may be the culprit if the errors above
are
seen when running a client on Windows NT or Motif and the user interface
incorporates ActiveX controls or ListView/TreeView widgets.
CAUSE:
Basically what is happening is that in rare circumstances Forte may invoke
a
nested copy of the interpreter while the first interpreter has yielded.
This
is not a problem in and of itself, but in the case where the original
interpreter was in the middle of a repository fetch when it yielded, and
the second interpreter needs to fetch code as well, we will get one of the
errors listed above, depending on the exact timing. The reason for the
errors is that the repository code at this level is thread-safe but not
re-entrant. It is protected by a mutex that is already owned by the
current task. Which, given the scenario outlined here, where the two
interpreters are running inside of the same task, results in the nested
interpreter being allowed to change data out from under the first.
While for every fetch one or more calls to WindowSystem.Yield will be made
(this is there to prevent the semblance of system lock-up on Win 3.1,
where
Yield is the only way other applications can be allowed to run), there is
a parameter which controls how often to actually yield, which by default
is
set to one out of every 100 calls. This is the reason the problem is
intermittent--you need a yield to occur during a repository fetch
which starts another interpreter which also needs to fetch code from
disk.
The reason this has only surfaced recently is that the nested interpreter
scenario can only happen in 2 cases that we know of:
- ActiveX controls which respond to events/Windows messages
- Outline fields/ListViews with column(s) mapped to virtual
attributes
In all other normal cases, the yield can process the message (typically a
paint message) without starting another interpreter, so regardless of
whether
the first interpreter yielded during a repository operation or not, there
is
no conflict.
SOLUTION:
The workaround is to prevent yields altogether by setting the
FORTE_YIELD_THROTTLE environment variable equal to 0 in the client's
environment. This should have no detrimental effects since the yield code
is in place solely for Windows 3.1x clients.
ERROR STACK 1
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to
prevent the application from attempting to write to the repository. The
repository and work you have saved to the repository are safe. If your
workspace
contains unsaved work, you may use the following procedure to save this
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import
the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::GetObjectById
Last TOOL statement: method EFWindowController.EFEventLoop
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
The remainder of the Error Manager stack is:
SYSTEM ERROR: Internal Error attempting to deserialize element (64,67470)
(fetch
bitmask is 0x20). Your workspace is now read-only to prevent the
application
from attempting to write to the repository. The repository and work you
have
saved to the repository are safe. If your workspace contains unsaved work,
you
may use the following procedure to save this work. First, export the
changed
components. Then, shut down and restart this application and reopen this
workspace in read-write mode. Finally, import the changed components and
save
your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Last TOOL statement: method EFTabManagerNew.EFNoteBookHandler
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
SYSTEM ERROR: Unknown Mark type in deserialization.
Class: qqsp_ImplementationException
Error #: [1101, 34]
Detected at: qqrp_DeSerializeObject::ProcessHdr
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
ERROR STACK 2
SYSTEM ERROR: A serious error has occurred in Repository
(c:\PROGRA~1\CSSPTEST\conplu0). Corrective action may be necessary.
Notify
your repository administrator.
Class: qqsp_ImplementationException
Error #: [1101, 198]
Detected at: qqrp_Repository::Fetch
Last TOOL statement: method
SalesDevelopment_NWC.DEVNotifyofTabSetCurrent
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
SYSTEM ERROR: Could not read record (64,74615) from repository data file.
Header is corrupt.
Class: qqsp_ImplementationException
Error #: [1106, 612]
Detected at: qqbt_BtreeAccess::FetchDataFileRecord
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
Technote 11225 Don't reparent mapped Widgets between UserWindows at
runtime
It is sometimes tempting to unparent a widget from one UserWindow and
reparent
it into another at runtime. However, this can cause crashes if the widget
(or
its decendants) are "mapped" to data. Here's why...
Suppose you have two UserWindows, UW1 and UW2. UW1 contains a DataField
(DF1)
which is mapped to a TextData. UW2 contains a RadioList (RL2) which is
mapped to
a scalar Integer. At compile time, every mapped attribute is internally
assigned
a "Map ID" (a small integer) which is used to tie the Widget to its
corresponding attribute. These Map IDs are used by the Widget to look up a
pointer to their data in a "Map" which is maintained by the UserWindow.
Each
UserWindow is assumed be to independent of the others, so there is nothing
wrong
with Widgets in different UserWindows being assigned the same Map IDs.
In
this
case, let's assume that DF1 and RL2 both got assigned the same Map ID of
3. No
problem so far, since each lives in a separate UserWindow with a separate
map.
Now suppose at runtime the application "detaches" or unparents DF1 from
its
UserWindow and reparents it somewhere into UW2. When it comes time for DF1
to
paint itself the Display System it must ask the Runtime System for the
value of
DF1's mapped attribute. To do that it says "give me the value of the
TextData
for DF1. You'll find it in the Map for this UserWindow (UW1), and its Map
ID is
3". When the runtime system goes to do this it expects to find a TextData
in
this "slot" of the map, but instead it picks up the integer which is
mapped to
RL2. At best this leads to bad data being returned; more likely you get a
segfault and a crash.
If DF1 was not a mapped attribute (say, a Rectangle) there would be no
problem
because there is no data mapped to a Rectangle. If instead of moving DF1
you
created a brand new DataField on the fly there would be no problem,
because the
dynamic DataField would not have any Map ID and so couldn't conflict with
any
IDs in UW2.
So how do you solve this problem? This is exactly what Nested Windows are
all
about. While you can't move DF1 into the middle of UW2, you can nest
UW1.
This
works because UW1 brings its map with it, and when you access DF1 it knows
to
look up its value in UW1's map.
UserWindows are intended to be the "unit of compilabilty" that can be
nested
inside other UserWindows. It is dangerous to "transplant" anything from
inside
one UserWindow into another at runtime.
(Note that you can't avoid this problem by cloning DF1 because the MapID
gets
copied along with it, and the clone will fail in the same way.)
Further details explained in related technote 12448 'Sudden client
partition
crashes at runtime.'
Technote 12448 Sudden client partition crashes at runtime
Scenario : You have two UserWindows, A and B. When Window A starts up, it
instantiates an instance of B and reparents some component of B into A's
window
hierarchy.
This is not allowed and almost always leads to an error at best or at
worse a
segmentation fault.
Here's why :
When you compile a UserWindow in Forte, each "mapped attribute" (whether a
form
element or menu element) is assigned an internal ID which represents an
offset into
that UserWindow's table of mapped attributes. This offset is only valid
in the
context of the UserWindow in which it was compiled. If you detach a
FieldWidget or
MenuWidget from one compiled Window ("tmpMenu" for example) and then
parent
into another compiled window ("tmpWindow") the internal ID comes with it.
When Forte tries to make use of that copied widget it uses the ID as an
offset
into tmpWindow's table of mapped attributes. But that copied offset is
meaningless in the context of tmpWindow's table, so you get some kind off
error.
In this case it found that the data type of the variable in the slot
wasn't
what
was expected. But you might even index off the end of the table and get a
segmentation fault.
There is nothing to prevent you from dynamically creating menu items and
adding
them to a window at runtime; that will work fine. Although of course you
can't
access them via mapped attributes, since those can only be created at
compile time.
But you are not allowed to reparent a widget from one compiled UserWindow
into
the hierarchy of another.
More information may be found in technote 11225 'Don't reparent mapped
Widgets
between UserWindows at runtime'.
Possible errorstacks seen at runtime instead of a complete crash or
segmentation
violation while you are illegally reparenting a widget or menuitem between
windows
at runtime:
Map::SetSubjectData: Invalid conversion from map type 0 to subject type 22
SYSTEM ERROR: Bad parameter at location 3 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 3
Error Time: Wed Aug 09 13:03:57
Exception occurred (locally) on partition "testproject_CL0_Client",
(partitionId = D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd,
taskId =
[D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd.68]) in application
"FTLaunch_cl0", pid 672 on node ONEWAY in environment Audi3M2Env.
At 13:14 26.09.00 -0400, Adamek, Zenon wrote:
Hi,
It is the unfixed defect 53398. Please contact Forte support.
Zenon
-----Original Message-----
From: Brenda Cumming [SMTP:brenda_cummingtranscanada.com]
Sent: Tuesday, September 26, 2000 1:15 PM
To: Forte User group
Subject: (forte-users) 3J=>3M new to me error
Hi,
We are in the process of going from 3J1 to 3.0.M.2, and I am getting
this error that I am unfamiliar with on a GUI that works fine in 3J.
It
does not happen all the time, and I have been unable to establish the
pattern that kicks it off. Has anyone seen this before?
PS- this error is not occurring in the deployed (non-compiled) app,but
when I am running locally from my workspace.
SYSTEM ERROR: Bad parameter at location 6 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 6
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2,
taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Can't find scope 20070 for a class.
Class: qqsp_Exception
Error #: [201, 11]
Detected at: qqlo_ClassTableLoadScope at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to prevent the application from attempting to write to the repository.
The repository and work you have saved to the repository are safe. If
your
workspace contains unsaved work, you may use the following procedure
to save this work. First, export the changed components. Then, shut down and
restart this application and reopen this workspace in read-write mode.
Finally, import the changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::IsDistributed
Last TOOL statement: method PPMeasWin.
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Internal Error attempting to deserialize element
(64,120684) (fetch bitmask is 0x20). Your workspace is now read-onlyto
prevent
the application from attempting to write to the repository. The
repository
and work you have saved to the repository are safe. If your workspace
contains unsaved work, you may use the following procedure to savethis
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Recursive Deserialization attempted, Internal Error!
Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
Error #: [301, 231]
Detected at: qqsp_DeSerializeDriver::Run at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in anew
email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.comHi Thomas,
Thanks for your email but I think it will be interesting for Brenda not me.
It is exactly what I have expected from Forte Support: detailed information
about bugs and workarounds. But what I cannot understand is that #53398 was
released without any information about possible reasons for this problem or
suggested workarounds. My first reaction after reading this bugreport was to
open a new case at CallCenter to get more information about it. Please
release more information with your bug reports !
Regards
Zenon Adamek
Information Services
Senior Programmer Analyst
Tel: 905 712-1084 ext. 3628
Fax: 905 712-6709
E-mail: zadamekpurolator.com
-----Original Message-----
From: Thomas Degen - Sun Germany Forte Tools - Bonn
[SMTP:thomas.degensun.com]
Sent: Wednesday, September 27, 2000 9:49 AM
To: Adamek, Zenon
Cc: 'Brenda Cumming'; Forte-userslists.xpedior.com
Subject: RE: (forte-users) 3J=>3M new to me error
Hi Zenon,
bug #53398 is not a bug which will likely get fixed, it's an informational
bugreport.
You might see an errorstack like Brenda has reported (and described in
informational
bugreport #53398) probably when you are doing something illegal that is
possible
via Forte Tool but Forte is not trapping it for performance reasons. Hence
you will see
the error coming from your illegal operation only at runtime, probably
only
while
running interpreted in the Forte IDE, but in worst case it might be even a
segmentation
violation.
Technotes 12448 'Sudden client partition crashes at runtime' and 11225
'Don't reparent
mapped Widgets between UserWindows at runtime' explain this matter . See
attached.
But maybe Brenda is much more experiencing a problem as described by Forte
Technote 11398 'Read Only Workspace Errors using ListViews or ActiveX
control'
that might get easily resolved via setting of FORTE_YIELD_THROTTLE=0.
Good Luck and Best Regards !
BTW: I've logged bug #53398, so I've felt responsible to explain its real
background.
Thomas
Thomas Degen
Sun Microsystems - Forte Tools
Forte CTE & Sustaining Group
Technical Support Germany
tel.:+49.228/91499-50
MailTo:thomas.degensun.com
Technote 11398 Read Only Workspace Errors using ListViews or ActiveX
control
SCENARIO:
Getting some unusual interpreter errors that result in an error stating
that
the workspace has been set to read only. Please see Enclosures for the
two
most common error stacks that have been encountered. The abbreviated
versions of the errors are:
- Can't read record (record size = -1)
- Id in index does not match id in record header in data file
- Recursive deserialization attempted.
- Unknown Mark type in deserialization
- Could not read record (64,74615) from repository data file.
Header
is corrupt.
These errors can be happening in either the development environment when
running from one of the development workshops, or with the deployed
application.
The bug outlined in this Technote may be the culprit if the errors above
are
seen when running a client on Windows NT or Motif and the user interface
incorporates ActiveX controls or ListView/TreeView widgets.
CAUSE:
Basically what is happening is that in rare circumstances Forte may invoke
a
nested copy of the interpreter while the first interpreter has yielded.
This
is not a problem in and of itself, but in the case where the original
interpreter was in the middle of a repository fetch when it yielded, and
the second interpreter needs to fetch code as well, we will get one of the
errors listed above, depending on the exact timing. The reason for the
errors is that the repository code at this level is thread-safe but not
re-entrant. It is protected by a mutex that is already owned by the
current task. Which, given the scenario outlined here, where the two
interpreters are running inside of the same task, results in the nested
interpreter being allowed to change data out from under the first.
While for every fetch one or more calls to WindowSystem.Yield will be made
(this is there to prevent the semblance of system lock-up on Win 3.1,
where
Yield is the only way other applications can be allowed to run), there is
a parameter which controls how often to actually yield, which by default
is
set to one out of every 100 calls. This is the reason the problem is
intermittent--you need a yield to occur during a repository fetch
which starts another interpreter which also needs to fetch code from
disk.
The reason this has only surfaced recently is that the nested interpreter
scenario can only happen in 2 cases that we know of:
- ActiveX controls which respond to events/Windows messages
- Outline fields/ListViews with column(s) mapped to virtual
attributes
In all other normal cases, the yield can process the message (typically a
paint message) without starting another interpreter, so regardless of
whether
the first interpreter yielded during a repository operation or not, there
is
no conflict.
SOLUTION:
The workaround is to prevent yields altogether by setting the
FORTE_YIELD_THROTTLE environment variable equal to 0 in the client's
environment. This should have no detrimental effects since the yield code
is in place solely for Windows 3.1x clients.
ERROR STACK 1
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to
prevent the application from attempting to write to the repository. The
repository and work you have saved to the repository are safe. If your
workspace
contains unsaved work, you may use the following procedure to save this
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import
the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::GetObjectById
Last TOOL statement: method EFWindowController.EFEventLoop
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
The remainder of the Error Manager stack is:
SYSTEM ERROR: Internal Error attempting to deserialize element (64,67470)
(fetch
bitmask is 0x20). Your workspace is now read-only to prevent the
application
from attempting to write to the repository. The repository and work you
have
saved to the repository are safe. If your workspace contains unsaved work,
you
may use the following procedure to save this work. First, export the
changed
components. Then, shut down and restart this application and reopen this
workspace in read-write mode. Finally, import the changed components and
save
your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Last TOOL statement: method EFTabManagerNew.EFNoteBookHandler
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
SYSTEM ERROR: Unknown Mark type in deserialization.
Class: qqsp_ImplementationException
Error #: [1101, 34]
Detected at: qqrp_DeSerializeObject::ProcessHdr
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
ERROR STACK 2
SYSTEM ERROR: A serious error has occurred in Repository
(c:\PROGRA~1\CSSPTEST\conplu0). Corrective action may be necessary.
Notify
your repository administrator.
Class: qqsp_ImplementationException
Error #: [1101, 198]
Detected at: qqrp_Repository::Fetch
Last TOOL statement: method
SalesDevelopment_NWC.DEVNotifyofTabSetCurrent
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
SYSTEM ERROR: Could not read record (64,74615) from repository data file.
Header is corrupt.
Class: qqsp_ImplementationException
Error #: [1106, 612]
Detected at: qqbt_BtreeAccess::FetchDataFileRecord
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
Technote 11225 Don't reparent mapped Widgets between UserWindows at
runtime
It is sometimes tempting to unparent a widget from one UserWindow and
reparent
it into another at runtime. However, this can cause crashes if the widget
(or
its decendants) are "mapped" to data. Here's why...
Suppose you have two UserWindows, UW1 and UW2. UW1 contains a DataField
(DF1)
which is mapped to a TextData. UW2 contains a RadioList (RL2) which is
mapped to
a scalar Integer. At compile time, every mapped attribute is internally
assigned
a "Map ID" (a small integer) which is used to tie the Widget to its
corresponding attribute. These Map IDs are used by the Widget to look up a
pointer to their data in a "Map" which is maintained by the UserWindow.
Each
UserWindow is assumed be to independent of the others, so there is nothing
wrong
with Widgets in different UserWindows being assigned the same Map IDs.
In
this
case, let's assume that DF1 and RL2 both got assigned the same Map ID of
3. No
problem so far, since each lives in a separate UserWindow with a separate
map.
Now suppose at runtime the application "detaches" or unparents DF1 from
its
UserWindow and reparents it somewhere into UW2. When it comes time for DF1
to
paint itself the Display System it must ask the Runtime System for the
value of
DF1's mapped attribute. To do that it says "give me the value of the
TextData
for DF1. You'll find it in the Map for this UserWindow (UW1), and its Map
ID is
3". When the runtime system goes to do this it expects to find a TextData
in
this "slot" of the map, but instead it picks up the integer which is
mapped to
RL2. At best this leads to bad data being returned; more likely you get a
segfault and a crash.
If DF1 was not a mapped attribute (say, a Rectangle) there would be no
problem
because there is no data mapped to a Rectangle. If instead of moving DF1
you
created a brand new DataField on the fly there would be no problem,
because the
dynamic DataField would not have any Map ID and so couldn't conflict with
any
IDs in UW2.
So how do you solve this problem? This is exactly what Nested Windows are
all
about. While you can't move DF1 into the middle of UW2, you can nest
UW1.
This
works because UW1 brings its map with it, and when you access DF1 it knows
to
look up its value in UW1's map.
UserWindows are intended to be the "unit of compilabilty" that can be
nested
inside other UserWindows. It is dangerous to "transplant" anything from
inside
one UserWindow into another at runtime.
(Note that you can't avoid this problem by cloning DF1 because the MapID
gets
copied along with it, and the clone will fail in the same way.)
Further details explained in related technote 12448 'Sudden client
partition
crashes at runtime.'
Technote 12448 Sudden client partition crashes at runtime
Scenario : You have two UserWindows, A and B. When Window A starts up, it
instantiates an instance of B and reparents some component of B into A's
window
hierarchy.
This is not allowed and almost always leads to an error at best or at
worse a
segmentation fault.
Here's why :
When you compile a UserWindow in Forte, each "mapped attribute" (whether a
form
element or menu element) is assigned an internal ID which represents an
offset into
that UserWindow's table of mapped attributes. This offset is only valid
in the
context of the UserWindow in which it was compiled. If you detach a
FieldWidget or
MenuWidget from one compiled Window ("tmpMenu" for example) and then
parent
into another compiled window ("tmpWindow") the internal ID comes with it.
When Forte tries to make use of that copied widget it uses the ID as an
offset
into tmpWindow's table of mapped attributes. But that copied offset is
meaningless in the context of tmpWindow's table, so you get some kind off
error.
In this case it found that the data type of the variable in the slot
wasn't
what
was expected. But you might even index off the end of the table and get a
segmentation fault.
There is nothing to prevent you from dynamically creating menu items and
adding
them to a window at runtime; that will work fine. Although of course you
can't
access them via mapped attributes, since those can only be created at
compile time.
But you are not allowed to reparent a widget from one compiled UserWindow
into
the hierarchy of another.
More information may be found in technote 11225 'Don't reparent mapped
Widgets
between UserWindows at runtime'.
Possible errorstacks seen at runtime instead of a complete crash or
segmentation
violation while you are illegally reparenting a widget or menuitem between
windows
at runtime:
Map::SetSubjectData: Invalid conversion from map type 0 to subject type 22
SYSTEM ERROR: Bad parameter at location 3 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 3
Error Time: Wed Aug 09 13:03:57
Exception occurred (locally) on partition "testproject_CL0_Client",
(partitionId = D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd,
taskId =
[D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd.68]) in application
"FTLaunch_cl0", pid 672 on node ONEWAY in environment Audi3M2Env.
At 13:14 26.09.00 -0400, Adamek, Zenon wrote:
Hi,
It is the unfixed defect 53398. Please contact Forte support.
Zenon
-----Original Message-----
From: Brenda Cumming [SMTP:brenda_cummingtranscanada.com]
Sent: Tuesday, September 26, 2000 1:15 PM
To: Forte User group
Subject: (forte-users) 3J=>3M new to me error
Hi,
We are in the process of going from 3J1 to 3.0.M.2, and I am getting
this error that I am unfamiliar with on a GUI that works fine in 3J.
It
does not happen all the time, and I have been unable to establish the
pattern that kicks it off. Has anyone seen this before?
PS- this error is not occurring in the deployed (non-compiled) app,but
when I am running locally from my workspace.
SYSTEM ERROR: Bad parameter at location 6 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 6
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2,
taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Can't find scope 20070 for a class.
Class: qqsp_Exception
Error #: [201, 11]
Detected at: qqlo_ClassTableLoadScope at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to prevent the application from attempting to write to the repository.
The repository and work you have saved to the repository are safe. If
your
workspace contains unsaved work, you may use the following procedure
to save this work. First, export the changed components. Then, shut down and
restart this application and reopen this workspace in read-write mode.
Finally, import the changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::IsDistributed
Last TOOL statement: method PPMeasWin.
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Internal Error attempting to deserialize element
(64,120684) (fetch bitmask is 0x20). Your workspace is now read-onlyto
prevent
the application from attempting to write to the repository. The
repository
and work you have saved to the repository are safe. If your workspace
contains unsaved work, you may use the following procedure to savethis
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Recursive Deserialization attempted, Internal Error!
Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
Error #: [301, 231]
Detected at: qqsp_DeSerializeDriver::Run at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in anew
email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com -
Error in user domain of IDM 8.1
I have upgraded IDM from 7.1 to 8.1
When I login to user domain, I get the below error message:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 46 in the jsp file: /includes/copyright.jsp
Duplicate local variable directoryMasterLicensed
43: response.addDateHeader("Expires", System.currentTimeMillis() - 10*60*1000);
44: %>
45: <%
46: boolean directoryMasterLicensed = false;
47:
48: %>
49: <%-- $Id: copyright.jsp,v 1.6 2008/05/15 16:43:55 ar203302 Exp $ --%>
Any help is appreciated.
Thanks,
SanhitaYou might want to try removing the page import of the copyRight.jsp. That seemed to do it for me.
com.waveset.util.URLUTF8Encoder"%>
<%@ page import="com.waveset.msgcat.Messages"%>
<%@ page import="com.waveset.ui.util.HtmlUtil" %>
<%-- <%@ include file="/includes/copyright.jsp" %>--%>
<%@ page import="com.waveset.ui.PageInformation" %>
<%@ page import="com.waveset.util.WavesetProperties" %>
<%@ page import="com.waveset.session.UserViewConstants" %> -
RE: (forte-users) FW: (forte-users)
Hi there
Thanks very much for the solution - just wanted to let you know . We
implemented the design that technote 11378 suggested .
It worked .
Thanks very much
Cheers
Jen
-----Original Message-----
From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
Sent: Tuesday, 20 March, 2001 9:21 PM
To: 'forte-userslists.xpedior.com'
Subject: (forte-users) FW: (forte-users)
Hi David,
The problem is that the SO uses an attribute of its class ACBAccount as
the ObjectReference pointer. SO is not a stateless object. The possible
scenario before crash can be that client A and B calls SO at the same
time. A's thread creates ACBAccount gets the ObjectReference. At this
point B's thread is activated, does the same as A creates new
ObjectReference. Probably the next switch between A and B will be in the
Connect() (B should wait for OLE server). If A is reactivated it doesn't
get the original own reference but the B's reference. It can cause the
crash and means that a thread can use reference created in some other
thread.
Regards,
Zenon
-----Original Message-----
From: David McPaul [SMTP:dmcpaullumley.com.au]
Sent: Monday, March 19, 2001 11:52 PM
To: 'forte-userslists.xpedior.com'
Subject: RE: (forte-users)
Jenni,
As Zenon has pointed out, technote 11378 talks about problems that
can occur if the calls made to an OLE object are not from within the same
thread the OLE object was created in. It goes on to show a design to
avoid
this.
However, the code you have given DOES communicate to the OLE object
in the same thread as it was created. So the problem as I see it is more
likely to be that the OLE object is not being garbage collected. Although
you do explicitly NIL out the ACBAccount object there is a technote 12453
that deals with the need to set the ObjectReference of CDispatch objects
to
NIL to allow the OLE object to be completely reclaimed by the garbage
collector. Failure to do so when using code that creates a new OLE object
every time you ask for an account validation will eventually run the
partition out of memory.
As pointed out in a previous post you can also increase
FORTE_STACK_SIZE but this will delay the problem not correct it.
Rather than create the connection each time you may want to think
about redesigning the method as shown in tech note 11378.
Cheers
David
-----Original Message-----
From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
Sent: Tuesday, March 20, 2001 5:05 AM
To: 'Els, Jenni'
Cc: 'forte-userslists.xpedior.com'
Subject: RE: (forte-users)
Hi Jenni,
The most important issue by designing an OLE connection between a Forte
server partition and an OLE component is taking into account that an OLE
object can be referenced from the NT thread in Forte partition that it was
created in. It is the reason that you have no problems with your mini-app
in
single-threaded version.
This problem is discussed in the Technote 11378. You can find a workaround
for your problem there, too.
Regards,
Zenon
-----Original Message-----
From: Els, Jenni [SMTP:JElsnbs.co.za]
Sent: Monday, March 19, 2001 2:28 AM
To: 'forte-userslists.xpedior.com'
Subject: (forte-users)
Hi there
We have this situation
We are calling a Service Object (in the server partition) from ourclient
partition.This service object calls a method which calls a DLLregistered
on our server (VB code) . This VB code access a database on anotherserver
.(DSN set up on our server ).The database is sql server .
We are having the problem where for about 3 hours in the morning , the
system works perfectly. We then get a segmentation violation on this
partition . When we run interpreted we can see that this is an OLEinvoked
exception. The partition does not always show as offline in econsole
and
because it does not , we cannot 'online' another . We cannot take the
entire app down as everything hangs . Eventually our technical depthas
to
down the server
We set up a mini-app looping through and calling the DLL to simulate
the
problem . It worked fine. When we put another asynchronous task in the
method to call the service object , it erred quite soon. We thencreate
an
attribute of type mutex and locked using that. The mini-app worked.
However our app in development eventually hanged (without the
partition
coming though) .
The service Object is an environment visible service object in asingle
(non-replicated partition) . It has a dialog duration = session .
In the project is
ACB : ACBObject
ACBObject : CDispatch (shared = disallowed , distributed =
disallowed, transactional = disallowed, monitored = allowed)
ACBValidator : Object (shared = allowed , distributed =allowed,
transactional = disallowed, monitored = disallowed)
ACBVaidatorSO : ACBValidator
In this method we have this code to call the DLL
self.ACBAccount = new;
self.ACBAccount.CreateUsingCLSID(classID='{2EFD3084-7B05-11D3-857F-00105A4
8CEA0}');
pErrorMessage = new;
acbaccount.BankCode = pBankCode.value;
acbaccount.BranchCode = pBranchCode.value;
at : VariantI2 = new;
at.Value = pAccountType.Value;
acbaccount.AccountType = at.Value;
acbaccount.AccountNo = pAccountNo.value;
begin
acbaccount.Connect();
exception
when e : GenericException do
ex : GenericException = new;
ex.SetWithParams(severity = SP_ER_ERROR,
message = 'There was an error connecting to the database');
raise ex;
end;
begin
err : i2 = acbaccount.ValidateAccount();
if err != 0 then
pErrorMessage.SetValue(acbaccount.ErrDescriptionStr(iErrorCode= err));
acbaccount.Disconnect();
return false;
else
pErrorMessage.SetValue('The account is
valid!!');
acbaccount.Disconnect();
self.ACBAccount = NIL ;
return true;
end if;
exception
when e : GenericException do
acbaccount.Disconnect();
ex : GenericException = new;
ex.SetWithParams(severity = SP_ER_ERROR,
message = 'There was an error Validating the account');
Task.ErrorMgr.AddError(ex);
task.errormgr.ShowErrors();
raise e;
end;
exception
when e : GenericException do
acbaccount.Disconnect();
Task.ErrorMgr.ShowErrors();
raise e;
If anybody has any suggestions , they would be most welcome
Thanks very much
Cheers
Jenni Els************************************************************************Th
is e-mail is intended for the use of the individual or entity named above
and may contain information that is confidential and privileged. If you
are not the intended recipient, you are hereby notified that any
dissemination, distribution or copying of this e-mail is strictly
prohibited. If you have received this e-mail in error, please notify us
immediately at helpdesklumley.com.au and destroy the original message.
While this mail and any attachments have been scanned for common computer
viruses and found to be virus free, we recommend you also perform your own
virus checking processes before opening any attachments.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com--
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com
WARNING:
Any unauthorised use or interception of this email is illegal. If this email
is not intended for you, you may not copy, distribute nor disclose the
contents to anyone. Save for bona fide company matters, the BoE Group does
not accept any responsibility for the opinions expressed in this email.
For further details please see: http://www.nbs.co.za/emaildisclaim.htmHi there
Thanks very much for the solution - just wanted to let you know . We
implemented the design that technote 11378 suggested .
It worked .
Thanks very much
Cheers
Jen
-----Original Message-----
From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
Sent: Tuesday, 20 March, 2001 9:21 PM
To: 'forte-userslists.xpedior.com'
Subject: (forte-users) FW: (forte-users)
Hi David,
The problem is that the SO uses an attribute of its class ACBAccount as
the ObjectReference pointer. SO is not a stateless object. The possible
scenario before crash can be that client A and B calls SO at the same
time. A's thread creates ACBAccount gets the ObjectReference. At this
point B's thread is activated, does the same as A creates new
ObjectReference. Probably the next switch between A and B will be in the
Connect() (B should wait for OLE server). If A is reactivated it doesn't
get the original own reference but the B's reference. It can cause the
crash and means that a thread can use reference created in some other
thread.
Regards,
Zenon
-----Original Message-----
From: David McPaul [SMTP:dmcpaullumley.com.au]
Sent: Monday, March 19, 2001 11:52 PM
To: 'forte-userslists.xpedior.com'
Subject: RE: (forte-users)
Jenni,
As Zenon has pointed out, technote 11378 talks about problems that
can occur if the calls made to an OLE object are not from within the same
thread the OLE object was created in. It goes on to show a design to
avoid
this.
However, the code you have given DOES communicate to the OLE object
in the same thread as it was created. So the problem as I see it is more
likely to be that the OLE object is not being garbage collected. Although
you do explicitly NIL out the ACBAccount object there is a technote 12453
that deals with the need to set the ObjectReference of CDispatch objects
to
NIL to allow the OLE object to be completely reclaimed by the garbage
collector. Failure to do so when using code that creates a new OLE object
every time you ask for an account validation will eventually run the
partition out of memory.
As pointed out in a previous post you can also increase
FORTE_STACK_SIZE but this will delay the problem not correct it.
Rather than create the connection each time you may want to think
about redesigning the method as shown in tech note 11378.
Cheers
David
-----Original Message-----
From: Adamek, Zenon [mailto:ZAdamekpurolator.com]
Sent: Tuesday, March 20, 2001 5:05 AM
To: 'Els, Jenni'
Cc: 'forte-userslists.xpedior.com'
Subject: RE: (forte-users)
Hi Jenni,
The most important issue by designing an OLE connection between a Forte
server partition and an OLE component is taking into account that an OLE
object can be referenced from the NT thread in Forte partition that it was
created in. It is the reason that you have no problems with your mini-app
in
single-threaded version.
This problem is discussed in the Technote 11378. You can find a workaround
for your problem there, too.
Regards,
Zenon
-----Original Message-----
From: Els, Jenni [SMTP:JElsnbs.co.za]
Sent: Monday, March 19, 2001 2:28 AM
To: 'forte-userslists.xpedior.com'
Subject: (forte-users)
Hi there
We have this situation
We are calling a Service Object (in the server partition) from ourclient
partition.This service object calls a method which calls a DLLregistered
on our server (VB code) . This VB code access a database on anotherserver
.(DSN set up on our server ).The database is sql server .
We are having the problem where for about 3 hours in the morning , the
system works perfectly. We then get a segmentation violation on this
partition . When we run interpreted we can see that this is an OLEinvoked
exception. The partition does not always show as offline in econsole
and
because it does not , we cannot 'online' another . We cannot take the
entire app down as everything hangs . Eventually our technical depthas
to
down the server
We set up a mini-app looping through and calling the DLL to simulate
the
problem . It worked fine. When we put another asynchronous task in the
method to call the service object , it erred quite soon. We thencreate
an
attribute of type mutex and locked using that. The mini-app worked.
However our app in development eventually hanged (without the
partition
coming though) .
The service Object is an environment visible service object in asingle
(non-replicated partition) . It has a dialog duration = session .
In the project is
ACB : ACBObject
ACBObject : CDispatch (shared = disallowed , distributed =
disallowed, transactional = disallowed, monitored = allowed)
ACBValidator : Object (shared = allowed , distributed =allowed,
transactional = disallowed, monitored = disallowed)
ACBVaidatorSO : ACBValidator
In this method we have this code to call the DLL
self.ACBAccount = new;
self.ACBAccount.CreateUsingCLSID(classID='{2EFD3084-7B05-11D3-857F-00105A4
8CEA0}');
pErrorMessage = new;
acbaccount.BankCode = pBankCode.value;
acbaccount.BranchCode = pBranchCode.value;
at : VariantI2 = new;
at.Value = pAccountType.Value;
acbaccount.AccountType = at.Value;
acbaccount.AccountNo = pAccountNo.value;
begin
acbaccount.Connect();
exception
when e : GenericException do
ex : GenericException = new;
ex.SetWithParams(severity = SP_ER_ERROR,
message = 'There was an error connecting to the database');
raise ex;
end;
begin
err : i2 = acbaccount.ValidateAccount();
if err != 0 then
pErrorMessage.SetValue(acbaccount.ErrDescriptionStr(iErrorCode= err));
acbaccount.Disconnect();
return false;
else
pErrorMessage.SetValue('The account is
valid!!');
acbaccount.Disconnect();
self.ACBAccount = NIL ;
return true;
end if;
exception
when e : GenericException do
acbaccount.Disconnect();
ex : GenericException = new;
ex.SetWithParams(severity = SP_ER_ERROR,
message = 'There was an error Validating the account');
Task.ErrorMgr.AddError(ex);
task.errormgr.ShowErrors();
raise e;
end;
exception
when e : GenericException do
acbaccount.Disconnect();
Task.ErrorMgr.ShowErrors();
raise e;
If anybody has any suggestions , they would be most welcome
Thanks very much
Cheers
Jenni Els************************************************************************Th
is e-mail is intended for the use of the individual or entity named above
and may contain information that is confidential and privileged. If you
are not the intended recipient, you are hereby notified that any
dissemination, distribution or copying of this e-mail is strictly
prohibited. If you have received this e-mail in error, please notify us
immediately at helpdesklumley.com.au and destroy the original message.
While this mail and any attachments have been scanned for common computer
viruses and found to be virus free, we recommend you also perform your own
virus checking processes before opening any attachments.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com--
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com
WARNING:
Any unauthorised use or interception of this email is illegal. If this email
is not intended for you, you may not copy, distribute nor disclose the
contents to anyone. Save for bona fide company matters, the BoE Group does
not accept any responsibility for the opinions expressed in this email.
For further details please see: http://www.nbs.co.za/emaildisclaim.htm -
Re: (forte-users) SAXParser and InputSource
Michael Beaulieu wrote on Mon November 8:
Hello,
I was wondering if anyone has any experience using the XMLParser
Library!? in Forte. I have no problem parsing a file using the
forte parser but when I try to parse a message/TextData object I get
the error " element not found " ( which is not due to my xml file )
The class InputSource has a method that takes SeekStream in its
setCharacterStream method:
str : MemoryStream = new();
str.open(SP_AM_READ_WRITE);
str.WriteText(myMessage);
theSource : InputSource = new();
theSource.setCharacterStream(str);
myParser.parse(theSource);Add this line after you're done writing to the MemoryStream:
str.Seek(position=0);
When the SAX parser is reading, it's reading from the current position
forward; after writing to the stream the current position is at the
end, so you have to rewind it to the beginning before giving it to the
SAX parser.
Cliff Draper
Forte Engineering
Forte Software, a subsidiary of SunWhy not this:
while myText.moveToString(' ') do
myText.ReplaceRange('-', myText.Offset, myText.Offset+1);
end while;
or if you prefer verbosity:
while myText.moveToString(source=' ') do
myText.ReplaceRange(source='-', startOffset=myText.Offset,
endOffset=myText.Offset+1);
end while;
-----Original Message-----
From: FatchJeBAM.com [mailto:FatchJeBAM.com]
Sent: Wednesday, January 12, 2000 2:51 PM
To: Troy.Burnsvacationclub.com; kamranaminyahoo.com
Subject: RE: (forte-users) search and replace within a TextData
How about this?? May have to play with start/end on ReplaceRange as I
didn't really test this
Anybody got a better way??
-- replace space with underscore
For x in 1 to myTextdata.LengthToEnd() do
If myTextData.IsSpace() then
MyTextdata.ReplaceRange('_'. Startoffset=myTextdata.offset,
endoffset=myTextdata.offset+1);
End if;
MyTextdata.MoveNext;
End for;
Jerry Fatcheric
-----Original Message-----
From: Burns, Troy [mailto:Troy.Burnsvacationclub.com]
Sent: Wednesday, January 12, 2000 9:40 AM
To: kamranaminyahoo.com
Subject: (forte-users) search and replace within a
TextData
Hello all,
I need to search within a textdata object, replacing all
occurrances of a
space
with another character. Can you give a quick code example
of how I would do
this?
Thanks in advance,
Troy
Troy Burns
Marriott Vacation Club Intl.
E-mail: troy.burnsvacationclub.com
Phone: (941) 688-7700 ext. 4408
For the archives, go to: http://lists.sageit.com/forte-users
and use
the login: forte and the password: archive. To unsubscribe,
send in a new
email the word: 'Unsubscribe' to:
forte-users-requestlists.sageit.com
For the archives, go to: http://lists.sageit.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.sageit.com -
RE: (forte-users) Forte ADE
In addition to this confusion, I'd like to see some statement by Forte to
indicate
WHEN the next Forte R4 is scheduled (before the Sun era is was said to be
Summer 2000) and
WHAT exactly it will contain (major headings will do).
With the cancellation of the Forte Forum event doubt and uncertainty are
spreading in the
Forte communities that I talk with and no one seems to counterbalance these
doubts with an
official statement. How serious does Sun take TOOL Forte for the coming few
years? Release
of Fusion V2 seems to say "serious". The deafning silence with regard to R4
indicates the
opposite. And the users are divided (as always).
Theo de Klerk
Architecture & Application Integration
Professional Services
Compaq Computer Corp. - the Netherlands
-----Original Message-----
From: Rottier, Pascal [mailto:Rottier.Pascalpmintl.ch]
Sent: Tuesday, 18 April, 2000 17:49
To: 'kamranaminyahoo.com'
Subject: (forte-users) Forte ADE
A long, long time ago
In a galaxy far away....
I saw a demonstration of Forte's new Application Development
Environment,
which was more userfriendly than the current one. It also looked more
similar to the interface of the other development tools out
there, with a
tree structure and capabilities to browse through the
inheritance tree, and
not opening a new window for every project, class and method that is
accessed.
This new interface was supposed to be included in Forte 4, which would
combine TOOL and Java and would be released soon.
Since then, we've seen SynerJ and now FJEE, but Forte 4 is still not
released. And when it will be released, it still won't
support TOOL and Java
simultaneously. That's OK. I understand that.
But now I've heard that this improved ADE won't even be
included in Forte 4.
Is this true? And if so, why?
Pascal
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe,
send in a new
email the word: 'Unsubscribe' to:
forte-users-requestlists.xpedior.comYou may be interested in the following which comes from a statement of direction
recently issued by Sun.
Product Context
+ Forté 4GL is an award-winning, proven product with many unique advantages for
building
enterprise business systems that are distributed, that involve the integration
of existing
business systems as well as new functionality, and that target heterogeneous
runtime
environments.
+ Forté 4GL is recognized by Gartner Group as the most successful Enterprise
Application
Development Tool.
+ Forte 4GL has a substantial customer base that has been successful with the
product and that
looks forward to using Forté 4GL for new applications.
+ The Sun Microsystems, Inc. (SMI) development tools group (formerly Forté
Software, Inc.)
has a strong internal commitment to Forté 4GL. Forté Fusion is written with, and
is currently
being enhanced with Forté 4GL.
+ SMI has retained the Forté field sales organization as an independent unit
whose primary
product offerings are Forté 4GL and Forté Fusion. Continued volume sales of
Forté 4GL
remain the foundation of our business plan.
Product Future
+ We intend to actively enhance and promote Forté 4GL for the indefinite
future.
+ We believe Forté 4GL will flourish in the long term, especially if we are
able to harness the
considerable selling power of the entire SMI field sales organization. To make
the product
more attractive and easier to sell, we will continue to make the product more
modular and
easier to integrate with heterogeneous software environments.
+ We believe that the best opportunity for attracting new customers is to
leverage the ability of
Forté 4GL to easily build powerful shared business services (server components)
that can be
accessed by non-Forté clients (e.g., browsers, Java clients) and that can easily
integrate with
new and existing business systems.
+ We believe that Forté 4GL?s continued success is enhanced by continuing to
issue small and
frequent product releases. Our target is two such releases per year.
+ There is a great potential for our three product lines (Forté 4GL, Forté
Fusion, and Forté for
Java) to complement and reinforce each other. Interoperability among the three
product lines
is seen as a critical success factor for Forté 4GL.
Forte 4GL Statement of Direction Page 2
Sun Microsystems, Inc Proprietary and Confidential
Product Priorities
1. Interoperability with third party software components
+ External (non-4GL) client support (e.g., browsers, Java clients)
+ External server integration (e.g., messaging, component support, data
exchange)
2. Enhanced productivity
+ Increased automation (i.e., less coding)
+ Support for platform updates (e.g., new versions of OS, DBMS)
3. TOOL code to Java code migration
4. Unified developer look and feel with other Forte development products
5. Common repository
Short Term Product Plans
Mid-year release
+ New features available as ?preview? per the standard Forte maintenance
release procedures
+ Tentatively labeled ?release 3.5? and distributed as a free product
enhancement for
customers under maintenance
+ Scheduled for Summer 2000
+ Defining features
+ Introspection (reflection) ? the ability for an object to describe itself at
runtime
+ Improved integration with applications developed using Forté-for-Java
Community
Edition
+ Platform support improvements to track important operating system and
database
vendor activity
+ Target features
+ Display system enhancements (e.g., Motif 2 support, line arrowheads, window
refresh control, editable outline fields)
+ Dynamic library loading
+ Improved CORBA/IIOP support
+ Improved XML and XSLT class support
+ JMQ support
New year release
+ New features available as ?preview? per the standard Forte maintenance
release procedures
+ Tentatively labeled ?release 3.6? and distributed as a free product
enhancement for
customers under maintenance
+ Scheduled for year end 2000
+ Defining features
+ Any Release 3.5 target features that were not included in 3.5
+ Generation of EJB interfaces for R3 service objects
+ Platform support improvements to track important operating system and
database
vendor activity
+ Target features
+ COBOL record handling as part of the OS390 transaction adaptor
+ Improved runtime security
+ Interface classes for access to Netscape Server 4.0 and possibly other web
servers
Long Term Product Plans
+ To be determined by customer and market feedback.
+ A major criterion for new functionality will be enhancing the revenue
generating ability of
the product, thereby fostering its long-term health in the marketplace.
+ Substantial emphasis will be placed on creating new capabilities that enhance
the
attractiveness of the product for new users.
+ The contents of Release 3.7 (or whatever it will be called) will be
solidified just after release
3.5 ships. Subsequent planning visibility will be two forward releases.
"Klerk, Theo de" <Theo.de.Klerkcompaq.com> on 04/18/2000 12:27:36 PM
To: "'Rottier, Pascal'" <Rottier.Pascalpmintl.ch>,
"'kamranaminyahoo.com'" <kamranaminyahoo.com>
cc: (bcc: Charlie Shell/Bsg/MetLife/US)
Subject: RE: (forte-users) Forte ADE
Maybe you are looking for
-
Help with scrolling thumbnails photogallery
i need some help with this photo gallery im working on. im pretty sure i have almost everything correct but for some reason i cant get the thumbnails when clicked to link up with the img. i want it to show. well i cant really upload the file here i j
-
Hi, I have added filters through filter pane in BI 7 Web Application Designer. Now I have added a FILTER button on the WAD. While clicking on this button, it should hide all the filters . Once again, if we click on Filter button , it should disp
-
Purchase order item - link to document
Hello! As you know it is possible to link a SAP document to every position of a purchase order. My problem is that I want to fill this fields automatically with the data of the material master data (additional data) when the PO is created. Do you hav
-
Two questions about TimesTen In-Memory Database
1. In TimesTen, there are two methods to do the replication: a. create active standby pair b. create replication tt element ... whose performence is better ? when the cache group exists, only the A/S can be used, is it right? 2. If I just want to sto
-
제품 : ORACLE SERVER 작성날짜 : 2004-05-03 (V9I) ORA-2095 WHEN MODIFYING LARGE_POOL_SIZE OR JAVA_POOL_SIZE =============================================================== PURPOSE 이 자료는 Oracle 9i에서 LARGE_POOL_SIZE 또는 JAVA_POOL_SIZE 파라미터를 동적으로 변경하려고 할 때 발생하는