一、 环境准备

1: 连接外围数据库是Mendix的内置功能,不同数据库的连接方式都大同小异,本文以SQL Server为例讲解;

2:本文假设读者是Mendix初级学者,因此对每一步骤作者都尽量表述详尽,熟练学者可1.5倍速阅读。

3:安装清单:

二、 下载Database Connector及相关配置

假设你已经安装了Mendix Studio Pro并建好了你的项目,在Studio Pro的右上角点击图标(App Store)进入App Store界面(内嵌在Mendix Studio Pro工作区当中)。

在左边目录中选择 Connectors->Data或者直接在搜索框输入 Database, 找到“Database Connector”,点开:

首先点击“Download”按钮下载,默认选择“Add as a new module”将其作为新的组件添加到项目中。

导入后,你可以在项目路径 App Store modules下找到它。

然后,在App Store里点击Document页签下的Database Connector链接,在网页中打开参考文档,查看具体使用信息及注意事项。值得注意的是前提条件的部分:

你需要下载相关的JDBC driver/驱动文件,并解压放到Mendix项目的userlib目录下,然后在Mendix项目中定义数据库连接常量的时候需要将对应的路径信息维护上(下文会讲到),如果你选择的数据库是PostgreSQL就参照这里给的例子。我们的数据库是SQL Server,因此我们点击链接Common JDBC Drivers跳转到下文JDBC Drivers部分来下载我们需要的驱动。

选择我们要的SQL Server数据库,就会到了我们需要下载Driver的地址(https://www.microsoft.com/en-us/download/details.aspx?id=11774),下载即可。

可自选保存在临时的目录下,解压,解压后到目录jre8下(比如~\Microsoft JDBC Driver 6.0 for SQL Server\sqljdbc_6.0\enu\jre8)将.jar (我这里是sqljdbc42.jar)文件拷贝到项目的userlib(我这里是C:\Users\xxx\Documents\Mendix\MyLaunchPad\userlib)目录下。

至此,Mendix Studio Pro里的数据库连接器下载安装工作完成。

三、 数据库中的准备工作

下面我们进到数据库,做一些数据准备工作,包括:建数库,建表和建用户。

当然,首先你要构思好你需要进行操作的数据模型,比如我这里的设计是维护一张服务成本表(Service Cost Rate)。

打开你的数据库管理器,我这里是SQL Server Management Studio。

1. 新建数据库

姑且命名为ExternalDB,保存。

2. 建数据表

根据设计好的表结构建字段及属性。

我的参考信息:

Table: CostRates

CostRateID  (主键)

int

CostDescription

nvarchar(500)

CompanyID

nvarchar(50)

ValidTo

nvarchar(50)

CostRate

decimal(18, 2)

3. 建用户

定义数据库访问用户。在SSMS中,访问路径 Security->Login,右键->New Login (不同数据库的位置可能略有差别,总之是定义一个数据库的访问用户)。

  • 命名为:MXadmin
  • 密码:mendix

将用户设置成为数据库Owner:双击左边的User Mapping, 选中你的数据库“ExternalDB”, 右下角的数据库角色里勾选 db_owner,保存。

这时可以看到该用户已经建成:

四、 Mendix Studio Pro中建数据模型与数据库连接常量

1. 数据模型/Data Model

同样的数据模型,我们在Mendix中也建一遍,数据类型保持一致。

2. 创建数据库访问常量

  • URL:  右键MyFirstModule -> Add other -> Constant:

  • 命名:DB_URL
  • 类型:String
  • 默认值:jdbc:sqlserver://localhost;database=ExternalDB;

回到Mendix Studio Pro,继续建两个常量:

DB_USER:

DB_PASS:

至此,访问本地数据库的准备工作已经就位,下面就开始开发你的应用,实现对数据库的增删改查了。

五、 实现增删改查

1. 应用框架设计

简单描述一下本文所演示的应用页面的主体设计思路。首先应用采用SAP模板,入口为My Launchpad(我的工作面板),点击我的面板中的第一个应用 “成本维护”将跳转至成本维护的概览界面,在这里我们完成增删改查的动作。页面链接部分这里不做赘述,在对应链接属性中配置On Click的响应为“Show a Page”,然后选择默认的List控件即可。看截图:

2. 概览页面数据初始化填充

新建的页面命名为CostRateOverview,用于展示成本的概览信息,并提供增删改查入口。

2.1 调整CostRateOverview页面布局

调整CostRateOverview页面布局,删除不需要的控件。

修改页面抬头和描述;

修改现有字段,属性,将需要展示的信息按顺序排列在页面上: CostDescription, CompanyID, ValidTo, CostRate.

在参数的位置,点击“New”,选择CostDescription.

将参数{1} 添加到字段描述中。

同样的方法修改其他属性字段。

同时确保暂时无事件响应的按钮,其属性中 On Click 响应的值选为Do Nothing.

2.2 数据填充微流设计

选中List控件,从右边的工具框Connector页签下将定义好的Data Entity “CostRates”拖拽到List控件。

弹窗选择通过Microflow/微流的方式来填充数据,勾选掉“Automatically fill the content of the list view”,我们暂时选择手动添加属性字段并通过微流填充数据。

双击左边导航栏中微流名称“Show_CostOverview”进入微流编辑工作区。现在我们来实现从数据库查询CostRates表信息并填入刚才定义的页面的ListView组件中。

如同我们写代码之前需要构思函数架构一样,我们在设计微流之前先要想好它要帮我们干什么:

从指定的数据库ExternalDB读取CostRates表信息并填入刚才定义的CostRateOverview页面的ListView控件中;

<- 而“填入xx控件”这个动作是不是已经通过属性配置/关联好了,那么我的任务描述是不是就可以简化成:

<-从指定的数据库ExternalDB读取CostRates表信息,这里面还蕴含一个内置逻辑(输出的结构必须跟Listview中接收的结构一致是不是,不难想象,这里是DataEntity: CostRates), 于是我就有了我的函数设计:

<-

输入:

数据库访问URL(我已经定义好的常量DB_URL);

数据库访问用户(DB_USER);

数据库访问密码(DB_PASS);

输出:一个DataEntity: CostRates 类型的结构/表(这个参数我好像还没定义吧,没关系,往下看);

好,我们来实现微流:

<- 

1. 定义一个DataEntity: CostRates类型的参数传进微流函数,接收查询出来的数据:

微流编辑区提供了非常方便的快捷Action Activity,点一下,在要放置的目的地再点一下,就好了,这里我们来定义一个;

双击Activity,选择Action类型,这里我们要定义一个Object参数,因此选择Create Object.

直接可以选择定义好的Entity 关联进来,非常方便(Select->在弹框里选择你的Entity)。

取个名字方便区分,比如:CostRate_Obj.

这样输出参数就定义好了,可以执行查询函数了。

2. 定义数据库查询

Mendix Studio Pro的 Toolbox给我们提供了很多可以直接拖拽使用的Action,比如我们将要使用到的“Execute Query”, 选中直接拖拽至工作区。

双击Execute Query这个Activity,在弹框里按照之前的设计填入参数即可,像极了我们平时写函数,对不对。

点击每个参数输入区域后面的按钮“Edit”, 按照这个语法格式选择参数即可。

选择常量的时候,只要输入个@字符即可联想出已定义好的常量,支持模糊查找。

按照这种方式,定义好输入参数“Jdbc url”, “User name”, “User password”。

Sql的部分,我们要编辑SQL查询语句来查询数据表信息,格式如下:

'Select CostRateID CostDescription, CompanyID, ValidTo, CostRate from CostRates'

【备注】CostRateID暂时不用显示在界面上,但需要取出,后续进行数据库操作时使用;

Result Object选择刚定义的参数$CostRate_Obj.

输出端:

List name: ListofCostRate (在微流的终端时候使用,作为整个微流的输出)

3. 设置输出格式

在微流的终点,双击,选择输出类型为List,值为刚才定义的List Name $ListofCostRate。

这样微流定义完毕了。

2.3 试运行

点击Run Locally编译试运行 。

点击View进入应用界面。

点击成本维护,查看服务成本Overview界面,因为数据表目前为空,因此没有数据展示。

数据库表添加信息:

添加信息之后再次运行:

3. 添加

页面设计

- 增加的按钮在主页面的右上角

- 新建一条成本记录需要填写一个新的表单,因此需要一个新的Page

- 新建的时候输入的信息包括:成本描述/ CostDescription,公司ID/ CompanyID, 截至时间/ValidTo, 价格/CostRate.

- 输入完成后应该有保存按钮

- 保存成功应该有弹窗提示

- 放弃新建应该有Cancel按钮,并返回上一页面

根据上述设计进行分解实现:

 

 

新建页面CostRateNew

 

Save按钮响应事件 Call a microflow,新建一个微流

 

 实现微流CostRate_InsertUpdate,向数据库插入页面CostRateNew上输入的信息:

定义写数据库的需要用到的参数,以CostRateID为例:

同样方式定义其他参数,完成后如下:

添加一条记录对应就是向数据库插入一条数据,因此下一步我们要执行SQL语句向数据库插入一条记录,插入的值为当前页面上的输入值(上述定义的参数获取)。在Toolbox里找到Execute Statement的动作,拖拽至工作区。

完成之后关闭当前页面,因此我们要在后面加一个Action:Close Page。

同时为了用户友好,我们弹框提示信息已保存,信息中可以引用参数CostRateDescription表明是该条记录已保存,这个Activity叫“Show Message”。

运行程序,验证添加按钮

到数据库中验证记录添加成功:

通过对上述过程尤其是“添加”按钮的详细的介绍之后,我们基本覆盖了Mendix Studio Pro 快速开发的基础操作,因此后续的功能实现我们会介绍基本逻辑总览界面,不再赘述了,如有问题可以后续在讨论。

4. 编辑/修改

编辑/修改的界面设计:

- “编辑”按钮位于每一条成本记录的左下角

- 点击“编辑”按钮后进入新的编辑界面,界面应该跟新建一条记录的界面相似,不同的是新建界面中各属性字段为空,编辑时各属性字段为被编辑的值

- 可编辑的信息包括:成本描述/ CostDescription,公司ID/ CompanyID, 截至时间/ValidTo, 价格/CostRate.

- 输入完成后应该有保存按钮

- 保存成功应该有弹窗提示:某条记录已修改

- 放弃修改应该有Cancel按钮,并返回上一页面

根据上述设计进行分解实现:

点击Edit按钮之后实现一个微流来调出编辑(新建)页面并将当前值填充到页面上。

响应Edit事件的微流主要做两件事情,第一按照CostRateID去数据库读取当前的数据,第二是调出页面CostRateNew并将上一步读出的数据放到页面里供编辑。

'Select * from CostRates where CostRateID = '+ $CostRates/CostRateID+';'

在点击Save按钮的时候,微流CostRate_InsertUpdate会被调用,之前在添加的时候我们已经实现了这个微流,这里要对实现的逻辑做一些修改,使得它也能满足Edit的需求:

- 如果Cost已经存在则Edit,否则新建/添加

- 在Edit这条线上:执行SQL Update语句进行Update

- Close Page

- 弹框提示修改成功

- 回到主流程

因此实现后的微流(核心部分)如下,并配有详细信息参考:

判断条件:

Update所用的SQL语句:

保存并运行:

  

5. 删除

删除操作没有界面设计,逻辑相对简单:

- 点击删除按钮,调用微流

- 对应数据库条目删除

- 刷新页面

按钮属性:

微流定义:

6. 查询

查询界面设计:

- 查询按钮在设置在页面的右上方,“添加”按钮旁边

- 点击查询按钮会弹出查询输入界面,界面中包含一个输入框,一个查询按钮,一个取消返回按钮

- 输入信息有格式要求(时间关系,这里只按ID搜索)

- 找到的信息应当在新弹出页面展示,只读,有确认关闭按钮

- 如果查不到此项,应该有弹窗提示

Data Model

查询输入框的输入文字需要有对应Data Model设计。

 

查询按钮定义:

查询主界面定义:

 

微流定义:

 

 

 

 

 

 

Search Result界面:

 

运行与测试:

查询失败:

 

 查询成功:

 

 

六、 一些经验性提示

如果遇到连接错误,一般会提示检查防火墙设置,TCP/IP端口是否可用等信息,按要求查看:

  • 检查防火墙设置
  • 检查SQL Server配置 


更多信息,请访问以下链接:

Mendix官网:https://www.mendix.com/zh/

Mendix中国论坛:https://forum.mendix.tencent-cloud.com/

Mendix行业解决方案:https://solutions.mendix.com/

Mendix平台指南:https://www.mendix.com/evaluation-guide/

Mendix动画展示:https://www.mendix.com/demos/

感谢阅读!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐