Difference between revisions of "ZH/Case-Study-01-Journal-23"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
(Referece下拉列表与Dynamic Validation)
(2010-12-29)
Line 38: Line 38:
 
## '''Validation code''': EXISTS (SELECT * FROM C_BPartner bp WHERE AD_User.C_BPartner_ID=bp.C_BPartner_ID AND (bp.IsEmployee='Y' OR bp.IsSalesRep='Y'))
 
## '''Validation code''': EXISTS (SELECT * FROM C_BPartner bp WHERE AD_User.C_BPartner_ID=bp.C_BPartner_ID AND (bp.IsEmployee='Y' OR bp.IsSalesRep='Y'))
 
* 相关链接:[[Reference Table with Dynamic Validation]]
 
* 相关链接:[[Reference Table with Dynamic Validation]]
 +
 +
===记录锁定与Processed===
 +
* 在 RfQ(采购申请)窗口中,按下 '''Close RfQ''' 按钮后,字段 ''Processe''d 就由 'N' 变为 'Y',该记录就变为锁定了。
 +
* 我很好奇 Processed='Y' 与记录锁定是怎么关联起来的?
 +
* 接下来我在新建了 C_Department 表及 Department 窗口,
 +
* SQL语句如下:
 +
<pre>
 +
-- Create Department Table
 +
CREATE TABLE c_department
 +
(
 +
  ad_client_id numeric(10,0) NOT NULL,
 +
  ad_org_id numeric(10,0) NOT NULL,
 +
  isactive character(1) NOT NULL DEFAULT 'Y'::bpchar,
 +
  created timestamp without time zone NOT NULL DEFAULT now(),
 +
  createdby numeric(10,0) NOT NULL,
 +
  updated timestamp without time zone NOT NULL DEFAULT now(),
 +
  updatedby numeric(10,0) NOT NULL,
 +
  c_department_id numeric(10,0) NOT NULL PRIMARY KEY,
 +
  "name" character varying(60) NOT NULL,
 +
  description character varying(255),
 +
  c_upperdepartment_id numeric(10,0),
 +
  processed character(1) NOT NULL DEFAULT 'N'::bpchar,
 +
);
 +
</pre>
 +
* 接着在 '''Window, Tab & Field''' 窗口进行测试:
 +
*# 与 ''WindowType'' 无直接关系,选为 ''Transaction'' 或 ''Maintain'' 均可。
 +
*# 与 ''Sales Transaction'' 无直接关系,是否勾选均可。
 +
** 备注:每一步都先执行过 Cache Reset 。
 +
* 于是可以得出结论,''Processed'' 字段是 ADempiere 系统内置的记录锁定标记。如果某些表需要对记录进行锁定,只要在相应的表增加 ''Processed'' 字段即可。
  
 
=链接=
 
=链接=

Revision as of 07:04, 29 December 2010

<返回中文首页> <返回本案例研究首页>

实施日志-23-基于数据字典的二次开发

2010-11-13

关于Boolean数据类型

我有个疑问,ADempiere数据表为什么不用Boolean数据类型,而是用character(1)?

例如C_Order数据表当中的字段isactive:

 isactive character(1) NOT NULL DEFAULT 'Y'::bpchar


2010-12-09

Address的Country默认值设置

  • 在Business Partner窗口的Location页签有个Address字段,点击右侧小图标会弹出一个"Add New Location/Address"或"Update Location/Address"窗口,这窗口找不到设置的地方。
  • 我的目的是把Location/Address的Country默认值设置为China。
  • 我尝试过通过"Window, Tab & Field"窗口、"Table & Column"窗口,设置Country字段的Default Logic,均告无效。
  • 后来发现这是系统内建的,这样处理很不方便。
 This window is made manual.
 This is the class for it: VLocationDialog

2010-12-29

Referece下拉列表与Dynamic Validation

  • 今天把 Dynamic Validation 略为弄懂了一些,之前一直是糊里糊涂的。
  • 通过Referece实现下拉列表,我的总结是 Dynamic Validation 要通过 Reference Key 才起作用。不知道我这样理解是否正确?
  • ADempiere里有一个例子,是采购申请单( Requistion )中的 AD_User_ID 的字段。
  1. 打开 Table and Column 窗口,找到 Requistion 表。在 Column 页签中找到 AD_User_ID 字段:
    1. Reference: Table
    2. Reference Key: AD_User
    3. Dynamic Validation: AD_User - Internal
  2. 打开 Validation窗口 ( 也可以在Dynamic Validation直接Zoom过去):
    1. Name: AD_User - Internal
    2. Type: SQL
    3. Validation code: EXISTS (SELECT * FROM C_BPartner bp WHERE AD_User.C_BPartner_ID=bp.C_BPartner_ID AND (bp.IsEmployee='Y' OR bp.IsSalesRep='Y'))

记录锁定与Processed

  • 在 RfQ(采购申请)窗口中,按下 Close RfQ 按钮后,字段 Processed 就由 'N' 变为 'Y',该记录就变为锁定了。
  • 我很好奇 Processed='Y' 与记录锁定是怎么关联起来的?
  • 接下来我在新建了 C_Department 表及 Department 窗口,
  • SQL语句如下:
-- Create Department Table
CREATE TABLE c_department
(
  ad_client_id numeric(10,0) NOT NULL,
  ad_org_id numeric(10,0) NOT NULL,
  isactive character(1) NOT NULL DEFAULT 'Y'::bpchar,
  created timestamp without time zone NOT NULL DEFAULT now(),
  createdby numeric(10,0) NOT NULL,
  updated timestamp without time zone NOT NULL DEFAULT now(),
  updatedby numeric(10,0) NOT NULL,
  c_department_id numeric(10,0) NOT NULL PRIMARY KEY,
  "name" character varying(60) NOT NULL,
  description character varying(255),
  c_upperdepartment_id numeric(10,0),
  processed character(1) NOT NULL DEFAULT 'N'::bpchar,
);
  • 接着在 Window, Tab & Field 窗口进行测试:
    1. WindowType 无直接关系,选为 TransactionMaintain 均可。
    2. Sales Transaction 无直接关系,是否勾选均可。
    • 备注:每一步都先执行过 Cache Reset 。
  • 于是可以得出结论,Processed 字段是 ADempiere 系统内置的记录锁定标记。如果某些表需要对记录进行锁定,只要在相应的表增加 Processed 字段即可。

链接