OneNET应用开发环境 由浅入深应用开发环境
应用开发环境介绍 初识应用开发环境 开发入门 开发进阶
开发指南
开发应用 定义数据对象 创建聚合对象 开发脚本 管理事件 开发流 配置审批流程 开发标准页面 开发高级页面 开发商业流 配置连接器 开发Email发送功能 配置工作流 开发报表 自定义BO 管理平台

定义数据对象

对象用于存储您所在组织或者业务特有的数据,对应数据库中的数据表,您可以通过新建自定义对象来存储应用程序功能相关的数据。

系统对各租户的数据进行了隔离, 一个用户只能看到他所在租户的对象和数据。

对象的类型

系统支持两种类型的对象:

  • 标准对象:是系统预置对象,您只可以新增字段,禁止修改、删除基线字段。
  • 定制对象:是租户自定义对象,允许增删改对象以及对象的字段。定制对象又分为三种:
    • 对象:租户自定义的对象。
    • 虚拟对象:使用外部数据时,需要将外部数据映射为应用开发环境中的一个虚拟对象。
    • 视图对象:是一种应用开发环境内的虚拟对象,提供了对象视图。

字段

对象的字段与数据库中表的字段类似,需要指定字段名、字段类型、 长度、是否唯一等属性。系统支持两种类型的字段:

  • 对于定制对象,包含两种类型的字段:

    • 标准字段:系统字段,如图1所示。

      图 1 定制对象的标准字段

-   自定义字段:由租户自定义的字段,允许增删查改。

    系统会自动为自定义字段添加“\_\_CST”后缀。当前平台支持的字段类型如[表1](#table19855183217501)所示。

    **表 1**  字段类型

    <a name="table19855183217501"></a>
    <table><thead align="left"><tr id="row085343245019"><th class="cellrowborder" valign="top" width="21.08%" id="mcps1.2.3.1.1"><p id="p48531032105014"><a name="p48531032105014"></a><a name="p48531032105014"></a>字段类型</p>
    </th>
    <th class="cellrowborder" valign="top" width="78.92%" id="mcps1.2.3.1.2"><p id="p108531132155016"><a name="p108531132155016"></a><a name="p108531132155016"></a>字段说明</p>
    </th>
    </tr>
    </thead>
    <tbody><tr id="row1185311321507"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p78531132125015"><a name="p78531132125015"></a><a name="p78531132125015"></a>文本</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p48531632115016"><a name="p48531632115016"></a><a name="p48531632115016"></a>任何字母和数字组合,最多可输入255个字符。</p>
    </td>
    </tr>
    <tr id="row58531532115019"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p7853163219508"><a name="p7853163219508"></a><a name="p7853163219508"></a><span>加密文本</span></p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p17271659195216"><a name="p17271659195216"></a><a name="p17271659195216"></a><span>任何字母和数字的组合,并且以加密格式存储。最多可输入111个字符。</span></p>
    <p id="p108531328503"><a name="p108531328503"></a><a name="p108531328503"></a>注意:该类型字段不能唯一,不能建索引,不能用于条件字段及公式字段。</p>
    </td>
    </tr>
    <tr id="row9853173213507"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p98531327506"><a name="p98531327506"></a><a name="p98531327506"></a>文本区</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p3853103225017"><a name="p3853103225017"></a><a name="p3853103225017"></a>允许用户输入多行文本,最多可输入256K字符。</p>
    </td>
    </tr>
    <tr id="row1385383215015"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1285373216509"><a name="p1285373216509"></a><a name="p1285373216509"></a>数字</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p5460195172014"><a name="p5460195172014"></a><a name="p5460195172014"></a>任何数字。保存数据时,会删除前置零。</p>
    </td>
    </tr>
    <tr id="row15853133205013"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p785343295016"><a name="p785343295016"></a><a name="p785343295016"></a>百分比</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p146065182014"><a name="p146065182014"></a><a name="p146065182014"></a>允许用户输入百分比数字(例如,"10"),并自动向数字添加百分号。</p>
    </td>
    </tr>
    <tr id="row1985414324501"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p13853632135014"><a name="p13853632135014"></a><a name="p13853632135014"></a>电话</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p11460251142015"><a name="p11460251142015"></a><a name="p11460251142015"></a>允许用户输入任何电话号码,并自动将其转换为电话号码格式。</p>
    </td>
    </tr>
    <tr id="row15854203265011"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1023917614493"><a name="p1023917614493"></a><a name="p1023917614493"></a>币种金额</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p1846019516201"><a name="p1846019516201"></a><a name="p1846019516201"></a>允许用户输入美元或其他币种金额,并自动将其转换为币种金额格式。</p>
    </td>
    </tr>
    <tr id="row1854632105010"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1185419329506"><a name="p1185419329506"></a><a name="p1185419329506"></a>日期</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p19460115114208"><a name="p19460115114208"></a><a name="p19460115114208"></a>允许用户输入日期或从弹出式日历中选择日期。</p>
    </td>
    </tr>
    <tr id="row138541332125013"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p16854123219502"><a name="p16854123219502"></a><a name="p16854123219502"></a>日期/时间</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p1316722915391"><a name="p1316722915391"></a><a name="p1316722915391"></a>允许用户输入日期和时间,或从弹出式日历中选择日期、并自动获取当前时间。</p>
    </td>
    </tr>
    <tr id="row48541032165012"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p885415323505"><a name="p885415323505"></a><a name="p885415323505"></a>电子邮件</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p1263153119397"><a name="p1263153119397"></a><a name="p1263153119397"></a>用户输入电子邮件地址时,将对其进行验证以确保格式正确。</p>
    </td>
    </tr>
    <tr id="row19854153218509"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1785433218509"><a name="p1785433218509"></a><a name="p1785433218509"></a>复选框</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p20450932143917"><a name="p20450932143917"></a><a name="p20450932143917"></a>允许用户选择“真”(选取)或“假”(不选取)。</p>
    </td>
    </tr>
    <tr id="row9854193235012"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1485403265017"><a name="p1485403265017"></a><a name="p1485403265017"></a>选项列表</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p10747163315398"><a name="p10747163315398"></a><a name="p10747163315398"></a>允许用户从定义的列表中选择任一值。</p>
    </td>
    </tr>
    <tr id="row28548328503"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p2085453295016"><a name="p2085453295016"></a><a name="p2085453295016"></a>选项列表(多项选择)</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p4747134153911"><a name="p4747134153911"></a><a name="p4747134153911"></a>允许用户从定义的列表中选择多个值。</p>
    </td>
    </tr>
    <tr id="row16854173215012"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p10854732125016"><a name="p10854732125016"></a><a name="p10854732125016"></a>URL</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p12638635183917"><a name="p12638635183917"></a><a name="p12638635183917"></a>任何有效的网址。</p>
    </td>
    </tr>
    <tr id="row68543324509"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1854432205019"><a name="p1854432205019"></a><a name="p1854432205019"></a>查找关系</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p18441337193911"><a name="p18441337193911"></a><a name="p18441337193911"></a>通过关联当前字段与另一对象的ID字段,创建本对象与另一对象的引用关系。定义了查找关系后,本字段的取值只能来源于关联对象。</p>
    </td>
    </tr>
    <tr id="row785423245014"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p685443213509"><a name="p685443213509"></a><a name="p685443213509"></a>外部查找关系</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p1193513773918"><a name="p1193513773918"></a><a name="p1193513773918"></a>与“查找关系”类似,只是关联的对象是预定义的外部数据源。</p>
    </td>
    </tr>
    <tr id="row138545329501"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p1685493216505"><a name="p1685493216505"></a><a name="p1685493216505"></a>自动编号</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p15138114018394"><a name="p15138114018394"></a><a name="p15138114018394"></a>系统使用您定义的格式生成序列编号。该编号对于每条新记录会自动递增。</p>
    </td>
    </tr>
    <tr id="row1085443245018"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p78542321501"><a name="p78542321501"></a><a name="p78542321501"></a>公式</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p732424143918"><a name="p732424143918"></a><a name="p732424143918"></a>系统使用您定义的公式表达式生成只读字段。表达式中使用的源字段的值变化时,本字段值同步更新。</p>
    </td>
    </tr>
    <tr id="row188558323509"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p885463215505"><a name="p885463215505"></a><a name="p885463215505"></a><span>主从关系类型</span></p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p2090641314585"><a name="p2090641314585"></a><a name="p2090641314585"></a>通过关联当前字段与另一对象的ID字段,创建本对象与另一对象的主从关系。定义了主从关系后,本字段的取值只能来源于关联主对象。并且,当用户删除关联主对象中的数据时,本对象中的从数据也会被删除。</p>
    </td>
    </tr>
    <tr id="row1855113216508"><td class="cellrowborder" valign="top" width="21.08%" headers="mcps1.2.3.1.1 "><p id="p38559326501"><a name="p38559326501"></a><a name="p38559326501"></a>多语言</p>
    </td>
    <td class="cellrowborder" valign="top" width="78.92%" headers="mcps1.2.3.1.2 "><p id="p1387210391745"><a name="p1387210391745"></a><a name="p1387210391745"></a>允许用户从自定义资源表中选择多种语言内容。</p>
    </td>
    </tr>
    </tbody>
    </table>

验证规则

在向对象中录入记录数据时,为了保证对象数据的有效性,可以定义一些校验规则,对字段值以及各字段之间的逻辑关系进行校验。例如name字段不能为空,MinPrice字段不能大于maxPrice字段等。

每个校验规则包含一个逻辑表达式和一个错误提示,表达式的计算结果为true或false。当返回true时,表示错误条件成立(即记录数据无效),系统将返回错误提示信息。

触发器

与数据库中的触发器类似,可以为对象定义触发器,在增/删/改对象的记录数据时,自动触发自定义的Java Script脚本执行,脚本的执行结果将会影响主操作(即增删改记录)的结果,系统保证主操作与触发器在一个事务中执行,要么都成功,要么都失败。

例如:有一个时间字段,可以输入yyyy-mm-dd日期格式的时间,也可以输入“now”代表当前时间。为统一日期格式,在插入数据前,做一个“插入前”的触发器,若用户输入该字段的值为“now”时,系统把数据转换为当前时间。

系统支持如下6种触发事件:

  • 插入前/插入后:执行insert操作时才会触发。
  • 修改前/修改后 :执行update操作时才会触发。
  • 删除前/删除后:执行delete操作时才会触发。

布局

对象的标准页面布局,决定了对象详情页面各字段展示的排版布局,也决定了新增对象记录时,在录入界面中各字段的位置。系统根据配置的布局自动生成展示页面。

系统为对象预置了缺省的布局,租户也可以根据需要定制。对于租户建的自定义对象,系统会自动创建对象的Detail和Records标准页面,Detail页面缺省按字段创建的先后顺序显示该对象的全部字段。租户可以根据需要新增其他布局。

  • 定义对象
    您可以根据业务需求自定义对象,用来存储组织或者业务特有的数据。
  • 定义视图对象
    您可以通过创建视图对象,通过可视化的方法来实现多个对象之间关联数据查询功能,获取您需要的对象视图,而不用手动编写SQL语句。
  • 为第三方数据创建虚拟对象
    当您的业务使用了外部数据对象时,您可以通过创建虚拟对象,将外部数据对象映射为应用开发环境的数据对象。
  • FAQ
    在定义数据对象时,您可以参考本节解决一些常见问题。

results matching ""

    No results matching ""