hap项目功能总结,以及技术注意点
时间:2023-03-06 07:00:00
非常重要的是要注意,一旦项目中出现问题,就属于事故
1.物料批 mt_material_lot 和 mt_eo表,这两张表的查询一定不能用全表查询,sql一定要走层面 条件查询,同样java层面一定要 传参过去,传参时,一定要 先判空先
2.hap建索引命名规范
唯一索引:table_U1,2,3…(索引名都是大写)
普通索引:table_N1,2,3…
主键索引:table_PK
3.oracle的中的 处理串类型 有三种
varchar
clob(hap用的多 文本) 对应java类型 String
blob(二进制 图片) 对应java类型 byte[]
注意:
1.直接查询 对 clob类型不需要任何处理,映射到java类型 就是 String
如果是这样的话 PL/SQL看效果,然后直接查询,字段框只显示一个 clob(因为太长,PL/SQL 默认不显示)
解决办法:
1.select to_char(clob) 这样在 可以看到字段框 字符串了
2.在 PL/SQL 点击弹框 弹出 字符串的内容
4.包名用_隔开,多为 核心表命名(前提是有核心表)
5.在开发过程中,大多数模块都涉及到一个核心表。 更新插入时,操作哪个表或看文档功能总结,就知道其他都是关联表。
6.少数业务没有核心表,存储开发api ,那就是见名知意,用_隔开
7.方法命名,查询使用 get 查询对象:getUserById() ,查询集合:UserList()
8.文档中的 api名不要改
9.list,字符串 拼接、截取也很常见,
10.对象转list 数组转list 都是用 Arrays.asList();
11.去重的几种方法
12.oracle建表规范,建表,建表seq,不建触发器,插入 mt_sys_sequence表 seq字段和初始值
13.导入导出的自定义和导入字段的校准在哪里?
标准导入导出按钮标签(没有自定义)
导入
<span class="btn btn-primary k-grid-excel" style="float:left;" onclick='Hap.importExcel("")' > <i class="fa fa-arrow-circle-up" style="margin-right:3px;"> i><@spring.message "excel.import"/>
导出
<span class="btn btn-primary k-grid-excel" style="float:left;margin-right:5px;" data-bind="click:exportExcel"><i class="fa fa-file-excel-o" style="margin-right:3px;">i>导出span>
14.lov查询除了查id , code , 如果要带出name,还得查 name (lov不能查 date类型的,时间用 时间选择器组件input框)
15.注意,VO和resultmap一定要继承,不然数据没有值,你在也不知道
16.kendoUi前端使用的几个注意点
1.grid不可编辑:
{
field: "name",
title: '姓名',
width: 120,
headerAttributes: {style: "text-align:center"},
attributes: {style: "text-align:center"},
editor: function(container,options){
container.html(options.model.name);
container.removeClass('k-edit-cell');
}
},
2.form不可编辑? 不会
3.必输校验 ?不会
4.选定lov 后带出 name框的值(就是将lov查出的 name 也赋值给 viewModel ,这样 lov框选中值后,name也赋上值了,判断的name框的值也就达到了自动带出的效果了)
{
field: "employeeId",
title: '用户名',
width: 120,
headerAttributes: {style: "text-align:center"},
attributes: {style: "text-align:center"},
template: function (dataItem) {
return dataItem['employeeCode'] || ''; /* 数据列默认显示值 */
},
editor: function (container, options) {
$('<input required name="' + options.field + '" />').appendTo(container)
.kendoLov($.extend( <@lov"EMPLOYEE_LOV"/>, {
select: function (e) {
// 将选择后的属性更新到数据模型中以保存
options.model.set('employeeId', e.item.employeeId);
//重要的就是这个,带出name值,就是给name赋值
options.model.set('name',e.item.name);
},
//TODO 之前的toolCategoryCode
textField: 'employeeCode', /* 编辑器显示的值 */
model: options.model
}));
}
5.下拉框默认值(optionLabel: “是”)
editor: function (container, options) {
$('<input required name="' + options.field + '"/>')
.appendTo(container)
.kendoDropDownList({
dataTextField: "meaning", //显示的文本
dataValueField: "value", //实际的值
optionLabel: "是",//默认选项值
dataSource: YES_NO,
valuePrimitive: true
});
}
16.唯一性校验,一般在后台校验,比较麻烦
17.描述维护,就是 消息维护,{0}代表第一个参数
18.前端页面只要有不会的,可以考虑 借鉴其他页面的源码来修改,而不是直接百度 kendoui ,或者 hap
19.表里面的 cid 用的多,代表时间戳或者序号,和 主键一样,要创建 sequence,插入的时候,insert(主键 , cid) vaules(seq_s.nextvalue , seq_cid_s.nextvalue)创建的代码已经创建好了的
20.grid 和 他的 viewModel是 跟 接口打交道的 根本,而不是前面 表单,前面的所****有div ,都得绑定好
<script>kendo.bind($('#div 的 id'), viewModel);script>
这样保证,这些div 的script事件是,将 数据 绑定到 对应 grid的 viewModel
同样这些 div里面的 lov 下拉框,也要有对应的 script,这些script就是,首先调用对应的下拉框 或 lov 然后,将框里面的值,赋值给 viewModel 例如
<script> $("#siteId").kendoLov($.extend(${
lovProvider.getLov(base.contextPath, base.locale, "LOV_SITE")}, {
select: function (e) {
viewModel.model.set("siteId", e.item.siteId); } })); script>
21.
<script type="text/javascript"> var viewModel = Hap.createGridViewModel("#grid"); var viewModelLine = Hap.createGridViewModel("#gridLine") script>
这个代表的是,grid里面的 viewModel也就是数据模型,这是 grid的根本,viewModel 不是说对应的 实体类的json或者 说 colums的json,他在创建的时候,就是一个 map 里面的 key value都是为null的,
var viewModel = Hap.createGridViewModel(“#grid”);
这句最先执行
然后在,访问接口之前,你可以给 viewModel赋值,后,最先访问 read接口,这时在parameterMap中,对viewModel初始化了一下
你可以随便put 键值对,但是,一般
parameterMap: function (options, type) {
if (type !== "read" && options.models) {
var datas = Hap.prepareSubmitParameter(options, type)
return kendo.stringify(datas);
} else if (type === "read") {
return Hap.prepareQueryParameter(viewModel.model.toJSON(), options)
}
}
这是 viewModel的初始化,代码,这话的意思其实很简单,就是 调用查询方法,将查询出来的 JSON 赋值给 viewModel,所以说,viewModel的初始 key 是和 查询出来的,json相对应的
至于,comlun字段 和 viewModel是有关系的,在不做特定改变的情况下(例如下拉框,lov等),默认 filed和 viewModel的 key相同的 就取 对应的 value值
总之,viewModel是 数据模型,是整个 grid取值的依据的命脉,也是 于接口打交道,给接口传参的命脉
一切的 值的保存 和 取值,都要考虑到 viewModel ,例如 条件查询框,在取值后,一定要记得 给 viewModel赋值,这样 在访问接口的时候,这个框里面的值,才能传过去。
22. $(“#grid”).kendoGrid({
dataSource: dataSource,
resizable: true,
scrollable: true,
navigatable: false,
selectable: ‘multiple, rowbox’,
autoBind: 代表 gird自动不自动加载
editable: false 代表 grid不可编辑
})
22:整个页面需要的关注点
1.各个div
2.grid
3.各个事件发生 绑定的 script ,各个div绑定的 script …(script)
4.viewModel
5.viewModel赋值,取值的几个位置,script里面,paramterMap viewMoel初始化的时候,头行,传值,赋值给 viewModel的时候
23.在 script里面是可以 定义 变量的
24.头行明细
1.第一步,定义 2个 grid的 viewModel
<script type="text/javascript"> var viewModel = Hap.createGridViewModel("#grid"); var viewModelLine = Hap.createGridViewModel("#gridLine") script>
2.第二步,定义头的div 和 行的 div
头div
<div id="page-content">
<div class="pull-left" id="toolbar-btn" style="padding-bottom:10px;">
<span class="btn btn-primary k-grid-add" style="float:left;margin-right:5px;" data-bind="click:create"><@spring.message "hap.new"/>span>
<span class="btn btn-success k-grid-save-changes" data-bind="click:save" style="float:left;margin-right:5px;"><@spring.message "hap.save"/>span>
<span data-bind="click:remove" class="btn btn-danger" style="float:left;"><@spring.message "hap.delete"/>span>
div>
<script>kendo.bind($('#toolbar-btn'), viewModel);script>
<div class="pull-right" id="query-form" style="padding-bottom:10px;">
<input type="text" data-role="maskedtextbox" style="float:left;width:150px;margin-right:5px;" placeholder='<@spring.message "OdInspectionPlan.inspectionPlanCode"/>' data-bind="value:model.inspectionPlanCode" class="k-textbox">
<input type="text" data-role="maskedtextbox" style="float:left;width:150px;margin-right:5px;" placeholder='<@spring.message "OdInspectionPlan.inspectionPlanName"/>' data-bind="value:model.inspectionPlanName" class="k-textbox">
<input placeholder='<@spring.message "bom.sitecode"/>' data-bind="value:model.siteId" id="siteId">
<script> $("#siteId").kendoLov($.extend(${
lovProvider.getLov(base.contextPath, base.locale, "LOV_SITE")}, {
select: function (e) {
viewModel.model.set("siteId", e.item.siteId); } })); script>
<input placeholder='<@spring.message "odinspectionplan.materialid"/>' data-bind="value:model.materialId" id="materialId">
<script> $("#materialId").kendoLov($.extend(${
lovProvider.getLov(base.contextPath, base.locale, "LOV_MATERIAL")}, {
select: function (e) {
viewModel.model.set("materialId", e.item.materialId); } })); script>
<input placeholder='<@spring.message "odinspectionplan.status"/>' data-bind="value:model.status" id="status">
<script> $("#status").kendoComboBox({
dataTextField: "meaning", dataValueField: "value", valuePrimitive: true, dataSource: STATUS }); script>
<input placeholder='<@spring.message "odinspectionplan.identifycategory"/>' data-bind="value:model.identifyCategory" id="identifyCategory">
<script> $("#identifyCategory").kendoComboBox({
dataTextField: "meaning", dataValueField: "value", valuePrimitive: true, dataSource: I_CATE }); script>
<span class="btn btn-primary" style="float:left;width:70px" data-bind="click:query" type="submit"><@spring.message "hap.query"/>span>
div>
<script>kendo.bind($('#query-form'), viewModel);script>
<div id = "xxx" style="clear:both">
<div id="grid">div>
div>
<script>kendo.bind($('#xxx'), viewModel);script>
div>
行div
<div class="pull-left" id="toolbar-btn1" style="padding-bottom:10px;">
<span class="btn btn-primary k-grid-add" style="float:left;margin-right:5px;" data-bind="click:create"><@spring.message "hap.new"/>span>
<span class="btn btn-success k-grid-save-changes" data-bind="click:save" style="float:left;margin-right:5px;"><@spring.message "hap.save"/>span>
<span data-bind="click:remove" class="btn btn-danger" style="float:left;"><@spring.message "hap.delete"/>span>
div>
<script>kendo.bind($('#toolbar-btn1'), viewModelLine);script>
<div id="bottom-content" style="clear:both;margin: 10px 5px 5px;">
<div id="gridLine">div>
div>
<script>kendo.bind($('#bottom-content'), viewModelLine);script>
3.定义头和行的 script grid
头的grid
<script type="text/javascript"> <!--绑定前面的 html 内容 --> Hap.initEnterQuery('#query-form', viewModel.query); var BaseUrl = _basePath; dataSource = new kendo.data.DataSource({
transport: {
read: {
url: BaseUrl + "/calb/od/inspection/plan/query", type: "POST", dataType: "json" }, update: {
url: BaseUrl + "/calb/od/inspection/plan/submit", type: "POST", contentType: "application/json" }, destroy: {
url: BaseUrl + "/calb/od/inspection/plan/remove", type: "POST", contentType: "application/json" }, create: {
url: BaseUrl + "/calb/od/inspection/plan/submit", type: "POST", contentType: "application/json" }, //这里比较重要,这里是初始化 viewModel的代码,如果是查询的话,那么viewModel初始值和查询的VO的json串一样 parameterMap