Package ManagerooRexxScripting EngineAdd PackageRony G. FlatscherHow can I add a (global) package programmatically?
For automatic installation of (global) packages one needs a
means to install packages.
Use the built-in package manager singleton and related classes.
/* initialize connection to server, get XContext */
xContext = UNO.connect() -- connect to server and retrieve the XContext object
XMcf = xContext~getServiceManager -- retrieve XMultiComponentFactory
packageName = "ScriptProviderForooRexx.jar"
mediaType = "application/vnd.sun.star.uno-component;type=Java"
tmpName = stream(packageName, 'C', "QUERY EXISTS") -- get fully qualified filename
if tmpName = "" then
do
.error~say("Cannot find" pp(packageName)", aborting...")
exit -1
end
urlName = ConvertToUrl(tmpName) -- turn into ucp compliant URL
-- get the pre-registered package manager factory singleton object
pmName="/singletons/com.sun.star.deployment.thePackageManagerFactory"
xpmf=xContext~getValueByName(pmName)~{%see com.sun.star.deployment.XPackageManagerFactory%XPackageManagerFactory}
-- make sure package is removed from "user" context
call removePackage xpmf~getPackageManager("user"), packageName
-- work on "shared" (global) package context
xpmShared=xpmf~getPackageManager("shared") -- get "shared" package manager
call removePackage xpmShared, packageName -- remove old package
xpmShared~addPackage(urlName, mediaType, .nil, .nil) -- add package
dp=getDeployedPackage(xpmShared, packageName) -- query package
if .nil<>dp then -- package object available?
say "Is ["packageName"] registered?" "["dp~isRegistered(.nil,.nil)~value~value"]"
else
say "["packageName"] could not be added!"
::requires UNO.CLS -- get UNO support for ooRexx
::routine removePackage -- remove a given package
use arg xpmf, packageName
signal on any -- activate execption handling
xpmf~removePackage(packageName, .nil, .nil)
any: return -- just return
::routine getDeployedPackage -- get and return the deployed package object
use arg xpm, packageName
signal on any -- activate exception handling
return xpm~getDeployedPackage(packageName, .nil)
any: return .nil -- exception occurred return .nil Initial versionVersion with embedded link to IDL docu.