修改EDT长度
最初的要求是修改ItemId长度变成30,后来运行了一段时间,发现如果不修改ItemRelation和KeyValue的长度,到运行BOM/Route Calculation的时候还是会出问题(上面两个EDT和ItemId没有直接关系)。
但终究不能碰到问题才去找哪些EDT遗漏了,于是想到系统自带的修改EDT的form(系统管理==》设置==》系统==》修改数据类型)。
其实这个form并不是简单的只修改一个EDT,而是把它的父EDT揪出来,并且找到它整棵EDT树的所有EDT。拿ItemId为例,它整棵EDT树包括ItemIdBase,ItemIdAlternative,ItemIdProduction,等等。
然而,这还没有完。那张form会继续寻找所有Tables的所有relations,一旦发现和之前找出的EDT树有关的field,而且长度小于我们的目标长度的,就把它列入修改清单。
以BOMCalcTrans为例,它的relations InventTableItem正是有一条关于ItemId和KeyValue的关系。由这个关系,系统便知道KeyValue其实也是需要修改的(事实上系统只在长度小于目标长度的时候修改。拿我们的ItemId为例,原本只有20长度,现在改到30,系统检测到KeyValue依然只有20的长度,如果保持这个长度,那么传递过来的30长度的ItemId就会被切断,所以有必要变长。而相反,如果我们ItemId长度改为10,KeyValue则没有必要修改。原因是KeyValue可能还对应别的Relation,鲁莽缩小它可能会导致别的传递进来的值被切断)。
由上面基本可以想到,无论怎么修改EDT长度最好还是通过那个form来实现。好,最后一个问题。那个form默认只处理几个EDT,如何让它处理一些之前没有列出的EDT呢?其实实现很简单
找到SysEDTSetup这张form,并打开它的fillView方法,插入如下的代码(插入的EDT类型只能是string或者real,这张form只支持这两个类型)。
另:修改后的长度,需重启client的application才能看到。
摘自秋毫论坛。