热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

【ERP】利用内建对象RecordGroup做重复性验证-mysql教程

在开发Oracleforms的过程中,唯一性验证及重复性验证时是最基本的form验证功能之一了。通常情况下,通过为基表创建唯一性索引的

在开发Oracle forms的过程中,唯一性验证及重复性验证时是最基本的form验证功能之一了。通常情况下,通过为基表创建唯一性索引的

背景描述

在开发Oracle forms的过程中,唯一性验证及重复性验证时是最基本的form验证功能之一了。通常情况下,通过为基表创建唯一性索引的方式来达到唯一性验证已经可以满足日常开发的要求。但是,不免会有特殊的行为和需求唯一性索引的方式还是搞不定的,比如一条记录中的两个字段的值取自相同的数据来源,但是他们彼此之间以及记录与记录之间都不能允许有重复。

幸运的是,对于特殊的情况,开发者们也有很多解决方案加以应对,比如利用PL/SQL的内建数组来存储每一次录入的需要做验证的值,在验证时迭代所有数组中的值去做重复性验证。甚至你也可以利用字符串来存取单一的一个值的集合来做同样的事情,虽然我本人并不推荐使用这种方式;) 。

总结起来大概有这么几种:

  • 使用PL/SQL数组 (缺点:与form结合性不好)
  • 使用字符串 (操作起来复杂,不宜使用,验证多列时尤为明显)
  • 使用FIRST_RECORD, LOOP, 循环界面记录 (记录行多时速度慢,效率低,用户视觉体验不佳:因为光标一直在动。。。)
  • 如果还有请帮我补充;)

    记录组(Record Group)

    在开发实践中我们发现,在Oracle forms内部已经提供了一种内建的类似于数组的对象Record Group,我想提起他来大家肯定都不陌生~ 是啊,这有什么好惊讶的?我们在创建LOV的时候不是经常用到它吗。。。但是,Oracle也提供了一系列的内建API来帮助我们动态创建、删除和操作记录组以及记录组中的元素,,而且可以以二维的形式存储多行数据。因此这个记录组对象就可以以编程的方式为我们所用。

    相比其他的方式,我认为使用记录组的方式有如下优点:

  • Form内建支持,可以与Oracle forms有机结合
  • 提供简洁明了的API,便于使用
  • 记录组的行号的运作机制与数据块上的 record number时完全相同的,便于同步界面上的记录
  • 相比其他内建方法,速度快,效率也比较高
  • 如果还有请帮我补充;)

    API简介

    下面就简要介绍一下能够对我们的验证所用的API函数定义,详细的说明和文档请参考Oracle Forms Builder的帮助文档。

    一个简单的例子

    下面就举一个简单的例子来说明这些API如何使用,图我就不上了,默认你们对form开发已经很熟悉啦,:)

    假设form中有一个多行数据块REPLIST,现在我们要对该数据块的REPORT_ID字段做界面唯一性验证。

    1. 向FORM级别的触发器WHEN-NEW-FORM-INSTANCE加入如下代码:

    2. 向数据块REPLIST添加块级触发器PRE-QUERY,添加代码如下:

    3. 向数据块REPLIST添加块级触发器WHEN-REMOVE-RECORD,添加代码如下:

    4. 向数据块REPLIST添加块级触发器WHEN-CREATE-RECORD,添加代码如下:

    5. 向数据块REPLIST添加块级触发器POST-QUERY,添加代码如下:

    6. 向数据块REPLIST的REPORT_ID项添加ITEM级触发器WHEN-VALIDATE-ITEM,添加代码如下:

    OK,大功告成了,界面上的验证部分就此告一段落,另外我们还要结合界面和数据库两个层面进行充分的验证,因为并不是所有的记录都显示在了界面上。

    程序包zz_record_group

    虽然内建的API已经很简洁了,但是某些操作为了简化API和验证需要在每次调用api之前做,很麻烦,故而本人干脆直接写了一个方便同学们(包括我自己)易于使用的通用程序包ZZ_RECORD_GROUP,该程序包有如下特点:

  • 对记录行的创建和删除做了封装,简化了操作
  • 对重复值查找提供了更方便的VALUE_EXISTS函数,分别为字符类型、数字类型和日期类型重载了三次
  • 对单元格(cell)的修改操作改为set_value方便使用
  • 以library形式发布,使用时直接attach到本机form上即可
  • 我已经将它发布到了github上了,有兴趣的同学可以去瞧瞧;)

    传送门:https://github.com/eliu/zz_record_group

    感谢以下文章对笔者的启发,Thanks!

    Enjoy!

    linux

    推荐阅读
    • 打开文件管理器_【教程】模组管理器3.1食用指南
      文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
    • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
    • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
      本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
    • 云原生边缘计算之KubeEdge简介及功能特点
      本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
    • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
      立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
    • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
    • Centos7.6安装Gitlab教程及注意事项
      本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
    • baresip android编译、运行教程1语音通话
      本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
    • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
    • 20211101CleverTap参与度和分析工具功能平台学习/实践
      1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
    • 如何用UE4制作2D游戏文档——计算篇
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
    • 使用在线工具jsonschema2pojo根据json生成java对象
      本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
    • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
    • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
      原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
    • Java String与StringBuffer的区别及其应用场景
      本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
    author-avatar
    顺佳海外
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有