Issue 113481

Summary: Cannot call Python macro from the command line using URI syntax
Product: General Reporter: shrib <shri.borde>
Component: scriptingAssignee: AOO issues mailing list <issues>
Status: RESOLVED FIXED QA Contact:
Severity: Trivial    
Priority: P3 CC: elish, eric.bachard, hanya.runo, issues, rutsky.vladimir
Version: OOO320m18Keywords: needhelp
Target Milestone: 4.2.0   
Hardware: All   
OS: All   
Issue Type: FEATURE Latest Confirmation in: ---
Developer Difficulty: ---
Attachments:
Description Flags
Patch to add fallback if the frame is not bound to the contrller
none
Document contains macro to verify none

Description shrib 2010-07-27 21:51:10 UTC
I have an Impress presentation file called mydoc.odp. It has a Python script
file called myscript.py with a function foo in it. I can run the foo function by
doing Tools | Run Macro. However, I am not able to figure out how to invoke the
macro from the command line. I am using Impress 3.2.1 on Ubuntu. These are the
command lines I tried: 

soffice mydoc.odp "macro://mydoc/myscript.foo"
soffice mydoc.odp "macro://mydoc.odp/myscript.foo"
soffice mydoc.odp "macro://mydoc/myscript.foo()"
soffice mydoc.odp
"vnd.sun.star.script:myscript.py$foo?language=Python&location=document"
soffice mydoc.odp
"vnd.sun.star.script:mydoc/myscript.py\$foo?language=Python&location=document"
soffice mydoc.odp
"vnd.sun.star.script:mydoc.myscript.foo?language=Python&location=document" 

I am able to launch a VB macro in the document using:

soffice mydoc.odp "macro://mydoc/Standard,Module1.Test"

The reply at http://www.oooforum.org/forum/viewtopic.phtml?t=103034 implied that
this is not supported.
Comment 1 ab 2010-07-28 07:07:27 UTC
Not supporting something is no DEFECT -> FEATURE
and this is no P2 by far (please read the rules) -> P3

ab->cd: This is more Office startup than scripting. Should
this be supported at all? Please have a look.
Comment 2 eric.bachard 2010-07-28 09:07:51 UTC
.
Comment 3 hanya 2013-12-05 15:18:13 UTC
vnd.sun.star.script protocol is handled by ScriptProtocolHandler in scripting/source/protocolhandler/scripthandler.cxx.
The script is executed through dispatchWithNotification method but 
XController from the document frame is not valied in getScriptInvocation method at this time.

As the side problem of this issue, when I start soffice with vnd.sun.star.script:...?location=document, 
the instance would not exit.
It seems this happens because of the dispatch watcher for calling dispatchWithNotification method of the protocol handler for the script.
When the protocol handler failed to access to the document's script, 
it returned without calling dispatchFinished method of the dispatch result listener.
When I called the method with css::frame::DispatchResultState::FAILURE status, 
the instance of the office finished normally.
Comment 4 hanya 2013-12-05 16:46:24 UTC
css::frame::XDispatch interface is queried to execute the script from the instance 
of the desktop, so its XFrame do not know the controller of the document.

Like SfxMacroLoader::GetObjectShell_Impl for "macro:" protocol, 
SfxFrame could be used to access to the document, it seems.
Comment 5 hanya 2014-01-28 13:18:55 UTC
Created attachment 82414 [details]
Patch to add fallback if the frame is not bound to the contrller

Find current frame from SfxFrame tree or use current document shell if 
the document frame is not bound to the controller yet.
And also, call dispatchFinished if document invocation is not found or 
the execution of the macro is interrupted because of the security settings.
Comment 6 hanya 2014-01-28 13:25:42 UTC
Created attachment 82415 [details]
Document contains macro to verify

The attached document contains BeanShell macro to verify, the body of the document is empty.
Execute the following command: 
> soffice DocWithBeanShellMacro.odt "vnd.sun.star.script:Library1.Macro1.bsh?language=BeanShell&location=document"
With "Medium" level of macro security: 
- "Enable Macros": "Hello World (in BeanShell)" is written by the macro.
- "Disable Macros": Empty document is shown.
Comment 7 SVN Robot 2014-05-17 10:21:02 UTC
"hanya" committed SVN revision 1595439 into trunk:
#i113481# query script invocation from the current frame when the controller ...
Comment 8 hanya 2014-05-19 12:55:41 UTC
Fixed on trunk.
Comment 9 hanya 2015-11-06 13:34:50 UTC
To confirm the fix, see Comment 6.