【发布时间】:2019-03-25 11:07:24
【问题描述】:
我正在开发一个 java 库来管理 Crystal Report 中不同种类的条形码。 Crystal Report 为 Eclipse 提供了一个 sdk,在一个新项目中,有一个库来开发 ERP 和 CR 之间的集成。其中一个库管理条形码,但它是一个糟糕的库,因为我只能管理一种条形码。我找到了实现 UFL 的文档。该文档提供了一个简单的示例,感谢我编写了一些类来管理三种条形码,但是有一些带有两个参数的水晶报表功能,并且该示例没有说明如何正确实现。我试图开发新的类来管理这种函数,但我总是收到这条错误消息:“对函数的调用不对应于‘函数名’的任何重载”。
对于这个函数,我尝试只传递一个参数并且应用程序运行良好。我对方法进行了重载,传递了两个参数,但总是收到相同的错误消息。
这是我的代码的一部分
public final FormulaValue evaluate(FormulaValueReference[] arguments)
throws FormulaFunctionCallException
{
StringValue dataStringArg = (StringValue)arguments[0].getFormulaValue();
StringValue opzArg =(StringValue)arguments[1].getFormulaValue();
String dataString = dataStringArg.getString();
String opz=opzArg.getString();
String returnVal = doTranslation(dataString,opz);
return StringValue.fromString(returnVal);
}
protected abstract String translate(String inputData,String opz)
throws InvalidBarcodeDataException;
public class CodeEAN13
extends CodeEAN13Base
{
public String getIdentifier()
{
return "barcodeean13";
}
protected String translate(String inputData, String opz) throws InvalidBarcodeDataException {
Integer checkDigitSubtotal;
.....
}
我只是显示带有那种条形码的报告。 CodeEAN13 类应该运行一个算法来计算条形码字体的字符串。
这是程序运行时库中的代码并显示在堆栈跟踪中。对于 stracktrace 的每一行,我都放置了相应的代码。
//com.crystaldecisions.reports.formulas.FormulaService.compile(SourceFile:347)
public void compile(FormulaDefinitionBase paramFormulaDefinitionBase, FormulaContext paramFormulaContext)
throws FormulaException
{
if (paramFormulaDefinitionBase == null) {
throw new NullPointerException("A formula must be given.");
}
paramFormulaDefinitionBase.getFormulaInfo().a(paramFormulaContext);
}
//com.crystaldecisions.reports.formulas.FormulaInfo.a(SourceFile:570)
void a(FormulaContext paramFormulaContext)
throws FormulaException
{
if (this.jdField_try)
{
this.o = true;
throw new FormulaException("JRC00000433", "", FormulaResources.a(), "RecursiveCompileDetected", this);
}
this.o = false;
if (paramFormulaContext == null) {
throw new NullPointerException("A formula context must be given.");
}
try
{
this.jdField_try = true;
jdMethod_if(paramFormulaContext);
this.t = this.jdField_long.getFormulaValueType();
this.jdField_do.a();//(SourceFile:570)
}
catch (FormulaException localFormulaException)
{
if ((localFormulaException.getResourceKey().equals("RecursiveCompileDetected")) && (this.o)) {
throw new FormulaException("JRC00000434", "", FormulaResources.a(), "RecursionNotAllowed", null, localFormulaException);
}
throw localFormulaException;
}
finally
{
this.jdField_try = false;
jdMethod_if();
}
}
//com.crystaldecisions.reports.formulas.r.a(SourceFile:90)
public void a()
throws FormulaException
{
FormulaInfo localFormulaInfo = this.a.getFormulaInfo();
FormulaDefinitionBase localFormulaDefinitionBase = this.a.getFormula();
String str1 = "Formula";
String str2 = "";
if ((localFormulaDefinitionBase instanceof CustomFunctionDefinition))
{
str1 = "Custom function";
str2 = "'";
}
if (if.isDebugEnabled()) {
if.debug("Compiling " + StringUtil.toLowerCaseEng(str1) + " " + str2 + localFormulaDefinitionBase.getFormulaForm() + str2 + "...");
}
localFormulaInfo.invalidate();
try
{
ExpressionNode localExpressionNode = o.a(this.a).a();
localExpressionNode = this.jdField_do.jdMethod_void(localExpressionNode);//(SourceFile:90)
localExpressionNode = this.jdField_for.c(localExpressionNode);
localFormulaInfo.a(localExpressionNode);
localFormulaDefinitionBase.formulaInfoUpdated();
if (if.isInfoEnabled()) {
if.info(str1 + " " + str2 + localFormulaDefinitionBase.getFormulaForm() + str2 + " compiled.");
}
}
catch (FormulaException localFormulaException)
{
if (if.isInfoEnabled()) {
if.info(str1 + " " + str2 + localFormulaDefinitionBase.getFormulaForm() + str2 + " did not compile: " + localFormulaException);
}
localFormulaInfo.invalidate();
throw localFormulaException;
}
}
}
//com.crystaldecisions.reports.formulas.c.void(SourceFile:70)
public ExpressionNode jdMethod_void(ExpressionNode paramExpressionNode)
throws FormulaException
{
ExpressionNode localExpressionNode = paramExpressionNode;
this.jdField_int = 0;
this.jdField_for = 0;
FormulaDefinitionBase localFormulaDefinitionBase = this.a.getFormula();
FormulaInfo localFormulaInfo = this.a.getFormulaInfo();
localExpressionNode = jdMethod_do(localExpressionNode);//(SourceFile:70)
FormulaValueType localFormulaValueType = a(localFormulaDefinitionBase, localFormulaInfo, localExpressionNode);
if ((localExpressionNode != null) && (!localFormulaValueType.equals(localExpressionNode.getFormulaValueType())))
{
localExpressionNode = a(localExpressionNode, localFormulaValueType);
if ((!new) && (!localExpressionNode.getFormulaValueType().equals(localFormulaValueType))) {
throw new AssertionError("Coercion failed!!! This should never happen.");
}
}
localFormulaInfo.a(localFormulaValueType);
return localExpressionNode;
}
//com.crystaldecisions.reports.formulas.j.do(SourceFile:74)
final ExpressionNode jdMethod_do(ExpressionNode paramExpressionNode)
throws FormulaException
{
try
{
return a(paramExpressionNode);//(SourceFile:74)
}
catch (StackOverflowError localStackOverflowError)
{
throw new FormulaException("JRC00000461", "", FormulaResources.a(), "StackOverflow", this.a);
}
}
//com.crystaldecisions.reports.formulas.j.a(SourceFile:250)
ExpressionNode a(ExpressionNode paramExpressionNode)
throws FormulaException
{
if (paramExpressionNode == null) {
return null;
}
switch (paramExpressionNode.jdField_for.value())
{
......
case 30:
return jdMethod_for((MultiOperatorNode)paramExpressionNode);
//com.crystaldecisions.reports.formulas.c.for(SourceFile:1225)
ExpressionNode jdMethod_for(MultiOperatorNode paramMultiOperatorNode)
throws FormulaException
{
int i = paramMultiOperatorNode.size();
if (i == 0) {
return null;
}
for (int j = 0; j < i; j++)
{
ExpressionNode localExpressionNode = a(paramMultiOperatorNode.getOperand(j));//(SourceFile:1225)
if (localExpressionNode == null) {
return null;
}
paramMultiOperatorNode.setOperand(j, localExpressionNode);
}
paramMultiOperatorNode.jdField_try = paramMultiOperatorNode.getOperand(i - 1).jdField_try;
return paramMultiOperatorNode;
}
//com.crystaldecisions.reports.formulas.j.a(SourceFile:295)
case 8:
return a((FunctionNode)paramExpressionNode);
//com.crystaldecisions.reports.formulas.j.a(SourceFile:3148)
ExpressionNode a(FunctionNode paramFunctionNode)
throws FormulaException
{
int i = paramFunctionNode.size();
ExpressionNode[] arrayOfExpressionNode = ArrayPool.a(i, this.a);
try
{
for (int j = 0; j < i; j++)
{
ExpressionNode localExpressionNode2 = a(paramFunctionNode.get(j), arrayOfExpressionNode);
if (localExpressionNode2 == null) {
return null;
}
arrayOfExpressionNode[j] = localExpressionNode2;
}
return a(paramFunctionNode, arrayOfExpressionNode);//(SourceFile:3148)
}
finally
{
ArrayPool.a(arrayOfExpressionNode, this.a);
}
}
//com.crystaldecisions.reports.formulas.c.a(SourceFile:1809)
//com.crystaldecisions.reports.formulas.j.a(SourceFile:3507)
FormulaException a(String paramString1, String paramString2, String paramString3, String[] paramArrayOfString, ExpressionNode paramExpressionNode)
{
return a(paramString1, paramString2, paramString3, paramArrayOfString, null, paramExpressionNode);
}
//com.crystaldecisions.reports.formulas.j.a(SourceFile:3528)
FormulaException a(String paramString1, String paramString2, String paramString3, String[] paramArrayOfString, Throwable paramThrowable, ExpressionNode paramExpressionNode)
{
return new FormulaException(paramString1, paramString2,FormulaResources.a(), paramString3, paramArrayOfString, paramThrowable, this.a, paramExpressionNode);//(SourceFile:3528)
}
public FormulaException(String paramString1, String paramString2, CrystalResourcesFactory paramCrystalResourcesFactory, String paramString3, String[] paramArrayOfString, Throwable paramThrowable, FormulaEnvironment paramFormulaEnvironment, ExpressionNode paramExpressionNode)
{
super(paramString1, paramString2, paramCrystalResourcesFactory, paramString3, paramArrayOfString, paramThrowable);
a(paramFormulaEnvironment, paramExpressionNode);
}
【问题讨论】:
-
翻译的实现不应该有@Override注解吗?
-
我曾尝试使用 @Override 注释,但没有任何改变。
-
如果不急的话我稍后再看,如果可以的话,目前正在忙。
-
非常感谢您,当您可以从您的承诺。您的帮助将不胜感激,因为我不知道该怎么办了。
-
我看了看,您的代码似乎不完整。最好在这里发布尽可能多的内容,以便其他用户重现您的问题。如果您需要帮助,请查看stackoverflow.com/help,并在您更新完这些详细信息后告诉我。
标签: java crystal-reports