二开案例.表单插件.获取会话Id(SessionId)

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.表单插件.获取会话Id(SessionId)

【应用场景】

获取登录用户的会话Id,从而实现免登录也可以执行某些操作。


【案例演示】

采购订单,通过表单插件获取会话Id。


【实现步骤】

<1>编写表单插件,代码如下。

using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Linq;
using System.Web;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
    /// <summary>
    /// 【表单插件】获取会话Id(SessionId)
    /// </summary>
    [Description("【表单插件】获取会话Id(SessionId)"), HotUpdate]
    public class GetSessionIdFormPlugIn : AbstractDynamicFormPlugIn
    {
        /// <summary>
        /// ASP.NET的SessionId,ASP.NET根据此Id来识别当前请求发起的会话。
        /// </summary>
        const string aspnet_sessionid_key = "ASP.NET_SessionId";
        /// <summary>
        /// 金蝶的的SessionId,星空根据此Id来获取登录用户的会话信息。
        /// </summary>
        const string kd_sessionid_key = "kdservice-sessionid";
        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            if (HttpContext.Current == null)
            {
                return;
            }
            string aspnet_sessionid = string.Empty;
            string kd_sessionid = string.Empty;
            KDServiceSession userSession = null;
            if (HttpContext.Current.Request.Cookies.AllKeys.Contains(aspnet_sessionid_key))
            {
                aspnet_sessionid = HttpContext.Current.Request.Cookies[aspnet_sessionid_key].Value;
            }
            if (HttpContext.Current.Request.Cookies.AllKeys.Contains(kd_sessionid_key))
            {
                // 获取金蝶会话Id
                kd_sessionid = HttpContext.Current.Request.Cookies[kd_sessionid_key].Value;
                if (!string.IsNullOrWhiteSpace(kd_sessionid))
                {
                    // 获取登录用户会话信息
                    userSession = SessionManager.GetCurrentSession(kd_sessionid);
                    if (userSession != null)
                    {
                        // 获取登录用户上下文
                        var userContext = userSession.AppContext;
                        // TODO
                    }
                }
            }
            var log = string.Format("【ASP.NET_SessionId】:{0}\r\n【kdservice-sessionid】:{1}r\n【Context.UserToken】:{2}r\n【UserSession】:{3}"
                , aspnet_sessionid, kd_sessionid, Context.UserToken
                , userSession == null ? "" : string.Format("UserId:{0},UserName:{1},Token:{2}", userSession.UserId, userSession.UserName, userSession.Token));
            this.View.ShowMessage(log);
        }
    }
}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展采购订单,注册表单插件,保存元数据,开发完毕。


【功能验证】

<1>登录业务站点,打开采购订单新增界面,即可获取到当前登录用户的会话信息。

---------------------------------------------------------------------------------------------------------













【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表单插件.获取会话Id(SessionId)

【应用场景】获取登录用户的会话Id,从而实现免登录也可以执行某些操作。【案例演示】采购订单,通过表单插件获取会话Id。【实现步骤】<1>...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息