在本文中,我将讨论使用Netweaver Developer Studio(NWDS)开发、调试和测试PI函数库的基础知识。这包括在PI中创建函数、导出代码、将代码导入NWDS、创建测试类及实现支持类,并在本地执行和调试代码。
创建函数
创建新的函数库。
- 创建一个执行类型为“上下文的所有值”的函数。
- 创建签名变量。
导出源代码。
- 点击“Export Source Text”图标
将代码导入NWDS
-
File - New - Java Project
- 在项目文件夹中,右键点击 src - New - Package
- 包的名称应基于函数库的命名空间
将代码添加到创建的包中
- 将从函数库中提取的Java文件拖入你创建的包中
修复引用错误
-
将源文件拖入你的包之后,系统会提示缺少必要的库。
-
要添加所需的库,请按照以下步骤操作:右键点击项目根目录 Build Path - Libraries - XPI Libraries - XPI Mapping Libraries。
编写代码
-
现在,你可以开始在NWDS内部编写代码,并利用其所有特性(如代码补全、代码模板、自动格式化等),这些特性使得代码编写过程更加容易。
public void replaceBlankValue(String[] var1, String var2, ResultList result, Container container) throws StreamTransformationException{
//Function for replacing a blank value in var1 with another
//specified value in var2.
for (int i = 0; i < var1.length; i++) {
if (!var1[i].equals(ResultList.CC)) {
if(!var1[i].equals(ResultList.SUPPRESS)){
if(var1[i].equals("")){
result.addValue(var2);
}
else{
result.addValue(var1[i]);
}
}
else{
result.addSuppress();
}
}
else{
result.addContextChange();
}
}
}
测试函数
-
创建测试类
- Package - New - Class
- 选中“public static void main”选项
-
创建Container和ResultList的实现
- 由于函数的签名引用了ResultList和Container类,因此我们必须为这些类编写我们自己的实现。
- ResultList的实现:
package sap.myfunctions.co.za.samples; import com.sap.aii.mappingtool.tf7.rt.*; import java.util.ArrayList; public class ResultListImpl extends ArrayList implements ResultList{ public static final String SUPPRESS = "_sUpPresSeD_"; public static final String CC = "__cC_"; public static final String XSI_NIL = "_!xSi#NiL$_"; public static ArrayList al = new ArrayList(); public void addValue(Object obj){ al.add(obj); } public void addContextChange(){ al.add(CC); } public void addSuppress(){ al.add(SUPPRESS); } public String toString(){ return al.toString(); } public void clear(){ al.clear(); } }
- Container 实现:
package sap.myfunctions.co.za.samples; import com.sap.aii.mappingtool.tf7.rt.*; import com.sap.aii.mapping.api.*; import java.util.Map; public class ContainerImpl implements Container{ public Object getParameter(String s){ return new Object(); } public void setParameter(String s, Object obj){ } public AbstractTrace getTrace(){ return (AbstractTrace) new Object(); } public GlobalContainer getGlobalContainer(){ return (GlobalContainer) new Object(); } public InputHeader getInputHeader(){ return (InputHeader) new Object(); } public InputParameters getInputParameters(){ return (InputParameters) new Object(); } public OutputHeader getOutputHeader(){ return (OutputHeader) new Object(); } public OutputParameters getOutputParameters(){ return (OutputParameters) new Object(); } public Map getTransformationParameters(){ return (Map) new Object(); } }
-
为测试类编写代码
- 现在你可以引用ResultList和Container类,并编写代码来测试你的函数。
package sap.myfunctions.co.za.samples; import com.sap.aii.mappingtool.tf7.rt.Container; import com.sap.aii.mappingtool.tf7.rt.ResultList; public class Test_PI_Utils { public static void main(String[] args) { ResultList result = new ResultListImpl(); Container container = new ContainerImpl(); PI_Utils pi_utils = new PI_Utils(); String[] var1 = {"111",ResultList.CC,"222",ResultList.CC,"",ResultList.CC,"333"}; String var2 = "0"; try { pi_utils.replaceBlankValue(var1, var2, result, container); } catch (Exception e) { System.out.println(e.toString()); } System.out.println(result.toString()); } }
- 通过执行main方法来测试你的函数。
- Run - run as Java Applicaiton
- 我们可以看到方法的输出是正确的,因为它将空格转换成了"0"。
在PI上部署代码
-
将代码复制到函数库
- 如果测试成功,你可以将代码复制回PI中的函数库。最安全的做法是将 NWDS中的每个方法的代码逐一复制到函数库中的每个函数。
-
在PI中测试函数
- 现在我们可以在映射中测试这个函数了。
、