自动登录后,实现自动打开某个单据的功能
金蝶云社区-因扎吉
因扎吉
10人赞赏了该文章 2,052次浏览 未经作者许可,禁止转载编辑于2018年05月21日 17:19:20

自动登录后,实现自动打开某个单据的功能(实在很多二开同学在问,利用周末的时间给大家制作一个Demo如下)

自动登录后,实现自动打开某个单据的功能(实在很多二开同学在问,利用周末的时间给大家制作一个Demo如下)

7.x方法的解决方案!【推荐

1、启动插件不需要写入isoKey(6.x的方法);
2、在主控插件已经支持直接取到数据(系统出厂主控);如果是二开主控,在AfterBindData事件中加入以下代码即可;  
   using Kingdee.BOS.Core;

   this.View.OpenSpecFormsByStartArgs();


3、在具体打开的单据中, 通过下面代码即可取到所有参数;

   using Kingdee.BOS.Authentication;

   var args = this.View.OpenParameter.GetCustomParameter(FormConst.StartAppArgs) as StartAppHomePageArgs
;



(下面代码适合6.x, 7.x也可用)

1,在启动自动登陆插件文章的第六部分的代码里面DoLoginCore(context, ret, pluginLoginInfo);方法调用完成后,编写如下代码,写入客制化参数:

(下面代码仅适合6.x,对于7.x不需要写这段代码)

  1.                     //隔离参数键值

  2.                     if (!string.IsNullOrWhiteSpace(ret.SessionId))

  3.                     {

  4.                         var isoKey = ret.SessionId + "_AutoLoginArgs";

  5.                         //登陆成功后,加入自定义参数

  6.                         HttpContext.Current.Application.Set(isoKey, "PUR_PurchaseOrder|100001");

  7.                     }

复制代码





2,用BOSIDE打开【主控台经典版】BOS_MainConsoleSutra,做扩展后保存,如下图片操作
扩展单据

注册单据插件

3,在扩展后的【主控台经典版】BOS_MainConsoleSutra注册下面新建的二开插件

using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Kingdee.BOS.Test.PlugIn.Basic
{
    public class Ext_HomePagePlugin : AbstractDynamicFormPlugIn
    {
        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            //隔离参数键值
            var isoKey = this.Context.SessionId + "_AutoLoginArgs";
            //获取客制化参数
            var cargs = HttpContext.Current.Application.Get(isoKey) as string;
            //清理Session
            HttpContext.Current.Application.Remove(isoKey);

            if (!string.IsNullOrWhiteSpace(cargs) && cargs.IndexOf('|') > 0)
            {
                var tmp = cargs.Split('|');
                string pageId = Guid.NewGuid().ToString();

                // 显示单据, 使用 BillShowParameter

                var showParam = new BillShowParameter()
                {
                    FormId = tmp[0],
                    PageId = pageId,
                    Status = OperationStatus.EDIT
                };

                showParam.OpenStyle.ShowType = ShowType.MainNewTabPage;
                showParam.OpenStyle.ShowType = ShowType.MainNewTabPage;
                showParam.OpenStyle.TagetKey = "FMAINTAB";

                // 传入需要单据内码
                showParam.PKey = tmp[1];
                this.View.ShowForm(showParam);

                // 显示单据列表, 使用 ListShowParameter

                var showListParam = new ListShowParameter()
                {
                    FormId = tmp[0],
                    PageId = Guid.NewGuid().ToString()
                };

                showListParam.OpenStyle.ShowType = ShowType.MainNewTabPage;
                showListParam.OpenStyle.ShowType = ShowType.MainNewTabPage;
                showListParam.OpenStyle.TagetKey = "FMAINTAB";

                this.View.ShowForm(showListParam);
            }

            // 显示动态表单, 使用 DynamicFormShowParameter

            var showDyParam = new DynamicFormShowParameter()
            {
                FormId = "PUR_USERORDERPARAM",
                PageId = Guid.NewGuid().ToString()
            };

            showDyParam.OpenStyle.ShowType = ShowType.MainNewTabPage;
            showDyParam.OpenStyle.ShowType = ShowType.MainNewTabPage;
            showDyParam.OpenStyle.TagetKey = "FMAINTAB";

            this.View.ShowForm(showDyParam);

        }
    }
}




4,测试自动登陆后完美自动打开采购订单,如下图,自动登录后没有做任何操作的状态如下图

普通表单
自动登录自动打开单据Demo

表单列表界面表单列表界面
动态表单界面


赞 10