NC添加自定义显示公式的方法步骤大致是:
1.编写显示公式JAVA类,该类继承 import nc.vo.pub.formulaset.function.NcInnerFunction;例如:public class UserSign extends NcInnerFunction
2.编写配置文件,文件的路径放在与modules同级目录的resources\formulaconfig\custfunction目录下,文件编写要按照一定的格式,例:hzdev.xml
<?xml version="1.0" encoding="gb2312"?>
<formula-array>
<formula>
<customType>9</customType>
<functionName>isUserSign</functionName>
<functionClass>hz.vo.user.formula.UserSign</functionClass>
</formula>
</formula-array>
编写JAVA类逻辑处理代码,部署本地服务器,重启,单据模板配置显示公式。
代码例子如下:
package hz.vo.user.formula;
import java.util.List;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.itf.uap.busibean.IFileManager;
import nc.vo.jcom.lang.StringUtil;
import nc.vo.pub.BusinessException;
import nc.vo.pub.formulaset.core.ParseException;
import nc.vo.pub.formulaset.function.NcInnerFunction;
import nc.vo.uap.busibean.exception.BusiBeanException;
import nc.vo.uap.rbac.UserSignIcon;
/**
* 查看用户是否已经上传签名显示公式
* isUserSign(user_code):传入用户编码,返回用户是否已经上传签名图片信息,已经上传返回\"是\",否则返回\"否\"
* @author xms
*
*/
public class UserSign extends NcInnerFunction {
private String sDir = "/user_signicon/";
private IFileManager fileManager;
public UserSign() {
this.numberOfParameters = 1;
this.functionType = 9;
}
@Override
public Object function(List param) throws ParseException {
Logger.debug("hz.vo.user.formula.UserSign");
Logger.debug("调用公式isUserSign(user_code),传入用户编码,返回用户是否已经上传签名图片信息");
if ((param == null) || (param.size() < 1)) {
return "否";
}
String user_code = (String) param.get(0);
UserSignIcon sign_icon = new UserSignIcon();
String sFilename = null;
try {
sFilename = getFilename(user_code);
} catch (BusinessException e) {
return "否";
}
if (StringUtil.isEmptyWithTrim(sFilename)) {
return "否";
}
String sPre = user_code + "_";
sign_icon.setIcon_name(sFilename.substring(sPre.length()));
try {
sign_icon.setIcon(getFileManager().readFile(this.sDir + sFilename));
} catch (BusiBeanException e) {
e.printStackTrace();
}
if (sign_icon.getIcon() == null || "".equals(sign_icon.getIcon())) {
return "否";
}
return "是";
}
@Override
public String getFunctionDesc() {
return "isUserSign(user_code):传入用户编码,返回用户是否已经上传签名图片信息,已经上传返回\"是\",否则返回\"否\"";
}
private String getFilename(String usercode) throws BusinessException {
String[] sAllFile = getFileManager().getAllFile(this.sDir, 0);
String sPre = usercode + "_";
int i = 0;
for (int iLen = sAllFile == null ? 0 : sAllFile.length; i < iLen; i++) {
if (sAllFile[i].startsWith(sPre)) {
return sAllFile[i];
}
}
return null;
}
public IFileManager getFileManager() {
if (this.fileManager == null) {
this.fileManager = ((IFileManager) NCLocator.getInstance().lookup(
IFileManager.class.getName()));
}
return this.fileManager;
}
}