• outsystems合集系列(三)


    Modeling Data

    这一节我将介绍在outsystems中建模数据(model data)的一些思路。注意在这里我说“建模数据”而不是“创建数据”,我认为二者是不一样的,建模数据代表只是创建真实数据应该遵守的存储规则,而不是直接创建真实的数据。

    当我们在讨论建模数据的时候,我们要知道真实数据它是要包含app重要信息的,这些信息通常需要在databases中被存储和恢复(retrieve)。app真实数据代表不同业务模型,在outsystems,那些模型被建模(be modeled)并被entities引用。

    Database Entities的介绍

    默认情况下,entity被创建时就带有id属性,它唯一标识了entity中的每一条记录(如果需要,可以修改此属性)。它作为数据库表的主键,它为entities间建立关系提供支持。除了ID,entities被要求至少拥有一个其他属性。和ID一样,其他属性被映射到database的列。

    关于基本数据类型(basic data types),在outsystems中存在几种选择。

    1. alphanumeric(含字母或数字的)类型
      像text、电话号码、email均可使用
    2. numeric(数值的)类型
      像integer、long、decimal、currency均属于numeric的范畴
    3. Dates(日期) and Times(时间)类型
      Date和Time既可以结合在一起,又可以分开独立
    4. Logic类型
      值为True或False
    5. Large Object类型
      像存储图片的二进制数据类型(binary data type)
    6. Referential类型
      像EntityID就应使用Referential类型作为属性

    这六种基本数据类型都有默认值,也就是说entitiy的属性(or say 变量)永远都有值。

    在outsystems中,属性名的定义是有规范的,因为outsystems会根据你的属性名去推断你的数据类型。我们无需手动定义属性的数据类型。

    entity内置实体行为(built-in entity action),这些行为对应的是普通CRUD(Create、Retrieve、Update、Delete),它们对entity的行(row)进行操作。

    内置实体行为在Server Studio中如下图展示
    在这里插入图片描述
    内置实体行为是outsystems自动创建的,且不可被修改。这些内置实体行为可以被使用到应用的业务逻辑中,用于操作entity中的数据。

    如何创建Database Entities

    在上一节,我们认识了什么是entity、Database Entities的6种基本数据类型、outsystems根据entities属性名自动推断出对应数据类型的机制以及属性名和数据类型的推断关系表、outsystems为每个实体生成的内置实体行为。在这一节中,我将介绍如何在Server Studio中创建Database Entities。

    首先到我们的开发环境(Server Studio),打开一个module,打开后看到界面

    选中右上角Data标签(tab),在Data标签中,有一个叫Entities的文件夹(folder),右键点击Entities,然后点击Add Entity to Database

    在这里插入图片描述
    给新建的entity起个名,然后点击左边的三角形(expand triangle)展开
    在这里插入图片描述
    从上图展开的Entity中我们可以看到,outsystems预先在entity中创建了一个Id属性,还有一些实体行为(entity actions)。

    我们右键点击Customer,创建两个实体属性(Add Entity Attribute),点击Id属性

    在这里插入图片描述

    我们可以看到在底部有Id属性的信息:名字为Id、数据类型为Long Integer、是否自动排序(Is AutoNumbered)为Yes。

    最后,创建完了entities我们要让outsystems根据entites在服务器(platform server)中生成物理数据库(physical database)的表,我们只需要点击最上方的一键发布按钮(one-click publish button)

    现在entity已经创建好了,并且可以在database中存储数据。

    如何用excel快速导入真实数据到entity?

    这一节,我将给大家展示如何快速从excel中导入(bootstrap)真实数据到entity。

    我们准备了以下这个excel文件,包含了一些customer的信息。一张表(sheet),四列(Name、Email、PhoneNumber)。

    在这里插入图片描述

    让我们用entity的预览数据看目前有哪些数据在customer entity,右键点击Customer entity,点击View Data

    在这里插入图片描述
    正如我们所看到的那样,Customer entity中没有数据

    在这里插入图片描述
    我们现在要往Customer entity中导入数据,右键点击Customer entity,鼠标覆盖在Advanced选项上,点击Create Action to Bootstrap Data from Excel选项

    在这里插入图片描述
    双击我们预先准备好的Excel文件

    在这里插入图片描述
    弹出一个提示框,里面张表格(table)

    在这里插入图片描述
    Service Studio会分析Excel文件,然后尝试匹配excel的列和entity的属性,弹出的提示框展示了Service Studio的对Excel列和Customer属性的映射执行(mapping performed)情况。如我们所见,Excel文件的PhoneNumber列没有匹配到任何属性。映射的机制是基于Excel列和entity属性名和数据类型,如果它们不匹配,那么database中对应字段将不会有数据。

    点击proceed创建逻辑和定时器

    Server Studio会导入数据到customer entity
    在这里插入图片描述
    点击一键发布按钮会上传编译部署模块

    在成功部署模块之后,数据将会被导入到entity,让我们看看data具体的怎样被导进来的

    在processes标签中,Timers文件夹包含了导入customers的定时器(timer),定时器是在我们点击procceed的时候,Service Studio自动创建的。

    在这里插入图片描述
    在outsystems,定时器是后台作业(background jobs),在这个例子中,我们可以看到timer的Schedule属性值为When Published,意味着当模块被发布的时候该timer会被执行。

    在这里插入图片描述
    双击上上图的BootstrapCustomers,Server Studio会跳转到关联了的Logic(逻辑)标签,

    下图展示了如果entity已经包含数据,逻辑流程(logic flow)将只做简单地验证,如果entity中没有数据,它将会加载excel文件的每一行,在database中创建对应的customer。

    在这里插入图片描述
    让我们回到data标签再一次预览data,因为timer在我们执行一键部署的时候已经被执行,因此data被成功地插入到了database table。

    在这里插入图片描述

    如何用excel快速创建entity并导入真实数据?

    上面我们学会了如何往已经存在的entity中导入数据,我们将学习如何用用excel创建entity并导入数据。

    我们准备了以下这个excel文件,里面有两张表。表一有Name、Description、Price三列,代表产品。

    在这里插入图片描述
    表二有Name一列,代表产品品类(category)

    在这里插入图片描述

    现在我们切换到Server Studio,要导入entity和它们的data,我们需要打开Data标签,右键点击Database,选择Import New Entities from Excel…

    在这里插入图片描述
    双击我们的excel文件——>点击IMPORT
    在这里插入图片描述
    如我们所见,两张表被导入了进来,并且Server Studio为我们自动创建了Id属性

    在这里插入图片描述
    我们看到两个entity的名字分别为Sheet1和Sheet2,而不是Product和Category。是因为本教程准备的excel文件中表的表名为Sheet1和Sheet2,如果想导进来的Entity名字为Product和Category,需要在导入之前将Sheet1和Sheet2改名为Product和Category。由于本人的制作失误造成您的不便,望谅解。

    最后只需点击一键发布按钮,ServerStudio执行BootstrapCustomers逻辑,数据就插入到了database。

    在这里插入图片描述

    Static Entities的介绍

    在这节,我们将介绍什么是static entities,研究static entity拥有的相关特性——属性和记录(attributes and records) 。

    什么是static entities?

    static entites是entity的一种特殊类型,它们允许你创建一个预定义的值,在你的app里面使用。

    让我来深入探讨什么叫”预定义值列表,在app里面使用"。

    static entity类似于枚举(enumeration)——a list of items in a collection。

    在outsystems,这些items称为记录(records)。static entities拥有属性和记录,鉴于它们的静态特质,记录在运行时(runtime)是无法改变的。改变记录只能发生在开发设计应用的时候。

    下面我们来创建一个static Entity

    在这里插入图片描述
    static entites的一个特性让它们与普通entity区别开来。static entity只有一个entity action——the Get action。因为这些entities是静态的,它们不能在运行时被改变,只能被读取。所以当其他entities有多个entity action的时候,static entity只有一个

    在这里插入图片描述
    默认情况下,当我们创建一个static entity,Server Studio自动帮我们创建了四个属性——Id、Label、Order、Is_Active,你可以改变这些默认的属性

    我们往static entity中添加一个属性Color Code,你也可以添加其他的属性

    在这里插入图片描述
    右键点击Records文件夹,创建三条记录High、Medium、Low

    在这里插入图片描述
    每一条记录都有一个标识(Identifier)

    在这里插入图片描述
    每个记录都属性
    a

    回到最初的问题:什么是预定义值,在app里面使用。

    static entity由记录和属性组成,记录和属性的关系是属性决定记录,不同的属性值造就不同的记录。对于outsystems应用来说,记录就是一个个值,存放在database里面,万年不变,提供给app使用。

  • 相关阅读:
    requests 实践
    网站一键设置置灰的方法
    Live555(一)
    网络编程/计算机网络
    Hexagon_V65_Programmers_Reference_Manual(19)
    02Redis --Redis入门、安装、启动、性能测试、基础知识
    【Vue3】响应式原理
    Qt QML学习资料链接
    内网收集哈希传递
    《深度探索C++对象模型》阅读笔记 第五章 构造、解构、拷贝语意学
  • 原文地址:https://blog.csdn.net/Monsterof/article/details/127879854