RE: (forte-users) dynamic select & maxrowsparameter

I thing this code should help:
** Accepts command string for dynamic query and **
** an empty array of BC to which the results **
** should be appended. Returns the filled BC **
** array. **
l_dynamicStatement : DBStatementHandle;
l_inputDescriptor : DBDataSet;
l_outputDescriptor : DBDataSet;
l_outputData : DBDataSet;
l_intStatementType : integer;
l_intRowType : integer;
l_intNumRows : integer;
l_intRowCount : integer = 0;
l_result : BusinessClass = new;
BEGIN
-- Prepare SQL statement for query given command string
l_dynamicStatement = self.GetDBSession().Prepare(
commandString = p_strSql,
inputDataSet = l_inputDescriptor,
cmdType = l_intStatementType);
-- Open Cursor
l_intRowType = GetDBSession().OpenCursor(
statementHandle = l_dynamicStatement,
inputDataSet = l_inputDescriptor,
resultDataSet = l_outputDescriptor);
-- Fetch first row
l_intNumrows = GetDBSession().FetchCursor(
statementHandle = l_dynamicStatement,
resultDataSet = l_outputData);
WHILE l_intNumRows > 0 DO -- If prev fetch returned a row
-- Increment count of rows fetched
l_intRowCount = l_intRowCount + 1;
-- Check for excessive number of rows retrieved
-- Then it checks if you want to throw a exception or
-- just exit and return the result set.
IF l_introwCount > p_intMaxRow THEN
IF p_bThrowExcept THEN
-- Shut the cursor down and remove prepared
statement
GetDBSession().CloseCursor(l_dynamicStatement);
GetDBSession().RemoveStatement(l_dynamicStatement);
// Raise exception
-- Have to put code
ELSE
EXIT;
END IF;
END IF;
-- Parse result from DBDataSet to subclass
-- of BusinessClass
l_result = parseResult(l_outputData);
// Add row to array
p_aryBC.AppendRow(l_result.Clone(deep=TRUE));
// Fetch next row
l_intNumrows = GetDBSession().FetchCursor(
statementHandle = l_dynamicStatement,
resultDataSet = l_outputData);
END WHILE;
-- Shut the cursor down and remove prepared statement
GetDBSession().CloseCursor(l_dynamicStatement);
GetDBSession().RemoveStatement(l_dynamicStatement);
EXCEPTION
when e: GenericException do
GetDBSession().CloseCursor(l_dynamicStatement);
GetDBSession().RemoveStatement(l_dynamicStatement);
raise e;
END;
return p_aryBC;
ka
Kamran Amin
Framework, Inc.
303 South Broadway
Tarrytown, NY 10591
(914) 631-2322x121
[email protected]
http://www.frameworkinc.com/
-----Original Message-----
From: Matthew Middleton [mailto:[email protected]]
Sent: Thursday, December 09, 1999 11:15 PM
To: Will Chris
Cc: [email protected]
Subject: RE: (forte-users) dynamic select & maxrows parameter
Think there's a mis-understanding. The maxrows I refer to is not SQL but a
forte method parameter as in the following:
dynStatement = self.DefaultDBSession.Prepare(commandString = sqlStatement
,inputDataSet = inputDescriptor
,cmdType = commandType);
rowType = self.DefaultDBSession.Select(statementHandle = dynStatement
,inputDataSet = inputDescriptor
,resultDataSet = outputDescriptor
,maxrows = 100);
the variable sqlStatement holds the "dynamic" select string.
If I don't set maxrows I get a runtime error, as mentioned, it is running
against Oracle.
At 14:47 10/12/99 +1100, you wrote:
We use Oracle and Rdb and we have dynamic and non-dynamic SQL. No
combination of
these demand a max rows clause.
For example the following query works on both databases :
lvLanguageCodesList : Array of LanguageCodes = new();
begin transaction
sql select Language_Code LanguageCode,
Language_Nm LanguageNm,
System_Control_YN SystemControlYN,
Other_Language_YN OtherLanguageYN
into :lvLanguageCodesList
from SRD_LANGUAGE_CODES
order by Language_Nm
on session StudentRegistryDBSession;
end transaction;
if lvLanguageCodesList.items = 0 then
return Nil;
else
return lvLanguageCodesList;
end if;
Indeed if we wanted to use max rows its a bit of a pain in the bum because
Oracle and
Rdb use different syntax to define the row limit. So our dynamic SQL
'builder class'
has to detect the database flavour and configure max rows accordingly(where
we want to use
it).
I can only guess that the error you are getting is not assoicated to therow
limit or is caused because of the database you are using ?
Regards,
Chris Will, Sydney, Australia
-----Original Message-----
From: Matthew Middleton [mailto:[email protected]]
Sent: Friday, 10 December 1999 14:33
To: [email protected]
Subject: (forte-users) dynamic select & maxrows parameter
the help for DBSession.Select method says that the maxrows
parameter is not
required. Leaving it out does not give a compile error.
However at runtime
an error is got saying maxrows must be > 0.
I am using a method that accepts a where clause as a
parameter and am not
really interested in what the number of rows will be.
Should I be?
Does anyone have any knowledge they can share on this one.
Thanks.
Regards,
Matthew Middleton Ph: +61 2 9239 4972
Oryx Software Consultant Fax: +61 2 9239 4900
Lawpoint Pty. Ltd. E-mail [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]
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]
Regards,
Matthew Middleton Ph: +61 2 9239 4972
Oryx Software Consultant Fax: +61 2 9239 4900
Lawpoint Pty. Ltd. E-mail [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]

I thing this code should help:
** Accepts command string for dynamic query and **
** an empty array of BC to which the results **
** should be appended. Returns the filled BC **
** array. **
l_dynamicStatement : DBStatementHandle;
l_inputDescriptor : DBDataSet;
l_outputDescriptor : DBDataSet;
l_outputData : DBDataSet;
l_intStatementType : integer;
l_intRowType : integer;
l_intNumRows : integer;
l_intRowCount : integer = 0;
l_result : BusinessClass = new;
BEGIN
-- Prepare SQL statement for query given command string
l_dynamicStatement = self.GetDBSession().Prepare(
commandString = p_strSql,
inputDataSet = l_inputDescriptor,
cmdType = l_intStatementType);
-- Open Cursor
l_intRowType = GetDBSession().OpenCursor(
statementHandle = l_dynamicStatement,
inputDataSet = l_inputDescriptor,
resultDataSet = l_outputDescriptor);
-- Fetch first row
l_intNumrows = GetDBSession().FetchCursor(
statementHandle = l_dynamicStatement,
resultDataSet = l_outputData);
WHILE l_intNumRows > 0 DO -- If prev fetch returned a row
-- Increment count of rows fetched
l_intRowCount = l_intRowCount + 1;
-- Check for excessive number of rows retrieved
-- Then it checks if you want to throw a exception or
-- just exit and return the result set.
IF l_introwCount > p_intMaxRow THEN
IF p_bThrowExcept THEN
-- Shut the cursor down and remove prepared
statement
GetDBSession().CloseCursor(l_dynamicStatement);
GetDBSession().RemoveStatement(l_dynamicStatement);
// Raise exception
-- Have to put code
ELSE
EXIT;
END IF;
END IF;
-- Parse result from DBDataSet to subclass
-- of BusinessClass
l_result = parseResult(l_outputData);
// Add row to array
p_aryBC.AppendRow(l_result.Clone(deep=TRUE));
// Fetch next row
l_intNumrows = GetDBSession().FetchCursor(
statementHandle = l_dynamicStatement,
resultDataSet = l_outputData);
END WHILE;
-- Shut the cursor down and remove prepared statement
GetDBSession().CloseCursor(l_dynamicStatement);
GetDBSession().RemoveStatement(l_dynamicStatement);
EXCEPTION
when e: GenericException do
GetDBSession().CloseCursor(l_dynamicStatement);
GetDBSession().RemoveStatement(l_dynamicStatement);
raise e;
END;
return p_aryBC;
ka
Kamran Amin
Framework, Inc.
303 South Broadway
Tarrytown, NY 10591
(914) 631-2322x121
[email protected]
http://www.frameworkinc.com/
-----Original Message-----
From: Matthew Middleton [mailto:[email protected]]
Sent: Thursday, December 09, 1999 11:15 PM
To: Will Chris
Cc: [email protected]
Subject: RE: (forte-users) dynamic select & maxrows parameter
Think there's a mis-understanding. The maxrows I refer to is not SQL but a
forte method parameter as in the following:
dynStatement = self.DefaultDBSession.Prepare(commandString = sqlStatement
,inputDataSet = inputDescriptor
,cmdType = commandType);
rowType = self.DefaultDBSession.Select(statementHandle = dynStatement
,inputDataSet = inputDescriptor
,resultDataSet = outputDescriptor
,maxrows = 100);
the variable sqlStatement holds the "dynamic" select string.
If I don't set maxrows I get a runtime error, as mentioned, it is running
against Oracle.
At 14:47 10/12/99 +1100, you wrote:
We use Oracle and Rdb and we have dynamic and non-dynamic SQL. No
combination of
these demand a max rows clause.
For example the following query works on both databases :
lvLanguageCodesList : Array of LanguageCodes = new();
begin transaction
sql select Language_Code LanguageCode,
Language_Nm LanguageNm,
System_Control_YN SystemControlYN,
Other_Language_YN OtherLanguageYN
into :lvLanguageCodesList
from SRD_LANGUAGE_CODES
order by Language_Nm
on session StudentRegistryDBSession;
end transaction;
if lvLanguageCodesList.items = 0 then
return Nil;
else
return lvLanguageCodesList;
end if;
Indeed if we wanted to use max rows its a bit of a pain in the bum because
Oracle and
Rdb use different syntax to define the row limit. So our dynamic SQL
'builder class'
has to detect the database flavour and configure max rows accordingly(where
we want to use
it).
I can only guess that the error you are getting is not assoicated to therow
limit or is caused because of the database you are using ?
Regards,
Chris Will, Sydney, Australia
-----Original Message-----
From: Matthew Middleton [mailto:[email protected]]
Sent: Friday, 10 December 1999 14:33
To: [email protected]
Subject: (forte-users) dynamic select & maxrows parameter
the help for DBSession.Select method says that the maxrows
parameter is not
required. Leaving it out does not give a compile error.
However at runtime
an error is got saying maxrows must be > 0.
I am using a method that accepts a where clause as a
parameter and am not
really interested in what the number of rows will be.
Should I be?
Does anyone have any knowledge they can share on this one.
Thanks.
Regards,
Matthew Middleton Ph: +61 2 9239 4972
Oryx Software Consultant Fax: +61 2 9239 4900
Lawpoint Pty. Ltd. E-mail [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]
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]
Regards,
Matthew Middleton Ph: +61 2 9239 4972
Oryx Software Consultant Fax: +61 2 9239 4900
Lawpoint Pty. Ltd. E-mail [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]

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 Netherlands

    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 Netherlands

  • Re: (forte-users) Dynamic construction of objects at runtimeusing str

    Shirish,
    We are currently doing this using libraries. It works something like this:
    Create your classes, have them implement interfaces and build them into a
    library. Then we have the following
    method 1 basically does a findlibrary to load the library:
    self.Lib = task.part.FindLibrary( projectName = 'MyLib',
    distributionId = 'mylib',
    compatibilityLevel = 1,
    libraryName = 'mylib');
    method 2 is called to load the dynamic object does a findclass and returns
    an object which implements a known interface.
    GetClass (pClassName string): object
    begin
    return self.MessageLibrary.FindClass(classname = pClassName);
    end;
    aObj : MyObjInterface;
    aObj = (MyObjInterface)(GetClass('DynamicClassName'));
    HTH
    Michael
    At 23:28 18/10/1999 MDT, you wrote:
    --Does anybody have information about how to create objects at runtime using a
    string that contains the classname?
    --You have an object of the base class and you have a string containing the
    derivedclass name, how do you do the typecasting of the base calss object
    using this string?
    please send anyinformation about the following question to
    [email protected]
    Thank you!!!
    shirish****************************************************************************
    Michael Burgess Ph: +61 2 9239 4973
    Contract Consultant Fax: +61 2 9239 4900
    Lawpoint Pty. Limited E-mail [email protected]
    ****************************************************************************

    Shirish,
    We are currently doing this using libraries. It works something like this:
    Create your classes, have them implement interfaces and build them into a
    library. Then we have the following
    method 1 basically does a findlibrary to load the library:
    self.Lib = task.part.FindLibrary( projectName = 'MyLib',
    distributionId = 'mylib',
    compatibilityLevel = 1,
    libraryName = 'mylib');
    method 2 is called to load the dynamic object does a findclass and returns
    an object which implements a known interface.
    GetClass (pClassName string): object
    begin
    return self.MessageLibrary.FindClass(classname = pClassName);
    end;
    aObj : MyObjInterface;
    aObj = (MyObjInterface)(GetClass('DynamicClassName'));
    HTH
    Michael
    At 23:28 18/10/1999 MDT, you wrote:
    --Does anybody have information about how to create objects at runtime using a
    string that contains the classname?
    --You have an object of the base class and you have a string containing the
    derivedclass name, how do you do the typecasting of the base calss object
    using this string?
    please send anyinformation about the following question to
    [email protected]
    Thank you!!!
    shirish****************************************************************************
    Michael Burgess Ph: +61 2 9239 4973
    Contract Consultant Fax: +61 2 9239 4900
    Lawpoint Pty. Limited E-mail [email protected]
    ****************************************************************************

  • Dynamically selecting column names in report builder ???

    Dear members,
    I have a requirement in which the user dynamically selects the tables column names. Like suppose take DEPT table. My query would be
    select &P Report from dept;
    so if the user selects DNAME then i would get the dname values and so on... This is fine but if one gives the value for the lexical parameter as DEPTNO,DNAME then i should get two columns in my report output. The select statement then becomes
    select DEPTNO,DNAME Report from dept;
    But i am not able to do this in report builder(6i). If i use just one value for the parameter then i get the o/p but if i use more than one (eg: DEPTNO,DNAME) then its giving an error.when i run this query through toad or sql plus then i am getting the desired o/p but wher as in report builder i am not able to get the o/p.
    My report triggers are :
    Before Parameter form :
    :P := NULL;
    After parameter Form :
    function AfterPForm return boolean is
    begin
    IF :P = 'DNAME,DEPTNO' THEN
    :P := ' DNAME,DEPTNO ' ;
    ELSE
         :P := NULL;
         END IF;
    return (TRUE);
    end;
    Your comments and suggestions are welcomed.
    thanks
    regards
    sandeep

    Number of columns can not be changed at run time. If your data model has three columns, lexical parameter should pass 3 values. If you have query like this in data model:
    select &p_1 from table
    Whatevere you have as initial value in user parameter p_1, data model captures that info.

  • Dynamic select-options using parameter

    Hi experts,
    It the user selects one value from dropdown list, it should generate one select-option using that name. Is it possible?
    for example, (pls see my code).
    If user selects 'Malek' from parameter, <b>and press 'ENTER'</b>
    <b>select-option should display with that name</b> like
    Malek      malek-low  malek-high
    And if user selects some other like 'Amran'. It should generate(and append)
    Malek      malek-low  malek-high
    amran      amran-low amran-high
    and so on....
    report c.
    data: t_return like ddshretval occurs 0 with header line.
    data: begin of t_names occurs 0,
           name like usr01-bname,
          end of t_names.
    parameters : i_inspec like usr01-bname.
    at selection-screen on value-request for i_inspec.
      perform get_names.
    form get_names.
      t_names-name = 'Malek'.
      append t_names.
      t_names-name = 'Amran'.
      append t_names.
      t_names-name = 'Ow CC'.
      append t_names.
      t_names-name = 'titbit'.
      append t_names.
      call function 'F4IF_INT_TABLE_VALUE_REQUEST'
        exporting
          retfield    = 'T_NAMES-NAME'
          dynpprog    = sy-cprog
          dynpnr      = sy-dynnr
          dynprofield = 'I_INSPEC'
          value_org   = 'S'
        tables
          value_tab   = t_names.
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno with
        sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      endif.
      read table t_return index   1.
    endform.                    "GET_NAMES
    Reward guaranteed,
    thanks
    kaki

    Use At selection-screen output,use screen internal table..
    User Dynamic Selection
    at selection-screen output.
      select single * from t000md.
      loop at screen.
        case screen-group1.
          when 'REL'.
            if not  p_old is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
          when 'BEL'.
            if not p_new is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
          when 'ARB'.
            if  p_new is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
          when 'MTA'.
            if  p_new is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
        endcase.
      endloop.

  • Dynamic select & maxrows parameter

    the help for DBSession.Select method says that the maxrows parameter is not
    required. Leaving it out does not give a compile error. However at runtime
    an error is got saying maxrows must be > 0.
    I am using a method that accepts a where clause as a parameter and am not
    really interested in what the number of rows will be.
    Should I be?
    Does anyone have any knowledge they can share on this one.
    Thanks.
    Regards,
    Matthew Middleton Ph: +61 2 9239 4972
    Oryx Software Consultant Fax: +61 2 9239 4900
    Lawpoint Pty. Ltd. E-mail [email protected]
    *******************************************************

    Use At selection-screen output,use screen internal table..
    User Dynamic Selection
    at selection-screen output.
      select single * from t000md.
      loop at screen.
        case screen-group1.
          when 'REL'.
            if not  p_old is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
          when 'BEL'.
            if not p_new is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
          when 'ARB'.
            if  p_new is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
          when 'MTA'.
            if  p_new is initial.
              screen-input = '0'.
              screen-required = '0'.
              screen-invisible = '1'.
            endif.
            modify screen.
        endcase.
      endloop.

  • How to change the text of a user defined field in dynamic selections?

    Logical Database PSJ is used by t code CJI3 - we added a couple of user fields into the dynamic selections of CJI3.
    Now - how to change the text of this user filed (USR01 of structure PRSP_R in logical database PSJ)?
    Found an OSS note - 86980 - that tells that this is not possible.
    But when we read the documentation on the user field (CJI3 - dynamic selections  - double click on user field - F1), it shows the following text:
    User-defined field in which you can enter general information with a length of up to 20 characters.
    Dependencies
    The names (key words) for  user-defined fields depend on the field key.
    Now the question is where to change the field key..
    Thanks,
    Ven

    Madhu - you did not get the question I think.
    Anyways - I found an OSS note 1266643 - this code change should take care of the issue - it will then reflect the details maintained in custoizng at transaction code OPS1..
    Thanks,

  • RE: (forte-users) (Fwd) ODBC & Dynamically Choosing aDatabase Ve ndor

    The error you are getting is saying that the data source is not correctly
    specified. Make sure the data source(or the name of the ODBC driver you
    created) is correctly specified in your code.
    ka
    -----Original Message-----
    From: Duncan Kinnear [mailto:[email protected]]
    Sent: Sunday, December 19, 1999 6:26 PM
    To: [email protected]
    Subject: (forte-users) (Fwd) ODBC & Dynamically Choosing a Database
    Vendor
    I am trying to dynamically create a DBSession to connect to the
    Microsft SQL Server ODBC Driver on a Forte Server Node.
    I have tested the ODBC connection on the Local Machine and it works fine.
    I have connected to the SQL Server on that machine with a Static
    DBSession Object and that works fine.
    I have used the same code to create a DBSession to Informix on Unix
    and that worked fine.
    The error I get is a converted ODBC one:
    SYSTEM ERROR: Attempt to load partition named TestWinProject_cl0_Part1
    failed.
    Class: qqsp_ResourceException
    Error #: [1001, 4]
    Detected at: qqrt_ForteExecAgent::LoadPartition at 2
    Error Time: Mon Dec 20 12:05:37
    Distributed method called: qqrt_ForteExecAgentProxy.LoadPartition!7
    (object name Unnamed) from partition "Node Manager", (partitionId =
    40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11c, taskId =
    [40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11c.38]) in application
    "System
    Manager", pid 250 on node ALLY in environment testenv
    Exception occurred (remotely) on partition "Forte_Executor",
    (partitionId
    = 40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11e, taskId =
    [40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11e.22]) in application
    "TestWinProject_cl0", pid 235 on node ALLY in environment TestEnv.
    SYSTEM ERROR: Failed to create service object TestDataProject.TestService.
    Class: qqsp_ResourceException
    Last TOOL statement: method TestServiceMgr.
    Error Time: Mon Dec 20 12:05:37
    Exception occurred (remotely) on partition "Forte_Executor",
    (partitionId
    = 40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11e, taskId =
    [40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11e.22]) in application
    "TestWinProject_cl0", pid 235 on node ALLY in environment TestEnv.
    USER ERROR: (This error was converted)
    Failed to connect to database: ForteSQLServer , username: justin .
    [Microsoft][ODBC Driver Manager] Data source name not found and no
    default
    driver specified
    Class: qqdb_RemoteAccessException with ReasonCode:
    DB_ER_DBMSCONNECTION
    DBMS SQLSTATE: IM002
    Class: qqsp_ErrorDescriptor
    Detected at: qqdb_OdbcVendorInfo::DoSQLConnect at 10
    Last TOOL statement: method ServiceMgr.SetDBSession
    Error Time: Mon Dec 20 12:05:37
    Exception occurred (remotely) on partition "Forte_Executor",
    (partitionId
    = 40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11e, taskId =
    [40114BC0-B0FC-11D3-B4D6-E87D6941AA77:0x11e.22]) in application
    "TestWinProject_cl0", pid 235 on node ALLY in environment TestEnv.
    Versions:
    SQL SERVER 6.5
    ODBC Driver SQL Server 2.65.0240
    ODBC Manager 3.0.28.22
    NT 4 sp4
    Forte 3.0.J.1
    The code I'm using is almost identical to that given in the "Dynamically
    Choosing a Database Vendor" section of the "Making a Database
    Connection" chapter of the "Accessing Databases" manual.
    Any suggestions would be greatly appreciated
    Thanks in advance.
    Cheers,
    Duncan Kinnear,
    McCarthy and Associates, Email:
    [email protected]
    PO Box 764, McLean Towers, Phone: +64 6 834 3360
    Shakespeare Road, Napier, New Zealand. Fax: +64 6 834 3369
    Providing Integrated Software to the Meat Processing Industry for over 10
    years
    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) Need help w/SQL to Informix using anarray in WHERE c

    Bob.
    That syntax isn't know Forte, used Dynamic SQL and coding
    it dynamically. And the SQL statement exceed 255 bytes, divide in 2 or more
    sentences (NameListCity1, NameListCity2, NalmeListCountry1, ...)
    Try with:
    NameListCity = 'city1','city2','city3'...
    NalmeListCountry = 'country1','country2','country3',...
    WHERE
    city in (:NameListCity) and
    country_code in (:NameListCountry)
    Bye.
    "Briggs, Bob" <Bob.Briggsmarriott.com> wrote:
    I'm trying to invoke a query to Informix to select rows that match any of
    the city / country pairs that exist in an array that is passed into the
    method. The SQL itself seems to be OK however it appears that Forte is
    having a problem in parsing the Select statement when it gets to the WHERE
    clause. The resulting exception shows the SQL string formatted properly up
    to the WHERE clause which ends like "WHERE city". Does anyone know of a way
    to make this type of query work in a single invocation? I'm trying not to
    issue multiple queries as would be the case if I used Dynamic SQL and coding
    it dynamically with multiple OR statements is not really an option since the
    overall length of the SQL statement cannot exceed 256 bytes. I have included
    an example of the code below, any insight would be greatly appreciated.
    SQL SELECT address1 tnAddress, city tnCity, state tnState, zipcode
    tnZipcode,
    hotel_code tnHotel_Code, name tnHotelName, product_code
    tnProduct_code, loc_type tnLoc_Type,
    phone tnPhone, country_code tnCountry
    INTO
    :po_aboLocator
    FROM
    Hotel
    WHERE
    city in :pi_aboNickNameList[*].sCityName and
    country_code in :pi_aboNickNameList[*].sCountryCode
    ON SESSION getDBSession();
    Thank you very much,
    Bob
    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

    Bob.
    That syntax isn't know Forte, used Dynamic SQL and coding
    it dynamically. And the SQL statement exceed 255 bytes, divide in 2 or more
    sentences (NameListCity1, NameListCity2, NalmeListCountry1, ...)
    Try with:
    NameListCity = 'city1','city2','city3'...
    NalmeListCountry = 'country1','country2','country3',...
    WHERE
    city in (:NameListCity) and
    country_code in (:NameListCountry)
    Bye.
    "Briggs, Bob" <Bob.Briggsmarriott.com> wrote:
    I'm trying to invoke a query to Informix to select rows that match any of
    the city / country pairs that exist in an array that is passed into the
    method. The SQL itself seems to be OK however it appears that Forte is
    having a problem in parsing the Select statement when it gets to the WHERE
    clause. The resulting exception shows the SQL string formatted properly up
    to the WHERE clause which ends like "WHERE city". Does anyone know of a way
    to make this type of query work in a single invocation? I'm trying not to
    issue multiple queries as would be the case if I used Dynamic SQL and coding
    it dynamically with multiple OR statements is not really an option since the
    overall length of the SQL statement cannot exceed 256 bytes. I have included
    an example of the code below, any insight would be greatly appreciated.
    SQL SELECT address1 tnAddress, city tnCity, state tnState, zipcode
    tnZipcode,
    hotel_code tnHotel_Code, name tnHotelName, product_code
    tnProduct_code, loc_type tnLoc_Type,
    phone tnPhone, country_code tnCountry
    INTO
    :po_aboLocator
    FROM
    Hotel
    WHERE
    city in :pi_aboNickNameList[*].sCityName and
    country_code in :pi_aboNickNameList[*].sCountryCode
    ON SESSION getDBSession();
    Thank you very much,
    Bob
    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) Express Question

    Hi,
    I've done it using a dynamic DBSession manager (and dynamic dbsession
    instanciation). But, you need to customize the Express Framework
    (ExpressService.BusinessDBMgr) and modify the select, update, delete, execute
    methods. You need also to maintain the statement cache linked to the DBsession
    and manage the link between a DBsession and a task or use explicit mutex (the
    aim is to have only one task assigned to a DBsession at a time : this should be
    done in the DBSession Manager). If you use Dynamic DBSessions, you will also
    need to add a synchronization to the DBsession Manager.
    If you want to suppress the default DBSession service object, you will need to
    customize the code generation. You should ask the Forte Consulting I think...
    Hope this helps,
    Daniel Nguyen
    Freelance Forte Consultant
    Url : http://perso.club-internet.fr/dnguyen/
    [email protected] a &eacute;crit:
    Has anyone tried replicating the partitions that contain the DBService SOs
    from the Business Model (ie. DBSessions)? We are attempting to do this to
    avoid single-threading access to our database and wondered if anyone had
    done this successfully. Thanks for your help.
    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]

    Hi,
    I've done it using a dynamic DBSession manager (and dynamic dbsession
    instanciation). But, you need to customize the Express Framework
    (ExpressService.BusinessDBMgr) and modify the select, update, delete, execute
    methods. You need also to maintain the statement cache linked to the DBsession
    and manage the link between a DBsession and a task or use explicit mutex (the
    aim is to have only one task assigned to a DBsession at a time : this should be
    done in the DBSession Manager). If you use Dynamic DBSessions, you will also
    need to add a synchronization to the DBsession Manager.
    If you want to suppress the default DBSession service object, you will need to
    customize the code generation. You should ask the Forte Consulting I think...
    Hope this helps,
    Daniel Nguyen
    Freelance Forte Consultant
    Url : http://perso.club-internet.fr/dnguyen/
    [email protected] a &eacute;crit:
    Has anyone tried replicating the partitions that contain the DBService SOs
    from the Business Model (ie. DBSessions)? We are attempting to do this to
    avoid single-threading access to our database and wondered if anyone had
    done this successfully. Thanks for your help.
    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) 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.com

    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.com

  • How to deal with dynamic selection screen elements when macros are used?

    Hello experts,
    This is regarding the dynamic selection screen elements. Actually the requirement is to modify the existing standard report program RFUMSV00 by copying it into a Z report, adding a few selection screen elements and new fields in the output. I actually did everything required except for the one thing that is going out of my reach.
    There are a certain fields which are coming when they are not supposed to get displayed. I don't understand the code because of its obsoleteness. Neither can I debug it because it is just data declaration.
    This is the code where there is a fault. If I copy the entire code into a new Z report, I'm getting new fields like Entry Date, Document Type, Reference Transaction,  Reference key, Logical system.
      DEFINE selection_screen_line.
      selection-screen: begin of line.
      parameters &3 like &4 default 'X' modif id mc4.
      selection-screen: comment (30) &1 for field &3 modif id mc4.
      selection-screen: comment pos_low(10) text-019
                        for field &2 modif id mc4.  "neu
      parameters &2 like rfums_alv-variante modif id mc4.
      selection-screen:
          position pos_high.
      selection-screen: pushbutton (15) text-028
                        user-command &5 modif id mc4.
      selection-screen end of line.
    END-OF-DEFINITION.
    Kindly, suggest me the right solution.

    In the program attributes ( SE38 > RFUMSV00 > GOTO > Properties ), you will find a logical database BRF declared. The include DBBRFSEL is part of the selection screen of this logical database.
    The selection screen is actually the selection screen of this logical database.
    Under the Logical Database field, there is a Selection screen field where you can input which selection screen of the logical database to be used.
    But, this is just to change the selection screen that is displayed. To completely suppress it you need to remove logical database declaration from the properties of the program and call it inside your program through function module.
    You cannot just remove it from the declaration because many of its variables are used in the program.
    So call it using function module as the first step in INITIALIZATION section of the program.
    The syntax and function module to call it in your program can be found in the following thread :
    How to hide the selection screen of a Logical datebase?
    Regards,
    Ashish

  • Creating Forte FieldWidgets Dynamically at Runtime

    Hi Everyone,
    Could someone please help me with the following problem I have when
    creating Forte fieldwidgets dynamically at run-time. I am using Forte
    ver. 3.0.G.2.
    (-1-) I have a window class with an empty gridfield, <grfMain>, inside a
    viewport. The idea is to populate the gridfield with DataField
    fieldwidgets dynamically at runtime. Depending on some input criteria,
    sometimes some of the DataFields need to map to IntegerNullables, some
    to DoubleNullables and some to DateTimeNullables. (Please note that I
    cannot use the Forte window workshop to create these fieldwidgets,
    because different types of fieldwidgets will be needed at different
    times, in different numbers, at run-time. ) Here is a sample of how I am
    currently trying to achieve this:
    dfDate : DataField = new;
    dfDate.MaskType = MK_Template;
    dfDate.DateTemplate = new( value='dd/mm/yyyy' );
    dfDate.Row = 1;
    dfDate.Column = 2;
    dfDate.Parent = <grfMain>;
    dfInt : DataField = new;
    dfInt.MaskType = MK_INTEGER;
    dfInt.Row = 2;
    dfInt.Column = 2;
    dfInt.Parent = <grfMain>;
    dfReal : DataField = new;
    dfReal.MaskType = MK_FLOAT;
    dfReal.Row = 3;
    dfReal.Column = 2;
    dfReal.Parent = <grfMain>;
    The code above is called after the window has been opened with the
    Open() statement.
    Looking at the code above, one obvious omission is that the "Mapped
    Type" of the Datafields are not set up. In the Forte window workshop, an
    interface is provided to set up the "Mapped Type" of the Datafield
    widgets, but I'm not sure how to do that dynamically, and that is
    basically my biggest problem here.
    (-2-) If I now run the window class, the Datafield widgets get created,
    and they all have the correct input maks, but no validation gets done
    when one tabs away from the field. For example, Datafields with
    MaskType=MK_INTEGER will gladly accept '--1--0++7', while Datafields
    created in the window workshop (mapping to IntegerNullables) will do a
    validation, and not allow one to tab out of the field before the extra
    minus and plus signs are not removed.
    I have the same problem with the Datafields which have
    MaskType=MK_Template and DateTemplate='dd/mm/yyyy'. For the date, one
    can enter something like '2*\**\****', and leave the field, while the
    same type of datafield created in the window workshop (mapped to a
    DateTimeNullable), will not allow you to leave the field before a valid
    date has not been entered. To summarise, the input masks of my
    dynamically created Datafields work fine, but no validation gets done
    when the field looses the focus.
    (-3-) As a test, I used the Forte debugger ("view"-"local variables") to
    look at the differences between Datafields created dynamically, and
    those created in the Forte window workshop. One very obvious difference
    was that Datafield attribute "MapTypeName" was filled in for the window
    workshop Datafields, but not for my dynamically created Datafields. The
    problem is that Forte does not allow me to set this attribute
    dynamically in my code. How else can I setup the Mapped Type
    dynamically?
    (-4-) In order to have a consistent look-and-feel throughout our Forte
    project, we are making use of Domain classes for DATE and DECIMAL data
    entry fields. My questions are:
    (4.1) How must I go about creating Datafields dynamically that make use
    of these Domain classes?
    (4.2) Is it also a matter of setting up the "MapTypeName" attribute,
    which I cannot seem to do?
    (4.3) Is the mapping done differently for Domain classes?
    (-5-) Another interesting thing to note for Datafields created in the
    Forte Window Workshop, is that if the mapped type is IntegerNullable
    with Input Mask = Integer, or DoubleNullable with Input Mask = Float,
    then the Object that the Datafield widget maps to, must first be
    instantiated before the Loose-Focus validations will start to work. For
    example, if a Datafield widget called "dfTestInt" was created in the
    Forte window workshop, which maps to an IntegerNullable, and Input Mask
    = Integer, then the following line is needed before the window is
    displayed: dfTestInt = new;
    Without this line, one can enter something like '2---3+++7', and leave
    the field.
    This is not true for Datafields where the mapped type is
    DateTimeNullable with say Input Mask Template='dd\mm\yyyy'. In this case
    validations are done even thought the object being mapped to, has not
    been instantiated yet. In other words you will never be able to enter
    '2*/**/****', and leave the field for datafield created in the window
    workshop. Maybe in this case the validation is being done by the
    template itself?
    Thanks in advance
    Riaan
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    what I mean is rendering JSF components on the fly, becuase some time you don't know things at design time. Lets say I am designing a page in creator that shows the total number of dependants that belongs to a primary inusrance member in text boxes. Of course we don't know in advance how many dependants we have for a specific member unless we go to databse and fetch all the data at runtime. Desiging some thing dynamic like that is very easy in CGI or ASP/JSP but JSF model seems very static due to it's design time feature.
    So is it possible with JSF or not?

  • RE: (forte-users) Reporting tools/components for ForteApplications?

    Hi Robert,
    A good place to start when it comes to reporting is Forte Consulting. They
    have developed a tool called ReportKit, which is ActiveX integration with
    Seagate Software's Crystal Reports tool. Crystal is not really a three-tier
    tool (although, your Forte Consultant can probably set it up to mimic a
    three-tier tool), but it is a quick, easy way to get quality reports from
    your existing Forte applications. If you're interested, give your Forte
    Sales Rep (or, better still, your Forte Regional Consulting Director) a
    call. They can discuss pricing and scheduling. I've done several
    integration projects with Crystal, and I highly recommend ReportKit for
    small- to medium-sized reporting requirements. As for costs, I don't recall
    how much CrystalReports runs, but I think there are developer licenses and
    runtime licenses.
    FYI, the actual integration of ReportKit is pretty quick. The more
    time-consuming piece of any report tool integration is the design and
    implementation of the reports to be used.
    I hope this helps.
    -Katie
    Katie Tierney
    Quality Management Analyst
    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: Robert Brooke-N502365 [mailto:Robert.Brookeca.michelin.com]
    Sent: Monday, February 14, 2000 8:17 AM
    To: kamranaminyahoo.com
    Subject: (forte-users) Reporting tools/components for Forte
    Applications?
    Hi all,
    We are looking for what is currently in the marketplace to enhance the
    reporting
    capabilities of Forte. Ideally, we are looking for component libraries that
    we
    could import into our repository. Do these exist?
    Currently, I have found six reporting tools that are out there. The
    tools
    are Actuate, Crystal Reports, Report Workshop from Indus Consultancy
    Services, Brio Technologies (SQR) VisualBRIO, Visual CyberQuery from
    Cyberscience Corp., and Beacon from Brahma Software Solutions FORTify
    Components. Are there any others for Forte?
    If anyone is currently using one of these Reporting Tools for Forte or
    any
    others, could you give me any indications as to the costs, training, type
    of
    application using the Reporting tool, would you recommend using the
    product
    again, does it use wrappering or API, or is it a component based tool, and
    any
    other relevant information on the product?
    Thanks,
    Robert Brooke
    Application Developer
    Michelin North America (Canada) Inc. CA0/CA1
    PO Box 399
    New Glasgow, Nova Scotia
    B2H-3E6
    Phone: (902) 753-1977
    Fax: (902) 396-2180
    Note: We are currently developing in Forte 3.0.L.2. However, we would
    like
    to select a reporting tool/component within the next month. We are in the
    initial phases of our next project, an application to be developed
    in-house.
    Probably will have two databases, one for real-time data and another one
    for
    archived data. Probably will need reporting functionality and capabilities
    for
    both real-time data and archived data.
    This email and any files transmitted with it are confidential and
    intended solely for the use of the individual or entity to whom they
    are addressed. If you have received this email in error please notify
    the system manager.
    This footnote also confirms that this email message has been swept by
    MIMEsweeper for the presence of computer viruses.
    The E-Mail System is to be used for business purposes only.
    www.mimesweeper.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

    At 09:33 AM 4/20/01, Rottier, Pascal wrote:
    Forte 4GL is:
    1) A language, TOOL (Compare to Java)
    2) An IDE (Compare to e.g. JBuilder or FJCE)
    3) A collaborative development environment, with central repository (Compare
    to ????)
    4) A distributed application server / object request broker (Compare to J2EE
    servers and/or CORBA)Let's not forget WebEnterprise, Express, and especially Fusion.
    I think, SUN is not al all interested in TOOL.If TOOL were just a language and had no market yet, you are probably
    right. But, not only is TOOL the key to the Forte environment, but it has
    an existing and profitable market. Sun still sells FORTRAN, after all, and
    continues to put money into ADE development for all its language
    products. The real kicker, though, is that I think iPlanet is very clear
    that Fusion, now iIS, is a very key product for them. There may be those
    who wish it were written in Java and who might lobby for doing a Java
    version, but it was clear at the conference that the iPlanet management
    recognize that Java just isn't up to the task at this point. It isn't as
    if all the iPlanet tools are actually written in Java, after all.
    They will only support them for as long as they need.Or, more likely, for as long as they make money.
    Now, in response to Microsofts .NET stratagy. We have yet to see how
    succesfull this will be, but I expect Microsoft to push this down the
    throats of developers and companies quite succesfully.Like they did DCOM?
    =========================================================================
    Thomas Mercer-Hursh, Ph.D email: [email protected]
    Computing Integrity, Inc. sales: 510-233-9329
    550 Casey Drive - Cypress Point support: 510-233-9327
    Point Richmond, CA 94801-3751 fax: 510-233-6950

  • Need to disable one of the select-options in dynamic selection screen

    Hi,
    we have copied the Standard program: RFDOPR00 into Z, my requirement is to disable one of the select-options in dynamic selection screen for ex: Reason code(User shouldnot able to enter anything in it).
    Can anyone please tell me the procedure to do it... I had tried using at selection-screen but it doesnt work as it in 'LOOP AT SCREEN', i am not able to capture the Parameter name(screen-name).
    Thanks,
    Ravi

    Hi,
    Get inside your selection screen, by executing your program.
    Now type /h in the field where you enter transaction code and press enter.
    Now again press enter, this will take you debugger starting from your Selection screen.
    You might be knowing this, still if you are not aware of this, this might be a valuable tip.
    From here , you can trace your Parameter name.

Maybe you are looking for

  • GreyScale to Black and White

    Hey, I'm having a few problems converting a grey scale BufferedImage to black and white. I create the BufferedImage as greyscale: Image image = Toolkit.getDefaultToolkit().createImage(source); // Create a grayscale color model. ColorSpace cs = ColorS

  • Sending photos from phone to pix place

    Before this recent update, I had no problem sending photos from my droid X to the online album storate at Pix Place. Now since the update, I have not been able how to send the photos.  Online album is not even a choice.

  • Apple tv wont connect to my library

    My Apple TV won't connect to my itunes library.  I've done just about every trouble shooting tip listed.

  • Notification 10.8 fails to open.

    Hi everybody, I am running 10.8.2 on my Macbook Pro (i7) and iMac (intel Core duo). Eveything fine, but... After starting my Macbook Pro the new feature "Notifications" is always gray and I am not able to switch it on again. Sometimes it works, somet

  • I can't play music that I bought on itunes

    I purchase an album on itunes just a couple days ago and all of the songs play except one. When I try to play it, it says I need to authorize my computer. When I tried to authorize it, it said that my computer was already authorized. This happens eve