zoukankan      html  css  js  c++  java
  • 如何在silverlight中以同步方式 获取sharepoint2013站点的当前登录账号

    最近有个项目用到了silverlight要同步方式获取当前登录账号。异步的方式无法跟其他应用结合。主要先后顺序问题。但是silverlight非常不好获取到当前登录账号。即使获取到了也是异步方式获取。后来想到用JS的客户端对象模型区获取也是异步方式可以获取。代码如下:

    <script type="text/javascript">
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', getWebUserData);
    var context = null;
    var web = null;
    var currentUser = null;
    function getWebUserData() {
    context =SP.ClientContext.get_current();
    web = context.get_web();
    currentUser = web.get_currentUser();
    currentUser.retrieve();
    context.load(web);
    context.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));
    }
    function onSuccessMethod(sender, args) {
    var userObject = web.get_currentUser();
    alert('User name:' + userObject.get_title() + '
     Login Name:' + userObject.get_loginName());
    document.getElementById("sl_slCurrentLoginName").value =userObject.get_title();
    alert(document.getElementById("sl_slCurrentLoginName").value);
    }
    function onFailureMethod(sender, args) {
    alert('request failed ' + args.get_message() + '
    ' + args.get_stackTrace());
    }
    </script>

    也是无法控制与其他应用的先后顺序,网上有资料写了通过web services来无法获取,不成功。其实想明白了很简单,下面是解决方案:

    1、 自己开发一个用户控件,在用户控件里用API函数获取当前登录账号并赋值给隐藏的控件,如下:

    用户控件的.ascx的代码如下:

    <input type="hidden" id="sl_slCurrentLoginName" value="<%=_currentLoginName%>" />

    注意:id要在唯一。不能在母版页和布局页里有重复的,而且为客户端的控件

    用控件.CS代码如下:

    定义全局变量:

    /// <summary>
    
    
    
    /// currentlogin
    
    
    
    /// </summary>
    
    
    
    public string _currentLoginName = string.Empty;
    

    page_load事件:

    protected void Page_Load(object sender, EventArgs e)
    
    
    
    {
    
    
    
     
    try
    
    
    
    {
    
    
    
    //
    
    
    
    SPUser user = SPContext.Current.Web.CurrentUser;
    
    
    
    //
    
    
    
    if(user !=null)
    
    
    
    {
    
    
    
    _currentLoginName =SSOCredentials.GetLoginName(user.LoginName);
    
    
    
    }
    
    
    
    }
    
    
    
    catch(Exception ex)
    
    
    
    {
    
    
    
    }
    
    
    
    }
    
    
    
    
    

    2、 把用户控件部署到SP站点中

    3、 把用户控件部署到母版页或布局页(通过SPD方式加入进去或VS里头部署母版的方式嵌入进去,这里不多说了)。这里我部署到母版页,如下图:

    image

    4、 部署完毕后,在silverlight代码端用如下一个函数就可以搞定。

    string loginName = HtmlPage.Document.GetElementById("sl_slCurrentLoginName").GetAttribute("value");

    部署完毕silverlight包到SP站点中,即可获取当前登录账号。

  • 相关阅读:
    最近几天在winform系统界面操作,流程操作上的经验总结.
    人生路痛苦中......
    Contact List
    奥巴马当选
    在会计电算化软件中设计凭证数据库的几种方法转摘(粗浅)
    修改ListItem时出现Error: Invalid data has been used to update the list item. The field you are trying to update may be read only.
    MOSS误删网站集后,如何还原?
    SharePoint2007 管理中心TimerJob”计时器作业定义”页面报错
    SharePoint 2010 常用技巧及方法总结
    利用RunWithElevatedPrivileges模拟管理员权限时慎用SPContext
  • 原文地址:https://www.cnblogs.com/love007/p/4094696.html
Copyright © 2011-2022 走看看