分类目录功能模型设计

简介: 分类目录功能模型设计

分类目录功能是指需要进行分级编码的单表数据的输入功能,主要用于基础资料,如客户目录、部门目录、存货目录、会计科目等。

一、功能模型设计内容

·按窗口内容设置好项目内容。

·字段列表中要包括所编辑数据集中的所有字段,不管是否在其他项目中出现。编码字段、上级字段和本级字段应排列在前。

·目录字段列表是指在目录树中显示的字段。除编码和名称字段外可在目录树中直接编辑

·编辑条件用SQL条件表达式表示(不含WHERE字样)。其中条件变量用大括号({})括上。确定后在载入条件栏中可以看到相关条目会自动生成,在此输入默认值。这样在使用时,用户初次打开功能窗口时是按默认条件载入数据,再次按载入按钮时,会弹出条件输入窗口,重置条件后载入。

·唯一字段。输入时可限制在当前载入范围内不允许重复。

·目录字段列表。树形目录使用的字段列表。未列出的将不在目录树中显示。编码字段为第一个显示字段,上级和本级字段不需要在目录树中显示。其他字段根据用户需要。

·级次字段。便于自动填写目录级次,以便在特定需要时使用。

·启用字段。启用标记字段。标记后不能编辑。

·参考条件字段。输入参考时作为关联条件的字段。

·查询条件。查询条件表达式。包含载入条件变量。用于载入数据时可选择载入表中的部分数据,避免一次载入的数据量过大。

·更新字段列表。启用后仍可更新字段列表。

·是否复制。添加时是否复制当前记录内容。

·提交提示。提交时应给予操作者的提示,如重新登录等。

·可以设置多个打印模板,在实际打印时选择。

二、分类目录定义窗口的必要操作

·复制功能定义。功能定义可复制,操作时输入目标功能编号即可。目标功能编号可不在本类功能中(不推荐)。

·删除功能面板。删除当前功能的输入表单设计面板。表单输入面板可在设计器中运行时进行设计(右键菜单)并保存,当项目内容发生变化时应在此删除。

·数据字典。设计数据字典是指设计功能所用数据表的字典。系统数据字典是指系统功能使用的数据字典。功能数据字典是指当前功能所用数据表的字典。数据字典的任务是确定项目输入输出时的标题、控件、格式等事项。

·计算公式。可以像单据一样设计计算公式,用于计算字段值或完成记录验证。

三、分类目录的后台接口设计

1、载入条件初始

载入数据时,初始化载入条件。设计器中输入的值为公共默认值。以后每个用户(操作员)保存自己的载入条件。需要一个后台程序。

本例使用mssql。

--初始化载入条件示例代码 SQL SERVER 
ALTER PROCEDURE [dbo].[X9_ZRTJCS]
   (@GNBH VARCHAR(20),  --功能编号
  @YHMC VARCHAR(20))  --用户名称
AS
BEGIN TRY
  SET NOCOUNT ON;
  DECLARE @DYID INT,@GNMC NVARCHAR(20),@TJXH INT,@TJMC VARCHAR(20),@TJJG VARCHAR(80),@RXKZ VARCHAR(10),@TJSM NVARCHAR(100),
    @TJEDIT VARCHAR(100);
  DECLARE Zrtj_cursor CURSOR LOCAL FOR
    SELECT GNMC,TJXH,TJMC,TJJG,RXKZ,TJSM,TJEDIT FROM X9_GN_0ZRTJ
      WHERE GNBH=@GNBH AND YHMC='';
  OPEN Zrtj_cursor;
  FETCH FROM Zrtj_cursor
    INTO @GNMC,@TJXH,@TJMC,@TJJG,@RXKZ,@TJSM,@TJEDIT;
  WHILE @@FETCH_STATUS=0
  BEGIN
    IF NOT EXISTS(SELECT * FROM X9_GN_0ZRTJ WHERE GNBH=@GNBH AND TJMC=@TJMC AND TJSM=@TJSM AND YHMC=@YHMC)
      BEGIN
        SELECT @RXKZ=CASE WHEN @RXKZ='1' THEN '1' ELSE '0' END ; 
        EXEC DBO.X9_DJMID  'X9_GN_0ZRTJ','DYID',1,@DJMID=@DYID OUTPUT;
        INSERT INTO X9_GN_0ZRTJ (DYID,GNBH,GNMC,TJXH,TJMC,TJJG,RXKZ,TJSM,YHMC,TJEDIT) 
            VALUES(@DYID,@GNBH,@GNMC,@TJXH,@TJMC,@TJJG,@RXKZ,@TJSM,@YHMC,@TJEDIT)
      END
    FETCH NEXT FROM Zrtj_cursor
    INTO @GNMC,@TJXH,@TJMC,@TJJG,@RXKZ,@TJSM,@TJEDIT;
  END
  CLOSE Zrtj_cursor;
  DEALLOCATE Zrtj_cursor  
  END TRY
BEGIN CATCH
  DECLARE @ErrorMessage NVARCHAR(4000);
  DECLARE @ErrorSeverity INT;
  DECLARE @ErrorState INT;
  SELECT 
    @ErrorMessage =ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE();
  RAISERROR (@ErrorMessage, -- Message text.
         @ErrorSeverity, -- Severity.
         @ErrorState ); -- State.
END CATCH;

2、载入前存储过程

用于载入数据前处理相关数据。(代码略)。

3、提交后存储过程

ALTER PROCEDURE [dbo].[X9_TJ_1FLML] 
   (@DQYH  NVARCHAR(10),  --用户名称
    @GNNAME  NVARCHAR(30),  --功能名称
  @TBNAME  NVARCHAR(30),  --数据表名
  @BMSTR NVARCHAR(MAX)) --提交的主键字符串,使用 @BMSTR LIKE '%(' + CHDH + ')%' 表达式做为条件;
AS
  --分类目录 提交后主要处理底层明细和计算助记码
  BEGIN TRY
    IF @GNNAME='账套用户角色维护' OR @GNNAME='账套用户设置' OR @GNNAME='功能列表定义'
      BEGIN
        --select * from x9_gn
        --删除多余行
        DELETE X9_GNYHQX WHERE (YHJS NOT IN (SELECT YHJS FROM X9_GNYHJS ));
        DELETE X9_GNYHQX WHERE (GNBH NOT IN (SELECT GNBH FROM X9_GN WHERE JC=2 AND SFQY=0)) ;
        DELETE X9_GNYHQX WHERE (SSMK NOT IN (SELECT MKMC FROM X9_GN_GNMK WHERE SFYY=1));
        --DELETE X9_GNYHQX WHERE YHJS='系统管理员';
        --增加缺少行
        DECLARE @MAXID INT;
        SELECT @MAXID =1+MAX(QXID) FROM X9_GNYHQX ;
        IF @MAXID IS NULL 
          SET @MAXID=1;
        WITH YH (YHJS) AS   (SELECT DISTINCT YHJS FROM X9_GNYHJS where YHJS<>'系统管理员')
        INSERT INTO X9_GNYHQX (QXID,YHJS,GNBH,GNMC,GNLY,GNLB,SSMK,JZZD,SFSQ,Xzbj,Xzdy,Xzck,Xzwj,Xzdc,XZQX,SFYC)
          SELECT @MAXID+(ROW_NUMBER() OVER(ORDER BY YH.YHJS, GN.GNBH)),
            YH.YHJS, GN.GNBH, GN.GNMC, GN.GNLY, GN.GNLB, GN.SSMK,'' AS JZZD, 
            0 AS SFSQ,1 AS XZBJ,1 AS XZDY,1 AS XZCK,
            1 AS XZWJ,1 AS XZDC ,'111111' AS XZQX,GN.SFYC
            FROM YH CROSS JOIN X9_GN GN
            WHERE GN.JC=2 AND SFQY=0 
              AND GN.SSMK IN (SELECT MKMC FROM X9_GN_GNMK WHERE SFYY=1) 
              AND (YH.YHJS+GN.GNBH) NOT IN(SELECT YHJS+GNBH FROM X9_GNYHQX);
        UPDATE  QX SET GNMC = GN.GNMC, GNLY = GN.GNLY, SSMK = GN.SSMK, GNLB = GN.GNLB, SFYC = GN.SFYC
          FROM X9_GNYHQX AS QX INNER JOIN X9_GN AS GN ON QX.GNBH = GN.GNBH;
      SELECT '用户权限初始检查已经完成';
      END 
      --SELECT DISTINCT YHJS,'' AS SJBH, ROW_NUMBER() OVER(ORDER BY YHJS) AS YHBH FROM X9_GNYH
      --UPDATE X9_GNYHQX SET SFSQ =1;
      --select * from X9_GNYHQX     
  IF @GNNAME='客户目录'
      BEGIN
        EXEC X9_REZJM @TBNAME;
        EXEC X9_DCMX @TBNAME;
        UPDATE MLWL SET ZKL=0 WHERE ZKL<0 OR ZKL>100;
        SELECT '客户目录提交后处理已完成';
        RETURN
      END
  IF @GNNAME='供应商目录'
      BEGIN
        EXEC X9_REZJM @TBNAME;
        EXEC X9_DCMX @TBNAME;
        SELECT '供应商目录提交后处理已完成';
        RETURN
      END 
    IF @GNNAME='部门目录'
      BEGIN
        EXEC X9_REZJM @TBNAME;
        EXEC X9_DCMX @TBNAME;
        SELECT '部门目录提交后处理已完成'
        RETURN
      END  
    IF @GNNAME='会计科目'
      BEGIN
        EXEC X9_REZJM @TBNAME;
        EXEC X9_DCMX @TBNAME;
        SELECT '会计科目提交后处理已完成'
        RETURN
      END  
    IF @GNNAME='数据字典'
      BEGIN
        SELECT '数据字典提交后处理已完成'
        RETURN
      END 
  END TRY
  BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000),@ErrorSeverity int,@ErrorState INT;
    SELECT  @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState = ERROR_STATE();
    RAISERROR (@ErrorMessage,  @ErrorSeverity,  @ErrorState ); 
  END CATCH; 

4、打印数据提供程序。

用于打印时可以需要打印当前载入数据以外的其他数据。

四、前端设计

前端设计即可根据上述设计,建立固定的程序执行不数据(分类目录)的处理。以实现低代码和通用。

相关文章
|
6月前
|
芯片 Python
前道设计
前道设计
46 3
|
6月前
|
前端开发 算法 芯片
后道设计
后道设计
40 1
|
数据可视化 数据处理
结构化分析与设计
一、结构化分析与设计 结构化分析与设计(Structured Analysis and Design,简称SAD)是一种软件开发方法论,旨在通过分析和设计来构建高质量的软件系统。 结构化分析与设计的主要特点包括以下几点: 1. 结构化分析:结构化分析是通过对系统需求进行分析,将系统分解为若干个功能模块,并定义它们之间的关系和交互。在结构化分析中,常用的工具和技术包括数据流图(Data Flow Diagram,简称DFD)、数据字典(Data Dictionary)和实体关系图(Entity-Relationship Diagram,简称ERD)等。 2. 结构化设计:结构化设计是在结构化分析
662 2
调查表设计
调查表设计
86 0
|
设计模式 架构师 Java
聊聊简单设计
聊聊简单设计
132 0
|
Java Scala
深入理解简单设计
深入理解简单设计
深入理解简单设计
|
算法 BI
贪心策略设计并解决会场安排问题
贪心策略设计并解决会场安排问题
328 3
贪心策略设计并解决会场安排问题
|
安全 NoSQL JavaScript
C/C++为什么要专门设计个do…while?
最初do ... while的出现,更多的是作为循环控制流的一种语法糖。因为不论是while 还是 for循环,都是要先判断是否满足进入循环体的条件的。满足条件之后才能进入循环去执行循环体内的操作。
186 0
C/C++为什么要专门设计个do…while?
|
存储 消息中间件 算法
服务设计要解决的问题
 前几天和同事聊天,同事说:   “业务的服务(相对于我们基础架构这边的底层技术)在技术上就需要解决三个问题:分布式、通信和存储。”   我回忆之前做业务的时光,觉得确实,再加上一个“服务治理”就差不多了。想想“服务设计要解决的问题”这个话题可以把之前静儿写的很多文章做一个归纳概括。今天做一个总结。
服务设计要解决的问题
22. 谈设计
今天谈谈设计这个话题。 22.1. 为什么中国设计如此“丑” 从工业产品,包装,网站,游戏,建筑,园林...... 不是中国没有好的设计师,而是最终决定权不在设计师,而是审美较差的产品经理或企业高层。
1193 0