From: Michael Haensch on
Hi,

I've a reproducible 5333 error in connection with Crystal Reports 8.5.
In my menu I call a function Test5333 which inits a class which opens a
report (with 9 subreports) and scan through the subreports.
The code itself is ok; it does what it should.

When I call this function via menu it crashes on the 3.-5. call;
It doesn't crash when I use a local IApplication object instead of the
IApplication object from mApp.

Do you have any idea, whats wrong with the code?

Michael

IApplication, IReport.. are OLEAutoObjects generated from a Crystal DLL.

--------------------------------------------------------
METHOD Test5333 () CLASS winShell

LOCAL o AS mReport5333_3

o := mReport5333_3 {}
o:LogOn()
o:ShowTables ()

RETURN SELF

--------------------------------------------------------
CLASS mReport5333_3

PROTECT _oApp AS mApp
PROTECT _oApplication AS IApplication
PROTECT _oReport AS IReport

DECLARE METHOD LogOn
DECLARE METHOD ShowTables


METHOD LogOn () AS VOID PASCAL CLASS mReport5333_3

LOCAL o AS IDataBase

o := _oReport:DataBase
o:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8', 'crystal',
'crystal')

RETURN

METHOD init () CLASS mReport5333_3

_oApp := OBJECT(GetAppObject())
_oApplication := _oApp:CrystalApplication
// _oApplication := IApplication{}
_oReport :=
_oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
1 )

RETURN SELF

METHOD ShowTables () AS VOID PASCAL CLASS mReport5333_3

LOCAL nSection AS DWORD
LOCAL nReportObject aS DWORD

LOCAL oSections AS ISections
LOCAL oSection AS ISection
LOCAL oReportObjects AS iReportObjects
LOCAL oReportObject AS iReportObject
LOCAL oSubreportObject AS ISubreportObject

LOCAL cSubReportName AS STRING

oSections := _oReport:Sections

FOR nSection := 1 TO oSections:count
oSection := oSections[nSection]
oReportObjects := oSection:ReportObjects

FOR nReportObject := 1 TO oReportObjects:count

oReportObject := oReportObjects[nReportObject]

IF oReportObject:kind = crSubreportObject

// tricky: now oReportObject is used as oSubreportObject
oSubreportObject := ISubreportObject{oReportObject}

oSubreportObject := oReportObjects:itemSub(nReportObject)
cSubReportName := oSubreportObject:SubreportName
_oReport:OpenSubreport(cSubReportName)

ENDIF
NEXT nReportObject

NEXT nSection

RETURN


--------------------------------------------------------
CLASS mApp INHERIT App

PROTECT _oCrystalApplication AS IApplication

DECLARE ACCESS CrystalApplication

ACCESS CrystalApplication () AS IApplication PASCAL CLASS mApp
RETURN _oCrystalApplication

METHOD INit () CLASS mApp

SUPER:INit ()

_oCrystalApplication := IApplication{}


RETURN SELF

--------------------------------------------------------
FUNCTION Start()

__SetAppObject(MApp{})
From: Marc Verkade [Marti IT] on
Hai Michael,

I really want to take a look into this hence we also suffer now and then
from 5333's with crystal (fortnately only when using crystal!). .Can you
supply the AEF's so I can import then into a new project? That would safe me
time and the I am really sure we use the same source...
Thanx, Marc

"Michael Haensch" <mh(a)fritsche-entsorgung.de> schreef in bericht
news:eth4s0$v4b$1(a)murphy.mediascape.de...
> Hi,
>
> I've a reproducible 5333 error in connection with Crystal Reports 8.5.
> In my menu I call a function Test5333 which inits a class which opens a
> report (with 9 subreports) and scan through the subreports.
> The code itself is ok; it does what it should.
>
> When I call this function via menu it crashes on the 3.-5. call;
> It doesn't crash when I use a local IApplication object instead of the
> IApplication object from mApp.
>
> Do you have any idea, whats wrong with the code?
>
> Michael
>
> IApplication, IReport.. are OLEAutoObjects generated from a Crystal DLL.
>
> --------------------------------------------------------
> METHOD Test5333 () CLASS winShell
>
> LOCAL o AS mReport5333_3
>
> o := mReport5333_3 {}
> o:LogOn()
> o:ShowTables ()
>
> RETURN SELF
>
> --------------------------------------------------------
> CLASS mReport5333_3
>
> PROTECT _oApp AS mApp
> PROTECT _oApplication AS IApplication
> PROTECT _oReport AS IReport
>
> DECLARE METHOD LogOn
> DECLARE METHOD ShowTables
>
>
> METHOD LogOn () AS VOID PASCAL CLASS mReport5333_3
>
> LOCAL o AS IDataBase
>
> o := _oReport:DataBase
> o:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8', 'crystal',
> 'crystal')
>
> RETURN
>
> METHOD init () CLASS mReport5333_3
>
> _oApp := OBJECT(GetAppObject())
> _oApplication := _oApp:CrystalApplication
> // _oApplication := IApplication{}
> _oReport :=
> _oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
> 1 )
>
> RETURN SELF
>
> METHOD ShowTables () AS VOID PASCAL CLASS mReport5333_3
>
> LOCAL nSection AS DWORD
> LOCAL nReportObject aS DWORD
>
> LOCAL oSections AS ISections
> LOCAL oSection AS ISection
> LOCAL oReportObjects AS iReportObjects
> LOCAL oReportObject AS iReportObject
> LOCAL oSubreportObject AS ISubreportObject
>
> LOCAL cSubReportName AS STRING
>
> oSections := _oReport:Sections
>
> FOR nSection := 1 TO oSections:count
> oSection := oSections[nSection]
> oReportObjects := oSection:ReportObjects
>
> FOR nReportObject := 1 TO oReportObjects:count
>
> oReportObject := oReportObjects[nReportObject]
>
> IF oReportObject:kind = crSubreportObject
>
> // tricky: now oReportObject is used as oSubreportObject
> oSubreportObject := ISubreportObject{oReportObject}
>
> oSubreportObject := oReportObjects:itemSub(nReportObject)
> cSubReportName := oSubreportObject:SubreportName
> _oReport:OpenSubreport(cSubReportName)
>
> ENDIF
> NEXT nReportObject
>
> NEXT nSection
>
> RETURN
>
>
> --------------------------------------------------------
> CLASS mApp INHERIT App
>
> PROTECT _oCrystalApplication AS IApplication
>
> DECLARE ACCESS CrystalApplication
>
> ACCESS CrystalApplication () AS IApplication PASCAL CLASS mApp
> RETURN _oCrystalApplication
>
> METHOD INit () CLASS mApp
>
> SUPER:INit ()
>
> _oCrystalApplication := IApplication{}
>
>
> RETURN SELF
>
> --------------------------------------------------------
> FUNCTION Start()
>
> __SetAppObject(MApp{})


From: Michael Haensch on
Hallo Marc,

I send the source per email to you. I'm hoping you find something I missed.

I need to open the subreports to set the datasource for each subreport.


Michael





Marc Verkade [Marti IT] schrieb:
> Hai Michael,
>
> I really want to take a look into this hence we also suffer now and then
> from 5333's with crystal (fortnately only when using crystal!). .Can you
> supply the AEF's so I can import then into a new project? That would safe me
> time and the I am really sure we use the same source...
> Thanx, Marc
>
> "Michael Haensch" <mh(a)fritsche-entsorgung.de> schreef in bericht
> news:eth4s0$v4b$1(a)murphy.mediascape.de...
>> Hi,
>>
>> I've a reproducible 5333 error in connection with Crystal Reports 8.5.
>> In my menu I call a function Test5333 which inits a class which opens a
>> report (with 9 subreports) and scan through the subreports.
>> The code itself is ok; it does what it should.
>>
>> When I call this function via menu it crashes on the 3.-5. call;
>> It doesn't crash when I use a local IApplication object instead of the
>> IApplication object from mApp.
>>
>> Do you have any idea, whats wrong with the code?
>>
>> Michael
>>
>> IApplication, IReport.. are OLEAutoObjects generated from a Crystal DLL.
>>
>> --------------------------------------------------------
>> METHOD Test5333 () CLASS winShell
>>
>> LOCAL o AS mReport5333_3
>>
>> o := mReport5333_3 {}
>> o:LogOn()
>> o:ShowTables ()
>>
>> RETURN SELF
>>
>> --------------------------------------------------------
>> CLASS mReport5333_3
>>
>> PROTECT _oApp AS mApp
>> PROTECT _oApplication AS IApplication
>> PROTECT _oReport AS IReport
>>
>> DECLARE METHOD LogOn
>> DECLARE METHOD ShowTables
>>
>>
>> METHOD LogOn () AS VOID PASCAL CLASS mReport5333_3
>>
>> LOCAL o AS IDataBase
>>
>> o := _oReport:DataBase
>> o:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8', 'crystal',
>> 'crystal')
>>
>> RETURN
>>
>> METHOD init () CLASS mReport5333_3
>>
>> _oApp := OBJECT(GetAppObject())
>> _oApplication := _oApp:CrystalApplication
>> // _oApplication := IApplication{}
>> _oReport :=
>> _oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
>> 1 )
>>
>> RETURN SELF
>>
>> METHOD ShowTables () AS VOID PASCAL CLASS mReport5333_3
>>
>> LOCAL nSection AS DWORD
>> LOCAL nReportObject aS DWORD
>>
>> LOCAL oSections AS ISections
>> LOCAL oSection AS ISection
>> LOCAL oReportObjects AS iReportObjects
>> LOCAL oReportObject AS iReportObject
>> LOCAL oSubreportObject AS ISubreportObject
>>
>> LOCAL cSubReportName AS STRING
>>
>> oSections := _oReport:Sections
>>
>> FOR nSection := 1 TO oSections:count
>> oSection := oSections[nSection]
>> oReportObjects := oSection:ReportObjects
>>
>> FOR nReportObject := 1 TO oReportObjects:count
>>
>> oReportObject := oReportObjects[nReportObject]
>>
>> IF oReportObject:kind = crSubreportObject
>>
>> // tricky: now oReportObject is used as oSubreportObject
>> oSubreportObject := ISubreportObject{oReportObject}
>>
>> oSubreportObject := oReportObjects:itemSub(nReportObject)
>> cSubReportName := oSubreportObject:SubreportName
>> _oReport:OpenSubreport(cSubReportName)
>>
>> ENDIF
>> NEXT nReportObject
>>
>> NEXT nSection
>>
>> RETURN
>>
>>
>> --------------------------------------------------------
>> CLASS mApp INHERIT App
>>
>> PROTECT _oCrystalApplication AS IApplication
>>
>> DECLARE ACCESS CrystalApplication
>>
>> ACCESS CrystalApplication () AS IApplication PASCAL CLASS mApp
>> RETURN _oCrystalApplication
>>
>> METHOD INit () CLASS mApp
>>
>> SUPER:INit ()
>>
>> _oCrystalApplication := IApplication{}
>>
>>
>> RETURN SELF
>>
>> --------------------------------------------------------
>> FUNCTION Start()
>>
>> __SetAppObject(MApp{})
>
>
From: Michael Haensch on
Hallo Marc,

I'm thinking the problem is the function OpenSubReport and not VO.

In VO I can produce a 5333 error with this simple function:
And it's not the report, a new report with 7 new subreports gives the
same error.

------------------------------------------------------
METHOD Test5333 () CLASS winShell

LOCAL _oApplication aS IApplication
LOCAL _oReport AS IReport
LOCAL oDataBase AS IDataBase
LOCAL i AS DWORD
LOCAL j AS DWORD

_oApplication := IApplication {}

FOR j := 1 TO 10
_oReport :=
_oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
1 ) // 1 statt NIL

oDataBase := _oReport:DataBase
oDataBase:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8',
'crystal', 'crystal')

FOR i := 1 TO 10
? i
// Bankkonten is a valid name for one subreport
_oReport:OpenSubreport('Bankkonten')
NEXT i

nEXT j


return

------------------------------------------------------

Now I made the work to write a VBS scripts and it breaks in the same way.

What do you think?
What's your way to change the datasources for reports with subreports?

Michael

--------------------------------------------------------
Option Explicit

dim c
dim oApp
dim oReport
dim oDatabase
dim x
dim i, j

set oApp = CreateObject("CrystalRuntime.Application.8.5")
WScript.Echo "Version " & hex(oApp.GetVersion)

for j = 1 to 10

set oReport = oApp.openreport
("k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt", 1 )
WScript.Echo "Report " & oReport.ApplicationName

set oDataBase = oReport.DataBase
x = oDataBase.LogOnServer ( "P2SODBC.DLL", "Fritsche", "fritsche8",
"crystal", "crystal" )

for i = 1 to 10
oReport.OpenSubreport ("Bankkonten")
next

WScript.Echo "fertig " & j

next


Marc Verkade [Marti IT] schrieb:
> Hai Michael,
>
> I really want to take a look into this hence we also suffer now and then
> from 5333's with crystal (fortnately only when using crystal!). .Can you
> supply the AEF's so I can import then into a new project? That would safe me
> time and the I am really sure we use the same source...
> Thanx, Marc
>
> "Michael Haensch" <mh(a)fritsche-entsorgung.de> schreef in bericht
> news:eth4s0$v4b$1(a)murphy.mediascape.de...
>> Hi,
>>
>> I've a reproducible 5333 error in connection with Crystal Reports 8.5.
>> In my menu I call a function Test5333 which inits a class which opens a
>> report (with 9 subreports) and scan through the subreports.
>> The code itself is ok; it does what it should.
>>
>> When I call this function via menu it crashes on the 3.-5. call;
>> It doesn't crash when I use a local IApplication object instead of the
>> IApplication object from mApp.
>>
>> Do you have any idea, whats wrong with the code?
>>
>> Michael
>>
>> IApplication, IReport.. are OLEAutoObjects generated from a Crystal DLL.
>>
>> --------------------------------------------------------
>> METHOD Test5333 () CLASS winShell
>>
>> LOCAL o AS mReport5333_3
>>
>> o := mReport5333_3 {}
>> o:LogOn()
>> o:ShowTables ()
>>
>> RETURN SELF
>>
>> --------------------------------------------------------
>> CLASS mReport5333_3
>>
>> PROTECT _oApp AS mApp
>> PROTECT _oApplication AS IApplication
>> PROTECT _oReport AS IReport
>>
>> DECLARE METHOD LogOn
>> DECLARE METHOD ShowTables
>>
>>
>> METHOD LogOn () AS VOID PASCAL CLASS mReport5333_3
>>
>> LOCAL o AS IDataBase
>>
>> o := _oReport:DataBase
>> o:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8', 'crystal',
>> 'crystal')
>>
>> RETURN
>>
>> METHOD init () CLASS mReport5333_3
>>
>> _oApp := OBJECT(GetAppObject())
>> _oApplication := _oApp:CrystalApplication
>> // _oApplication := IApplication{}
>> _oReport :=
>> _oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
>> 1 )
>>
>> RETURN SELF
>>
>> METHOD ShowTables () AS VOID PASCAL CLASS mReport5333_3
>>
>> LOCAL nSection AS DWORD
>> LOCAL nReportObject aS DWORD
>>
>> LOCAL oSections AS ISections
>> LOCAL oSection AS ISection
>> LOCAL oReportObjects AS iReportObjects
>> LOCAL oReportObject AS iReportObject
>> LOCAL oSubreportObject AS ISubreportObject
>>
>> LOCAL cSubReportName AS STRING
>>
>> oSections := _oReport:Sections
>>
>> FOR nSection := 1 TO oSections:count
>> oSection := oSections[nSection]
>> oReportObjects := oSection:ReportObjects
>>
>> FOR nReportObject := 1 TO oReportObjects:count
>>
>> oReportObject := oReportObjects[nReportObject]
>>
>> IF oReportObject:kind = crSubreportObject
>>
>> // tricky: now oReportObject is used as oSubreportObject
>> oSubreportObject := ISubreportObject{oReportObject}
>>
>> oSubreportObject := oReportObjects:itemSub(nReportObject)
>> cSubReportName := oSubreportObject:SubreportName
>> _oReport:OpenSubreport(cSubReportName)
>>
>> ENDIF
>> NEXT nReportObject
>>
>> NEXT nSection
>>
>> RETURN
>>
>>
>> --------------------------------------------------------
>> CLASS mApp INHERIT App
>>
>> PROTECT _oCrystalApplication AS IApplication
>>
>> DECLARE ACCESS CrystalApplication
>>
>> ACCESS CrystalApplication () AS IApplication PASCAL CLASS mApp
>> RETURN _oCrystalApplication
>>
>> METHOD INit () CLASS mApp
>>
>> SUPER:INit ()
>>
>> _oCrystalApplication := IApplication{}
>>
>>
>> RETURN SELF
>>
>> --------------------------------------------------------
>> FUNCTION Start()
>>
>> __SetAppObject(MApp{})
>
>
From: Marc Verkade [Marti IT] on
I am using the work of RalfK as a start and extended it to our needs.
We are using the PE funcions like

lRet := PESetNthTableLocation(nJob, siTable, strTableLocation)



"Michael Haensch" <mh(a)fritsche-entsorgung.de> schreef in bericht
news:etmnmi$r9u$1(a)murphy.mediascape.de...
> Hallo Marc,
>
> I'm thinking the problem is the function OpenSubReport and not VO.
>
> In VO I can produce a 5333 error with this simple function:
> And it's not the report, a new report with 7 new subreports gives the same
> error.
>
> ------------------------------------------------------
> METHOD Test5333 () CLASS winShell
>
> LOCAL _oApplication aS IApplication
> LOCAL _oReport AS IReport
> LOCAL oDataBase AS IDataBase
> LOCAL i AS DWORD
> LOCAL j AS DWORD
>
> _oApplication := IApplication {}
> FOR j := 1 TO 10
> _oReport :=
> _oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
> 1 ) // 1 statt NIL
>
> oDataBase := _oReport:DataBase
> oDataBase:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8',
> 'crystal', 'crystal')
>
> FOR i := 1 TO 10
> ? i
> // Bankkonten is a valid name for one subreport
> _oReport:OpenSubreport('Bankkonten')
> NEXT i
>
> nEXT j
>
>
> return
>
> ------------------------------------------------------
>
> Now I made the work to write a VBS scripts and it breaks in the same way.
>
> What do you think?
> What's your way to change the datasources for reports with subreports?
>
> Michael
>
> --------------------------------------------------------
> Option Explicit
>
> dim c
> dim oApp
> dim oReport
> dim oDatabase
> dim x
> dim i, j
>
> set oApp = CreateObject("CrystalRuntime.Application.8.5")
> WScript.Echo "Version " & hex(oApp.GetVersion)
>
> for j = 1 to 10
>
> set oReport = oApp.openreport
> ("k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt", 1 )
> WScript.Echo "Report " & oReport.ApplicationName
>
> set oDataBase = oReport.DataBase
> x = oDataBase.LogOnServer ( "P2SODBC.DLL", "Fritsche", "fritsche8",
> "crystal", "crystal" )
>
> for i = 1 to 10
> oReport.OpenSubreport ("Bankkonten")
> next
>
> WScript.Echo "fertig " & j
>
> next
>
>
> Marc Verkade [Marti IT] schrieb:
>> Hai Michael,
>>
>> I really want to take a look into this hence we also suffer now and then
>> from 5333's with crystal (fortnately only when using crystal!). .Can you
>> supply the AEF's so I can import then into a new project? That would safe
>> me time and the I am really sure we use the same source...
>> Thanx, Marc
>>
>> "Michael Haensch" <mh(a)fritsche-entsorgung.de> schreef in bericht
>> news:eth4s0$v4b$1(a)murphy.mediascape.de...
>>> Hi,
>>>
>>> I've a reproducible 5333 error in connection with Crystal Reports 8.5.
>>> In my menu I call a function Test5333 which inits a class which opens a
>>> report (with 9 subreports) and scan through the subreports.
>>> The code itself is ok; it does what it should.
>>>
>>> When I call this function via menu it crashes on the 3.-5. call;
>>> It doesn't crash when I use a local IApplication object instead of the
>>> IApplication object from mApp.
>>>
>>> Do you have any idea, whats wrong with the code?
>>>
>>> Michael
>>>
>>> IApplication, IReport.. are OLEAutoObjects generated from a Crystal DLL.
>>>
>>> --------------------------------------------------------
>>> METHOD Test5333 () CLASS winShell
>>>
>>> LOCAL o AS mReport5333_3
>>>
>>> o := mReport5333_3 {}
>>> o:LogOn()
>>> o:ShowTables ()
>>>
>>> RETURN SELF
>>>
>>> --------------------------------------------------------
>>> CLASS mReport5333_3
>>>
>>> PROTECT _oApp AS mApp
>>> PROTECT _oApplication AS IApplication
>>> PROTECT _oReport AS IReport
>>>
>>> DECLARE METHOD LogOn
>>> DECLARE METHOD ShowTables
>>>
>>>
>>> METHOD LogOn () AS VOID PASCAL CLASS mReport5333_3
>>>
>>> LOCAL o AS IDataBase
>>>
>>> o := _oReport:DataBase
>>> o:LogOnServer('P2SODBC.DLL', 'Fritsche', 'fritsche8', 'crystal',
>>> 'crystal')
>>>
>>> RETURN
>>>
>>> METHOD init () CLASS mReport5333_3
>>>
>>> _oApp := OBJECT(GetAppObject())
>>> _oApplication := _oApp:CrystalApplication
>>> // _oApplication := IApplication{}
>>> _oReport :=
>>> _oApplication:openreport('k:\cavo_app\fritsche\reports\crystal\MIFIBU\Monatscheck.rpt',
>>> 1 )
>>>
>>> RETURN SELF
>>>
>>> METHOD ShowTables () AS VOID PASCAL CLASS mReport5333_3
>>>
>>> LOCAL nSection AS DWORD
>>> LOCAL nReportObject aS DWORD
>>>
>>> LOCAL oSections AS ISections
>>> LOCAL oSection AS ISection
>>> LOCAL oReportObjects AS iReportObjects
>>> LOCAL oReportObject AS iReportObject
>>> LOCAL oSubreportObject AS ISubreportObject
>>>
>>> LOCAL cSubReportName AS STRING
>>>
>>> oSections := _oReport:Sections
>>>
>>> FOR nSection := 1 TO oSections:count
>>> oSection := oSections[nSection]
>>> oReportObjects := oSection:ReportObjects
>>>
>>> FOR nReportObject := 1 TO oReportObjects:count
>>>
>>> oReportObject := oReportObjects[nReportObject]
>>>
>>> IF oReportObject:kind = crSubreportObject
>>>
>>> // tricky: now oReportObject is used as oSubreportObject
>>> oSubreportObject := ISubreportObject{oReportObject}
>>>
>>> oSubreportObject := oReportObjects:itemSub(nReportObject)
>>> cSubReportName := oSubreportObject:SubreportName
>>> _oReport:OpenSubreport(cSubReportName)
>>>
>>> ENDIF
>>> NEXT nReportObject
>>>
>>> NEXT nSection
>>>
>>> RETURN
>>>
>>>
>>> --------------------------------------------------------
>>> CLASS mApp INHERIT App
>>>
>>> PROTECT _oCrystalApplication AS IApplication
>>>
>>> DECLARE ACCESS CrystalApplication
>>>
>>> ACCESS CrystalApplication () AS IApplication PASCAL CLASS mApp
>>> RETURN _oCrystalApplication
>>>
>>> METHOD INit () CLASS mApp
>>>
>>> SUPER:INit ()
>>>
>>> _oCrystalApplication := IApplication{}
>>>
>>>
>>> RETURN SELF
>>>
>>> --------------------------------------------------------
>>> FUNCTION Start()
>>>
>>> __SetAppObject(MApp{})
>>