使用表达式生成器,您可以创建表达式或条件,对数据字典或最终用户提供的数据值执行计算。 通信管理使用表达式评估的结果来选择资产,如文本、图像、列表和条件,并根据需要将其插入通信中。
表达式生成器在内部使用JSP EL库,因此表达式符合JSPEL语法。 有关详细信息,请参阅示例表达式。
可在表达式中使用的运算符位于表达式生成器的顶栏中。
下面是几个常用的JSP EL示例,您可以在通信管理解决方案中使用它们:
您可以在JSP EL规范中找到更多信息。 客户端表达式管理器不支持JSP EL规范中的某些变量和函数,具体而言:
对于在客户端评估的表达式,变量名称中不支持集合索引和映射键(使用[]符号)。
以下是表达式中使用的函数的参数类型或返回类型:
远程功能提供在表达式中使用自定义逻辑的功能。 您可以编写自定义逻辑以在表达式中作为Java中的方法使用,同样的函数也可以在表达式中使用。 可用的远程功能列在表达式编辑器左侧的“远程功能”选项卡下。
您可以创建自定义捆绑包,以导出您自己的远程功能并在表达式内使用。 要创建用于导出您自己的远程功能的自定义包,请执行以下任务。 它演示了如何编写自定义函数来使其输入字符串大写。
为OSGi服务定义一个接口,其中包含要导出以供表达式管理器使用的方法。
在接口A上声明方法,并使用@ServiceMethod注释(com.adobe.exm.expeval.ServiceMethod)对它们进行注释。 表达式管理器忽略任何未加注释的方法。 ServiceMethod注释具有以下可选属性,也可以指定这些属性:
package mergeandfuse.com;
import com.adobe.exm.expeval.ServiceMethod;
public interface RemoteFunction {
@ServiceMethod(enabled=true,displayName="Returns_all_caps",description="Function to convert to all CAPS", familyId="remote")
public String toAllCaps(String name);
}
也可以选择使用@ServiceMethodParameter注释(com.adobe.exm.expeval.ServiceMethodParameter)对方法的参数进行注释。 此注释仅用于指定在创作用户界面中使用的方法参数的可读名称和说明。 确保接口方法的参数和返回值属于以下类型之一:
定义接口的实现,将其配置为OSGI服务并定义以下服务属性:
@org.apache.felix.scr.annotations.Properties({
@org.apache.felix.scr.annotations.Property(name = "connectors.jsoninvoker", boolValue = true),
@org.apache.felix.scr.annotations.Property(name = "connectors.jsoninvoker.alias", value = "<service_id>"),
@org.apache.felix.scr.annotations.Property(name = "exm.service", boolValue = true)})
exm.service=true条目指示表达式管理器,该服务包含适合在表达式中使用的远程函数。 <service_id>值必须是有效的Java标识符(字母数字、$、_,没有其他特殊字符)。 此值前缀为REMOTE_关键字,构成在表达式中使用的前缀。 例如,在表达式中可以使用REMOTE_foo:bar()引用带有注释的方法bar()和服务属性中的服务ID foo的接口。
package mergeandfuse.com;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
@Component(metatype = true, immediate = true, label = "RemoteFunctionImpl")
@Service(value = RemoteFunction.class)
@org.apache.felix.scr.annotations.Properties({
@org.apache.felix.scr.annotations.Property(name = "connectors.jsoninvoker", boolValue = true),
@org.apache.felix.scr.annotations.Property(name = "connectors.jsoninvoker.alias", value = "test1"),
@org.apache.felix.scr.annotations.Property(name = "exm.service", boolValue = true)})
public class RemoteFuntionImpl implements RemoteFunction {
@Override
public String toAllCaps(String name) {
System.out.println("######Got######"+name);
return name.toUpperCase();
}
}
以下是要使用的示例存档:
GoodFunctions.jar.zip