Knowage汉化Document不能保存中文字符问题修复


Knoage-6.x社区版(spagoBI升级版)在使用时发现Document不能保存中文字符。

TAG:Knowage汉化,SpagoBI汉化,Knowage中文版,Knowage中文乱码

场景现象

如果想报表名或描述保存为中文时会发生如下错误:

提示错误:

1
2
ERRORS:
The field Description must be an alphanumeric string (letters and numbers with other character such as parenthesis and -_;:!?,.\/)

只能输入字母数字及某些特殊字符的组合。
查询源代码:

1
2
3
9016 = The field %0 must be an alphanumeric string (letters and numbers with other character such as parenthesis and -_;:!?,./)​

ERROR_EXTENDED_ALFANUMERIC="9016";​

一、重置验证

页面代码:

knowage\src\main\webapp\WEB-INF\conf\analiticalmodel\documentBrowser.xml

验证规则:
knowage\src\main\webapp\WEB-INF\conf\analiticalmodel\validation.xml

重置验证:

1
2
3
4
5
6
7
8
9
<FIELD name="name" label="#SBIDev.docConf.docDet.nameField">
<VALIDATOR validatorName="MANDATORY"/>
<!-- <VALIDATOR validatorName="EXTENDED_ALFANUMERIC"/> ranying -->
<VALIDATOR validatorName="MAXLENGTH" arg0="200"/>
</FIELD>
<FIELD name="description" label="#SBIDev.docConf.docDet.descriptionField">
<!-- <VALIDATOR validatorName="EXTENDED_ALFANUMERIC"/> ranying -->
<VALIDATOR validatorName="MAXLENGTH" arg0="400"/>
</FIELD>

重置之后可以保存了但内容是乱码:

二、修复乱码

跟踪代码发现在验证之前就已经是乱码了,

请求链路:
1.it.eng.spago.dispatching.httpchannel.AdapterHTTP

  1. DetailBIObjectModule
    • Service
    • handleMultipartForm(request, requestContext);
    • modBIObject

问题就在handleMultipartForm方法,原因是使用common-fileupload解析字段内容但使用的默认编码格式,改为使用UTF-8格式读取字段内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void handleMultipartForm(HttpServletRequest request, RequestContextIFace requestContext)
throws Exception{
SourceBean serviceRequest = requestContext.getServiceRequest();

// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();

// This is done to make upload work in Unix solaris
//((DiskFileItemFactory)factory).setSizeThreshold(5242880);

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);

//upload.setFileSizeMax(5242880);
//upload.setSizeMax(5242880);


// Parse the request
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();

if (item.isFormField()) {
String name = item.getFieldName();
// Support all characters . by ranying
String value = item.getString("utf-8");
serviceRequest.setAttribute(name, value);
} else {
processFileField(item, requestContext);
}
}
}

修改之后可以正常保存中文名及描述了,Label建议保持只支持英文数字格式。


转载请注明出处:https://ranying666.github.io/2018/08/20/knowage-zh-doc/


使用过程中遇到任何问题欢迎留言或加入Knowage开源BI中国社区:QQ 158245788


文章作者: KavenRan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KavenRan !
 上一篇
NPM无法执行任何命令的解决方案(npm ERR! code MODULE_NOT_FOUND) NPM无法执行任何命令的解决方案(npm ERR! code MODULE_NOT_FOUND)
问题场景由于误操作,windows环境删除了minizlib模块,导致使用任何npm指令都报以下错误: 1234567E:\gitlabspace\dmax\front>npm inpm ERR! code MODULE_NOT_FO
2019-01-14
下一篇 
knowage:An error has occurred. Retry later. knowage:An error has occurred. Retry later.
SpagoBI/Knowage 登录首页后报错:12An error has occurred. Retry later.If the problems persists, contact the system administra
2018-06-22
  目录