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

二开案例.表单服务.服务端表单服务

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

二开案例.表单服务.服务端表单服务

【应用场景】

将服务端的通用功能封装成表单服务,当操作在服务端执行时,连带执行此服务。



【案例演示】

封装一个发送消息的表单服务,绑定在采购订单的保存操作上,每次保存时,就给指定用户发送一条消息。



【实现步骤】

编写表单服务自定义参数界面->编写表单服务类->注册表单服务->在单据上使用表单服务

<1>打开BOS设计器,设计表单服务自定义参数界面。


<2>编写自定义参数类,用于包装表单服务的自定义参数。

using Kingdee.BOS.Orm.DataEntity;

using System;


namespace Jac.XkDemo.BOS.Core.AppBusinessService

{

    /// <summary>

    /// 发送消息服务的配置参数

    /// </summary>

    [Serializable]

    public class SendMessageParameter

    {

        /// <summary>

        /// 接收人字段Key

        /// </summary>

        [SimpleProperty]

        public string ReceiverKey { get; set; }


        /// <summary>

        /// 组织字段Key

        /// </summary>

        [SimpleProperty]

        public string OrgKey { get; set; }

    }

}


<3>编写表单服务在BOS设计器中的自定义参数界面的控制代码,实现设计时功能。

using DevExpress.XtraEditors.Controls;

using Kingdee.BOS.Core.Designer;

using Kingdee.BOS.Core.Metadata;

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.Core.Metadata.FormElement;

using Kingdee.BOS.DomainModelDesigner.PropertyEditor;

using Kingdee.BOS.DomainModelDesigner.ServiceDesigner;

using Kingdee.BOS.Resource;

using Kingdee.BOS.Util;

using Kingdee.BOS.WinForm;

using Kingdee.BOS.WinForm.Ctrl;

using Newtonsoft.Json;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;


namespace Jac.XkDemo.BOS.Core.AppBusinessService

{

    /// <summary>

    /// 发送消息服务配置界面

    /// </summary>

    public class SendMessageDesigner : KDDynamicUserControl, IFormBusinessServiceDesigner

    {

        #region 私有变量、控件


        /// <summary>

        /// 接收人字段(必录)

        /// </summary>

        private KDComboBox cbbReceiverKey;


        /// <summary>

        /// 组织字段

        /// </summary>

        private KDComboBox cbbOrgKey;


        /// <summary>

        /// 界面配置成果

        /// </summary>

        private FormBusinessService businessService;


        #endregion


        #region ctor


        /// <summary>

        /// 构造函数,传入本界面对应的动态表单编码,基类自动完成界面的加载

        /// </summary>

        /// <remarks>

        /// 本界面与特定下推、特定选单共用一个界面,界面改动时,要注意影响

        /// </remarks>

        public SendMessageDesigner()

            : base("Jac_SendMessage")

        {

            // TODO

        }


        #endregion


        #region IFormBusinessServiceDesigner


        /// <summary>

        /// 初始化控件

        /// </summary>

        protected override void InitializeComponent()

        {

            base.InitializeComponent();

            this.cbbReceiverKey = (KDComboBox)(this.GetControl<KDItemContainer>("F_Jac_ReceiverKey").Control);

            this.cbbReceiverKey.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;

            this.cbbOrgKey = (KDComboBox)(this.GetControl<KDItemContainer>("F_Jac_OrgKey").Control);

            this.cbbOrgKey.Properties.TextEditStyle = TextEditStyles.DisableTextEditor;

        }



        /// <summary>

        /// 表单服务编辑控件

        /// </summary>

        public System.Windows.Forms.Control ActionDesignerCtl

        {

            get { return this; }

        }


        /// <summary>

        /// 表单服务实例、描述信息

        /// </summary>

        public FormBusinessService Service { get; set; }


        /// <summary>

        /// 表单服务所在的元素实例

        /// </summary>

        public AbstractElement SourceElement { get; set; }


        /// <summary>

        /// 领域模型设计Model对象,管理元数据信息

        /// </summary>

        public IMetaDataDesignerModel Model { get; set; }


        /// <summary>

        /// 表单服务确定后,返回检查结果

        /// </summary>

        private bool actionValidated;


        /// <summary>

        /// 表单服务确定后,返回检查结果

        /// </summary>

        public bool ActionValidated

        {

            get

            {

                this.actionValidated = true; // 默认为通过

                // 校验

                var errorMessage = string.Empty;

                if (!ValidateOperateParameter(ref errorMessage))

                {

                    KDMessageBox.Show(errorMessage, "金蝶提示", MessageBoxButtons.OK);

                    this.actionValidated = false;

                    return this.actionValidated;

                }


                return this.actionValidated;

            }

            set { this.actionValidated = value; }

        }


        /// <summary>

        /// 表单服务类型

        /// </summary>

        public string ActionType { get; set; }


        /// <summary>

        /// 开始解析、展示实例数据

        /// </summary>

        public new void Load()

        {

            this.businessService = this.Service;

            if (this.businessService == null)

            {

                this.businessService = new FormBusinessService(this.Service);

            }


            var businessInfo = this.Model.FormMetaData.BusinessInfo;

            // 把已经配置的服务参数,展示到界面上

            SendMessageParameter sendMessageParameter = null;

            if (!string.IsNullOrWhiteSpace(businessService.Setting))

            {

                sendMessageParameter = JsonConvert.DeserializeObject<SendMessageParameter>(businessService.Setting);

            }


            if (sendMessageParameter == null)

            {

                sendMessageParameter = new SendMessageParameter();

            }


            BindReceiver(businessInfo, sendMessageParameter);

            BindOrg(businessInfo, sendMessageParameter);

        }


        /// <summary>

        /// 打包、提交表单服务实例

        /// </summary>

        public void Commit()

        {

            var sendMessageParameter = new SendMessageParameter();

            var receiverKey = this.cbbReceiverKey.EditValue as ListItem;

            if (receiverKey != null)

            {

                sendMessageParameter.ReceiverKey = receiverKey.Value.ToString();

            }


            var orgKey = this.cbbOrgKey.EditValue as ListItem;

            if (orgKey != null)

            {

                sendMessageParameter.OrgKey = orgKey.Value.ToString();

            }


            businessService.Setting = JsonConvert.SerializeObject(sendMessageParameter);

            this.Service = this.businessService;

        }


        #endregion


        #region 私有函数


        /// <summary>

        /// 绑定接收人字段

        /// </summary>

        private void BindReceiver(BusinessInfo businessInfo, SendMessageParameter parameter)

        {

            this.cbbReceiverKey.Properties.Items.Clear();

            var userFields = businessInfo.GetFieldList().Where(o => o is UserField).ToList();

            var list = new List<ListItem>();

            list.Add(new ListItem("", ""));

            ListItem defaultItem = null;

            var hasDefaultItem = !string.IsNullOrWhiteSpace(parameter.ReceiverKey);

            foreach (var field in userFields)

            {

                var item = new ListItem(field.Key, field.Name.ToString());

                list.Add(item);

                if (hasDefaultItem && field.Key.EqualsIgnoreCase(parameter.ReceiverKey))

                {

                    defaultItem = item;

                }

            }


            this.cbbReceiverKey.Properties.Items.AddRange(list);

            if (defaultItem != null)

            {

                this.cbbReceiverKey.EditValue = defaultItem;

            }

            else

            {

                this.cbbReceiverKey.EditValue = list[0];

            }

        }


        /// <summary>

        /// 绑定组织字段

        /// </summary>

        private void BindOrg(BusinessInfo businessInfo, SendMessageParameter parameter)

        {

            this.cbbOrgKey.Properties.Items.Clear();

            var orgFields = businessInfo.GetFieldList().Where(o => o is OrgField).ToList();

            var list = new List<ListItem>();

            list.Add(new ListItem("", ""));

            ListItem defaultItem = null;

            var hasDefaultItem = !string.IsNullOrWhiteSpace(parameter.OrgKey);

            foreach (var field in orgFields)

            {

                var item = new ListItem(field.Key, field.Name.ToString());

                list.Add(item);

                if (hasDefaultItem && field.Key.EqualsIgnoreCase(parameter.OrgKey))

                {

                    defaultItem = item;

                }

            }


            this.cbbOrgKey.Properties.Items.AddRange(list);

            if (defaultItem != null)

            {

                this.cbbOrgKey.EditValue = defaultItem;

            }

            else

            {

                this.cbbOrgKey.EditValue = list[0];

            }

        }


        /// <summary>

        /// 校验参数对象

        /// </summary>

        /// <param name="errorMessage"></param>

        /// <returns></returns>

        private bool ValidateOperateParameter(ref string errorMessage)

        {

            SendMessageParameter sendMessageParameter = null;

            if (!string.IsNullOrWhiteSpace(businessService.Setting))

            {

                sendMessageParameter = JsonConvert.DeserializeObject<SendMessageParameter>(businessService.Setting);

            }


            if (sendMessageParameter == null || string.IsNullOrWhiteSpace(sendMessageParameter.ReceiverKey))

            {

                errorMessage = "请设置接收人字段";

                return false;

            }


            return true;

        }


        #endregion 配置校验

    }

}


<4>编写服务端表单服务,实现运行时功能。

using Kingdee.BOS;

using Kingdee.BOS.App.Data;

using Kingdee.BOS.Core.DynamicForm;

using Kingdee.BOS.Core.Enums;

using Kingdee.BOS.Core.Metadata.FormElement;

using Kingdee.BOS.Core.Msg;

using Kingdee.BOS.Msg;

using Kingdee.BOS.Orm;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using Newtonsoft.Json;

using System;

using System.Collections.Generic;


namespace Jac.XkDemo.BOS.Core.AppBusinessService

{

    /// <summary>

    /// 【服务层表单服务】发送消息

    /// </summary>

    public class SendMessageService : AbstractAppBusinessService

    {

        #region var


        /// <summary>

        /// 服务端表单服务执行参数

        /// </summary>

        private AppBusinessServiceArgs appBusinessServiceArgs;


        /// <summary>

        /// 服务配置

        /// </summary>

        private FormBusinessService serviceConfig;


        #endregion


     

二开案例.表单服务.服务端表单服务

【应用场景】将服务端的通用功能封装成表单服务,当操作在服务端执行时,连带执行此服务。【案例演示】封装一个发送消息的表单服务,绑定在...
点击下载文档文档为doc格式

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

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