注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Memory extender

Beautiful Day..

 
 
 

日志

 
 

Master-Detail Relations (一)——Relation 名字相同引发的问题  

2010-11-01 17:29:54|  分类: EBS Form |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Relation的名字最长为30个字符。
同一个Block下面不可以出现两个同名的Relations,但是在不同Block下面的两个Relations可以同名。
但是,不要让一个Form中出现同名的Relations,无论是否同Block。尽量在建好Relation后手动改个名字
------------------------------------------------------------------------------------------------------------------------------------------------------
最近这段时间,被一个问题折磨了好久,吃不好..睡不香..寝食难安....
简化情景如下:
       Query_Find型的Form,Find后,得出一个关于物料的‘Item’ Block,在‘Item’ Block的Post-query中运算出两个其它的物料:ITEM_ID_1、ITEM_ID_2,然后用INVENTORY_ITEM_ID、ITEM_ID_1、ITEM_ID_2分别作为条件去关联三个客户化的关于物料的Block: 'Header_1','Header_2','Header_3'(每个ITEM_ID会串出多笔Header资料)(三个Header基于同一table)。然后三个Header Block分别去串更下层的Line Block。
Find后的画面如下: 
Master-Detail Relations (一)——Relation 名字相同引发的问题 - Gabriel - GabrielMaster-Detail Relations (一)——Relation 名字相同引发的问题 - Gabriel - Gabriel 
Problem:
       Find以后,如果光标在某个Header的记录间变换,会使得另外Header下的Line内容Clear_Block掉。
------------------------------------------------------------------------------------------------------------------------------------------------------
Solution:
      问题出在Relation Name:
      由于我Headers和Lines Block的名字起的比较长,大约26、27个字符的样子(三个Headers或三个Lines的名字只有最后一个字符不同),于是在建Relation的时候,它自动生成的Relation Name的规则是'Headers Block(Master)名字的前15个字符'||'_'||'Lines Block(Detail)名字的前14个字符'。基于以上原则,三个Headers Block下面的生成了同名字的Relations。
      而在建Relation自动生成的Procedure:Clear_All_Master_Details中调用到了这些名字,它用Get_Block_Property和Get_Relation_Property分别以Relation名和Block名为参数来取Block和Relation的名字,这样Procedure内部就出现了问题,比如本来要取这个,结果取到了那个.....
------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------

add up
后来在优化同事写的FORM的时候又见到了这个问题,FORM样式如图:
Master-Detail Relations (一)——Relation 名字相同引发的问题 - Gabriel - Gabriel
 可以看到出口标签中出现了第二条记录,而实际上并没有这条记录,这条记录是进口标签里面的。
正是由于上面所述的RELATION_NAME问题造成

附1Clear_All_Master_Details中会有问题的代码:
................
  --
  -- Clear all the detail blocks for this master without
  -- any further asking to commit.
  --
  currel := Get_Block_Property(trigblk, FIRST_MASTER_RELATION);
  WHILE currel IS NOT NULL LOOP
    curdtl := Get_Relation_Property(currel, DETAIL_NAME);
    IF Get_Block_Property(curdtl, STATUS) <> 'NEW'  THEN
      Go_Block(curdtl);
      Check_Package_Failure;
      Clear_Block(NO_VALIDATE);
      IF :System.Block_Status <> 'NEW' THEN
        RAISE Form_Trigger_Failure;
      END IF;
    END IF;
    currel := Get_Relation_Property(currel, NEXT_MASTER_RELATION);
  END LOOP;
................
这里,首先用Get_Block_Property取得了FIRST_MASTER_RELATION,然后将Relation Name作为条件传入Get_Relation_Property去取DETAIL_NAME,然后Clear Block。由于Relation Name的不唯一,所以就出现了问题。
------------------------------------------------------------------------------------------------------------------------------------------------------
附2:系统自动在Form级的ON-CLEAR-DETAILS中调用了Clear_All_Master_Details。
Trigger ON-CLEAR-DETAILS 说明:
Description

Fires when a coordination-causing event occurs in a block that is a master block in a Master/Detail relation.  A coordination-causing event is any event that makes a different record the current record in the master block. 

Definition Level  form, block 

Legal Commands

Any command, unrestricted built-ins, restricted built-ins 

Enter Query Mode  no 

Usage Notes

Form Builder creates the On-Clear-Details trigger automatically when a Master/Detail block relation is defined. 

On Failure

Causes the coordination-causing operation and any scheduled coordination triggers to abort. 

Fires In

Master Detail Coordination 

  评论这张
 
阅读(577)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017