peoplecode之SearchInit事件(转)

组件属性的USE Tab页中有一个search record,它的作用是让我们在进入这个组件之前先进行筛选,下面我就对这个Search Record介绍一些我自己的研究。

 

1. 一般这个Search Record都是是一个View,之所以要经常使用View是因为我们一般只要从一个基Record中选择几个Field来简单描述一下我们要选的数据就可以了。我们想要显示什么字段就取基Record中的哪个字段就可以了。这样在进入一个组件之前就首先进入到搜索页面,例如:

2. 在组件属性的Internet Tab页还有一个Default Search/Look up:可以选择Basic和Advance,当选择Advance时,如果我们的Search Key有多个的话就会一个一个列出来,如果是Basic的话就只有一个,但是它是以下拉列表的形式展示所有的Search Key的。

注:这里要说一下这些搜索Field是如何添加的,如果我们想要添加一个Field作为进入组件的搜索条件,打开我们给这个组件添加的Search Record,然后找到我们想要添加的搜索字段,右键选择Record Field Property,在Use Tab页选择AlternateSearch  Key,如果我们想给这个字段加放大镜,可以Edit Tab页选择Edit Type为:Table Edit ,然后加上我们的提示Record就可以了。其中list box的选择控制在查询结果中是否添加这个colums。

(1. If you define fields as list box items on the search record, the system displays those fields as columns grid in the result set

    2. If you designate fields as search keys or alternate search keys, then those fields appear on the search page.)

 

3. 下面来看看Searchinit Evevt的作用,这个Searchinit事件是添加在Search Record的某个Field上的,让我们来控制Search Record页面的一些操作。

例如我想要给某个搜索字段赋一个初始值,不让某个字段使用,一些逻辑操作之类的,下面介绍一个我做过的案例:

它的作用是某个角色组的用户可以使用搜索进行筛选,但是除了这个角色组外的都只能看到自己的信息(跳过搜索页面直接进入自己信息的页面)

 

If%Component = "GHAC_INCOME_APPLY" Then

  

   &emplid = %EmployeeId;

   rem 薪酬管理员角色;

   &Role = "GHAC COMPENSATIONMANAGEMENT";

  

   rem 如果用户为薪酬管理角色,则金额字段可编辑;

   REM SQLExec("SELECT DISTINCT A.ROLENAMEFROM PSROLECLASS A ,PSAUTHITEM B, PSROLEUSER C WHERE A.CLASSID= B.CLASSID ANDA.ROLENAME = C.ROLENAME AND B.BARITEMNAME=:1 AND C.ROLEUSER = :2", %Component, %OperatorId, &RoleResult);

  

   If IsUserInRole(&Role) = False Then

      rem 将搜索的条件变灰掉,不能进行编辑;

      Gray(GHAC_TL_SECSRCH.EMPLID);

      Gray(GHAC_TL_SECSRCH.EMPL_RCD);

      Gray(GHAC_TL_SECSRCH.NAME_DISPLAY_SRCH);

      Gray(GHAC_TL_SECSRCH.LAST_NAME_SRCH);

      Gray(GHAC_TL_SECSRCH.NAME_AC);

      Gray(GHAC_TL_SECSRCH.MIDDLE_NAME);

      Gray(GHAC_TL_SECSRCH.DEPTID);

      Gray(GHAC_TL_SECSRCH.SECOND_LAST_SRCH);

     

      REM 下面两种方法都行,但是使用SetSearchDialogBehavior应该符合它的使用条件 ;

     

      GHAC_TL_SECSRCH.EMPLID.Value =&emplid;

      SetSearchDialogBehavior(0);                                                  //跳过搜索对话框

     

      /*    

          &rec = GetLevel0()(1).GHAC_TL_SECSRCH;

      &rec.EMPLID.Value = &emplid;

      &rec.EMPL_RCD.Value = 0;

      &rec.OPRID.Value = %OperatorId;

      &rec.ROWSECCLASS.Value =&rowsecclass;

      If &rec.SelectByKey() Then

         SetSearchDialogBehavior(0);

      End-If;

      */

   End-If;

  

End-If;

 

后来添加:今天客户遇到一个问题:在个人数据页面搜索不到原来是存在一个员工。

        碰到这个问题,我首先就去查了下ps_job表发现存在该员工,并且数据没什么异常现象。然后就又去看了下个人数据页面搜索不到该员工,于是我就去找个人数据页面所在的组件,看看这个search record到底是怎么查找的导致没有查找到该员工。个人数据页面所在的组件是:PERSONAL_DATA,打开这个组件查看它的属性发现它的search record是:PERS_SRCH_ALL,打开这个record发现不对劲,搜索页面显示的是6个搜索字段而PERS_SRCH_ALL表总共才4个字段,并且在emplid字段的searchinit事件中加messagebox也不谈对话框,感觉奇怪了,search record明明就是PERS_SRCH_ALL但是显示却不对啊。于是就去查看peoplebook终于找到了答案,原来search record“另有其人”。查看Peoplebook时发现原来Search Record是可以重载的(Overriding),下面是Peoplebook 中的一段话:

You might want to reuse the same component multiple times with different search records. You can accomplish this by overriding the component search record at runtime when the component is opened from a menu item without creating separate copies of the component. The component override is temporary, and occurs only when the component is opened from the menu item in which the override is set. It does not change the component definition.

按照它的意思我去查看DUPLICATE_HOLDER菜单,找到个人数据item,然后查看menu item properties发现了override的Record:PERALL_SEC_SRCH然后去验证了一下个人数据页面的search record确实是PERALL_SEC_SRCH。这是一个带行安全性record,最后发现这个员工其实是最近换了部门,但是这个部门缺没有行安全性导致这里搜索不到的。(最大的发现还是知道了search record的重载)

 

附带:SetSearchDialogBehavior函数的使用注意事项

SetSearchDialogBehavior()参数有两个,0或则1,使用0代表如果满足SetSearchDialogBehavior跳过搜索的条件才进行跳转,否则不跳转,使用1就是强制跳转

SetSearchDialogBehavior满足跳转的条件:

1. 提供所有必需的key(Key是Required的);

2. 如果是一个搜索对话框,则返回结果至少有一行;

3. If this an Add dialog box, then no duplicate key error results from the provided keys; if this error occurs, the processing resets to the default behavior.

转载于:https://www.cnblogs.com/dereklau2012/archive/2013/05/21/3090674.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值