自动登录后,实现自动打开某个单据的功能

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

自动登录后,实现自动打开某个单据的功能

本篇基础:BOS平台的二开编程(论坛),C#编程(ms),python语法,json语法,xml语法,VistualStudio2012(up)工具(ms),http/https基础知识,iis基础知识


自动登录后,实现自动打开某个单据的功能

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

1、启动插件不需要写入isoKey(写入isoKey是6.x的过时方法,7.x不需要这样处理);


2、在主控插件已经支持直接取到数据(系统出厂主控无需下面代码);

如果是二开主控,在AfterBindData事件中加入以下代码即可;  
   using Kingdee.BOS.Core;
   this.View.OpenSpecFormsByStartArgs();


3、在具体打开的单据中, 通过下面代码即可取到所有参数(例如HTML5入口表单:BOS_HtmlConsole);

7.x 出厂的默认主控支持打开V2参数的formid指定的单据, 如果是自定义单据用下面代码单点获取参数

    // 上一步中用this.View.OpenSpecFormsByStartArgs()打开的子单据才能用下面语句获取到参数对象。

   》》可用读取传入参数:

   using Kingdee.BOS.Authentication; 

   using Kingdee.BOS.Core;

   var args = this.View.GetStartAppHomePageArgs(); // 返回对象 StartAppHomePageArgs ,其中CustomArgs为自定义数据。


4、如果自定义主控没有使用上述方法打开指定单据,需要自己传递单点登录参数。

打开子表单时传递参数 (showParam 为 this.View.ShowFor(showParam)的参数):

showParam.CustomComplexParams[FormConst.StartAppArgs] = this.View.GetStartAppHomePageArgs();


5、如需要简单权限校验,可在二开主控插件中参考下面代码实现。

// 打开客制化参数传入的表单

protected bool OpenSpecFormsByStartArgs()

{

    if (this.View.OpenSpecFormsByStartArgs(CheckSpecFormsPermission))

    {

        return true;

    }

}

// 校验打开客制化参数传入的表单的权限

private DynamicFormShowParameter CheckSpecFormsPermission(DynamicFormShowParameter showParameter)

{

    return MainConsoleHelper.CheckSpecFormsPermission(this.View, showParameter);

}


6、如果二开业务主控继承自出厂主控插件(不推荐二开主控继承出厂,并屏蔽出厂组件方式,因为新功能补丁升级后新的功能可能会被二开组件屏蔽) ,只需要调用this.OpenSpecFormsByStartArgs()接口即可打开传入参数的表单;  

6.1、主控插件组件 WebSite/bin/Kingdee.BOS.Business.PlugIn.dll 组件;

6.2、Silverlight主控插件继承 Kingdee.BOS.Business.PlugIn.MainConsole.HomePageSutra类;

6.3、html5主控插件继承 Kingdee.BOS.Business.PlugIn.MainConsole.HomePageHtml.HtmlConsoleMainEdit类 ;

6.4、单功能模式继承 Kingdee.BOS.Business.PlugIn.MainConsole.HomePageHtml.HtmlConsoleEdit类;



特别注意:由于仅仅通过URL进行传递参数,StartAppHomePageArgs中的自定义参数CustomArgs不能传递太多数据,建议预先通过WebApi存储数据到服务器,然后仅传递该数据的唯一索引即可,在具体单据业务插件中通过该唯一索引提取数据即可。 V2参数说明可以参考:https://vip.kingdee.com/article/8928 


(下面代码适合6.x)

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

(下面代码仅适合6.x,对于7.x不需要写下面代码,支持主控默认打开V2参数指定单据)


  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,做扩展后保存,如下图片操作:

Open1.webp

 

Open2.webp

 

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,测试自动登陆后完美自动打开采购订单,如下图,自动登录后没有做任何操作的状态如下图:

普通表单

Open3.webp

 

表单列表界面

Open4.webp

 
动态表单界面

Open5.webp


--附录---------------- 参考帖子区 ----------------------

星空第三方免登资料参考链接

https://vip.kingdee.com/article/221201966503051264 


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

创建于2020-08-02 09:36

编辑于2021年1月7日 11:51:47

自动登录后,实现自动打开某个单据的功能

本篇基础:BOS平台的二开编程(论坛),C#编程(ms),python语法,json语法,xml语法,VistualStudio2012(up)工具(ms),http/https基础知识,i...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息