19.6. 设计屏幕

报表、业务逻辑处理器资料速查等功能都附挂在屏幕之下。

Tip

PostERPlow-code(低代码)信息系统框架。信息人员在PostERP上面开发Create, Read, Update, DeleteCRUD)屏幕,不需要撰编程。

19.6.1. 在数据库生成屏幕使用到的table

样品:

--sales - master--
CREATE TABLE t_220 (
CONSTRAINT f0 FOREIGN KEY (f0) REFERENCES t45 (f1),
CONSTRAINT f3 FOREIGN KEY (f3) REFERENCES t_46 (f1),
CONSTRAINT f4 FOREIGN KEY (f4) REFERENCES t9 (f1),
CONSTRAINT f6 FOREIGN KEY (f6) REFERENCES t43 (f1),
CONSTRAINT f9 FOREIGN KEY (f9) REFERENCES t189 (f1),
f0	VARCHAR(15),			--company#
f1	INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,		--sale#
f2 	TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,		--sale date time
f3	INTEGER,				--customer#
f4	VARCHAR(3) NOT NULL,	--currency#
f5	NUMERIC(9,5) CHECK(f5 > 0) NOT NULL,	--exchange rate
f6	VARCHAR(12),	--salesperson#
f7	INTEGER,		--sales revenue received in advance#
f8	DATE,			--A/R due date
f9	SMALLINT,		--tax#
f99	VARCHAR(12)
);
--sales - item--
CREATE TABLE t_221 (
CONSTRAINT f1 FOREIGN KEY (f1) REFERENCES t_220 (f1) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT f2 FOREIGN KEY (f2) REFERENCES t_133 (f1),
CONSTRAINT f3 FOREIGN KEY (f3) REFERENCES t_130 (f1),
CHECK(verify_unit(f2,f3)) NOT VALID,
PRIMARY KEY (f1,f2),
f1	INTEGER,			   	--sale#
f2	VARCHAR(20),			--item#
f3	VARCHAR(3) NOT NULL,	--unit#
f99	VARCHAR(12)
);
			

19.6.1.1. 特殊字段

  • 资料表里的f0字段区隔组织(例如:集团企业的个别公司)资料。

    如果某一个table有f0字段,则凡是f01的记录,是公司编号1的资料,其余类推。设计SQL或function时,应谨慎过滤这个字段里的值。同时,请务必加上连结到t45.f1constraint以做为其foreign key

  • table的每一笔资料在字段f99(如果有的话)记录其拥有者。PostERP在用户输入新记录的时候自动在f99填入该用户的帐号以注记该笔记录的拥有者。参见Section 6.3资料记录权限。只有记录的拥有者才有权更改或删除该笔记录。

    如果某table没有f99这个字段,则全部使用者都可以更改这个table

  • 如果某table含有f100这个字段,且其资料型态是BIGINT,则该table自动接受使用人附挂任何文档在此table。每一笔记录接受最多32767个附挂文档。

    table如果有f100字段,则务必设定DEFAULT NEXTVAL('unique_int_seq')

    一旦在某table设置了f100字段,务必也设计ruletrigger。这个ruletrigger的作用是:一旦使用人删除某记录,则这个ruletrigger就自动删除该附挂文档。例如:

    样品:

    --inventory items--
    CREATE TABLE t_133 (
    CONSTRAINT f2 FOREIGN KEY (f2) REFERENCES t_130 (f1) ON UPDATE CASCADE,
    f1	VARCHAR(20) PRIMARY KEY,	--item#
    f2	VARCHAR(3) NOT NULL,	--Finest Unit Of Measure (FUOM)
    f3	SMALLINT NOT NULL,	--valid number of decimals for quantity
    f99	VARCHAR(12),
    f100 BIGINT DEFAULT NEXTVAL('unique_int_seq')
    );
    
    CREATE OR REPLACE RULE r_133d AS ON DELETE TO t_133 DO ALSO DELETE FROM t61 WHERE f1=OLD.f100;
    						

    也必须设计机制,於使用者删除纪录后,系统也同步自文档系统删除附挂文档。备份数据库时,也必须备份对应的附挂文档。

19.6.1.2. 为避免与兆笔的设计冲突,请注意下面各项,以资区别:

  • metadata table增加的字段,请务必加上_做为字段命。例如请用这些名称去新增字段:f_1f_97f_103

  • 对新table的命名,必须附带_。例如:t_120t_143d_143

  • 对新view的命名,必须附带_。例如:v_120v1_43

19.6.1.3. 请注意!

  • 由於桌面版客户软件的限制,请用VARCHAR,避免使用TEXT。如果桌面版客户软件发生「access violation」错误或默默当掉的话,请尝试缩短显示的VARCHAR字段,看看能否消除该错误。2048个字元以内的宽度似乎都正常。

  • 如果某tableINSERTUPDATE、和DELETEtrigger要生成会计分录,而该却没有SERIAL字段做其primary key的话,请加入SERIAL字段做其surrogate key。请参见应用系统#2里的t_33以及其trigger

  • 请使用TIMESTAMPTZ,避免TIMESTAMP。后者似乎与浏览器不相容。

  • 避免在BOOLEAN字段存入NULL这个值。因为该值容易造成混淆。设定DEFAULT以改善这种情况。

19.6.1.4. 请注意!

如果应用伺服器仍在运转中而且系统开发人员用Data Definition Language,DDL,对任何metadata(或称之为资料字典)的table定义(例如:字段的资料型态、字段、新字段、被删掉的字段)做过修改,则必须connect到同一个数据库,执行这一道SQL:

NOTIFY "DDLExecuted"
				

其目的是:通知应用伺服器更新其cache。

换言之,在应用伺服器运行中,如果执行过任何Data Definition Language(DDL),一定要尽速通知应用伺服器。如果未能即时这样做,则使用到这些table的客户程序可能开始发生异常。

19.6.2. 设定字段属性

Figure 19-3. 设定字段属性

19.6.3. 指定屏幕使用到的table

Figure 19-4. 指定屏幕使用到的table

19.6.4. 完工样本屏幕

Figure 19-5. 完工样本屏幕

完成CRUD屏幕的开发之后,即可加入到选单中,供使用人开启。