第10章 低代码新手入门系列,西门子Mendix XPath数据过滤

598 阅读7分钟

介绍

在本章教程中,我们将学会如何在Mendix中使用XPath过滤数据,类似我们在SQL中过滤数据那样。

我们将学习下面的相关操作:

  • Where XPath can be used
  • Queries and tokens.
  • Operators.
  • Constraints.
  • Functions.
  • Variables.

编写 XPath 查询和标记

要在西门子Mendix 中选择数据,您可以使用 XPath,这是一种查询语言,它松散地基于用于在 XML 文件中选择数据的 XPath 语言。您在 Mendix XPath 中找到的许多运算符也存在于 XML XPath 中。虽然这些标记可能相似,但它们的含义在西门子Mendix XPath 中会略有不同,因此让我们看一下查询并解压缩它。在 Java 中选择数据时,可以使用如下查询。

//UserManager.Employee[Name = 'Jones']

//UserManager.Employee 表示 XPath 查询的开始。它指示您正在使用哪个实体,在本例中,是 来自UserManager 模块的Employee 实体 。要开始查询,请使用 [] 符号。您要过滤的属性将在这些括号内。您可以使用 = 符号将属性与值进行比较。这就是该查询的最后一部分的工作方式。****

在 Studio Pro 中编写查询时,您可以在以下上下文中使用 XPath:

  • Retrieve activities in microflows.
  • XPath data source in data widgets.
  • XPath constraints tab in Security.

您可以通过手动添加 []​ 字符来开始和结束查询。输入 [ 后,可以像在微流表达式中一样使用 Ctrl + Space。查询可能如下所示。 

[Name = 'Jones']

现在您已经看到了您的第一个 XPath 查询,是时候介绍您可以在这些查询中找到的标记了:

image.png

XPath 运算符

当您在西门子Mendix Studio Pro 中编写 XPath 时,您可以使用比较运算符来选择所有可用对象的子集。有效运算符列表如下:

在 Java 代码中,XPath 还支持使用+ 、  -、   和 除法符号的加法、减法、乘法和除法 。

XPath 约束

现在您已经掌握了 XPath 的基本理论,是时候切换它并查看使用 XPath 约束数据的所有功能了。使用 XPath 时,您可以在实体上使用任何属性或关联。使用关联时,可以使用 / 操作符访问关联另一端的实体。从那里开始,您可以使用该实体的任何属性或关联。生成查询时,Mendix 将使用链接表,从生成的查询中删除两个关联之间的实体。这显着加快了数据检索速度,因为链接表明显小于实体。到达要过滤的实体后,您可以在属性上使用比较运算符。

//Administrator.Account[UserManager.Employee_Account/UserManager.Employee/Firstname = 'Henry']

如果您需要更多的选择能力,可以使用约束函数进行更复杂的比较。可以在相关 文档中找到约束函数的完整列表。您可以在下面的列表中找到一些关键功能和简短说明:

  • contains(StringAttribute, String) 允许您确定属性是否包含特定字符串。
  • starts-with(StringAttribute, String) 允许您确定属性是否以特定字符串开头。
  • ends-with(StringAttribute, String) 允许您确定属性是否以特定字符串结尾。
  • string-length(StringAttribute) 返回 StringAttribute 的长度。
  • day-from-datetime(DateAttribute) 返回 DateAttribute 的日期
  • true() 返回 true,可用于将 BooleanAttribute 与 true 进行比较。[HasAccount = true()]
  • false() 返回 false,可用于将 BooleanAttribute 与 false 进行比较。[HasAccount = 假()]

XPath 具有一组关键字来确定属性是否具有值。这些关键字为空且为 NULL。要确定是否存在关联,可以在 XPath 查询中使用关联。例如,下面将返回具有关联帐户的所有员工对象:

[UserManager.Employee/UserManager.Employee_Account] 

最后,您可以在 XPath 查询中使用一些系统变量:

  • 对象相关

    • [%Current_User%] 当前用户的ID
    • [%Current_Object%] 上下文中当前对象的 ID
  • 用户角色 每个用户角色都有一个常数。常量是 [%UserRole_{userrolename}%] 例如 [%UserRole_Administrator%]

  • 与时间相关 的时间相关常量,如 [%CurrentDateTime%] 和 [%BeginOfCurrentDay%] 也可用。完整列表可以在文档中找到。

微流表达式编辑器

有时你不能轻易地用视觉表达某些事情。对于这些情况,西门子Mendix提供表达式。表达式可以包含布尔逻辑、字符串函数和数据比较等内容。您可以在某些微流元素中找到的表达式编辑器中使用这些表达式:

  • Decisions
  • Change Object
  • Create Object
  • Change Variable
  • Change List

如果在表达式向导中键入 Ctrl+Space,将出现可用表达式列表。

image.png

创建帐户

您现在将创建一个将附加到HasAccount小部件的微流。该微流程将具有检查是否需要帐户的逻辑,然后根据HasAccount决定是删除还是创建帐户。

  1. 打开Employee_NewEdit页面。
  2. 右键单击Has Account单选按钮,打开Events菜单,然后单击Edit on change action ...。

image.png

  1. Edit Action窗口中,选择Call a microflow
  2. Select Microflow窗口的右下角单击New按钮以创建新的 microflow。将其命名为OCH_Employee_CreateDeleteAccount。在其余窗口上单击“确定”。

新创建的微流有一个Employee类型的参数。Mendix 添加了此参数,因为您从连接到 Employee 对象的数据小部件中创建了微流。您可以检查Employee对象的 HasAccount属性的状态,以确定它是否设置为 true,表示Employee对象需要一个帐户。此外,我们要检查Employee对象是否已经有一个帐户。为此,您必须检索它。************

  1. 打开您新创建的微流并将检索活动从工具箱拖到微流上。

image.png

  1. 双击Retrieve活动并使用右侧的Select按钮在Employee_Account关联上选择Account对象。单击确定
  2. 将一个决策拖到您的微流上并双击它以打开表达式编辑器。

image.png

需要输入帐号吗?标题中。然后将光标放在表达式编辑器中,按 Ctrl+Space 以查看您有哪些选项。查找 $Employee变量并使用 / 字符查找HasAccount变量。单击确定

image.png

您的决策右侧的流程现在是红色的。这是因为 Mendix 不知道此流程是否适用于HasAccount属性设置为truefalse的情况。

  1. 右键单击Decision右侧的流并将Condition 值设置为true

image.png

  1. 将鼠标移到Decision上,单击底部的白色圆形圆圈并向下拖动以创建新流程。从菜单中选择决策。

image.png

  1. 直接从第一个决策将新决策 拖到您的流程中。

image.png

  1. 设置两个决策的表达式,通过将Account对象与关键字empty进行比较来检查它是否存在。确保用有用的描述填写标题。 单击确定

image.png

  1. 将从您最正确的决定到结束事件的红色流程设置为 true。
  2. 在检索的右侧添加一个创建对象活动。
  3. 双击Create Object活动并单击屏幕右侧的Select按钮。使用过滤器查找Account实体,然后单击Select。将客户端中的CommitRefresh设置为Yes

image.png

  1. 单击新建以添加新成员并选择UserManager.Employee_Account。使用表达式编辑器和 Ctrl-Space 查找 Employee 对象。这将在您的Employee对象和新创建的 $NewAccount对象之间创建关联,然后单击OK

image.png 接下来,您应该通过初始化PasswordName来提供密码和用户名的默认值。使用New按钮为两者创建初始化条目。您可以将密码设置为 “Passw0rd” (注意密码周围的引号)。对于用户名,您将使用Employee实体的名字和姓氏。使用toLowerCase函数确保您获得外观一致的用户名

image.png

  1. 单击确定
  2. 从您的微流中删除结束事件。 稍后您将添加回来。

image.png

  1. 重要的是使用Commit Object活动显式提交 Employee对象,以确保存储您的帐户和员工之间的关系。请记住在提交对象活动中启用客户端中的刷新。
  2. 作为最后一步,如果不再需要该帐户但它仍然存在,您需要删除该帐户。为此,您可以在Account对象上使用 Delete Object活动。将所有必需的元素添加到您的微流中,使其如下图所示。请记住在“删除对象”活动中启用客户端中的刷新。

image.png

好了,我们今天的关于使用XPath在Mendix里面进行数据过滤的教程就结束了,下一章我们将会来学习重要的数据安全相关的配置,这个功能将帮助我们保护我们的应用相关数据。

低代码新手入门系列,快速导航