【问题标题】:How to perform "Unless all criteria are met" Alfresco Rule in JAVA如何在 JAVA 中执行“除非满足所有条件”Alfresco Rule
【发布时间】:2014-04-25 08:29:24
【问题描述】:

我想在 Java 中创建一个 Alfresco Webservice,它创建一个具有特定规则的文件夹。到目前为止,Web 服务会创建文件夹和规则。问题是,当您尝试在 Alfresco Share 中创建规则时,我想向我的规则添加一个 actionCondition,它与“除非满足所有条件”执行相同的工作。

我想将所有文档移动到其他文件夹,除非该文档是 HMTL。

有一个

CompareMimeTypeEvaluator.class

但它执行“如果满足所有条件”,我想要相反。

我所做的是我创建了一个这个比较器:

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 相同。 那么知道如何解决这个问题吗?

【问题讨论】:

    标签: java action alfresco rule web-scripting


    【解决方案1】:

    我找到了解决方案。您不必创建自己的比较器,只需使用 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 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 2017-09-16
      • 2021-05-31
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多