随笔 - 77  文章 - 1 评论 - 732 trackbacks - 86
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

camlquery 类库下载:
 http://www.codeplex.com/camlquery
SPCAMLEditor 下载:
 http://www.codeplex.com/SPCAMLEditor

与我联系

搜索

 

留言簿(22)

我参与的团队

随笔分类(68)

My Friends

SilverLight

wss

积分与排名

  • 积分 - 81411
  • 排名 - 488

最新随笔

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

用代码调用MOSS的SSP获取UserProfile时,代码只能运行于MOSS站点下,或者是WinForm中,否则,会出错,这个问题如何解决呢?

代码如下:
SPSite site = new SPSite("http://ssjin073:9031");        

        
//获取上下文环境
        ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);

       
//this.Context.Items["Microsoft.Office.ServerContext"] =  context;
       
        Response.Write(context.Status);

        UserProfileManager _profileManager;        
       _profileManager 
= new UserProfileManager(context) ;
   
       UserProfile u 
= _profileManager.GetUserProfile("saictest\\zjy");

       Response.Write(u.PersonalUrl);

这段代码只能在MOSS站点的页面上运行,如果在普通的站点或者直接在VS的小IIS中运行,会报如下错误:

Error

这个错误是MOSS的一个bug引起的,SiteContext的内部代码会调用当前上下文中的ServerContext,调用不到,就抱错了。

我们可以通过手工添加上下文对象解决这个问题 :
 SPSite site = new SPSite("http://ssjin073:9031");        

        //获取上下文环境
        ServerContext context = ServerContext.GetContext( site ) ;//.GetContext(sspName);

        //此处将ServerContext放入上下文
       this.Context.Items["Microsoft.Office.ServerContext"] =  context;
       
        Response.Write(context.Status);

        UserProfileManager _profileManager;        
       _profileManager = new UserProfileManager(context) ;
   
       UserProfile u = _profileManager.GetUserProfile("saictest\\zjy");

       Response.Write(u.PersonalUrl);

以上代码在任何站点下都可以运行了!

注意:
1)站点应用程序池的帐号必须有足够的权限,或者直接采用MOSS站点的应用程序池.
2)站点的web.config下需要添加如下配置:
<identity impersonate="true" />

----------
另:提升权限后,操作ListItem也会出现类似的错误,可以用同样的方法解决:
protected void Page_Load(object sender, EventArgs e)   
    
{

        SPSecurity.RunWithElevatedPrivileges(
delegate()
        
{
            UpdateItem();
        }

        );           
    }


    
void UpdateItem()
    
{
        SPSite site 
= new SPSite("http://ssjin073:9032");
        
        SPWeb web 
= site.RootWeb;
          
        
//强制设置上下文对象
        HttpContext.Current.Items["HttpHandlerSPWeb"= web;

        web.AllowUnsafeUpdates 
= true;
        SPList list 
= web.Lists["MainList"];

        SPListItem item 
= list.Items[0];

        item[
"Title"= DateTime.Now.ToString();

        item.Update();

        web.Dispose();
        site.Dispose();
    }
posted on 2008-04-11 17:59 jianyi 阅读(529) 评论(7)  编辑 收藏 所属分类: Sharepoint

FeedBack:
#1楼  2008-04-28 13:49 ecpe [未注册用户]
顶之, 要想MOSS玩的好, 建义blog不可少 :)
  回复  引用    
#2楼  2008-05-07 11:12 ShanHai [未注册用户]
大哥,看了你的《字段级权限》解决方案,里面选择SharePoint用户组的时候,自动列出系统现有的用户组。

你能不能写一个 普通列表 > 设置权限 > 选择用户 > 自动列出AD中的用户
的解决方案放出来?
  回复  引用    
#3楼 [楼主] 2008-05-07 13:36 jianyi      
@ShanHai
没不要这样做吧,MOSS用户可以跟AD用户同步的。
  回复  引用  查看    
#4楼  2008-05-09 10:51 ShanHai [未注册用户]
大哥,谢谢你回复。MOSS用户可以跟AD用户同步的。这个我知道。

MOSS中,用户在给列表设置权限,不能游览整个公司的花名册,要手工输入,十分麻烦。

有没有好的方法,直接选择用户呢?
  回复  引用    
#5楼 [楼主] 2008-05-09 13:22 jianyi      
@ShanHai
用户习惯了就好,哈哈...定制太麻烦了
  回复  引用  查看    
#6楼 [楼主] 2008-05-09 13:23 jianyi      
@jianyi
而且这是管理功能,没必要搞得那么便利.
  回复  引用  查看    
#7楼  2008-05-12 14:17 @ShanHai [未注册用户]
麻烦就算了吧。

我们看重MOSS的,在于最终用户自己可以对MOSS进行适当 “管理”
比如个人站点 > 共享文件库,要设置权限,肯定是他自己选择用户,自己“管理”

变通方法
1、用户自己搜索,录入数据
2、用Excel作个表格,用户自己查找Excel表格,输入数据
  回复  引用    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-28 13:28 编辑过


相关链接: