create a new page, using OOoBasic/Generic/Extensions as a template.
Front page
Search
掲示板
Reload
Help
Browse Log
掲示板の使い方
OOo 掲示板3
OOo 掲示板2
OOo 掲示板
掲示板
雑談掲示板
New
List of pages
Recent changes
Backup
簡単ヘルプ
整形ルール
Start:
*拡張機能用 API [#c8ef8818]
拡張機能で利用する API
#contents
**XPackageManager [#u280c438]
パッケージのインストールやインストール済みのパッケージの...
以下のようにして "user" もしくは "shared" コンテキストを...
Function GetPackageManager( sContext As String )
oPMF = GetDefaultContext().getByName( _
"/singletons/com.sun.star.deployment.thePackageManag...
GetPackageManager = oPMF.getPackageManager(sContext)
End Function
Sub pm2
oPM = GetPackageManager("user")
oAC = oPM.createAbortChannel()
oPackages = oPM.getDeployedPackages(oAC,Null)
End Sub
3.3 からは上記のものが deprecated になったため次のサービ...
oEM = com.sun.star.deployment.ExtensionManager.get()
**パッケージディレクトリ [#h4a877d9]
拡張機能パッケージはたとえば user コンテキストの場合は Op...
このディレクトリ名がランダムに決定されるため、以前はパッ...
2.3 から新しい API として com.sun.star.deployment.Package...
***PackageInformationProvider [#r7749358]
この API を利用するには、パッケージの description.xml フ...
以下のような形で利用します。
Sub GetPackageLocation()
oPIP = GetDefaultContext().getByName( _
"/singletons/com.sun.star.deployment.PackageInformat...
Inputbox ,, oPIP.getPackageLocation("mytools.mri")
End Sub
結果 file:///C:/Users/huga/AppData/Roaming/OpenOffice.org...
cache/uno_packages/2A00.tmp_/MRI.oxt
Py-UNO で行う場合。
#code(python){{
def get_extension_dirurl(ctx,extid=EXTENSION_ID):
"""Get extension directory url from the extension id."""
pip_name = "/singletons/com.sun.star.deployment.PackageI...
if ctx.hasByName(pip_name):
pip = ctx.getByName(pip_name)
return pip.getPackageLocation(extid)
return ""
}}
BeanShell
import com.sun.star.container.XNameAccess;
import com.sun.star.deployment.XPackageInformationProvid...
// get PackageInformationProvider from ComponentContext
XNameAccess xNameAccess = (XNameAccess) UnoRuntime.query...
XNameAccess.class, xComponentContext );
Object oPIP = xNameAccess.getByName(
"/singletons/com.sun.star.deployment.PackageInforma...
XPackageInformationProvider xPIP = (XPackageInformationP...
XPackageInformationProvider.class, oPIP);
// get the url of the directory extension installed
String sPackageURL = xPIP.getPackageLocation( "mytools.m...
***2.2 以前との共有 [#g8537d54]
2.3 以降では前述の PackageInformationProvider が利用でき...
拡張機能 ID は 2.0.4 からサポートされているため、それを利...
コンテキストから PackageInformationProvider が見つかると ...
sPkgLocation = ""
sPkgId = "mytools.Honyonyo"
sPIPName = "/singletons/com.sun.star.deployment.Package...
sPMFName = "/singletons/com.sun.star.deployment.thePack...
If oContext.hasByName(sPIPName) Then ' 2.3
oPkgIP = oContext.getByName(sPIPName)
sPkgLocation = oPkgIP.getPackageLocation(sPkgId)
ElseIf oContext.hasByName(sPMFName) Then
oPkgMgr = oContext.getByName(sPMFName).getPackageMana...
oPackages = oPkgMgr.getDeployedPackages(oPkgMgr.creat...
For i = 0 To UBound(oPackages)
If oPackages(i).getIdentifier().Value = sPkgId Then
sPkgLocation = oPackages(i).getURL()
oExpander = oContext.getByName( _
"/singletons/com.sun.star.util.theMacroExpand...
sPkgLocation = Mid(oExpander.expandMacros(sPkgLoc...
End If
Next i
End If
thePackageManagerFactory から取得したパッケージから取得で...
** 拡張機能パッケージ内 URI [#r9ef96b1]
3.3 から拡張機能パッケージへのプロトコルが利用できます。...
URI の形式は次のようになります。利用には拡張機能 ID が必...
vnd.sun.star.extension://EXTENSION_ID/to_file
以下のものでは動作が確認できました。
- css.ucb.SimpleFileAccess
- css.graphic.GraphicProvider
- css.awt.DialogProvider
SimpleFileAccess が内部で該当する ucb のプロバイダを利用...
dp = CreateUnoService("com.sun.star.awt.DialogProvider")
dlg = dp.createDialog( _
"vnd.sun.star.extension://mytools.mri/dialogs/Confi...
dlg.execute()
** パッケージのインストール [#pd02ea22]
拡張機能パッケージを API 経由でインストールできます。しか...
#code(python){{
class ProgressHandler(unohelper.Base, XProgressHandle...
def push(self, status): pass
def update(self, status): pass
def pop(self): pass
class Interactionhalder(unohelper.Base, XInteractionH...
def __init__(self, act):
self.act = act
def handle(self, request):
message = request.getRequest()
if not isinstance(message, str):
message = message.Message
try:
n = self.act.query(message)
if n == 1:
type_name = "com.sun.star.task.XInter...
else:
type_name = "com.sun.star.task.XInter...
for continuation in request.getContinuati...
if continuation.queryInterface(uno.ge...
continuation.select()
except Exception as e:
print(e)
def query(self, message, buttons=2):
return show_message(self.ctx, self.pages[6].getPe...
message, "", "querybox", buttons)
class CommandEnv(unohelper.Base, XCommandEnvironment):
def __init__(self, act):
self.act = act
def getInteractionHandler(self):
return self.act.__class__.Interactionhalder(s...
def getProgressHandler(self):
return self.act.__class__.ProgressHandler()
def install(self, command_env):
if not self.file_exists(self.package_url):
raise Exception("Extension package lost.")
manager = self.ctx.getByName(
"/singletons/com.sun.star.deployment.Extensio...
ac = manager.createAbortChannel()
try:
package = manager.addExtension(
self.package_url,
(),
"user",
ac,
command_env
)
except Exception as e:
print(e)
return False
return True
}}
このコードではメッセージボックスでユーザーに選択させてい...
勝手にパッケージをインストールされると困るものもあるので...
End:
*拡張機能用 API [#c8ef8818]
拡張機能で利用する API
#contents
**XPackageManager [#u280c438]
パッケージのインストールやインストール済みのパッケージの...
以下のようにして "user" もしくは "shared" コンテキストを...
Function GetPackageManager( sContext As String )
oPMF = GetDefaultContext().getByName( _
"/singletons/com.sun.star.deployment.thePackageManag...
GetPackageManager = oPMF.getPackageManager(sContext)
End Function
Sub pm2
oPM = GetPackageManager("user")
oAC = oPM.createAbortChannel()
oPackages = oPM.getDeployedPackages(oAC,Null)
End Sub
3.3 からは上記のものが deprecated になったため次のサービ...
oEM = com.sun.star.deployment.ExtensionManager.get()
**パッケージディレクトリ [#h4a877d9]
拡張機能パッケージはたとえば user コンテキストの場合は Op...
このディレクトリ名がランダムに決定されるため、以前はパッ...
2.3 から新しい API として com.sun.star.deployment.Package...
***PackageInformationProvider [#r7749358]
この API を利用するには、パッケージの description.xml フ...
以下のような形で利用します。
Sub GetPackageLocation()
oPIP = GetDefaultContext().getByName( _
"/singletons/com.sun.star.deployment.PackageInformat...
Inputbox ,, oPIP.getPackageLocation("mytools.mri")
End Sub
結果 file:///C:/Users/huga/AppData/Roaming/OpenOffice.org...
cache/uno_packages/2A00.tmp_/MRI.oxt
Py-UNO で行う場合。
#code(python){{
def get_extension_dirurl(ctx,extid=EXTENSION_ID):
"""Get extension directory url from the extension id."""
pip_name = "/singletons/com.sun.star.deployment.PackageI...
if ctx.hasByName(pip_name):
pip = ctx.getByName(pip_name)
return pip.getPackageLocation(extid)
return ""
}}
BeanShell
import com.sun.star.container.XNameAccess;
import com.sun.star.deployment.XPackageInformationProvid...
// get PackageInformationProvider from ComponentContext
XNameAccess xNameAccess = (XNameAccess) UnoRuntime.query...
XNameAccess.class, xComponentContext );
Object oPIP = xNameAccess.getByName(
"/singletons/com.sun.star.deployment.PackageInforma...
XPackageInformationProvider xPIP = (XPackageInformationP...
XPackageInformationProvider.class, oPIP);
// get the url of the directory extension installed
String sPackageURL = xPIP.getPackageLocation( "mytools.m...
***2.2 以前との共有 [#g8537d54]
2.3 以降では前述の PackageInformationProvider が利用でき...
拡張機能 ID は 2.0.4 からサポートされているため、それを利...
コンテキストから PackageInformationProvider が見つかると ...
sPkgLocation = ""
sPkgId = "mytools.Honyonyo"
sPIPName = "/singletons/com.sun.star.deployment.Package...
sPMFName = "/singletons/com.sun.star.deployment.thePack...
If oContext.hasByName(sPIPName) Then ' 2.3
oPkgIP = oContext.getByName(sPIPName)
sPkgLocation = oPkgIP.getPackageLocation(sPkgId)
ElseIf oContext.hasByName(sPMFName) Then
oPkgMgr = oContext.getByName(sPMFName).getPackageMana...
oPackages = oPkgMgr.getDeployedPackages(oPkgMgr.creat...
For i = 0 To UBound(oPackages)
If oPackages(i).getIdentifier().Value = sPkgId Then
sPkgLocation = oPackages(i).getURL()
oExpander = oContext.getByName( _
"/singletons/com.sun.star.util.theMacroExpand...
sPkgLocation = Mid(oExpander.expandMacros(sPkgLoc...
End If
Next i
End If
thePackageManagerFactory から取得したパッケージから取得で...
** 拡張機能パッケージ内 URI [#r9ef96b1]
3.3 から拡張機能パッケージへのプロトコルが利用できます。...
URI の形式は次のようになります。利用には拡張機能 ID が必...
vnd.sun.star.extension://EXTENSION_ID/to_file
以下のものでは動作が確認できました。
- css.ucb.SimpleFileAccess
- css.graphic.GraphicProvider
- css.awt.DialogProvider
SimpleFileAccess が内部で該当する ucb のプロバイダを利用...
dp = CreateUnoService("com.sun.star.awt.DialogProvider")
dlg = dp.createDialog( _
"vnd.sun.star.extension://mytools.mri/dialogs/Confi...
dlg.execute()
** パッケージのインストール [#pd02ea22]
拡張機能パッケージを API 経由でインストールできます。しか...
#code(python){{
class ProgressHandler(unohelper.Base, XProgressHandle...
def push(self, status): pass
def update(self, status): pass
def pop(self): pass
class Interactionhalder(unohelper.Base, XInteractionH...
def __init__(self, act):
self.act = act
def handle(self, request):
message = request.getRequest()
if not isinstance(message, str):
message = message.Message
try:
n = self.act.query(message)
if n == 1:
type_name = "com.sun.star.task.XInter...
else:
type_name = "com.sun.star.task.XInter...
for continuation in request.getContinuati...
if continuation.queryInterface(uno.ge...
continuation.select()
except Exception as e:
print(e)
def query(self, message, buttons=2):
return show_message(self.ctx, self.pages[6].getPe...
message, "", "querybox", buttons)
class CommandEnv(unohelper.Base, XCommandEnvironment):
def __init__(self, act):
self.act = act
def getInteractionHandler(self):
return self.act.__class__.Interactionhalder(s...
def getProgressHandler(self):
return self.act.__class__.ProgressHandler()
def install(self, command_env):
if not self.file_exists(self.package_url):
raise Exception("Extension package lost.")
manager = self.ctx.getByName(
"/singletons/com.sun.star.deployment.Extensio...
ac = manager.createAbortChannel()
try:
package = manager.addExtension(
self.package_url,
(),
"user",
ac,
command_env
)
except Exception as e:
print(e)
return False
return True
}}
このコードではメッセージボックスでユーザーに選択させてい...
勝手にパッケージをインストールされると困るものもあるので...
Page: