使用運算式產生器,您可以建立運算式或條件,對資料字典或一般使用者提供的資料值執行運算。 通信管理使用運算式評估的結果來選取資產(例如文字、影像、清單和條件),並視需要將其插入通信中。
運算式產生器內部使用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.exval.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_關鍵字,會形成運算式內使用的前置詞。 例如,在服務屬性中具有帶注釋的方法bar()和服務ID foo的介面,可以使用REMOTE_foo:bar()在表達式中引用。
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