none
sharepoint 2010 Event Receiver 的使用 RRS feed

  • 问题

  • sharepoint 2010的通知列表,有一个“标题”和“姓名”。

    在追加新的项目时,对字段的入力合法性进行检查,这个功能用 Event Receiver的item adding方法怎么实现呢?


    • 已编辑 minivya 2011年7月7日 5:49
    2011年7月6日 5:20

答案

  • Windows认证有两个用户来源,一个是前端服务器本地Windows用户,一个是服务器所在域的AD用户。

    AD用户的信息进入到SharePoint的过程是这样的:

    1、在用户第一次被放入SharePoint的时候(比如有人给这个用户分配了权限,或者把这个用户加入了某些组的时候,或者这个用户第一次登陆的时 候),用户的登录名、姓名和电子邮件地址会从AD带过来;

    (如果你安装的是SharePoint Foundation,就只有这个过程)

    2、如果你装的是Server版,并且配置了User Profile Service的用户同步,那么除了上述那种方式之外,AD用户的属性进入SharePoint是这样的过程:

    AD -> 用户配置文件(User Profile) -> SharePoint网站

    中间这两个同步的步骤各有若干定时器作业(TimerJob)来完成,这个同步的频率根据从几分钟到一天不等。

     

    SharePoint和AD的关系简要的说可以归纳为以下几点:

    1、在多服务器组成的服务器场中,靠AD域把这几台服务器维持在一起(使用相同的服务账户)

    2、在Windows认证情况下(或者以AD为源的表单认证),AD可以作为SharePoint用户的主要来源

    3、在Windows认证情况下(或者以AD为源的表单认证),AD负责进行用户验证(Authentication)

    所以,如果你的服务器场只有一台机器,而且不打算用Windows认证的话,SharePoint可以和AD一点关系都没有

    • 已标记为答案 minivya 2011年7月15日 2:36
    2011年7月14日 8:41

全部回复

  • 在通知列表上附加Event Receiver,在item adding上增加处理就行了。
    上善若水
    Lambert Qin [秦磊] | 博客(Blog): SharePoint in My Eyes 中文 / LinkedIn
    Posting is provided "AS IS" with no warranties, and confers no rights.
    2011年7月7日 5:38
  • 谢谢你的回答。

    我知道是用item adding方法来实现。

    但是在这个方法里,我不清楚怎么取得字段的值,另外,出错的画面能不能自定义,不用sharepoint自定义的那个画面可以吗?

    就像是弹出窗口,有[OK][Cancle]按钮的那种呢?


    2011年7月7日 5:49
  • Hi minivya,

    同意Lambert的说法,使用Event Handler是一个很好的方案。

    1. 至于如何获取到字段的值,你可以使用properties.BeforeProperties["column"] 和properties.AfterProperties["column"],参考一下的方案:

    public override void  ItemUpdating(SPItemEventProperties properties)
    {
         if (properties.BeforeProperties["column"] != properties.AfterProperties["column"])
        {
            properties.Cancel = true;
            properties.ErrorMessage = "This column cannot be changed";
        }
    }
    2. 你使用的是SharePoint 2010, 是可以跳转到自定义的错误页面的,SPItemEventProperties多了一个RedirectUrl的属性。参考:

    public override void ItemAdding(SPItemEventProperties properties)
            {
                base.ItemAdding(properties);
                string tite = properties.AfterProperties[“title”].ToString();  
                if(tite.Contains(“_”))                
                {                                
                    properties.Cancel = true; 
                    properties.Status = SPEventRecieverStatus.CancelWithRedirectUrl; 
                    Properties.RedirectUrl = “/_layouts/MyBlog/CustomError.aspx?errormessage =Inavlid 
                    Title”;               
                }
            }

     

     

    2011年7月7日 6:00
  •  1.假如标题为空,在自定义的错误页面,显示错误信息“标题没有入力,就这样登陆信息吗?”,下面有两个按钮[OK][Cancle]。

     点击[OK],就这样登陆了,返回列表页面;

    点击[Cancle],返回到,追加列表项的页面,输入标题,之后再保存。

     

    SPEventReceiverStatus有四个属性“CancelWithError,CancelNoError,Continue,CancelWithRedirectUrl”

    没有我这种既想出错误信息,又不取消的,要根据这两个按钮[OK][Cancle]来决定接下来的处理的。

     

    这样一个自定义的错误页面CustomError.aspx,页面做起来比较容易,但是这两个按钮的处理怎么做,怎么才能和sharepoint的列表页面,和追加列表项目的页面联动起来呢?

    2.“姓名”字段,做判断,是否是在active directory中登录的用户,这个查询的处理,用什么方法能够表容易实现呢?

    以上两个问题,我不知道有没有表述清楚,请高手帮我解答一下。

    2011年7月8日 7:18
  • 对于你的第一个要求,我建议你通过JavaScript (或者JQuery)来实现。在JavaScript中来做关于“标题是否为空”的逻辑判断,然后决定是否跳转;

    对于你的第二个问题,我不是很明白。如果SharePoint使用的是Windows认证,那么所有的用户都来自于AD,不知道你要查询什么?

     

    2011年7月12日 6:50
  • 谢谢你的回答,不过我不是太清楚,SharePoint的Windows认证和AD有什么关系。

    前不久,有研究过,用[User Profile Server]和AD同步,AD的用户才到SharePoint里的,我不是很清楚您说的是什么意思?

    我对SharePoint和AD之间的关系不是很清楚,能帮我简单的说一下吗?

     

    2011年7月13日 7:54
  • Windows认证有两个用户来源,一个是前端服务器本地Windows用户,一个是服务器所在域的AD用户。

    AD用户的信息进入到SharePoint的过程是这样的:

    1、在用户第一次被放入SharePoint的时候(比如有人给这个用户分配了权限,或者把这个用户加入了某些组的时候,或者这个用户第一次登陆的时 候),用户的登录名、姓名和电子邮件地址会从AD带过来;

    (如果你安装的是SharePoint Foundation,就只有这个过程)

    2、如果你装的是Server版,并且配置了User Profile Service的用户同步,那么除了上述那种方式之外,AD用户的属性进入SharePoint是这样的过程:

    AD -> 用户配置文件(User Profile) -> SharePoint网站

    中间这两个同步的步骤各有若干定时器作业(TimerJob)来完成,这个同步的频率根据从几分钟到一天不等。

     

    SharePoint和AD的关系简要的说可以归纳为以下几点:

    1、在多服务器组成的服务器场中,靠AD域把这几台服务器维持在一起(使用相同的服务账户)

    2、在Windows认证情况下(或者以AD为源的表单认证),AD可以作为SharePoint用户的主要来源

    3、在Windows认证情况下(或者以AD为源的表单认证),AD负责进行用户验证(Authentication)

    所以,如果你的服务器场只有一台机器,而且不打算用Windows认证的话,SharePoint可以和AD一点关系都没有

    • 已标记为答案 minivya 2011年7月15日 2:36
    2011年7月14日 8:41
  • 你好,谢谢Erucy的详细回答。受益匪浅。

    我安装的sharepoint是server版,通过配置了User Profile Service,实现用户同步的,我配置的服务器场中有两台机器,一台是域控制器。

    在AD中的OU结构如下:

    某公司(OU)——销售部(OU): 用户1

                                       用户2

                 ——生产部(OU):用户3

                                     用户4

     通过User Profile Service同步到sharepoint网站之后,用户可以全部同不过来,那么组织结构能同时同步过来吗?也就是用户所属的部门可以同步过来吗?

    2011年7月15日 2:48