发布清单
标识 | 主题 | 问题类型 | 报告人 | 需重新生成代码 | 需手工修改配置文件 | 项目归属 | 演示 |
GL-19669 | 【无码开发】自定义sql如果查询条件是多行文本,操作符是包含的,查询会自定义sql解析错误 | 改进 | 甘惠羡 | 云平台 | |||
GL-19670 | 有配置自定义SQL去外层条件:自定义sql如果有orderby,查询条件会加在order by 后面 | 改进 | 甘惠羡 | 云平台 | |||
GL-19685 | 【无码开发】同步数据服务支持主对象是自定义SQL,子对象是自定义SQL的场景 | 改进 | 林建文 | 云平台 | |||
GL-19686 | 【无码开发】同步数据服务支持子对象是自定义SQL的场景 | 改进 | 林建文 | 云平台 | |||
GL-19687 | 【无码开发】搜索帮助点同步数据服务改造为使用对比方式同步 | 改进 | 林建文 | 云平台 | |||
GL-19700 | 业务对象分组管理支持循环生成,有对象报错不会影响其他对象生成 | 改进 | 林建文 | 云平台 | |||
GL-19702 | 【云平台】平台Example查询通过前端传入的查询条件必须指定COLUMN_NAME,优化为只需要属性名称,字段名称后台自动转换 | 改进 | 林进旭 | 云平台 | |||
GL-19706 | 【云平台】HTML静态资源版本控制优化 | 改进 | 林进旭 | 物流-象屿综合物流管理平台项目 | |||
GL-19662 | 【云平台】多行文本精确匹配控件类型,用于查询条件使用 | 新功能 | 林建文 | 平台事业部-象道物流多式联运平台一期项目 | |||
GL-19664 | 象道多语言改造 | 新功能 | 张文波 | 云平台 | |||
GL-19666 | 页面类型如果是用户自定义页面,那么页面名称建议要做个校验,不能输入中文字符 | 校验 | 甘惠羡 | 云平台 | |||
GL-19680 | 新增编辑页有多个tab页,如果tab勾选页签懒加载、DIV延时加载异步渲染方式,tabs没有勾选主页面,生成代码会报错,报错的信息定位不够准确 | 校验 | 甘惠羡 | 云平台 |
升级文档
平台多语言支持
一、相关的配置项目
设置多语言消息表查询,使用的jdbcTemplateName用于系统扩展性, 可能需要把所有消息统一放在一个数据库时候使用
设置默认的语言 ;默认为 zh_CN,目前需要设置为 zh
不需要配置,默认为 locale
设置cookie 名称 locale
二、后台多语言消息使用
为了兼容老版本,平台上新增了视图级配置项【开启新后台I18n支持】,配置为【Y】。
//操作成功 消息 18nUtils.getMessage(LangConstants.OPERATOR_SUCCESS, LangConstants.OPERATOR_SUCCESS_MSG);
//自定义的消息编码 18nUtils.getMessage("pwdModifySucess", "密码修改成功!");
1、消息编码维护、消息模板
pwdModifySucess=密码修改成功!
usrNotFound=用户名{0}不存在!
在多语言消息文件中维护消息编码;或者在多语言消息表中维护是一样的格式的。
参考平台的多语言消息文件 i18n/ipf-common_en.properties
或者消息表 SYS_I18N_MESSAGE
2、I18nUtils.java 接口说明
参数 code : 消息编码
参数 args: 用于参数模板中替换的参数列表
参数 defaultMessage: 默认提示消息
三、项目类型升级说明
在参数配置文件中设置 glpaas.i18n.default.locale:zh
然后在 core-servlet.xml添加 LocaleResolver, 当然也可以考虑使用其他的
LocaleResolver 实现,目前平台这建议使用 CookieLocaleResolver
<!‐‐ 2020‐04‐24 linjx 多语言使用 CookieLocaleResolver‐‐>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="${i18n.default.locale:zh_CN}"></property>
<property name="cookieName" value="${i18n.cookie.name:locale}"></property>
</bean>
平台HTML前端资源版本优化
平台生成的HTML中,头部有些公用的css\js等,如果这些文件并未全部加入静态资源版本号,
导致了项目发布时候,如果这些文件有修改,客户端浏览器必须要清除缓存才能生效;
此次改造把所有的JS纳入到静态资源版本控制中, 并做了JS抽取,代码更加简洁。
需要更新前端文件 /static/app/main/writeScript.js
老版本HTML
多系统,appconfig.js 未在版本控制中
<script src="/static/app/appconfig.js"></script>
<script>
function getCookie(c_name) {
var c_start, c_end;
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=")
if (c_start != ‐1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == ‐1) c_end = document.cookie.length;
return decodeURIComponent(document.cookie.substring(c_start, c_end));
}
}
return ""
}
window.version = getCookie('gillion‐res‐version');
document.write(
'<link rel="stylesheet" href="/static/css/iconfont.css?v=' + window.version + '"/>' +
'<link rel="stylesheet" href="/static/css/controls.css?v=' + window.version + '"/>' +
'<link rel="stylesheet" href="/bower_components/bootstrap/css/bootstrap.min.css?v=' + window.version + '"/>' + '<link rel="stylesheet" href="/resource/css/main.css?v=' + window.version + '" />' +
'<link rel="stylesheet" href="/resource/css/custom.css?v=' + window.version + '" />' +
'<script ' + 'src="/bower_components/requirejs/require.js?v=' + window.version + '" ' +
'data‐main="/static/app.js"' +
'data‐bootstrap‐modules="[\'platform/implement/metadata/ipfCcmBoManage\']" '+ '>
<\/script>'
);
</script>
单系统,所有都在版本控制中,但是代码冗余
<script>
function getCookie(c_name) {
var c_start, c_end;
if (document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=")
if (c_start != ‐1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end == ‐1)
c_end = document.cookie.length;
return decodeURIComponent(document.cookie.substring(c_start, c_end));
}
}
return ""
}
window.version = getCookie('gillion‐res‐version');
document.write( '<link rel="stylesheet" href="/static/css/iconfont.css?v=' + window.version + '"/>' +
'<link rel="stylesheet" href="/static/css/controls.css?v=' + window.version + '"/>' +
'<link rel="stylesheet" href="/bower_components/bootstrap/css/bootstrap.min.css?v=' + window.version + '"/>' +
'<link rel="stylesheet" href="/resource/css/main.css?v=' + window.version + '" />' +
'<link rel="stylesheet" href="/resource/css/custom.css?v=' + window.version + '" />' +
'<script ' + 'src="/bower_components/requirejs/require.js?v=' + window.version + '" ' +
'data‐main="/static/app.js"' + 'data‐bootstrap‐modules="[\'platform/implement/metadata/ipfCcmBoManage\']" '+ '> <\/script>' );
</script>
优化以后
单系统
<script> document.write('<script id="write‐script" src="/static/app/main/writeScript.js? s=s&t=' + new Date() + '"><\/script>');</script> <script>
document.write(
'<script ' +
'src="/bower_components/requirejs/require.js?v=' + window.version + '" ' +
'data‐main="/static/app.js"' +
'data‐bootstrap‐modules="[\'platform/implement/metadata/ipfCcmBoManage\']" '+
'><\/script>'
);
</script>
多系统
<script>document.write('<script id="write‐script" src="/static/app/main/writeScript.js?t=' + new Date() + '"><\/script>');</script>
<script>
document.write(
'<script ' +
'src="/bower_components/requirejs/require.js?v=' + window.version + '" ' +
'data‐main="'+ ${systemCtx}.path + '/static/app.js"' +
'data‐bootstrap‐modules="[\'platform/implement/metadata/ipfCcmBoManage\']" '+
'><\/script>'
);
</script>
平台多行文本精确查询控件使用说明
平台新增一种控件类型 【多行精确查询】控件,这种控件为了提高业务作业上的全匹配查询的效率,采用的通过ES搜索引擎中进行全匹配查询,然后把查询到的列表 做为数据库精确查询的条件。
备注:
1、 可视化中配置控件类型 及控件的必须属性
<g‐exact‐matching
id="search.itemCode"
name="search.itemCode"
ng‐model="search.itemCode"
rows="3"
limit‐count="10"
query‐name="BAS_ITEM" >
</g‐exact‐matching>
2、配置
//在 controls 节点下,新增 exactMatching
controls : {
exactMatching: {
//全局的查询数据请求路径
queryUrl: '/ipf/testQuerySample/queryItemCods',
checkboxLabel: '精确匹配',
//最大返回数据笔数限制
limitCount: 100
}
}
3、后台查询请求实现,需要项目组自定义
目前例子是使用后台的数据库查询,最终项目组可以实现为 ES搜索引擎的查询方式。
<html>
<head></head>
<body>
/*** 查询例子分页信息查询 ** @param * @return */ @RequestMapping(value = "testQuerySample/queryItemCods") public void queryItemCods(@RequestBody MatchingVo matchingVo , HttpServletRequest request, HttpServletResponse response) { Map
<string, object="">
result = Maps.newHashMap(); //模糊查询关键字列表 List
<string>
itemCodes = matchingVo.getValues(); //模糊查询的目标数据源标识名称 String name = matchingVo.getName(); //查询返回的数据笔数限制 int limitCOunt = matchingVo.getLimitCount(); if(CollectionUtils.isNotEmpty(itemCodes)) { String strSql = "select ITEM_CODE from BAS_ITEM where ITEM_CODE like "; StringBuilder sql = new StringBuilder(); Map
<string,object>
params = Maps.newHashMap(); for(int i=0;i<=itemCodes.size()‐1;i++){ if(i>0){ sql.append(" union all "); }String itemCode = itemCodes.get(i); String varName = "itemCode"+i; sql.append(strSql).append(" :"+varName); params.put(varName, "%".concat(itemCode).concat("%")); }NamedParameterJdbcTemplate namedParameterJdbcTemplate = SpringContextHolder.getBean(NamedParameterJdbcTemplate.class); List
<string>
codes = namedParameterJdbcTemplate.queryForList(sql.toString(), params, String.class);result.put("records", codes); }ResponseUtils.flushSuccess(response, result); }
</string>
</string,object>
</string>
</string,>
</body>
</html>
4、需要在扩展JS中加入代码扩展查询
把原来的JS中的查询方法存储在临时的变量中,然后重写覆盖掉 queryTestQuerySample
参数 search.itemCode 是 配置了 多行文本精确查询的 控件上的 ID值。
var superQueryTestQuerySample = $scope.queryTestQuerySample;
$scope.queryTestQuerySample = function() {
return ExactMatchingService.doExactMatching(['search.itemCode']).then(function() {
return superQueryTestQuerySample();
});
};