套打常见问题集.docx
《套打常见问题集.docx》由会员分享,可在线阅读,更多相关《套打常见问题集.docx(13页珍藏版)》请在冰豆网上搜索。
套打常见问题集
套打常见问题集
套打大体原理:
数据+模板=打印结果
套打元数据:
模板设计时要求具有对相关数据源的描述,存在于模板所在的文件夹中。
它仅仅是在套打治理中概念了一些字段名称,供模板设计时绑定用,和BOS的Query没有必然的关系。
若是利用R1模板,许诺没有套打元数据,因为在模板设计器中能够直接引用BOS的Query来进行字段绑定。
例:
Query:
BOS中的Query对象是实体对象的查询视图,能够在数据访问进程中只获取视图中指定属性的数据,并依照过滤、排序条件进行数据的过滤和排序。
数据绑定
在套打设计器里,数据绑定也能够看做字段的绑定,通过将数据中的字段绑定到设计好的模板格式中,制作模板。
数据的取得能够分为多种。
见以下图:
通过引用,然后将数据的字段绑定到设计好的模板中。
数据提供者
DataProvider是在执行期(即实际打印预览或打印的进程)为模板提供真实数据。
套打控件只识别取数接口(此刻也提供查询Query的缺省实现DefaultNoteDataProvider,且推荐利用),具体的取数实现都是各业集务成时各自实现。
关于实现取数接口的、给套打执行时提供数据的类,称之为DataProvider——数据提供者。
套打控件的利用:
在实际利用套打控件的进程中,咱们需要做什么情形呢?
套打目前应用于EAS当中,挪用的地址一样情形下有两个:
一是单据的ListUI、二是单据的EditUI。
这两个界面会挂套打挪用按钮。
那么对应的就有两个方式,一样取名为actionPrint_actionPerformed、actionPrintPreview_actionPerformed
利用例如:
publicvoidactionPrintPreview_actionPerformed(ActionEvente)throwsException
{
KDNoteHelperhelper=newKDNoteHelper();
AbstractPrintDataProviderdataProvider=newAbstractPrintDataProvider();
//helper.print(templateType,dataProvider,owner)
helper.print("/FI/GL/Voucher",dataProvider,ctrl);
}
参数说明:
templateType
业务对应的路径,即套打管理中模板所在文件夹。
(注:
在框架中,由getTDFileName()方法指定。
)
dataProvider
数据提供者对象,
owner
父窗口或其上的一个控件,用以实现弹出窗口的模态。
AbstractPrintDataProvider是咱们的数据提供者。
此刻也提供查询Query的缺省实现DefaultNoteDataProvider,且推荐利用。
第二确实是将设计好的模板,放在套打治理中相应的挪用指定的位置:
/FI/GL/Voucher。
常见套打原理误用案例分析
打印进程中分页造成前页分录再次显现
答:
这种问题多由主[主+从]-从数据结构造成,是数据设计的不合理。
首选方式是拆分元数据。
以上是对套打的一个大体熟悉。
下面给出常见问题解决方式。
套打问题要紧分三个部份:
数据提供、模板治理、模板设计。
数据提供常见问题:
1.如安在已有的套打基础上增加字段?
答:
增加字段的情形分几种,这取决于套打取数实现。
A取数实现自己拼的rowset,那么需要在套打元数据增加字段,在rowset里边提供该字段的值。
B模板中引套打元数据,数据通过查Query实现,那么需要在套打元数据和查数据的Query两个地址都新增字段,字段名要相同,大小写识别。
若是取数代码有对查回来的字段进行加工,那么需要检查取数的实现,依照具体情形是不是需要再对拿回来的字段值进行包装。
C模板中直接引的Query,那么直接在Query里边新增字段就能够够了。
2.在Query中增加的新字段,在单据编辑页面(EditUI)打印,新字段能取到数据,在单据(ListUI)中新增字段取不到数据?
答:
那个地址要弄清楚,这两个界面所用的Query不必然确实是同一个。
因此要检查ListUI所用的Query究竟是哪个,然后增加字段。
3.新建的Query在套打设计器中引用的时候找不到?
答:
新建好Query后,需要发布。
发布成功以后更新子系统树,然后重启效劳端。
4.新增字段取不到数据?
答:
这种情形有可能是因为新增字段的Query不是实际的取数Query。
实际的取数Query是在代码里边指定的,能够进行检查。
能够通过在套打预览界面按F1查看数据提供者的类名。
到该数据提供者中查看实际取数的Query。
5.多表查询,Query在查询分析器中执行,查不出数据?
答:
有可能是进行了内连接致使数据为空。
或过滤条件不对等。
6.套打人员增加字段后,套打当选不到?
答:
第一弄清楚套打中引用的数据是自概念的套打元数据仍是直接引用的BOSQuery。
如是自概念,直接增加即可。
为了能取得实际数据,该套打实际查的Query中也要增加一样的字段;
如是引用BOSQuery,执行以下步骤:
进入模板(如工资条模板);
进数据向导;
在弹出窗口中“表”页先把已选表去掉再选上;
在“字段”页把所有字段去掉再选上;
确信。
7.同一张单据,标准的能够取到数据,自己新建的模板打印预览为空白?
答:
在取数实现里边,业务依托了数据源名称。
比如:
ds8等。
能够查看能取到数的模板里边,数据的名称。
然后将自己的新模板中数据名称改成一致。
8.需要依照模板返回信息,来确信应该查某个Query或其他业务逻辑?
答:
模板中配置的数据参数,能在取数实现的接口中获取得。
一个数据能够设置多个参数。
比如审批信息的打印:
有的只需要打印审批结果,没必要展现审批流程。
而有的需求要求展现审批流程。
现在就能够够依照模板里边给数据配置的一个参数,来讲明该模板需要打印的是哪个需求。
例如:
取数实现里能够依照isApprove来获取得相应的值true来操纵业务逻辑。
9.带审批信息的单据,审批信息或是主数据源信息只能出来一个?
答:
这是因为数据依托的结构不支持,很多单据以前只有一个数据源,而该数据源是带分录的。
此刻引了一个审批的从数据源,结构就变成了一个主-从-从(H-D-D)的结构。
建议将单据头尾的信息做成一个主数据源,分录和审批别离做成从数据源。
如此确实是一个一主两从(H2D)的结构。
10.KDF模板中循环区后的字段取不到值?
答:
KDF模板中在循环终止后可不能回取最后一条数据,因此一旦循环区把所有数据循环完毕,后面的字段只能为空。
能够通过提高取数字段的优先级解决问题,在对象属性通用选项卡中能够进行必要的设置,优先级数值越大越先取数。
模板治理常见问题
1.套打治理中新增的模板,在打印预览的时候看不到?
答:
每张单据在套打实现中都制定了该单据模板寄存途径,因此只需要将新建的模板移到制定的途径即可。
打印预览弹出的选择模板对话框左侧那个途径确实是单据制定的套打模板途径。
2.套打治理中目录丢失,怎么解决?
答:
第一在套打治理界面,从标准模板导入。
若是能看到丢失的目录,那么导入即可。
若是看不到丢失的目录,那证明效劳端标准模板的描述文件可能被补丁或人为破坏。
请知会咱们,咱们进行跟踪。
你的那个数据库应该是后来才新建的,因此能够找到好的环境,或效劳端,将正确的模板拷出来,一样在那个途径下:
\deploy\ctrlhome\server\storage\eas\kdnote\template。
然后手工导入。
3.在套打配置中设置了默许模板,可是登岸后发觉设置的默许模板不起作用?
答:
该设置只会保留在的本机中(即客户端),换一台电脑用同一账号登岸,设置是不起作用的。
4.如何对模板进行权限隔离?
答:
一个模板,创建以后若是没进行用户分派,那么所有人都能利用。
进行分派以后,只有分派的人材能利用。
模板设计的常见问题
注意:
建议此刻都用R1模板,KDF模板已经不保护。
R1模板中的网格已经支持绑字段和直接写文本,没必要再放字段或文本对象。
1.模板需要跨多页,可是设计区不够?
答:
在页面设置中,页那个设计区中取消那个选项,然后在高度中填入实际高度(一样是一张页高度的倍数)。
这种设计一样在最外面会套一个大网格,每一行占约一页高度。
那个地址要注意每一行的高度必然不能超过一页的高度,不然会报错。
2.网格里边嵌套数据表报错?
答:
那个地址有可能是因为网格的行设置了自适应,数据表设置纵向充满而且用了报表型。
那个地址就致使计算大小的时候不明白应该以谁为参照了。
3.预览显现空白页?
答:
显现这种现象可能是由于多种缘故引发。
第一应该判定是不是是取数实现的问题:
新建一个R1模板,放一个数据表,然后绑上两个字段,预览若是显现空白页,证明是数据没取到,检查套打实现是不是有问题。
也有可能是数据名称引发的,见数据提供第7问。
若是能取到数据,那就证明是模板的问题。
对模板的检查能够copy一份出来,然后一块一块的删掉,预览进行排除。
如此能够定位是某一块引发的再分析缘故。
4.打勾成效怎么实现?
答:
一样是一个字段值来判定是不是打钩,能够通过脚本实现。
若是前面需要一个选项框:
口
能够放一个文本然后设置边框达到成效。
脚本
if(getValue().toString()=="true")
setValue("√");
else
setValue("");
5.表头表尾每页显现?
答:
在数据表中,一般行和分组行属性中有每页显现,若是需要每张单据都显现表头或表尾,那么勾上即可。
6.两个字段相加,或给一个字段值剩以一个常数,怎么实现?
答:
若是是在数据表中,两个字段是同一个数据源中的,那么能够用运算实现。
具体步骤:
选择最终显示单元格对象属性类型选择运算表格运算新建编辑组合运算式多字段运算
剩以一个常数也同上面步骤相同。
若是不在数据表中或那么两个字段不是同一个数据源,那么需要用脚本实现。
setValue(getFieldValue("data1","字段1")+getFieldValue("data2","字段2"));
7.模板设计中脚本如何对数组进行操作?
答:
脚本中临时无法利用“[]”对脚本进行访问,能够通过java.util.Arrays.asList(T[]arr)方式把数组转换成List后执行需要的操作。
下面代码演示了如何访问数组中第四个元素:
intindex=3;
Listresult=Arrays.asList(getValue().split("_"));
setValue(result.get(index));
8.EAS集成模板套打设置分组后不生效
答:
分组应用于套打中,需要确保选择的打印方式是套打。
9.套打时页码错误,数据条数等于套打行数时显现误显示为(第n/n+x页)的情形。
答:
这种问题多有元数据处置有误造成,应该检查引入元数据是不是与套打行数匹配。
多数情形下元数据后跟的数字确实是套打设定的分页数,若是不符需要更正。
在这种情形下建议利用套打设计器提供的公式做一样的运算。
10.脚本中对日期的操作,算指定天后面假设干天的日期:
Calendartime=Calendar.getInstance();
Stringstr=getValue();
time.set(year(str),month(str)-1,day(str));
time.add(Calendar.DATE,10);
setValue(time.getTime());
11.打补丁后模板setHide脚本仍然无效的变相方式(不推荐)
答:
思路分两部份,第一行前置脚本中设置行高为零,脚本为setHeight(0);第二需要设置行中内容为空,能够在单元格中设置setValue(“”);此方式为不得已的变相方式,强烈建议先尝试打补丁和修改数据提供,如无法设施再考虑此方式。
打印机双面打印只能打上翻页
答:
确认打印机安装双面打印所需驱动和组件后,在打印机首选项里勾选双面打印和向上翻页后问题能够修复。
13.多次审批只打印最后一次
脚本原理:
在套打进程中咱们设置全局的List变量(此脚本为result)把脚本绑定在数据行上并非断检测该行的审批人是不是已经在List中显现,由于数据表会依照取得的数据逐条读取就达到了检测每一个审批人是不是已经显现,若是已经显现那么用当前数据替换掉原先维持的审批意见即只保留最后一次意见,不然将审批人意见添加入List。
最后通过取得List中特定位置的值达到目的。
注意事项:
模板中必需要有一个数据表跑出全数的数据,切要保证该数据表会在取数之前执行,不然显现异样NonePointException。
为达到此目的需要采取网格嵌套数据表的形式——在全页面绘制一个大网格,将原有内容绘制到网格的相应区域而且审批意见数据表应在取数之前,网格中嵌套审批意见数据表的行需要勾选高度自适应并用后置脚本setHide(true)来设置隐藏。
要紧脚本:
一般行(设置全局List变量):
set("result",newArrayList());
数据行(本行绑定关键脚本,“<>”内字体为注释,请不要随脚本一路粘贴):
Listresult=get("result");
<下面是取字段语句,请依照具体应用进行相应的修改,datasource是数据源名称,billId,,是数据源datasource中的字段名,更具体内容请参考脚本中getFieldValue说明。
那个地址咱们只取三个字段,若是取多个请自行添加。
>
Stringnum=getFieldValue("datasource","billId");
Stringperson=getFieldValue("datasource","A.1");
Stringcontent=getFieldValue("datasource","A.3");
inti=result.indexOf(num);
if(i>-1){<那个地址判定是不是已经保留过该审批人在List对象中,若是在那么用set()方式替换,若是多于三个字段请继续添加result.set(i+n,xxxx)>
result.set(i,num);
result.set(i+1,person);
result.set(i+2,content);
}else{
<若是不在那么添加到List,若是有多个字段请自行添加>
result.add(num);
result.add(person);
result.add(content);
}
set("result",result);
setHide(true);
取值单元格:
<此处内容填在需要取值的网格中,请通过网格指定固定行数,此处无法利用数据表>在上面脚本执行终止后实际存储数据结构如下:
[用户1|字段1.1|字段1.2|字段1.3|用户2|字段2.1|字段2.2|字段……]。
通过脚本:
Listresult=get("result");
if((result.size()-1)>=n)setValue(result.get(0));
能够取得结果集中第n+1个值,别离在网格每一个需要取数的单元格中设置对应字段。
下产品复制或升级点击套打造成打印中断,显现下述提示信息:
套打模板存储治理在初始化的时候,会在效劳端寻觅出厂模板发布目录deploy/ctrlhome/server/storage,(/eas/...),该目录不存在或资源描述文件(.meta,从storage开始每层都有)丢失,会显现如前附件所示异样,该异样的特点是:
(客户端第一次连接套打时的异样能够见到)
Causedby:
....NotFoundException:
Couldn'tfoundresource'/eas'
由于.meta文件名称的特殊性,在点之前没有字符(没有文件名,只有扩展名),在Linux、AIX系统偶然会显现拷贝时丢失(我不熟悉,缘故不明),造成看到的现象。
(大伟提供)Linux下点开头的文件名为隐藏,拷贝命令cpmv要带参数。
15.套打文字旋转
套打通过脚本能够实现文字旋转setProperty("style.rotation",n),n范围-90~90
16.套打录入数字下标
字体选择“Dialog”,能够拷贝下面字符利用:
1=₁,2=₂,3=₃,4=₄,5=₅,6=₆,7=₇,8=₈,9=₉
17.对字符串操作
charc;
Stringstr="32423.543.2AAAAA";
intindex=0;
c=str.charAt(index);
for(;c>='0'&&c<='9'||c=='.';)
{
index=index+1;
c=str.charAt(index);
}
setValue(str.substring(index));
套打控件错误
1.解析错误抛出java.util.NoSuchElementException:
null错误,致使系统功能瘫痪。
打印设置文件通过”:
”区分不同打印机,那个问题可能是打印机名称中含有“:
”造成的,更改打印机名称即可。
2.Windows7下弹出文件选择对话框时异样at
在windows7下挪用FileChooseDialog有问题,改换到后解决。
3.套打新建模板、修改模板、元数据时均报错(涉及写数据库)。
[(ATreeAction.java:
110)]新建ReportOne套打模板操作失败org.jdom.input.JDOMParseException:
Erroronline-1:
Prematureendoffile.
数据库中存在文件,若是文件损坏那么致使上述情形发生。