电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

Html5工作台开发指引

来源:金蝶云社区作者:金蝶2024-09-233

Html5工作台开发指引

在最新版环境下面,html5端暂时支持的工作台主要分为两类(sliverligh/客户端暂时不支持),一种是支持预置不同模块的的工作台(图1),另一种是列表步骤式的工作台(图2),具体效果如下图所示。

云之家图片20210610154038.webp

图1

云之家图片20210610154030.webp

图2


现在就分别介绍下这两种工作台的开发和预置过程,

  1. 模块工作台:

模块工作台是基于html5的流式布局控件进行开发的单据,支持将需要的单据嵌入到工作台。由于模块工作台是针对子系统的工作台,因此需要先确定是哪个子系统的在进行开发,再进行数据的预置。

a.预插业务应用布局表(T_BAS_STDAPPMENULAYOUT)

FNODEID:对应子系统的FID, 可以通过子系统名称查找到相应的FID,例如查找“总账”对应的FID,

SELECT L.FNAME,S.FID FROM T_META_SUBSYSTEM S LEFT JOIN T_META_SUBSYSTEM_L L ON S.FID=L.FID where L.FNAME ='总账';

以上取出的FID即是对应的FNODEID;

FID:值类型为varchar(36),由业务领域自定义,注意字符长度;

FUSERID:默认布局取值-1,用户保存后根据用户ID生成相应布局;

FLAYOUTNO:现在暂时只有默认的布局类型,取值“DefaultLayout”;

插入sql示例:

DELETE T_BAS_STDAPPMENULAYOUT WHERE FID='GL';
INSERT INTO T_BAS_STDAPPMENULAYOUT(FID,FNODEID,FUSERID,FLAYOUTNO,FLAYOUTTYPE) VALUES ('GL','GL',-1,'DefaultLayout','1') ;

b.预插业务应用布局分组表(T_BAS_STDAPPMENUGROUP

二开的时候可以根据要显示几个模块决定在布局分组表中进行预插,例如这里预插三个模块,其中前两个分组为快速链接模块和待办事项(标准环境已有功能,对应FORM1和FORM2),增加一个自定义的表单(FORM3内容)对应的formid预插在第三个分组中, 这个formid对应要二开进行开发。如图所示。

云之家图片20210610175011.webp

FENTRID,FID和多语言表的FPKID: 值类型为varchar(36),可以自定义,注意字符长度;T_BAS_STDAPPMENUGROUP的FID和T_BAS_STDAPPMENULAYOUT的FID相关联。业务应用布局分组多语言表,用于显示分组的标题。如果构造出入上图的工作台,则要在表T_BAS_STDAPPMENUGROUP 预插三条数据(注:第一第二个模块是标准产品,第三个单据需要自己开发)。如预置数据有疑问可以参考之前的预查数据进行预插。

GROUPFORMID:该模块显示的表单ID,对应bos设计器的单据ID


DELETE T_BAS_STDAPPMENUGROUP WHERE FENTRYID IN ('GL_LINK', 'GL_TODOLIST', 'GL_BUSSINESSFORMID');
INSERT INTO T_BAS_STDAPPMENUGROUP(FENTRYID,FID,FSEQ,GROUPFORMID) VALUES ('GL_LINK','GL',1,'BOS_H5QuickLinks') ;
INSERT INTO T_BAS_STDAPPMENUGROUP(FENTRYID,FID,FSEQ,GROUPFORMID) VALUES ('GL_TODOLIST','GL',2,'BOS_H5BUSSINESSTODOLIST') ;
INSERT INTO T_BAS_STDAPPMENUGROUP(FENTRYID,FID,FSEQ,GROUPFORMID) VALUES ('GL_BUSSINESSFORMID','GL',3,'bussinessformid') ;

DELETE T_BAS_STDAPPMENUGROUP_L WHERE FENTRYID IN ('GL_LINK', 'GL_TODOLIST', 'GL_BUSSINESSFORMID');
INSERT INTO T_BAS_STDAPPMENUGROUP_L (FPKID,FENTRYID,FLOCALEID,FTITLE) VALUES ('GL_LINK_2','GL_LINK',2052,N'快速链接') ;
INSERT INTO T_BAS_STDAPPMENUGROUP_L (FPKID,FENTRYID,FLOCALEID,FTITLE) VALUES ('GL_TODOLIST_2','GL_TODOLIST',2052,N'工作简报') ;
INSERT INTO T_BAS_STDAPPMENUGROUP_L (FPKID,FENTRYID,FLOCALEID,FTITLE) VALUES ('GL_BUSSINESSFORMID_2','GL_BUSSINESSFORMID',2052,N'待办事项') ;

c.预插待办事项数据表(T_BAS_STDAPPTODOLISTCARD),需要预插数据到该表中,待办事项才会有内容。

FID:值类型为varchar(36);

FNODEID:子系统节点ID,值类型为varchar(36),和上面查出的FNODEID对应;

FCARDTYPE:卡片类型,可默认为BOS_H5SubSystemDataViewCard;

FUSERID:当前用户的用户ID;

FPARAMETER:卡片参数,来自T_BAS_QUICKVIEWSCHEME和过滤方案的表。例如以【币别】为例(注:这个单据必须在这个子系统下面),如图下所示:

image.webp


如果改单据已经有发布,查找下SELECT * FROM T_BAS_QUICKVIEWSCHEME where FFORMID='BD_Currency',找出这条数据的FID,如果有多个可以选任意一个。另外用select * from T_BAS_FILTERSCHEME a left join T_BAS_FILTERSCHEME_L b on a.FSCHEMEID=b.FSCHEMEID where a.FFORMID='BD_Currency'这条sql查出FSCHEMEID ,将T_BAS_QUICKVIEWSCHEME 的FID和T_BAS_FILTERSCHEME 的FSCHEMEID 用英文逗号隔开,插入这个字段中。

例如,

insert into T_BAS_STDAPPTODOLISTCARD(FID,FNODEID,FCARDTYPE,FPARAMETER,FSEQ,FUSERID) VALUES(NEWID(),'GL','BOS_H5SubSystemDataViewCard','100001, 5a9d079335ba69',1,100001);

d.在bos设计器里面创建自己的工作台单据,单据继承BOS_MainSystemSubMenuCard_Std,并将单据发布到对应子系统,配置相关权限即可在应用系统中看到对应功能。业务的工作简报模块可以自己更改元数据设置标题,默认左20,上10。插件中设置标题样式:

var listtitle = this.View.GetControl("FTITLE");
listtitle.InvokeControlMethod("setStylekey","font-size:16px;color:#333333;line-height:21px;font-family:Microsoft YaHe

云之家图片20210610171956.webp

以上就完成了工作台的预置工作,剩下就是嵌入单据的开发工作。为了做出更好看的工作台,可以学习html5,js,css知识自定义控件的样式,或者参考帖子https://vip.kingdee.com/article/182161进行二开。


    2.列表步骤工作台:

列表步骤工作台是基于html5定制控件进行开发,可以参考或者继承单据BOS_InitGuideWorkbench,二开插件继承基础插件Kingdee.BOS.Business.PlugIn.InitImplementation.KDInitGuideWorkbenchPlugin(或者自己写都可以)。

下面介绍下插件和构建插件(用于修改控件类型)逻辑,可以结合注释理解。

a.构建插件代码如下:

[Description("初始化指引工作台基类构建插件")]
    public class KDInitGuideWorkbencBuilderPlugin : AbstractDynamicWebFormBuilderPlugIn
    {
        public override void CreateControl(Core.DynamicForm.PlugIn.Args.CreateControlEventArgs e)
        {
            if (e.ControlAppearance.Key.EqualsIgnoreCase("FInitGuideWorkbench"))
            {
                e.Control["xtype"] = "kdinitguideworkbench";
            }
            if (e.ControlAppearance.Key.EqualsIgnoreCase("FBar"))
            {
                e.Control["Stylekey"] = StyleKeyConst.KDProgressBarCircleStyle;
            }

            base.CreateControl(e);
        }
    }


 b.插件代码,如果是继承单据BOS_InitGuideWorkbench二开,主要逻辑在于setdata的逻辑

using Kingdee.BOS.BusinessEntity.InitImplementation;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.JSON;
using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace Kingdee.BOS.Business.PlugIn.InitImplementation
{
    [Description("初始化指引工作台基类插件")]
    public class KDInitGuideWorkbenchPlugin : AbstractDynamicFormPlugIn
    {
        private List<InitGuideWorkbenchStepInfo> _initGuideWorkbenchInfo = new List<InitGuideWorkbenchStepInfo>();

        public override void AfterBindData(EventArgs e)
        {
            _initGuideWorkbenchInfo = GetInitGuideWorkbench();
            base.AfterBindData(e);
            this.SetData();
            this.SetControlStyle();
        }

        /// <summary>
        /// 设置控件样式
        /// </summary>
        private void SetControlStyle()
        {
            this.View.GetControl("FFlowLayoutContent").InvokeControlMethod("setInlineStyleValue", "background-color:#E8ECF6");
            this.View.GetControl("FPanelDescript").InvokeControlMethod("setInlineStyleValue", "background-color:#FFF");
            this.View.GetControl("FPanelContentTopRight").InvokeControlMethod("setInlineStyleValue", "background-color:#FFF");
        }

        /// <summary>
        /// set data
        /// </summary>
        private void SetData()
        {
            //set data to do
            this.View.GetControl("FInitGuideWorkbench").InvokeControlMethod("setData", getMenuDataList());
        }
        /// <summary>
        /// 构建前端数据包示例
        /// </summary>
        /// <returns></returns>
        private JSONObject getMenuDataList()
        {
            JSONObject initGuideGroups = new JSONObject();
            JSONArray initGuideStepGroups = new JSONArray();
            JSONObject jsonObj, jsonLinkObj;
            JSONArray stepLinkObj;
            initGuideGroups["name"] = "总账初始化指引工作台";/*untrans*/
            initGuideGroups["orgid"] = 101;
            initGuideGroups["stepBarHeight"] = 40;//对应InitGuideWorkbench的stepBarHeight

            if (_initGuideWorkbenchInfo == null || _initGuideWorkbenchInfo.Count == 0)
            {
                return null;
            }

            foreach (var info in _initGuideWorkbenchInfo)
            {
                jsonObj = new JSONObject();
                stepLinkObj = new JSONArray();
                jsonObj["id"] = info.Index;
                jsonObj["description"] = info.Description;
                jsonObj["descriptionmaxwidthpercent"] = info.DescriptionMaxWidthPercent;
                jsonObj["stepname"] = info.StepName;
                jsonObj["steptile"] = info.StepTitle;
                jsonObj["steptitleurl"] = info.StepTitleURL;
                jsonObj["titleclickenable"] = info.TitleClickEnable;
                jsonObj["titlefontsize"] = info.TitleFontSize;
                if (info.CourseLinks != null && info.CourseLinks.Count > 0)
                {
                    foreach (var link in info.CourseLinks)
                    {
                        jsonLinkObj = new JSONObject();
                        jsonLinkObj["name"] = link.LinkName;
                        jsonLinkObj["url"] = link.LinkURL;
                        jsonLinkObj["formid"] = link.LinkFormID;
                        stepLinkObj.Add(jsonLinkObj);
                    }
                }
                jsonObj["linklist"] = stepLinkObj;
                jsonObj["studytime"] = info.StudyTime;
                jsonObj["studytimemaxwidthpercent"] = info.StudyTimeMaxWidthPercent;
                jsonObj["studytimecolor"] = info.StudyTimeColor;
                jsonObj["studytimeclickenable"] = info.StudyTimeClickEnable;
                jsonObj["buttoninittext"] = info.ButtonInitText;
                jsonObj["buttonfinishtext"] = info.ButtonInitText;
                jsonObj["buttonwidth"] = info.ButtonWidth;
                jsonObj["buttoncolor"] = info.ButtonColor;
                jsonObj["isfinishedstep"] = info.IsFinishedStep;
                initGuideStepGroups.Add(jsonObj);
            }

            initGuideGroups["children"] = initGuideStepGroups;
            return initGuideGroups;
        }

        /// <summary>
        /// 构造初始化数据示例
        /// </summary>
        /// <returns></returns>
        private List<InitGuideWorkbenchStepInfo> GetInitGuideWorkbench()
        {
            List<InitGuideWorkbenchStepInfo> lists = new List<InitGuideWorkbenchStepInfo>();

            InitGuideWorkbenchStepInfo step1 = new InitGuideWorkbenchStepInfo();
            step1.Index = 1;
            step1.StepName = "xxzzgk";
            step1.StepTitle = "关账前检查";/*untrans*/
            step1.StepTitleURL = "ttt";
            step1.TitleClickEnable = true;
            step1.TitleFontSize = 15;
            step1.Description = "观看视频课程了解产品理念与蓝图、应用流程与主要特性以及核心业务场景,对金蝶云的总账管理有一个初步的认识。";/*untrans*/
            List<InitGuideWorkbenchLink> step1LinksList = new List<InitGuideWorkbenchLink>();
            InitGuideWorkbenchLink step1Link1 = new InitGuideWorkbenchLink();
            step1Link1.LinkName = "学习总账概况";/*untrans*/
            step1Link1.LinkURL = "https://vip.kingdee.com/school/5";
            step1LinksList.Add(step1Link1);
            step1.CourseLinks = step1LinksList;
            step1.StudyTime = "10分钟";/*untrans*/
            step1.StudyTimeClickEnable = true;
            step1.StudyTimeColor = "red";
            step1.StudyTimeClickEnable = true;
            step1.ButtonInitText = "学习完成";/*untrans*/
            step1.ButtonEndText = "已完成学习";/*untrans*/
            step1.ButtonColor = "blue";
            step1.ButtonWidth = 120;
            lists.Add(step1);
            InitGuideWorkbenchStepInfo step2 = new InitGuideWorkbenchStepInfo();
            step2.Index = 2;
            step2.StepName = "whzzcyjczl";
            step2.StepTitleURL = "eee";
            step2.StepTitle = "关账前检查";/*untrans*/
            step2.TitleClickEnable = true;
            step2.Description = "维护总账常用基础资料。";/*untrans*/
            List<InitGuideWorkbenchLink> step2LinksList1 = new List<InitGuideWorkbenchLink>();
            InitGuideWorkbenchLink step2LinK1 = new InitGuideWorkbenchLink();
            step2LinK1.LinkName = "基础资料概况";/*untrans*/
            step2LinK1.LinkURL = "https://vip.kingde

Html5工作台开发指引

在最新版环境下面,html5端暂时支持的工作台主要分为两类(sliverligh/客户端暂时不支持),一种是支持预置不同模块的的工作台(图1),另...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信