0

特定のルールでフォルダーを作成する Alfresco Webservice を Java で作成したいと考えています。これまでは、Web サービスがフォルダーとルールを作成していました。問題は、Alfresco Share でルールを作成しようとしたときに、「すべての条件が満たされていなければ」と同じジョブを実行する actionCondition をルールに追加したいことです。

このドキュメントが HMTL でない限り、すべてのドキュメントを別のフォルダに移動したいと考えています。

があります

CompareMimeTypeEvaluator.class

しかし、それは「すべての基準が満たされている場合」を実行し、反対が必要です。

私がしたことは、この Comparator を作成したことです:

public class CompareMismatchEvaluator extends ActionConditionEvaluatorAbstractBase
{

private static Log logger = LogFactory.getLog(CompareMismatchEvaluator.class);

/**
 * Evaluator constants
 */
public static final String NAME = "compare-mime-type";
public static final String PARAM_PROPERTY = "property";
public static final String PARAM_VALUE = "value";

/**
 * 
 */
private static final String ERRID_NOT_A_CONTENT_TYPE = "compare_mime_type_evaluator.not_a_content_type";
private static final String ERRID_NO_PROPERTY_DEFINTION_FOUND = "compare_mime_type_evaluator.no_property_definition_found";

private NodeService nodeService; 

/**
 * @see org.alfresco.repo.action.evaluator.ActionConditionEvaluatorAbstractBase#evaluateImpl(org.alfresco.service.cmr.action.ActionCondition, org.alfresco.service.cmr.repository.NodeRef)
 */
@Override
public boolean evaluateImpl(ActionCondition actionCondition, NodeRef actionedUponNodeRef)
{
    QName propertyQName = (QName) actionCondition.getParameterValue(PARAM_PROPERTY);
    // Get the original value and the value to match
    Serializable propertyValue = nodeService.getProperty(actionedUponNodeRef, propertyQName);
    Serializable compareValue = actionCondition.getParameterValue(PARAM_VALUE);

    logger.debug("Comparing : " + propertyValue + " - - - " + compareValue);
    return !propertyValue.equals(compareValue);

}

/**
 * @see org.alfresco.repo.action.ParameterizedItemAbstractBase#addParameterDefinitions(java.util.List)
 */
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList) 
{
    paramList.add(new ParameterDefinitionImpl(PARAM_PROPERTY, DataTypeDefinition.QNAME, false, getParamDisplayLabel(PARAM_PROPERTY)));
    paramList.add(new ParameterDefinitionImpl(PARAM_VALUE, DataTypeDefinition.ANY, true, getParamDisplayLabel(PARAM_VALUE), false, "ac-mimetypes"));                
}

}

しかし、このコンパレーターはCompareMimeTypeEvaluator.classと同じ結果を 返します。それで、これを正しくする方法はありますか?

4

1 に答える 1

0

解決策を見つけました。独自の Comparator を作成する必要はありません。CompareMimeTypeEvaluator.class を使用して、actionConditionのブール値パラメーターを true に設定するだけです。

ActionCondition actionCondition = actionService
            .createActionCondition(CompareMimeTypeEvaluator.NAME);

    Map<String, Serializable> conditionParameters = new HashMap<String, Serializable>();
    conditionParameters.put(CompareMimeTypeEvaluator.PARAM_PROPERTY,
            ContentModel.PROP_CONTENT);
    conditionParameters.put(CompareMimeTypeEvaluator.PARAM_VALUE,
            MimetypeMap.MIMETYPE_HTML);
    actionCondition.setInvertCondition(true);
    actionCondition.setParameterValues(conditionParameters);
    compositeAction.addActionCondition(actionCondition);

変更されたのは、この行を追加したことです

 actionCondition.setInvertCondition(true);

これにより、このアイテムが HTML ドキュメントでない限り、すべてのアイテムに対してアクションが実行されます。

于 2014-04-25T09:35:55.683 に答える