一、部署简搭平台
1. 下载简搭低代码平台

在浏览器中输入网址,进入下载页面。
点击云盘,输入提取码,进入网盘下载页面。
根据自己使用的操作系统,选择对应的新版本进行下载即可。
2. 解压缩简搭平台
下载完成后,解压缩到自己喜欢的目录即可,解压出来的文件名可以修改成自己想要的,文件目录和名字要全英文的,而且不要有空格。平台目录结构如下:
3. 启动平台服务
如果是第一次启动服务,需要右键以管理员身份启动【启动服务.bat】。如果不是第一次启动,则直接双击【启动服务.bat】。
启动服务后,一共会弹出两个黑窗口。窗口标题为iDesigner-1.4.0的为设计器的窗口,标题为Tomcat的是应用服务的窗口。
浏览器中输入网址,进入设计器页面。
应用端的网址,如下:
http://127.0.0.1:9090/xx
其中,xx需根据你webapps目录下应用所在的文件夹名进行替换。比如下图所示:
webapps目录下有一个名叫【oa】的应用,那么应用地址则为:
http://127.0.0.1:9090/oa
需要注意的是,这个地址名是需要区分大小写的,文件夹名是什么,地址就是什么。
二、创建CRM应用
1. 创建CRM账套
进入设计器,可以看到如下页面:
点击
,新建一个账套。
账套名称输入CRM,点击新建。可以看到目录结构中多了一个CRM的目录,这个目录就是CRM应用的目录,接下来一些功能的搭建都在这个目录下完成。。
2. 部署CRM应用
创建好账套后,就是部署CRM应用了。
选中CRM账套,点击
,打开更新服务器的窗口。
点击左下角的初始化按钮,打开初始化配置的窗口。
根据实际情况修改对应的信息。需要注意的是,数据库名称和文件夹名称都必须确保唯一性。也就是输入的数据库名称必须保证在你的数据库中不能存在同名的数据库。输入的文件夹名称必须保证在你的webapps目录下没有同名的文件夹名称。若是存在同名的情况,会导致初始化失败。
信息修改好后,点击确定。系统开始进行初始化,此时请勿进行其他操作,以免初始化失败。
出现如下提示代表初始化成功,但此时可能还是无法进入应用端,需要耐心等待tomcat服务启动完毕。
可通过在浏览器中输入应用端地址,来确定tomcat是否启动成功!如出现
下图所示界面,既代表启动成功!
3. 登录CRM应用
初始账号密码为:
账号:admin密码:123456
输入账号密码,点击登录,即可跳转到应用首页。
三、设计模块
客户管理
1. 新建模块集合
进入设计器,选中CRM账套,右键CRM账套下的
,然后点击右键菜单中的新建,打开设置模块集合属性弹窗。
模块名称填写客户管理。模块属性无需填写,会根据模块名称自动生成,选择图标,点击确定即可。
PS: 模块集合相当于应用下的目录。可以在该目录下创建多个具体的功能模块。
2. 创建【客户】模块
创建好目录之后,就要创建具体的功能模块了。
右键刚刚新建好的模块集合
,点击右键菜单中的新建单个模块,弹出设置新模块属性的窗口。
名称填写客户,属性key会根据名称自动生成,模块类型选择普通模块,选择好图标。点击确定之后,会打开模块的设计界面。
3. 新建表单和字段
模块采用的是一对一或一对多的父子表模式,根据实际需要确定好需要创建的表单和字段。本例共分两个表单,一个主表和一个子表。
表单的名字根据实际需求进行修改。
本例中主表的表名为客户主表,就不做任何更改了。子表的表名修改为客户信息。
表单确定好后,开始建各个模块的字段。输入表字段的显示名,字段名会根据显示名的拼音自动生成。
本例中主表字段如下:
子表字段如下:
字段编写完成后,记得点击右上角的
按钮,以防意外导致数据丢失。
TextBox
文本框控件是最常用的控件之一,没有过于复杂的设置,使用起来非常简单。
拿【客户名称】这个字段来说,我们只需点击这个字段,在右侧的字段属性栏中找到编辑类型这一属性,选择TextBox即可。
1. 自动生成编码
我们可以通过一些简单的设置让文本框控件实现自动生成编码的的功能。
本例中的客户编号字段,就使用了该功能。
重点来了,怎么实现呢?继续看下文:
首先选中客户编号字段。因为该字段是通过系统自动去生成数据,所以不需要自己手填的话,可以考虑在右侧属性栏中勾选【只读】属性。
接下来在右侧属性栏中找到【自动编号规则】这个属性,填入相应的编号规则,比如本例中用到的规则如下:
{"busRule":"[yewuyuandengluming]","excludeDate":"1"}看到上面的内容可能有点懵,具体什么意思呢?可以看看官方文档中对于自动编号规则的描述,如下图:
看了上图基本也就知道该如何去定义一个规则了。本例中的规则意思也很好明白,就是根据【业务员登录名】这个字段的值去生成一个编号。
2. RichTextBox
RichTextBox的介绍可以看看官方文档的介绍,与TextBox一样,无复杂繁琐的设置。
3. DictTree
DictTree控件的使用与系统分类有关。
DictTree与Combo类控件类似,都是有数据源的。但与ComBo类控件不同的地方在于,DictTree控件的数据源不是去字段属性的【数据源设置】中去设置,而是通过字段属性的【显示格式】属性去设置。
看到这里,可能会有疑惑,显示格式怎么能设置数据源?其实显示格式确实不能用于设置数据源,但是通过它可以跟系统分类产生联系,让系统分类作为该控件的数据源。当然这些数据源的转化都是通过系统自动去完成的,不需要我们手动去转化。
讲了这么多了理论的东西,不实际动手操作一下,确实难以理解。
拿本例的【客户分类】字段来说,选中该字段,将其编辑类型属性的值选为DictTree。在进行控件数据源的设置前,我们需要去平台端中创建一个系统分类用作这个控件的数据源。
打开平台端【系统管理】下的【系统分类管理】模块,界面如下:
右键左侧的系统分类,点击新增,右侧会出现系统分类的新增界面。
系统类型名称填写客户分类,类别填写kehufenlei,然后选择好授权的角色,最后点击保存即可。
新建好的这个分类属于主类,我们需要在主类下创建一些子类。具体创建步骤类似主类的创建,区别就是类别那栏不能手填,而是继承自主类。在该主类下,我们创建三个子类:潜在客户、意向客户和成交客户。
创建完成之后,我们将主类的类别栏中的值复制一下,返回设计器界面,在【客户分类】字段的显示格式属性中填入这个主类的类别值。
最后勿忘保存,每设置完一个字段,就保存,以防意外导致数据丢失。
4. ComboBox
下拉框是平台中比较常用的一种控件。实现起来相较于文本框来说,会复杂一点。但通过接下来的文章,相信你也能非常熟练的使用ComboBox这个控件。
ComboBox最重要的设置就是数据源的设置了。数据源的设置分三种:
1. 固定值
2. 模块
3. SQL语句
SQL语句作为数据源,以本例的具体字段来进行讲解。
本例中的【业务员】字段,用的是ComboBox控件。因为该字段的数据源与人员有关,需要用到的平台的用户表,所以不能选模块作为数据源,而应选择SQL语句作为控件数据源。
接下来说说具体的实现步骤:
选中业务员字段,在右侧属性一栏中找到【数据源设置】属性。点击打开数据源设置弹窗,选【SQL语句】>【SQL编辑】>【新增】。
sql名称必填,内容随意。
自定义语句中填入查询出人员的sql语句,如下:
select ID, ConCAT AS REAL_NAME, EMPLOYEE_IDfrom SYS_USERwhere STATUS = '1'
sql语句填入后,滚动条往下翻,点击按钮
,会自动跳转到【sql生成规则】页面。
PS: 存储值指应用端数据保存后该字段实际存储到数据库中的值;显示值指控件的显示值。
一切设置完成,点击保存。然后关闭sql编辑弹窗,点击sql刷新按钮,选择你之前定义的那个sql名称。最后点击设置,完成该控件的数据源设置功能。
4. 选中事件
该字段还会用到一个事件——选中事件,效果是为【业务员登录名】字段设置值。
选中【业务员字段】,在右侧属性一栏中找到【事件编辑】属性,点击打开事件编辑弹窗。选择【选中事件】,在右侧函数编辑界面填入相应的js代码,点击设置即可。
if { jwpf.setFormVal;}该js代码中用到了系统自带函数jwpf.setFormVal。如下是官方文档中的函数介绍:
record是该事件中传入的值,指下拉框控件选中的对象。其中的loginName就是指业务员登录名。
5. 字段联动
字段之间的联动,也算是比较常用的一种功能。就拿本例中的客户国家、客户省份和客户城市这三个字段来说,三者之间就是字段联动的。客户省份的数据源是根据客户国家的值来形成的,客户城市的数据源是根据客户省份的值来形成的。
在讲具体的操作之前,我们需要先来创建一个模块,用于当做这三个字段的数据来源表。
右键业务管理》 新建【基础信息】模块集合 》 在【基础信息】模块集合下新建【国家省份城市】模块。
主表表名修改为Location主表,字段如下:
字段编写完成后,点击保存。
将设计器端设计的内容更新到服务器,具体请跳转到【更新到服务器】部分查阅。
进入平台端 》点击【基础信息】 》 点击【国家省份城市】》点击【新增】按钮,我们需要录入几条数据。
数据录入完成,继续回到设计器端。接下来我们需要给客户国家、客户省份和客户城市这三个字段设置对应的数据源。
客户国家
数据源设置 》 数据源选择【SQL语句】 》 编写对应的SQL。SQL如下:
select a.ZhongWenMingCheng, a.YingWenMingCheng, a.IDfrom location_zhu_biao awhere a.CengJi = 2
从录入的数据可知,国家的层级是2,所以sql语句中,where条件需要是cengji = 2,只有这样sql查询出来的数据才会是国家的数据。
sql生成规则如下:
客户省份
数据源设置 》 数据源选择【SQL语句】 》 编写对应的SQL。SQL如下:
SELECTa.ZhongWenMingCheng,a.IDFROMlocation_zhu_biao aWHEREa.FuId = :id
sql语句中的 :id是指接收的外部参数。
sql生成规则如下:
到这并未结束,与客户国家字段不同的地方在于,这个数据源的sql语句中带有接收外部数据的参数,以防平台端保存数据或者显示数据时报错,还需要在数据源设置界面,设置一个查询数据源。
在sql编辑页面中新增一条sql语句,然后通过刷新sql列表按钮,就可以在查询数据源的下拉框找到新增的那条sql,选择一下即可。
不带参的sql如下:
select a.ZhongWenMingCheng, a.IDfrom location_zhu_biao a
sql生成规则如下:
编辑数据源既然有参数,那么问题来了,该如何传值给这个参数呢?
这时候就需要用到字段事件了,在该字段的事件编辑中有一个事件【设置查询数据源】,通过这个事件就可以将参数所需的值传递给控件的数据源了。
代码如下:
return { "filter_EQL_id": jwpf.getFormVal};PS: filter_EQL_id的作用其实就是往sql语句的:id中传值。向sql中的参数传值的格式:{ "filter_EQX_name": 传入的值 }。变量名以filter_EQX_开头,后面的name表示就是你sql语句中冒号后面的那个变量名,其中EQS中的X表示数据类型,有以下几种可供选择:S--字符串;L--整数;N--小数;D--日期。EQ代表等于,还有不等于、in、小于、大于、大于等于和小于等于。这里提到了filter的写法,还有一种写法是以fix开头。两个是有区别的::fix是固定查询条件,filter是动态查询条件。固定条件参数,指的是sql里写死条件的,也就是sql语句中带冒号和变量名的那种。动态条件参数,指的是根据参数自动加上查询条件的,也就是sql语句中不带冒号和变量的,是动态往sql语句中加入where查询条件。
该段代码中用到了平台自带函数jwpf.getFormVal,在官方文档中的介绍如下:
客户城市
数据源设置 》 数据源选择【SQL语句】 》设置【编辑数据源】 》设置【查询数据源】》编写【设置查询数据源】的事件。
客户城市的编辑数据源和查询数据源,与客户省份字段的一致,所以我们可以将客户省份的对应sql复制到客户城市字段中。
在客户省份的sql编辑页面,选中对应的sql,点击【复制sql语句】按钮,然后在打开客户城市的sql编辑页面,点击【粘贴sql语句】按钮,就可以将sql复制到客户城市字段中。
【设置查询数据源】的事件代码如下:
return { "filter_EQL_id": jwpf.getFormVal};4. 更新到服务器
在设计器端保存完之后,并不是说直接就能在平台端上显示的,我们需要通过设计器的更新功能更新到平台端。
具体步骤如下:
1.点击左上角的按钮
2.填写平台端的相应信息
3.点击更新按钮,等待更新完成的提示。
浏览器输入:http://127.0.0.1:9090/crm,进入平台端。
输入账号密码,点击登录。进入平台端后,可以看到自己设计器的模块已经出现在平台端了。
进入具体模块页面时,如出现如下图所示情况:
碰到这种问题,需要用超级管理员的账号点页面击右上角的用户名。
在弹出的菜单中选择同步缓存,然后刷新页面即可解决。
客户模块效果展示图:
至此,本模块所有内容讲解完毕。最后再提一下,模块搭建完毕后,一定要先保存,然后再把内容更新到平台端。
5. 最终效果图
客户模块预览图
销售管理
销售管理共有两个功能模块:报价单和销售订单。
1. 新建报价单模块
具体创建步骤请查阅【客户管理】部分的创建模块集合和创建模块,这里就不多说了。
创建完成之后,账套结构如下:
从上图可知,先创建了【销售管理】这个模块集合,然后再【销售管理】下创建了【报价单】模块。
2. 新建表和字段
具体步骤可查阅【客户管理】章节的新建表和字段,不做过多讲解,只说一下需要建的表和字段。
本模块共两张表,一张主表和一张子表。主表字段如下:
子表字段如下:
1. DateBox
常用控件之一,涉及到时间的字段可以用该控件。
拿本例的【报价日期】字段来说,字段类型选择【时间】,编辑类型选择【Datebox】。
DateBox是可以设置显示格式的,默认是yyyy-MM-dd。其他的时间格式有:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd HH:mm、HH:mm:ss、HH:mm。可以去掉年月日之间的"-",写成yyyyMMdd 格式的。还能将"-"换成"/",写成yyyy/MM/dd。也能将日期格式写成"yyyy年MM月dd日"这样的。
【报价日期】我们也可以设置一下显示格式,让其精确到秒。
1. jwpf.now
DateBox的控件还有一些其他属性的设置,比如:最小日期、最大日期和默认值的设置。拿【报价日期】来说,设置一个默认值。
默认值设置中,用到了jwpf.now这个平台函数。官方文档描述如下:
2. DialogueWindow
ComBo类控件在进行选择操作时,能显示的内容比较少。如果某种需求是在进行选择操作时,需要能看到更多的字段内容,那么DialogueWindow这个控件就能满足你的需求了。
相较于ComBo类控件的设置,DialogueWindow控件的设置就比较复杂点了。拿本例的【联系人】字段来说,使用的就是【DialogueWindow】控件。
需要注意的是,当字段的编辑类型选取【DialogueWindow】后,会在字段列表中自动创建一个xxxxText的字段。比如:本例的字段为LianXiRen,编辑类型选择DialogueWindow之后,字段列表中会多出一个LianXiRenText字段。请不要随意删除这个字段,该字段是有重大作用的,主要用于存储该控件的显示值。
【联系人】字段以SQL作为数据源,具体sql如下:
SELECTID,XingMing,DianHuaFROMKE_HU_XIN_XIWHEREMASTER_ID = :lxid
sql写完不要忘记生成sql规则,需要在控件中显示多少字段,此处就配置多少字段。
从上面的sql语句中可以看到是带参数的,所以需要在字段的事件编辑中编写【设置查询参数】的事件,用于给数据源传入参数所需的值。代码如下:
return {"fix_EQL_lxid": jwpf.getFormVal};3. 数据下推
数据下推大致上分四种:同一表单内的数据下推、下推数据到子表、从一个页面下推数据到另一个页面和流程下推。
1. 同一表单内的数据下推
这种下推方式,一般都是同一表单内某个字段选取值后,然后根据这个值通过sql查询出一些数据,将这些数据赋值给同一表单内对应的字段。
拿报价单的主表来说,当【客户名称】字段选取之后,通过sql语句查询到了一些关于该客户的基本数据,然后将这些数据赋值给联系人、联系电话、业务员、客服等等字段。
【客户名称】字段是ComboBox控件,所以这里可以用内容改变事件来实现这个功能。具体代码如下:
共有两种写法。
第一种:
if { var data = jwpf.getFilterData; if { jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; }}第二种:
if { var data = jwpf.getFieldValBySql; if { jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; }}1. jwpf.getFilterData
第一种写法的事件代码中用到了jwpf.getFilterData这个平台函数,官方文档描述如下:
该函数用到的sql如下:
SELECTa.FuKuanFangShi,a.BiZhong,a.KaiPiaoLeiXing,a.KeHuBianHao,a.YeWuYuan,a.KeFu,b.ID AS lxr,b.XingMing,b.DianHuaFROMKE_HU_ZHU_BIAO aLEFT JOIN KE_HU_XIN_XI b ON a.ID = b.MASTER_IDWHEREa.ID = :kid
sql生成规则如下:
该函数的作用就是通过自定义的sql去数据库中查询数据并返回。
2. jwpf.getFieldValBySql
第二种写法的事件代码中用到了jwpf.getFieldValBySql这个平台函数,官方文档描述如下:
两个函数的作用其实差不多,但是相对于jwpf.getFilterData对于返回数据的处理,jwpf.getFieldValBySql处理起来更加方便。
3. 给DialogueWindow控件设置
给DialogueWindow控件赋值,共有两种方法:一种是与其他控件相同直接赋予值就行了,另一种就是传递一个对象给控件才能正常赋值。
第一种就不多介绍了,主要说一下第二种方法。需说明的是,第二种方法中DialogueWindow控件在主表和子表上的赋值形式是完全不同的。
1. 在主表上赋值

在主表上给DialogueWindow控件赋值需要传递一个对象过去,格式如下:
{ "id": '', "text": ''}比如本例中的联系人字段赋值如下:
jwpf.setFormVal;
2. 在子表上赋值
在子表中给DialogueWindow控件赋值就不需要传递对象了,但是与其他控件不同的点在于需要给两个字段赋值。一个是控件本身的字段,一个是字段+Text格式的字段。只有同时给这两个字段赋值,才能正确显示出来。
这里就直接用官方文档上的代码截图了:
2. 下推数据到子表
该种下推方式,主要是通过一个自定义按钮,打开一个自定义表单的弹窗,然后再弹窗中选择数据,下推到子表中。
拿报价单来说,我们可以自定义一个【商品选择】按钮,打开一个自定义表单的弹窗。然后选择好商品后,将商品下推到【订购商品】子表中。
在进行具体功能的实现前,我们需要先做些准备:创建商品信息模块和一个自定义表单。
1. 商品信息
右键【基础信息】模块集合 》 在【基础信息】模块集合下新建【商品信息】模块。账套结构如下:
该模块只有一张主表【商品信息主表】,字段如下:
1. ImageBox
官方文档描述如下:
2. 自定义表单
1. 描述
自定义表单是一个虚拟表,其内容由SQL语句查询定义,类似于数据库中的视图,但是功能更丰富。自定义表单的内容来源于一张或多张实体表,通过select语句来查询定义。关联的实体表的数据发生变化的时候,自定义表单查询出来的内容也会同步发生变化。
2. 作用
自定义表单的的好处主要有以下两点:把复杂的数据汇总在一起,以自己想要的列表形式展示出来,例如对账单等;方便查询一些对实时性要求高的数据,例如库存查询。
3. 构建自定义表单
1. 步骤一
在设计器的自定义表单目录右键新建,这里新建了一个商品选择的自定义表单,建好字段。
2. 步骤二
新建的自定义表单跟模块和业务字典的表不一样的是,这个商品选择的自定义表单是一个虚拟的表,并不会在数据库里生成实际的表和字段。那么他的数据怎么来的呢?需要设置自定义查询。
点击【商品选择主表】标签》右侧表单属性中找到【自定义查询】,在【设置自定义查询语句】里编写select语句,select语句可以先在数据库工具例如Navicat上先编写好,能执行通过,再复制到【设置自定义查询语句】窗口,保存。
sql如下:
SELECTa.shangpinbianma,a.shangpinmingcheng,a.danwei,a.danjia,a.shuilvFROM a WHERE1 = 1
这里要注意编写规范,select最外层字段名要跟自定义表单的字段名变小写后的一样,这样查询出来的数据就跟自定义表单的绑定出来。必须以where+过滤条件结尾,如果没有条件,默认填上1=1作为过滤条件。
3. 步骤三
表单属性里的【是否列表显示】选true,把你要显示的字段的【列表显示】的选true。
4. 保存并更新。
3. 创建自定义按钮
准备内容都做完之后,就要开始实现下推数据到子表的功能。
首先先创建一个自定义按钮。
点击【订购商品】标签 》右侧表单属性点击【自定义按钮】。
点击添加,填写显示名,选择图片,然后点击设置,进入事件编辑页面。
因为创建的是按钮,所以用到的自然是点击事件啦。选择点击事件,编写js代码。
代码如下:
var formParam = { "title": "商品选择", "formKey": "shangpinxuanzezhubiao", "width": 1000, "height": 500, "onAfterSure": function { let rows = win._getSelectFilterData_; let len = rows.length; if { var tableKey = "DingGouShangPin"; var data = jwpf.getTableval; // 获取子表所有数据 let rowsData = []; for { let row = rows[i]; rowsData[i] = { "shangpinbianma": row["shangpinbianma"], "shangpinmingchen": row["shangpinmingcheng"], "danjia": row["danjia"], "danwei": row["danwei"], "shuilv": row["shuilv"] } var ifXt = jwpf.checkRowInRows; if { alert; return false; } } jwpf.setTableData return true; } else { alert; return false; } }}openFormWin1. openFormWin
官方文档描述如下:
最后记得保存。
3. 从一个页面下推数据到另一个页面
先说下整体思路:通过一个按钮将A页面的数据下推到B页面。在A页面获取需要下推的数据,通过 window.top.$.data 或者jwpf.setPagevalue 存储到本地,然后通过 jwpf.doOpenUrl 打开B页面,在B页面的初始化事件中,通过 window.top.$.data 或者 jwpf.getPagevalue 获取A页面存在本地的数据。
PS: 在B页面使用过A页面传过来的数据后,记得清除这个数据,可通 topBody.removeData 或者jwpf.removePagevalue 清除。
因为涉及到两个页面,所以我们还需要再建一个模块——【销售订单】。
1. 新建销售订单模块
在原有的【销售管理】模块集合下创建【销售订单】模块,目录结构如下:
2. 新建表和字段
本模块共两张表,一张主表和一张子表。主表字段如下:
子表字段如下:
创建完成之后,记得保存并更新。
如果觉得子表在平台端显示的标签名不怎么好,可以通过在【编辑页面设计】中选中销售订单子表1标签,在右侧属性栏中修改一下显示名即可。
修改前:
修改后:
3. 创建按钮
回到报价单设计界面,点击【编辑页面设计】标签>右键【添加按钮】,点击新建好的按钮,右侧属性栏设置【显示名】,选好【按钮图片】,单击【事件编辑】。
选择单击事件,编写js代码。代码如下:
var zt = jwpf.getFormVal;if { var cdxx = []; var cdxx2 = []; var o = { "dinggoukehu": jwpf.getFormVal, "kehubianhao": jwpf.getFormVal, "dinggouriqi": jwpf.getFormVal, "fukuanfangshi": jwpf.getFormVal, "bizhong": jwpf.getFormVal, "huilv": jwpf.getFormVal, "yewuyuan": jwpf.getFormVal, "kefu": jwpf.getFormVal, "dinggoulianxiren": jwpf.getFormVal, "dinggoulianxirentext": jwpf.getFormVal, "dinggoulianxidianhua": jwpf.getFormVal, "xiaoshoutiaokuan": jwpf.getFormVal, "kaipiaoleixing": jwpf.getFormVal }; cdxx.push; var cdxx2 = jwpf.getTableval; // 存储页面值——新版用法 jwpf.setPagevalue; jwpf.setPagevalue; // 打开新增页面——新版用法 jwpf.doOpenAddPage; } else { alert;}PS: jwpf.getFormVal指获取当前单据的状态
1. jwpf.setPagevalue
官方文档描述如下:
2. jwpf.doOpenAddPage
官方文档描述如下:
报价单模块的设置完成之后,就需要来到销售订单模块的页面进行设置了。
销售订单 > 点击【销售订单主表】标签 > 点击编辑属性下的【编辑事件】。
选择【新增页面初始化后】事件,编写js代码。
代码如下:
// 获取存储值——新版var list = jwpf.getPagevalue;var list2 = jwpf.getPagevalue;if { var obj = list[0]; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; jwpf.setFormVal; // 删除存储值——新版 jwpf.removePagevalue; }if { jwpf.setTableData; jwpf.removePagevalue; }3. jwpf.getPagevalue
官方文档描述如下:
4. jwpf.removePagevalue
官方文档描述如下:
最后保存并更新。
4. 流程下推
此部分内容,请先阅读流程设计之后,再来观看。
将报价单的数据下推到销售订单,除了前文提到的从一个页面下推到另一个页面方法,另一种方法就是接下来要讲的流程下推。
PS:此功能涉及到数据库中的存过,所以请提前学习数据库相关内容,再来阅读本文。
基于流程设计中所讲的内容,在原有的流程上稍作改动,就能实现该功能。
原有流程图:
改动之后:
在部门主管审批和结束节点之间新增一个【下推销售订单】节点,属性只需要设置名称和表达式。
名称:下推销售订单
表达式:
#{dataDeal.callProcForMysql}1. ${dataDeal.callProcForMysql}
功能:调用数据库中的存过。注:此存过必须带如下两个参数:IN inId BIGINT,IN `inHandleUserId` bigint。
Proc ——数据库中的存过名称
P_XIA_TUI_XIAO_SHOU_DING_DAN存过的sql语句如下:
BEGIN#Routine body goes here...# 定义变量DECLARE lastID INT;# 向主表插入数据INSERT INTO XIAO_SHOU_DING_DAN_ZHU_BIAO SELECT1, 1, NOW,'10',KeHuMingCheng,BaoJiaRiQi,KeHuBianHao,FuKuanFangShi,BiZhong,HuiLv,KaiPiaoLeiXing,YeWuYuan,KeFu,XiaoShouTiaoKuan,LianXiRen,LianXiRenText,LianXiDianHua,JinE,YouHui,ZongJinEFROMBAO_JIA_DAN_ZHU_BIAOWHEREid = inId;# 获取新生成的销售订单主表idSELECT LAST_INSERT_ID INTO lastID;# 向子表插入数据INSERT INTO XIAO_SHOU_DING_DAN_ZI_BIAO1SELECT1, 1, NOW,'10',lastID,ShangPinBianMa,ShangPinMingChen,DanJia,DanWei,ShuiLv,ShuiE,ShuLiang,YouHui,HanShuiJinE,JiaoHuoRiQi,BeiZhuFROMDING_GOU_SHANG_PINWHEREMASTER_ID = inId;END
画完之后,记得保存,然后重新发布一次该流程。
4. 公式
某些字段的值可以通过公式计算得到。比如说报价单主表中的【金额】字段的值是通过子表中的【数量】、【单价】和【汇率】字段计算出来的。
具体操作如下:
选中报价单主表中的金额字段
右侧属性栏中选择公式代码属性
通过【选择字段】按钮,选择公式相关字段填入。
完善公式
公式如下:
PS: 我这边设置的税率是百分比的,所以是/100。
[DingGouShangPin.shuliang]*[DingGouShangPin.danjia]*/100
对于公式来说,可能某些特殊数字计算时,结果会出现很多小数位,此时建议使用Calc函数函数代替加减乘除。
5. 分组归属
我们可以将主表中的某些字段挑出来单独放到一个tab标签页下展示。比如说报价单主表金额、优惠和总金额字段。这些字段都是涉及到金额的,可以单独放到一个tab页下单独展示。
具体操作如下:
1.首先进入到【编辑页面设计】,右键【编辑页面设计】,选择新建分组。
2.页面往下拉,会看到多了一栏。点击生成一个tab标签页。
3.选中新增的tab标签,右侧布局属性中修改分组的显示名
这个显示名就是分组归属中需要用到的东西,然后回到数据库设计,选中你需要放到该分组下的字段,右键属性,在公共属性面板中找到分组归属,选择自己创建的分组。
最后保存更新就可以了。
6. 流程设计
工作流程是指企业内部发生的某项业务从起始到完成,由多个部门、多个岗位、经多个环节协调及顺序工作共同完成的完整过程。简单地讲,工作流程就是一组输入转化为输出的过程。
拿本例的报价单来说,业务员发起流程后,要部门主管审批,审批过后报价单才生效,这个怎么做到呢?
首先,通过平台端系统管理菜单下的流程设计进入流程设计器界面。
进入流程设计界面后,整个流程设计器划分为如下几个区域:
1.点击【创建流程】按钮。
2.填写流程相关信息。
3.进入设计流程的界面,设计流程的界面主要由四部分组成,中间是设计界面,在这里绘制流程图;左边是图标库,可以把组件拖拽到中间的设计界面进行编辑;下方是属性配置,顶部是菜单栏。
4.选中,在属性设置面板,设置名称和发起人属性。
名称:开始
发起人:starter
5.选中后,在右侧中选择,生成一个人员审批节点。
6.选中节点,在属性设置中设置主键ID、名称、分配用户和动态表单属性。
主键ID:__initiator__ )
名称:发起人
分配用户:固定值 > 分配中填入 ${starter}
动态表单属性:点击
创建两条数据。
7.再次创建一个人员审批的节点。
8.选中新建的节点,设置名称、分配用户和动态表单属性。
名称:部门主管审批
分配用户:固定值 > 候选组填入部门主管
动态表单属性:点击
创建两条数据。
9.选中部门主管审批节点,在右侧工具栏中选择,创建结束一个结束节点。
10.选中结束节点,设置名称属性。
名称:结束
11.至此,流程画完。点击左上角菜单栏中的保存按钮,再点击保存并关闭编辑器,返回流程列表页面。
12.最后一步,发布流程。点击自己设计的流程,进入流程详情页,点击发布按钮。
7. 创建角色和分配权限
前文讲到的流程中用到了一个角色——部门主管。这个角色系统中是没有的,需要我们自己去创建。
1.通过平台端系统管理下的用户管理菜单,进入用户管理界面。
2.点击【角色管理】标签,进入角色管理界面。
3.点击新增按钮。
4.填写角色名、选择权限、系统分类等内容。
角色名:部门主管
选择权限:这个部分的选择,就是在给角色分配权限,指定角色所拥有的权限内容。
上图所示的就是这个系统的权限树,权限精细到表单里的各个操作,结合iDesigner设计器还能精细控制到每个字段的权限。
根据每个角色的情况,选取所需的权限即可。这边我为部门主管这个角色勾选了客户管理和销售管理模块的所有权限。
系统分类:这个视情况而定是否勾选,只有勾选了,才能看到系统分类管理模块下创建的系统分类。我这边是全不够勾选。
5.点击保存。可以看到角色列表中多了一条部门主管的数据。
8. 给用户授予角色
创建完角色后,就需要给对应用户授予这个角色了。
1. 用户管理中给用户授予角色
1.点击【用户管理】标签,进入用户管理界面。
2.在用户列表出,找到需要授予角色的用户。列表拉到最右侧,点击编辑按钮,进入编辑页面。
3.选择角色处选择新建的角色,然后点击保存即可。
2. 授权管理中给用户授予角色
1.系统管理下找到授权管理模块,点击进入。
2.点击左侧角色树上新建的【部门主管】角色,右侧出现授权界面。
3.选择用户处选择授予该角色的用户,然后点击保存即可。
9. 报表
报表是企业管理的基本措施和途径,是企业的基本业务要求,也是实施BI战略的基础。报表可以帮助企业访问、格式化数据,并把数据信息以可靠和安全的方式 呈现给使用者。
简单的说:报表就是说用表格、图标等格式来动态显示数据。
在简搭平台如何制作报表呢?接下来以报价单为例,展示如何制作一份报表。
PS:该部分内容涉及到数据库相关知识,请先学习相关内容再来阅读。
PS:报表相关文档
1.在系统管理下找到报表设计菜单,点击打开报表设计页面。
2.具体的报表界面可以直接在报表设计器的设计区域制作,也可以先在excel做好具体框架后,通过按钮导入excel模板。
3.界面设计完成后,就开始配置数据源。在属性面板上点击【数据源】标签,显示数据源界面。
4.点击配置数据源。内容填写完成后,记得点一下测试连接,提示通过之后,再保存。
5.右键配置好的数据源,新增数据集。
6.创建三个数据集:报价单、需方和供方
报价单:
sql如下:
SELECTa.ID,a.DingGouRiQi AS bjrq,a.DingGouKeHu,a.mbz, AS number,a.ShangPinMingChen,a.ShuLiang,a.ShuiLv,a.DanJia,a.DanWei,a.HanShuiJinE,a.hj,a.yhhhj,a.sbz,b.REAL_NAME AS yewuyuanFROM a, b, t2WHEREa.YeWuYuan = b.IDAND a.ID = :mid
PS: 记得添加参数。
需方:
sql如下:
SELECTa.DingGouLianXiRenText,a.DingGouLianXiDianHua,b.ChuanZhen,b.DianZiYouJianFROM aLEFT JOIN b ON WHEREa.ID = :mid
供方:
sql如下:
SELECTREAL_NAME,MOBILE_PHONE,ADDRESS,FAX,EMAILFROMSYS_USERWHEREID = :kf
1.将数据集上的字段设置到报表对应单元格中。
2.设置完毕,保存。
3.点击,预览报表。可以看到报错了,某些单元格父格设置有误。
经过排查可以发现,以下两个单元格需要重新设置左父格。
设置好这两个单元格的左父格。
4.保存并预览,可以发现此时并未再报错。
5.但此时页面上无数据显示。原因是数据集中的SQL带参数,我们需要参数所需值传递过去才行。
6.回到设计器端的报价单模块,进入编辑页面设计。
7.选择报表按钮,点击右侧属性栏中的编辑事件。
8.选择单击事件,编写js代码。
如下代码可以直接复制,稍作修改即可使用:
var zt = jwpf.getFormValif{ alert; return;}var title = "报价单-"+jwpf.getId;var url = "/crm/ureport/preview _u=file:报价单.ureport.xml&m&kf="+jwpf.getFormVal;jwpf.doOpenUrl;PS:
url中的这部分内容就是设计器的预览地址中的内容:
。
PS:
这部分只需修改圈出的内容即可,改成自己的报表名。
PS:
url中的这部分内容就是数据集中的sql所需的参数,每个参数之间用&隔开。
9.最好保存并更新。

10.回到平台端的报价单模块,选择已经审核通过的数据进入详情页面,点击报表按钮。
至此,本模块所有内容讲解完毕。最后再提一下,模块搭建完毕后,一定要先保存,然后再把内容更新到平台端。
10. 最终效果图
报价单预览图
销售订单预览图


