Create new trigger code

You can add your own triggers to the list of preconfigured triggers, which you can then enable.

Note: You can create triggers for all actions except the localization operations.

The code for custom triggers is loaded through configuration; the IXIASOFT CCMS installation is not modified. At any time, you can return to the standard CCMS behavior by returning to the original configuration.

Note: You should make these configuration changes in the Test environment and test them before copying them to the Production environment. In a dedicated SaaS deployment, after testing the changes, ask IXIASOFT Customer Support to copy the changes to the Production environment.
  1. Create a Java class with the trigger code.
    For example, the following code shows a class (AddPrepublishFlagTrigger.java) that adds a flag to content objects that are nearing Published:done status.
    package com.ixiasoft.cms.triggers;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    import org.apache.log4j.Logger;
    
    import com.ixiasoft.cms.actions.ActionCmsDataObject;
    import com.ixiasoft.cms.cdo.CdoCache;
    import com.ixiasoft.cms.cdo.CmsDataObject;
    import com.ixiasoft.cms.util.DitaReferenceResolver;
    
    public class AddPrepublishFlagTrigger extends StatusTrigger {
    	private static Logger logger = Logger.getLogger(AddPrepublishFlagTrigger.class);
    	public AddPrepublishFlagTrigger(String name, int objType, int schedule, String applyto) {
    		super(name, objType, schedule, applyto);
    	}
    
    	@Override
    	public void statusExecute(ActionCmsDataObject acdo) {
    		
    		logger.debug("Adding Prepublish Flag on MAP " + acdo.getCdo().getTitleAndId() );
    		CmsDataObject map = acdo.getCdo();
    		
    		Collection<CmsDataObject> childrenContentDependencies = DitaReferenceResolver.getChildrenContentDependencies( map, null );
    		Set<String> children = new HashSet<String>();
    		for (CmsDataObject cdo : childrenContentDependencies){
    			children.add(cdo.getFullPath());
    		}
    		//Add current map, so it gets the props.
    		children.add( map.getFullPath() );
    		
    		CdoCache.lockDocuments( new ArrayList<String>( children ) );
    		List<CmsDataObject> documents = new ArrayList<CmsDataObject>( children.size() );
    		for( String reference : children ) {
    			CmsDataObject childcdo = CdoCache.getCmsDataObject( reference );
    			childcdo.addUserProperty( CmsDataObject.PREPUBLISH, map.getFullPath() );
    			documents.add( childcdo );
    		}
    		
    		CdoCache.setDocuments(documents, true );
    		CdoCache.unlockDocuments( documents );
    		
    	}
    }
  2. Create a Java archive (.jar) that includes the new class for the trigger.
  3. In the TEXTML Administration perspective, connect to your server.
  4. Expand the Content Store's Repository node and browse to /system/ext.
  5. Import the .jar file to this directory.
  6. Locate the dita.cms.extensions.xml file in the repository's /system/ext collection.
    Note: If the file is called dita.cms.extensions.xml.orig, rename it to dita.cms.extensions.xml.
  7. Check out the file and open it for editing.
  8. Locate the <libraries> element.
    This element specifies the classes that are added to the standard set of classes. You need to add your trigger classes to this element to make your triggers available.
  9. Add a new <library> element, as follows:
    <library id="library_id">
    	<classpath>
    		<jar>trigger_jar_file_name</jar>
    	</classpath>
    	<classes>
    		<class>trigger_class_name(s)</class>
    	</classes>
    </library>
    OptionDescription
    library_id ID that identifies the library (for logging purposes).
    trigger_jar_file_name Name of the .jar file that contains the trigger classes.
    trigger_class_name Name of the trigger class inside the .jar file. If the .jar file contains more than one trigger classes, enter a <class> element for each trigger class.
    For example:
    <libraries>
    	<!-- every library will become its own classloader -->
    	<library id="com.ixiasoft.service.extensions.new.triggers">
    		<classpath>
    			<jar>com.ixiasoft.service.extensions.new.triggers.jar</jar>
    		</classpath>
    		<!-- list of public classes that dynamic classloading can use -->
    		<classes>
    			<class>com.ixiasoft.service.extensions.new.triggers.MapRelease</class>
    			<class>com.ixiasoft.service.extensions.new.triggers.TopicRelease</class>
    		</classes>
    	</library>
    </libraries>
  10. Inform users of the changes and request that they close and reopen their CCMS Desktop to apply the changes.
  11. Enable the new trigger (see links at the end of this topic for the procedure).