ADF(BC)--获取数据库记录字段的旧值

在ADF应用开发中,对比字段的旧值与当前值是常见需求,特别是检查未提交事务时的变更。本文介绍了一种不依赖额外查询的方式,通过ADF Business Components (ADFBC) 的API获取数据库记录的原始值。通过创建自定义的实体基类和视图行基类,实现了getOldValueByAttribut方法,从而能够在代码中便捷地获取字段的旧值。

在ADF应用中,有时需要在提交数据前比较某个字段和数据库的该字段旧值,看该字段值是否发生改变,使用UI的valuehangeListener事件,仅仅能比较UI当前值和提交值,而不能实现和数据库原值进行比较,特别时存在未提交事务时进行多次修改的情况下。

最原始的方式有,通过再一次查询该行记录,得到该字段的旧值,和提交事务时的值进行比较。但我们在使用ADF框架时,通过ADFBC的一些api也可以方便的获取数据库记录的旧值。其中之一是通过EO的getPostedAttribute(int index)方法获取数据库原值。但该方法为EntityImpl的protected方法,我们在代码中不能直接调用,因此需要做一些工作。

1、首先,可建立一个自定义实体基类BaseEntity,继承EntityImpl,在该基类里添加如下方法:

public Object getOldValueByAttribut(StringattrName){

         int index = this.getAttributeIndexOf(attrName);

        if(index<0)

            return null;

        return this.getPostedAttribute(index);

    }


2、新建一个视图行的基类BaseViewRowImpl,继承ViewRowImpl,在该类里添加如下方法

/**

     * @param entityIndex 实体索引位置,如该视图行只有一个实体,该参数设为0

     * @param attrName 属性名

     * @return 返回数据库字段旧值,如果无实体或字段名无效则返回null.

     */

   public Object getOldValueByAttribut(int entityIndex, String attrName) {

       Entity[] entities = this.getEntities();

       if (null == entities || entityIndex >= entities.length || entityIndex< 0)

           return null;

       BaseEntity entity;

       try {

           entity = (BaseEntity)entities[entityIndex];

       } catch (Exception e) {

           ErrorMessageHandler.handlerException(e);

           return null;

       }

       return entity.getOldValueByAttribut(attrName);

    }


3、在jdev里配置实体和视图行的基类为上述BaseEntity,BaseViewRowImpl。

4、创建实体和视图,使用方式如下:

BaseViewRowImpl br = (BaseViewRowImpl)vo.getCuurentRow();

String oldValue = (String)br. getOldValueByAttribut(0,"Department");


接口信息 1.站点信息 接口基本信息 接口说明 获取站点信息 请求方式 http://58.17.73.100:8081/dataapi/GetNewStations?ParentId=b637b7ad-34ca-4062-8e52-2ffd3bb62f20&Level=4&StationTypeId=6 接口地址 Get 请求参数(区分大小写): 参数名称 属性类型 最大长度 必须 详细说明 ParentId string 否 父级编号,用于指定宜春市 Level int 是 站点层级,市=2;区=3;常规站=4;微型站=5; StationTypeId int 否 站点类型,国控站=1;省控站=2;工业园区站=6;乡镇街道站=5; StationId string 否 站点编号,指定某一站点 响应参数Data: 参数名称 属性类型 最大长度 必须 详细说明 Id string 是 站点编号 Name string 是 站点名称 Level int 是 站点层级,市=2;区=3;常规站=4;微型站=5; ParentId string 是 父级编号 StationTypeId int 是 站点类型,国控站=1;省控站=2;工业园区站=6;乡镇街道站=5; Attribute obejct[] 是 站点拓展属性 站点常见拓展属性Attribute: 参数名称 属性类型 最大长度 必须 详细说明 StationId string 是 站点编号 Value string 是 拓展属性对应的 Id int 是 主键 Item string 是 拓展属性key,常见属性有:站点类型(StationTypeId)、是否启用(IsContant)、站点编码(StationCode)、地址(Address)、经度(Longitude)、纬度(Latitude)、设备编号(DeviceId) 接口 :http://58.17.73.100:8081/dataapi/GetNewStations?ParentId=b637b7ad-34ca-4062-8e52-2ffd3bb62f20&Level=4&StationTypeId=6 接口 返回: “ { "Result": false, "Data": [ { "Id": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Name": "上高县工业园", "Level": 4, "ParentId": "b637b7ad-34ca-4062-8e52-2ffd3bb62f20", "Attribute": [ { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "6", "Id": "06C99090-7453-4E38-B2E8-15A6040B07F9", "Item": "StationTypeId" }, { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "1", "Id": "0714247F-E518-490E-B7B1-7F50C729819A", "Item": "IsContant" }, { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "31011600053011", "Id": "20B954FC-4AFA-44B5-8806-A6C0C14C7E22", "Item": "StationCode" }, { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "宜春市", "Id": "5C12C305-91D3-421D-ADF9-FC350D7FB833", "Item": "Address" }, { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "114.9552778", "Id": "7C54C70A-2773-4111-AB28-19D1CC7A441F", "Item": "Longitude" }, { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "31011600053011", "Id": "A98D969C-E22B-4318-BC5E-083FF585185F", "Item": "DeviceId" }, { "StationId": "1DAFC008-BA10-4839-BF3D-54F0B201D66B", "Value": "28.25888889", "Id": "B3A359CF-4544-49B7-B741-FD9B49F6EABB", "Item": "Latitude" } ] }, { "Id": "90494E5A-1380-49F1-9C53-9A689C33980D", "Name": "宜春经开区工业园", "Level": 4, "ParentId": "2D4660BF-616C-4BE6-B9F9-FB0972D2A7E0", "Attribute": [ { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "888888802", "Id": "001A04F2-DE33-44E3-B79E-77F3539A98F9", "Item": "DeviceId" }, { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "市人防办", "Id": "02AEF1E9-0570-4879-A114-1E20D62FA522", "Item": "Address" }, { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "114.3911122", "Id": "2E62DF4D-B3C4-4860-83E8-AD584F221607", "Item": "Longitude" }, { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "27.80166622", "Id": "4157BCAF-3EDB-49EF-AD87-0113E3ED8A09", "Item": "Latitude" }, { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "888888802", "Id": "70B472DD-09BC-43A5-80AB-4A20DBA82B39", "Item": "StationCode" }, { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "6", "Id": "7E436FFE-F6D3-4877-82A7-72F073559A61", "Item": "StationTypeId" }, { "StationId": "90494E5A-1380-49F1-9C53-9A689C33980D", "Value": "1", "Id": "B3F95481-CC29-47FA-8358-B89A177A2014", "Item": "IsContant" } ] }, { "Id": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Name": "高安市工业园", "Level": 4, "ParentId": "b637b7ad-34ca-4062-8e52-2ffd3bb62f20", "Attribute": [ { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "6", "Id": "1E447E20-F96E-4E05-B78D-790AD8C272A5", "Item": "StationTypeId" }, { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "1", "Id": "2E5B66A5-9A55-4E0E-B3BC-A2900B5354B4", "Item": "IsContant" }, { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "115.4011111", "Id": "5865AF28-5F4E-4A85-866E-DB1898D43C06", "Item": "Longitude" }, { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "28.46861111", "Id": "7D77942D-E876-48EA-8EE5-0E47771CB4F0", "Item": "Latitude" }, { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "888888807", "Id": "82BEF05A-DE91-4C9C-8278-2AF091733408", "Item": "DeviceId" }, { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "888888807", "Id": "8FBFB63E-06F4-43C3-9AD6-8B08478602C5", "Item": "StationCode" }, { "StationId": "338ADF7F-96F3-46D4-A8DB-5690D2926464", "Value": "宜春市", "Id": "B4BDD100-CED5-4F99-A409-82BFC8B81F41", "Item": "Address" } ] } ], "Message": "" } ” 根据给出的接口信息,请帮我写出新的接口 “ /// <summary> /// 获取站点信息 /// </summary> /// <returns></returns> /// [HttpGet] [Route(nameof(GetNewStations))] public(返回类型json字符串)GetNewStations( 根据接口 ) { List<BSDStationDto> Stations = UserStationDtoList.ToList(); } ” 新的框架 站点实体如下: “ public class BSDStationDto { public int Id { get; set; } /// <summary> /// 站点名称 /// </summary> public string PositionName { get; set; } /// <summary> /// 所属区域 /// </summary> public string AreaCode { get; set; } /// <summary> /// 唯一编号 /// </summary> public string UniqueCode { get; set; } /// <summary> /// 站点编号 /// </summary> public string StationCode { get; set; } /// <summary> /// 站点图片 /// </summary> public string StationPic { get; set; } /// <summary> /// 经度 /// </summary> public string Longitude { get; set; } /// <summary> /// 纬度 /// </summary> public string Latitude { get; set; } /// <summary> /// 地址 /// </summary> public string Address { get; set; } /// <summary> /// 污染物编号 /// </summary> public string PollutantCodes { get; set; } /// <summary> ///站点类型 /// </summary> public int? StationTypeId { get; set; } /// <summary> /// 是否启用 /// </summary> public bool Status { get; set; } /// <summary> /// 建站时间 /// </summary> public DateTime BuildDate { get; set; } /// <summary> /// 负责人手机号码 /// </summary> public string Phone { get; set; } /// <summary> /// 管理人员 /// </summary> public string Manager { get; set; } /// <summary> /// 站点描述 /// </summary> public string Description { get; set; } /// <summary> /// 是否对照点 /// </summary> public bool? IsContrast { get; set; } /// <summary> /// 是否模范点 /// </summary> public bool? IsMonitor { get; set; } /// <summary> /// 是否发布 /// </summary> public bool? IsPublish { get; set; } /// <summary> /// 排序 /// </summary> public int? OrderID { get; set; } /// <summary> /// 停站时间 /// </summary> public DateTime? StopTime { get; set; } /// <summary> /// 创建用户 /// </summary> public string CreateUser { get; set; } public DateTime? CreateTime { get; set; } public string UpdateUser { get; set; } public DateTime? UpdateTime { get; set; } public string Mn { get; set; } /// <summary> /// 园区编号 /// </summary> public string ParkCode { get; set; } /// <summary> /// 省份编号 /// </summary> public string ProvinceCode { get; set; } /// <summary> /// 省份名称 /// </summary> public string ProvinceName { get; set; } /// <summary> /// 城市编号 /// </summary> public string CityCode { get; set; } /// <summary> /// 城市名称 /// </summary> public string CityName { get; set; } /// <summary> /// 区县编号 /// </summary> public string DistrictCode { get; set; } /// <summary> /// 区县名称 /// </summary> public string DistrictName { get; set; } /// <summary> /// 运维单位id /// </summary> public string OperationUnitId { get; set; } /// <summary> /// 运维单位名称 /// </summary> public string OperationUnitName { get; set; } } ”
最新发布
08-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值