起步软件技术论坛-X3

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: jakek

【结】附件关联字段唯一问题

[复制链接]
 楼主| 发表于 2009-7-21 14:09:18 | 显示全部楼层
那请问这个 级联删除 是写在哪部分的代码中呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-21 14:12:42 | 显示全部楼层
还有就是,如果使用了多个关联主键,效果是怎样的呢?
回复 支持 反对

使用道具 举报

发表于 2009-7-21 14:18:13 | 显示全部楼层
20、测试结果跟我说的基本上一致,
21、这个级联就是一个策略,设置文档关联本身置的策略,其实就是系统自动生成的执行逻辑。
22、我们也没有那样测过,没想过会很少那样用,实际意义不是很大,如果我写实现的话,我宁可单做一列去做主键。不过楼主可以测试一下告知结果!
回复 支持 反对

使用道具 举报

发表于 2009-7-21 14:21:14 | 显示全部楼层
对于20来讲,使用者如果明白设计原理没什么可说的,如果不明白的话会被当做事故,
对于21来讲,策略,其实就是在执行时从环境中读到的限制条件,然后在代码运行期对原来写的代码执行逻辑进行修正。所以哪部分代码中也看不到。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-21 20:27:34 | 显示全部楼层
这个环境太抽象了,是指保密的代码吗?如果是调用OA模板的代码中写的函数,应该可以看到。

另外我在删除按钮的beforeaction方法中加了个几句,大概意思是改变业务主表中用于文档关联的字段的值。目的是让系统在我删除业务主表中记录时不删除附件。但没有凑效。代码附在下面。请问是什么原因,系统还是把我的附件删了,其中在程序运行时跟踪了一下,文档关联的字段FCONTRACTID的值的确变了。
谢谢,代码如下,
procedure TBIZDETAILFORMDOC.DataNavigatorBeforeAction(Sender: TObject; var Accept: Boolean);
var lFid: String;
begin
  if TBizDataSetAction(Sender).ID = BizActnConsts.ActionDataSetDelete then
  begin
  if  (dsbBizMain.DataSet.FieldByName('fstate').AsString = 'bsEditing')then
  begin
   lFid := dsbBizMain.DataSet.FieldByName('FID').AsString ;

   dsbBizMain.DataSet.Edit;
   dsbBizMain.DataSet.FieldByName('FCONTRACTID').AsString := lFid;

  end;
end;
  Inherited;

end;
回复 支持 反对

使用道具 举报

发表于 2009-7-22 10:30:13 | 显示全部楼层
先说后面的这段代码问题,这个问题比较边缘化,您的业务环境我们并不很清楚,也并不太清楚为什么做如此细化的测试,但可以从原理上推断一下,首先楼主可以单步执行跟踪一下这段代码,看代码有没有执行,第二数据修改后有没有提交,第三那个Accept变量的默认值 一般是false,楼主应该自己置true的。如果以上的方法还是不能解决那可能就是对事件执行顺序理解的问题了!总之这个测试,最终只能是看执行结果,结果是什么样子就是什么样子,因为这个问题的最终解决方案其实是不用重复列进行关联,或是关闭级联删除策略,其它的方案只是补丁,最终可能会为了解决A问题引入了B问题,为了解决b,不得不引入C问题,在使用C的时候又发现里面的D不明白,最终进入一个未知知识的怪圈!
回复 支持 反对

使用道具 举报

发表于 2009-7-22 10:52:04 | 显示全部楼层
现在我说一下环境,这个环境不是保密代码,简单一点儿可以理解成一个全局变量,或是全局变量的集合,当然全局变量也在局部化,这个局部化后,就成了局部变量,一直细化下来就是一个执行过程内的变量,这里的全局,局部,就是环境的另外一种说法。
策略就相当于附加上这个全局环境中的一个变量(其实就是全局变量),它决定了代码如何执行,不同的策略会对公共代码进行修正。比方说一个权限策略,人员A只能读取到华北大区的业务数据,这样在读取数据的时候可以写死一条SQL,这样就成为了程序员可以看见的代码,但当人员B,人员C。。。加入的时候噩梦就开始了,会发现有无限多的SQL去写,一旦维护其中的一个,后果更可怕了。这时候最好把公用部分提取出来,写死到程序里,然后把与人员相关的那段儿抽象成其它的逻辑直接写在人员的属性上,当系统运行时主动从人员属性中取到,把逻辑合并到SQL中执行,这样即没有了维护的噩梦,就算再加进千百个人来也不用去修改程序,把这种从SQL中分离出的逻辑我们的系统就将之定义为策略(当然之所以不叫SQL扩展或其它的名子是因为还有其它的非SQL的逻辑也抽象进来了)。这个过程整体就叫系统从环境中读取策略,然后按照修正过(相对于看到的代码)的执行过程去执行逻辑。所以这个修正后真正执行的代码逻辑楼主在源代码中是看不到的,原因是它被分散到了很多地方!而我们的核心,这个主从关系的逻辑由于是核心逻辑所以“很不幸”的被分散到了平台内部也就是平台本身的源代码中。所以是直接看不到源代码了,只能通过执行期间设置断点,看变量的方式知道它的存在和在代码中修改它的行为!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-23 12:07:01 | 显示全部楼层
重申一下需求:
对于用某个功能作申请时,可以多个申请共用附件(就是业务主表中多行记录对应相同的文档关联)。这些申请是前一个状态变为bsFinished后才能开始流转下一个申请。
根据系统的现状,在删除编辑中的申请(这些关联申请的其中一个)时,会连带把文档关联的信息删掉。
现在的需求是,在删除编辑中的申请(这些关联申请的其中一个)时,不删除文档关联。
回复 支持 反对

使用道具 举报

发表于 2009-7-23 12:54:48 | 显示全部楼层
楼主,对于业务数据与文档数据做主从关联关系在
业务模型\协同系统\文档\关联\文档关联信息\文档关联网格
的BindDataSet这个方法设置主从关系,你可以看下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-27 16:33:13 | 显示全部楼层
请结贴。
谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-11 21:40 , Processed in 0.038677 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表