T201903080503 笔记(七个问题中的五个)

1 一个实例效果
2 前台框架解析
3 节点绑定界面
4 如何实现主界面参数传递给子界面,页面间的跳转
5 如何实现增、删、改、查、复核、撤回的数据存储
6 如何实现权限控制

之前的七个问题回答的比较勉强,很多地方的理解都不太清楚,这里通过实际的实例,再重新把七个问题中的五个问题的逻辑在梳理一遍。

1 一个实例效果

首先看效果


T201903080503 笔记(七个问题中的五个)_第1张图片
实例效果

文字描述

  • 1 节点绑定页面,实现页面切换;
  • 2 A、B、C三个页面的跳转、传参;
  • 3 数据的增、删、改、查;
  • 4 复核、撤回状态变化,多页面复核状态控制;
  • 5 权限控制;

2 前台框架解析

第一层:容器层(不做涉及具体业务的一切事情)

主要实现功能:

  • 注册业务节点.实现接口IMDChileForm的两个方法:InitLeftControl,GetLeftControl}(下图左侧红框处)
InitLeftControl
GetLeftControl
  • 实现对ToolBar上面功能按钮权限控制及可见性控制 (下图上侧红框处)
tvYwlbChange
  • 将各业务节点所对应的功能Action引出,绑定在相应的ToolButton功能按钮上
tvYwlbChange
  • 实现公共参数取值, 传递给各业务FramList---- GetParam
tvYwlbChange
SetControlsState
T201903080503 笔记(七个问题中的五个)_第2张图片
第一层:容器层

第二层:数据浏览层(为统一标准必须从TBaseListFrame继承)

主要实现功能:

  • 1 各业务操作功能实例化: 增,删,改,查看
  • 2 调整类函数为: StdCall类型 并用关键字:Exports引出.为扩展系统自由组合菜单使用
  • 3 打印<定制>, 导出<定制>,复制,复核,取消复核功能的实现
T201903080503 笔记(七个问题中的五个)_第3张图片
第二层:数据浏览层

对于第二层来说,最重要的部分就是参数的传递以及函数之间的调用,页面间的传递。

第三层:具体实现层

主要实现功能:

  • 各业务操作函数的具体实现,操作后台数据库:增,删,改,查看,打印<定制>, 导出<定制>,复制,复核,取消复核....
T201903080503 笔记(七个问题中的五个)_第4张图片
第三层:具体实现层
//属性读函数,是属性被“读取”时所执行的操作,这样在执行“取值”操作时,具备了执行其他动作的可能。
property ywlb: Integer read l_ywlb write setywlb;

https://www.cnblogs.com/yplong/archive/2011/12/26/2301630.html

3 节点绑定界面

(1)uses处声明

uses
hsZQXX_GP

(2)指定统一入口函数,并进行函数初始化

//入口函数统一标准化,为以后自由组合菜单,将此函数引出
function SHOW_GPSZ(Parent: TWinControl; const Ywlb: Integer;
  const OnGetParam: TGetParamEvent): TBaseListFrame; stdcall;
//引出入口函数可供其他DLL或EXE程序调用  
exports SHOW_GPSZ;

function SHOW_GPSZ(Parent: TWinControl; const Ywlb: Integer; const OnGetParam: TGetParamEvent): TBaseListFrame;
begin
  Result := TFramZQXX_GP.Create(Parent);
  TFramZQXX_GP(Result).ywlb := Ywlb;
  Result.Name := '';
  TFramZQXX_GP(Result).FOnGetParam := OnGetParam;
  Result.Parent := Parent;
  Result.Align := alClient;
end;

(3)将需要add的node节点TYwlb_Entry传入

procedure Add_Operation(APath, AName:string; AYwlb: Integer; op: TYwlb_Entry);
  var
    nd: TYwlbNode;
    sa: TStringDynArray;
    i: Integer;
    pNode: TTreeNode;
  begin
    if not Assigned(op) then Exit;
    pNode := nil;
    APath := Trim(APath);
    if APath <> '' then
    begin
      SetLength(sa, 0);
      sa := StrToArray(APath, '|');
      for i := Low(sa) to High(sa) do
        pNode := FindNode(sa[i], pNode);
    end;

    nd := TYwlbNode.Create(tvYwlb.Items);
    if AName <> '理财产品' then
      nd.ImageIndex := 2
    else
      nd.ImageIndex := 1;
    nd.SelectedIndex := 3;
    nd.ywlb := AYwlb;
    nd.func := @op;
    tvYwlb.Items.AddNode(nd, pNode, AName, nil, naAddChild);
    if not Assigned(fNode) then
      fNode := nd;
  end;

4 如何实现主界面参数传递给子界面,页面间的跳转

(1)页面参数传递。
仔细观察后,其实就是需要什么参数就在方法中添加对应的参数,可能是之前对参数的类型不熟悉,后面应该会好。

列举一下第三层主要的一些控制参数

1 iNeedChecked
2 增、删、查的状态函数

获取页面关键参数

  Self.VerifyEnabled := (pos(',7,',','+GetSysParam(0,'JCSZ_XFHZQLB','')+',') <> 0);
  Self.LookField := 'l_zqnm';             //主键,这里设置的需要获得的域在后面可以被查看

  //注入ListFrame的数据操作函数
  Self.OnRefresh := DoGetData;            //刷新功能
  Self.OnOpenNode := DoOpenNode;          //查看功能
  Self.OnAddNode := DoAddNode;            //新增功能
  Self.OnEditNode := DoEditNode;          //编辑功能
  Self.OnDelNode := DoDelNode;            //删除功能
  Self.OnVerifyNode := DoVerifyNode;      //复核功能
  Self.OnUndoNode := DoUndoNode;          //撤消功能

5 复核、撤回的数据存储

复核部分:一般都是通过获取系统参数的方式来获取是否需要复核,然后根据复核与否在页面上执行不同的逻辑。

T201903080503 笔记(七个问题中的五个)_第5张图片
未复核 ---- 复核

复核表:记录已复核的数据。当未开启复核状态时,则默认为不复核状态,插入的数据直接存入复核表。

未复核表:开启复核功能。
新增数据(复核):先存入未复核表,复核后存入复核表;
删除数据(复核):数据在未复核状态下,直接从未复核表中将数据删除。数据在由未复核表进入复核表时,则需要将复核表中的数据撤回到未复核表中。

6 如何实现权限控制

T201903080503 笔记(七个问题中的五个)_第6张图片
第一种权限控制

第一种权限控制,在框架的第一层实现,主要是通过实际的业务逻辑控制参数。

T201903080503 笔记(七个问题中的五个)_第7张图片
第二种权限控制

第二种权限控制,由后面模块调用产生页面,这时需要通过当前页面参数进行权限控制。
涉及OnExcute和OnUpdate两个方法:
OnExcute:点击时调用
OnUpdate:不断轮训刷新调用

T201903080503 笔记(七个问题中的五个)_第8张图片
OnExcute和OnUpdate

权限是实时刷新检测的,主要OnUpdate:不断轮训刷新调用

另一个OnExcute在点击时会自动调用,在下面方法在读取参数时,也会自动执行OnExcute方法。

property acExcel: TAction read actExcel;         //导出功能
property acPrint: TAction read actPrint;         //导出功能
property acCopy: TAction read actCopy;           //复制功能

你可能感兴趣的:(T201903080503 笔记(七个问题中的五个))