The following code indicates how to use the API directory. The method initialize() is used to position a certain number of parameters. In most of cases, this method will get the null value as argument, because inside the VDoc system every needed property is positioned.
public void general_useModule() { // creation of an object of directory module IDirectoryModule directoryModule = new PortalDirectoryModule(); try { // initialization of the module directoryModule.initialize( null ); } catch( Exception e ) { // if an error has occurred getNavigator().processErrors( e ); } finally { directoryModule.unInitialize(); } }
The context notion enables to run processing with a user account. Several cases are displayed. Their using depends on the execution context and the available objects.
public void general_getContext( IDirectoryModule directoryModule ) throws Exception { // 1st case : retrieving the context from a user object IUser user = directoryModule.getUserByLogin( "sysadmin" ); IContext userContext = directoryModule.getContext( user ); // 2nd case: retrieving the context from an external ID IContext externalIDContext = directoryModule.getContext( getNavigator().getLoggedOnUser().getExternId() ); // 3rd case : retrieving the context from a login IContext loginContext = directoryModule.getContextByLogin( "sysadmin" ); }
In numerous cases, we need to gather several processing in a same transaction. Each module has its own transactional mechanism.
The following example shows how to use this transactional mechanism from the directory module.
public void general_useTransaction( IContext context, IDirectoryModule directoryModule ) { try { // starting a transaction directoryModule.beginTransaction( this ); // doing something // ... // validating the transaction directoryModule.commitTransaction( this ); } catch( Exception e ) { // if an error has occurred, canceling the previous processing directoryModule.rollbackTransaction( this ); } }
The directory module offers a request system based on JDO. In the following example we use a search-type controller (SearchController) to request the database and retrieve IUser objects.
public void general_useSearch( IDirectoryModule directoryModule ) throws DirectoryModuleException { String filter = "login==pLogin && (status==1 || status==99 || status==-1 || status==2)"; ISearchController searchController = directoryModule.getSearchController(); Collection users = searchController.findElements( IUser.class, filter, "pLogin", new Object[] { "sysadmin" }, null ); for ( Iterator iteratorUser = users.iterator() ; iteratorUser.hasNext() ; ) { IUser user = (IUser)iteratorUser.next(); LOGGER.error( "User '" + user.getLogin() + "' found!" ); } }