svn即subVersion(子版本),是版本控制工具,也就是多个人开发同一个项目,共享一个资源,将仓库的代码/项目(被共享的资源)下载到本地,然后对下载到本地的代码进行编写修改。
1 首先需要刷新数据连接下的数据源;2 再刷新root目录下的jdbc.proprities文件(选中文件,右击emap,选择刷新数据源)
因为需要使用应用与组件2个服务,所以tomcat需要设置2个端口,避免端口冲突,字符集设置为utf-8,同时值得注意的是组件的端口要记得,在后面应用添加自定义动作的时候需要填写。
该文件在包资源管理器目录下创建,在对应的组件下的src目录下创建db包,在db包下创建一个与该组件名称相同的包,然后在该包下面创建version.xml文件(一定要注意version.xml文件名称一定要按照顺序来,否则会创建不成功),该文件一般用来创建表(空表),一定要注意格式规范,参考开发文档API来进行创建,否则会出现重大错误。
建表的时候主键别忘记,如果建表出错可以到数据库中查看错误信息,改正即可。
emap组件开发工具一般是用来实现业务的后端逻辑的,(类似于前后端分离的idea,辅助java代码业务的编写),代码的目录结构如正常的前后端分离结构一样,Controlle,Service,DAO,PO,WS,这里有一个Ws层,指的意思是:webservice,用它来暴露接口,给前台来调用。
业务模型的产生方式不同:
组件中的业务模型是根据是数据模型来设计的,
而应用中的业务模型是由自定义动作中的数据查询方式webservice来来生成的。
问题:这二者有什么不同?前台显示的是哪一个模型?模型是否可以修改(添加删除字段)如何修改?
按照顺序,从上到下运行,先解析head标签中的代码,
(1)head标签中会包含一些引用外部文件的代码,从开始运行就会下载这些被引用的外部文件
当遇到script标签的时候
浏览器暂停解析(不是暂停下载),将控制权交给JavaScript引擎(解释器)
如果
7.1 java程序的运行过程。
1)编写完成的java代码首先被编译成为字节码文件(应该是通过jdk进行编译),helloworld.java →helloworld.class
2)Java虚拟机jvm将编译完成的字节码文件在转化为计算机可识别的二进制文件。helloworld.class→0,1 二进制文件
服务器首先扫描web.xml文件,进行项目的初始化,当有请求过来,进行servlet的调用处理,最后返回数据。
7.2 浏览器的执行过程
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
/**
* 申请信息查询
*QueryConfig :查询条件的参数,规定了查询的分页信息,以及查询的排序方式
*UserInfo:请求接口时的用户信息,包括了登陆用户的用户名和编号,以及应用的名称等信息
*/
public XssqbResult xssqbQuery(Xssqb param, QueryConfig config, String setting, String logKey, UserInfo userInfo) {
XssqbResult result = new XssqbResult();
// 前端没有传排序字段,则使用默认排序
if (StringUtils.equals(config.getOrder(), GglglConstants.QUERY_CONFIG_DEFAULT_ORDER)) {
config.setOrder("-XNXQDM,-NJDM,+XH"); // 默认排序:学年学期、年级降序,学号升序
}
try {
// 数据权限过滤sql条件
String filterSub = dataPermissionService.getPermissionCondition(GglglConstants.SjqxTNameConstants.XJGL_XSJCXX, userInfo);
result = (XssqbResult) xssqbDao.actionQueryPage("此次填写查询申请信息动作的名称", param, config, setting, Xssqb.class, XssqbResult.class, userInfo, filterSub);
result.setCode(GglglConstants.SUCCESS);
} catch (Exception ex) {
LOGGER.error("申请信息查询失败:", ex);
result.setCode(GglglConstants.FAILURE);
result.setMsg(ex.getMessage());
commonService.wrapAndThrowException(ex);
}
return result;
}
2.需要添加审核日志查询方法?
3.实现类要加上@Service(“xxx”)
创建一个数据模型(即自己创建的需要使用的表),然后在创建一个业务模型(由各个数据模型字段组合在一起,类似视图;业务模型也可以单独添加字段)。
1.组件的自定义动作是数据库操作
2.应用的自定义动作是webservice调用,主要的调用的是组件暴露的webservice接口
编写sql语句:
select #auto[select]
from table1
left join table2 on table1.xx=table2.yy
where 1=1
#sub[and $] //动态条件查询语句
#sub[and $] //数据权限过滤语句
#sub[order by $]//排序语句
然后再选择相应的业务模型,并确定相关的子句#sub[]位置。
一般只有查询需要新建动作,新增、修改、删除都通过 dao 自带的方法实现,参考样例的 xssqbDelete 方法
主要说明一下web下的目录结构
index:入口页面,主页面
-————index.epg
-————index.jsp
module:应用中各个模块的功能菜单
----------module名称
-————module.js:模块加载的入口文件,
————moduleBS.js:模块中的业务逻辑处理的,比如说ajax的CRUD操作
————modulePage.html:需要渲染的页面
————module.css页面样式
public:
-————css
-————image
-————js
config.js:全局配置文件
创建页面模型需要选择页面模型干预类**(访问该页面菜单或动作调用时会先走干预类)** ,在管理页面中干预类统一选择 com.wisedu.emap.gglglyy.service.intervention.yjsPageintervention
创建如上图的module文件下的子文件,其中模型文件的前缀名称要与页面模型的名称一致,
且页面模型创建完成之后,需要在config.js中添加路由。
该自定义动作的类型是webservice调用(用来调用组件写的webservice接口)。
总线类型:非服务总线(带命名空间)
服务地址:组件的tomcat的访问地址/emap/sys/emapWS/ws/组件中ws里面的那个@sevice地址?WDSL
发布地址:${yjsHost}/sys/emapWS/ws/组件中ws里面的那个@sevice地址.do。
配置完成点击刷新,
生成WS下对应的业务模型:点击对应的动作,选择emap->生成ws业务模型即可。
通过version.xml文件来创建一张字典表,代码如下:
sql代码块
若出错,则到数据库中查看表的错误,在EMAP_SYS_VERSION_INFO表中,可以查看到数据库初始化的结果,在 EMAP_SYS_VERSION_SCRIPT表中,可以查看到初始化出错的脚本。
一般来说,了解到问题的错误,修改完成后,将表中相关错误的信息删除即可。通用的修改语句:
select * from table where table.xx = 'xxx' for update
然后,解锁,进行操作,最后别忘记进行事务的提交。
ora-00972:标志名称过长错误;即表名,字段名名称过长,最多不超过30个字符;
字典表的数据模型是存放在组件中的执行管理中心中的。
而字典表的表是存放在应用中的公共类管理应用中的gglgl字典中的。
1,字典加载不出来;
2,创建字典的时候,只需要添加一个对应的数据模型,自定义动作添加【zdcx】,在通过配置dicCodez_zdb_zddy.zddm,order=+PX就能确定是那个具体字典了吗???其他的字典也是这么做的吗?