Hi Raymond, On Tue, May 07, 2013 at 04:25:57PM +0000, Steele, Raymond wrote: > Ariel, > > Thank you for the quick response. I have narrowed the continued > process down to a component. However, the behavior is strange because > I am not really opening the component in my code. My code opens > a document using XComponentLoader::loadComponentFromURL(). I set the > "Hidden" property to true so the user cannot see it. The document > that is open contains Dynamic Data Exchange (DDE) links to another > closed document. The code then uses XRefreshable interface to refresh > all the DDE links found in XIndexAccess. Lastly, I export the > document using the "ODF Spreadsheet" / "calc8" filter name using > XStore::storeToURL(). For some reason, this whole process opens > (hidden) the other document to which the document I am refreshing > contains DDE links to, even though I do not explicitly open it. > Strange.
It sounds logical that if you are refreshing the links, the application
opens documents that are linked; what sounds like a bug is that the
linked document isn't closed after the document containing the link is
closed. This might be worth a bug report.
> In my original query, I did not want to close documents that were not
> opened by my application. (i.e. the user opens it by clicking on the
> OpenOffice desktop icon). My solution to this point for this issue
> is: if XEnumeration does have more elements, I create an enumeration
> from XEnumerationAccess, loop through it, get the XComponent
> interface and XModel for each element, and XClose::close() the
> component if the XModel::getURL() matches a specific URL to the
> implicitly opened document. Lastly, if the enumeration does not have
> any more elements, I terminate the desktop. All of this prevents my
> application from inadvertently closing any documents that were not
> opened by my application.
>
> Do you have any insight to this behavior or recommendations?
May be you can asume that hidden documents were not opened by the user,
and close them:
if the enumeration has elements
if all remaining documents are hidden
close the all
You can know if a document was loaded with Hidden set to true in the
media descriptor by looping through css.frame.XModel.getArgs()
REM ***** BASIC *****
Option Explicit
Sub Main
Dim aArgs(0) as new com.sun.star.beans.PropertyValue
aArgs(0).Name = "Hidden"
aArgs(0).Value = TRUE
Dim oDoc as Object
oDoc = StarDesktop.loadComponentFromURL(_
"private:factory/swriter",_
"_default",_
com.sun.star.frame.FrameSearchFlag.ALL,_
aArgs)
Dim aLoadArgs()
aLoadArgs = oDoc.getArgs()
Dim aPropVal
Dim bHidden as Boolean
bHidden = FALSE
For Each aPropVal In aLoadArgs
If aPropVal.Name = "Hidden" Then
bHidden = aPropVal.Value
Exit For
End If
Next
If bHidden Then
oDoc.close(TRUE)
End If
End Sub
Regards
--
Ariel Constenla-Haile
La Plata, Argentina
pgplCMGGJhdKz.pgp
Description: PGP signature
