Bill,
As I told you, you don't have to use ds.prg. Create a session class. Create another session class based on the main session class. Add a method to this class like PrepareViewsForReport() and RunReport(tcReportName)
in your form do
loSession = newobject('MySpecialReportSessionClass','MySpecialReportSessionClass.prg')
loSession.PrepareViewsForReport()
loSession.RunReport('myReport')
release loSession
Put a break point before and see, if loSession indeed creates a new private DS.
The key here, that it's your class does the work for you, not the form.
>Hi Sebastian,
>I don't want the report to have a private datasession, becasue I need to manipulate the view it uses before the report is printed (one thing I need to do is to index the view before printing, I need different indexes for different reports from the same view, so I can't just order the view in the view designer).
>
>
ThisForm.oMyReportObject = CREATEOBJECT( "MyReportSessionClass" )
>This is what I'm trying to find out how to do. How do I create "MyReportSessionClass" and use it in a form?
>As fas as I can determine, I need to create a prg to hold the definition, and run a prg to create it:
>
>ds.prg
> Return CreateObject('private_ds')
> DEFINE CLASS private_ds as session
> ..... open view
> ENDDEFINE
>
>Form.Method()
> local lo
> lo = ds()
> ..... index view
> Report Form whatever
>
>but the new datasession doesn't release when lo goes out of scope.
>
>
>>Hi, Bill!
>>
>>Follow Garretts advice and use the reports "private datasession" setting!
>>
>>BTW: Some background infos about datasessions:
>>- Every object is unbreakable related to that datasession, which was the active datasession at the time of instantiation of the object!
>>That means all controls an a form are related to the forms datasession!
>>- To have a separate datasession for your report you have to associate a session object instead of aggregation:
ThisForm.oMyReportObject = CREATEOBJECT( "MyReportSessionClass" )
>>And all stuff you have coded in "MyReportSessionClass", e.g. the REPORT commend, runs in the separate private datasession!
If it's not broken, fix it until it is.
My Blog