资源和角色是TSS二次开发的两大主线,资源包括:数据表、数据服务、报表、栏目、门户导航、用户组织等,角色用来划分资源的权限,一个角色可以对应多个人。如果给某角色分配了某资源的操作权限,那么只有属于该角色的用户才能拥有此资源的操作权限。在一个企事业单位的人员组织里,角色通常等同于岗位,设置角色可以优先按照既有的岗位来设置。按岗位信息一一创建角色后,给不同岗位的人授予对应的角色,一个人可以有多个岗位。
在开发一个功能模块之前,开发者应该预先已经知晓:此功能的用户群体(角色)是谁。所以第一步我们先创建角色。打开【开发管理】下功能菜单【设置角色】,开始创建角色,下图示例:创建一个名为“老板”角色的截图。保存成功后,右边角色组下可以看到新建的角色节点。
数据源(DataSource)泛指存放数据的数据库服务器,可以是某个业务系统数据库,也可以是其备库、只读库,或者清洗库,数据库类型支持MySQL、Oracle、SQLServer、PostgreSQL等常见的关系型数据库。对TSS而言,数据源是查询、清洗、采集数据的先提条件,有了数据源,数据才得以被采集、被查询、被分发、被清洗、被重新写入;流程运转产生数据才能长久存放。可以说,数据源是一切数据活动的基础。
通常程序需要对数据进行读写操作时,需要先连接数据源指向的数据库,获取连接后再通过连接来读取或写入数据,提交事务后再释放连接。但这个过程比较耗时。连接池的作用是把使用完的数据库连接缓存起来,需要用的时候直接从池里返回一个连接,使用完成后再释放回池里,避免重复创建。TSS的连接池使用的自身的“对象缓存池管理”模块,可以方便的在创建数据源的同时完成数据库连接池的创建。
从顶部菜单打开《开发管理》-->《数据源》,进入数据源管理界面。进入后会默认打开一个空表单,可以直接开始填写创建数据源。填写完成后可以先进行测试,能否成功连接。如果可以连接成功,则可以点【保存】按钮,完成数据源的创建。保存成功后,左边的列表里多出一个数据源。同时在《开发管理》→《缓存监控》,可以看到新建数据源对应的连接池,如下图:
点击左侧数据源列表中的需要修改的数据源,或者右键点击数据源选择【修改数据源】。会打开一个和新建界面一样格式的编辑界面,可以对其中某些配置项进行修改。修改完,点【保存】成功后,系统会自动更新数据源对应的连接池:销毁池中已存在的连接,然后重新初始化连接池。(可能有连接正在执行SQL中,此时系统会等待执行完成被释放后再销毁)。
右键点击要删除的数据源,选择【删除数据源】,系统提示是否确认删除,点击确定完成删除。删除后此数据源对应的连接池也将被移除。
TSS集成了数据报表和数据表,这两个模块可以方便对数据进行全方位管理。一个报表的数据服务就是一个独立的读取数据的API,其查询出来的数据既可以用于TSS系统内的报表的分析展示,也可以对外开放给第三方系统访问。同样,第三方系统也可以通过数据表的接口往数据表写入、修改、删除数据,也可以获取数据表数据记录包含的附件、日志等信息。TSS的定位之一是成为一个数据中枢系统,统一协调各类外围系统对数据进行管理及流转。
数据表通常都会有上传附件的需求,为此专门定义了属性为“附件”的字段类型。描述一条附件信息很简单:存放目录、附件名称、属于哪张数据表的哪一行记录。据此TSS提供了一个统一的“附件管理”功能,目的是对所有附件进行集中存放、提供统一的管理界面。任何数据表只要设置“是否上传附件”为“是”,即会自动加上附件上传功能。通常可以在编辑Form里或Grid列表右键菜单里打开如下图的附件管理界面:上传一个附件的步骤如下:上传附件的窗口界面,除了可以数据表里打开以外,也可以在自定义录入页面里单独打开。
TSS通过连接数据源对数据进行访问,但很多时候,数据源里的数据是原始的业务数据,存在数据量大、结构不友好、数据分散在多个数据源、数据格式不统一、无法进行关联运算等问题,增加了日常数据分析工作的难度。这要求我们建立一个设计合理、结构友好的清洗库,然后所有的分析工作都基于清洗库展开。把散落在多个数据源中的原始业务数据抽取出来,加以清洗,再存到清洗库的过程,就是TSSETL的过程。
TSS支持自动定时从数据库、文件、RestfulWebservice抽取数据,支持在线配置ETL任务,也支持通过编写扩展代码来定制ETL。下面两节,侧重介绍通过定时器和ETL任务,来完成数据的清洗。
开发流程可以参考如下流程步骤:
本示例的是将存放在扩展库的记账明细数据按天汇总后,存入到清洗库的对账表里。任务每天凌晨一点执行,第一次从2017-03-01开始汇总,当某一天汇总数据抽取完成后,会记录一条日志,下次执行任务的时候会先比对日志,只对日志里尚无记录的日期进行抽取。本任务设置的“重复更新天数”为7天,所以每次执行都会强制重复抽取最近7天的数据,逐日更新至清洗库,先按天删除(参照前置操作里的SQL),再按天重新写入新数据。
此任务每60分钟运行一次,将明细数据从本地库抽取到清洗库,第一次抽取从ID=0开始,往后每次执行任务只抽取(ID>清洗库表已存在的最大ID)的数据。
开发者开发完成一个模块的各个功能点,并且把各个功能的权限授予特定的角色。此时有两种方式可以把功能推给用户使用,一种是由系统管理员为每个用户设置相应角色,这样可以快速上线新功能,比如一次开发一个报表,然后快速开放给相应角色人员使用,适合私有部署的场景。
第二种是SAAS模式下,功能以模块化的形式开发和发布,即不只是一个报表或数据表,而是一组。开发完成后,可以对这一组的报表或数据表进行打包发布,由用户自行选择是否要选用。例如:开发者A开发完成一个《进销存管理》模块,里面包含了老板、客服、客户等多种角色,很多中小型企业都可以使用该模块,但每一个企业域下,需要能自行管理自己的人员结构及岗位。同样,开发者B开发了一个《项目管理》模块,需要使用该模块的用户群体可以自主选择此模块,并自行设置人员角色。
模块如果包含资源文件,则导出文件是一个zip压缩包;如果没有资源文件,则是一个json文件,里面包含了模块所包含的报表、数据表、角色、权限等配置信息。
开启系统邮件推送功能,则首先需要有一个自己的邮件服务器,可以是私有邮件服务器,也可以是三方的邮件服务器(如163邮件服务器、阿里云邮件服务器等)。
打开【开发管理】/【系统初始化】功能菜单,找到如下图的配置项填写邮件服务器配置:配置示例:邮件服务器地址|发件人|收件人|邮件服务器认证账号|邮件服务器认证密码配置好邮件服务器后,可以在任意TSS的前台HTML页面的控制台里测试邮件服务器发送是否正常:$.post("/tss/auth/message/email2",{"receivers":“xxx@xx.com”,"title":“testemail”,"content":“justtest”});在TSS里,邮件推送功能可以使用在诸多场景中:
该模块的目的是方便的收集各类用户的使用反馈,以进一步完成TSS。反馈类型包括系统异常、改进意见、吐槽等,内容可以是文件描述或上传截图等形式,系统管理员在看到反馈后,可以对其进行回复,告知反馈者处理进度及处理结果。反馈者再次打开该模块后可以看到自己提交的所有反馈及处理进展。