二开案例.表单插件.跨账套执行Sql账表

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

二开案例.表单插件.跨账套执行Sql账表

【应用场景】跨账套执行Sql账表

【案例演示】A账套新建直接SQL账表,运行时前往B账套获取数据。

【实现步骤】

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

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.ServiceHelper;

using Kingdee.BOS.Util;

using System;

using System.ComponentModel;

using System.Reflection;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【表单插件】跨账套执行Sql账表

    /// </summary>

    [Description("【表单插件】跨账套执行Sql账表"), HotUpdate]

    public class CrossDbSqlReportFormPlugIn : AbstractDynamicFormPlugIn

    {

        public override void OnLoad(EventArgs e)

        {

            base.OnLoad(e);

            // 通过目标账套的数据中心内码获取访问目标账套的上下文(查管理中心数据库的T_BAS_DATACENTER表可获取)

            var context = DataCenterService.GetDataCenterContextByID("5f6010a6071016");

            // 设置访问目标账套的用户内码(查询目标账套的T_SEC_USER表可获取)

            context.UserId = 103678;

            context.CurrentOrganizationInfo = this.View.Context.CurrentOrganizationInfo;

            context.CurrentOrganizationInfo.ID = 1;

            context.ConsolePageId = this.Context.ConsolePageId;

            //

            SetValue(this.View.OpenParameter, "Context", context);

            SetValue(this.View, "Context", context);

            SetValue(this.View.Model, "Context", context);

        }


        private static void SetValue(object obj, string propertyName, object value)

        {

            var property = obj.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public);

            if (property != null)

            {

                var setterMethod = property.GetSetMethod(true);

                if (setterMethod != null)

                {

                    setterMethod.Invoke(obj, new[] { value });

                }

            }

        }

    }

}


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


<3>BOSIDE新建直接SQL账表【跨账套Sql账表[Jac_CrossDbSqlReport]】,配置数据源,注册表单插件,保存元数据,发布菜单,开发完毕。

SELECT SERVERPROPERTY('MachineName') AS  MachineName ,SERVERPROPERTY('InstanceName') AS InstanceName ,SERVERPROPERTY('ServerName') AS ServerName, DB_NAME() AS DBNAME



【功能验证】

<1>登录业务站点,打开菜单【跨账套Sql账表】,由查询结果可知,当前查询已切换到指定数据库。

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




【知识点】

<1>获取指定账套的数据中心内码。

【数据中心】

--注意:查询数据中心,必须连接管理中心数据库查询

SELECT b.FNAME AS [数据中心(账套名称)],a.FDATACENTERID AS [数据中心内码(DBID)],a.FVISION AS 产品版本号,a.*

FROM T_BAS_DATACENTER a 

LEFT JOIN T_BAS_DATACENTER_L b ON a.FDATACENTERID=b.FDATACENTERID AND b.FLOCALEID=2052

<2>获取用户内码。

SELECT FUSERID AS 用户内码,FNAME AS 用户名称,FUSERACCOUNT AS 用户账号,* 

FROM T_SEC_USER

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










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

二开案例.表单插件.跨账套执行Sql账表

【应用场景】跨账套执行Sql账表【案例演示】A账套新建直接SQL账表,运行时前往B账套获取数据。【实现步骤】<1>编写表单插件,代码如下。usi...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息