二开案例.服务插件.动态获取单据编号

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

二开案例.服务插件.动态获取单据编号

【应用场景】

使用指定的编码规则,动态获取单据编号。

【案例演示】

物料,保存物料时,当物料分组编码是001,使用编码规则1生成编号,当物料分组编码是002时,使用编码规则2生成编号。

【实现步骤】

<1>登录业务站点,打开编码规则列表,给物料新建两个编码规则。

编码规则1:

编码规则2:

<2>连接当前数据中心所在数据库,查询新建的编码规则内码。

-- 查询编码规则

SELECT a.FRULEID AS 编码规则内码,b.FNAME AS 编码规则名称,a.* 

FROM T_BAS_BILLCODERULE a 

LEFT JOIN T_BAS_BILLCODERULE_L b ON a.FRULEID=b.FRULEID AND b.FLOCALEID=2052

WHERE a.FBILLFORMID='BD_MATERIAL'

或者使用http数据监控,抓包获取编码规则内码。


<3>编写服务插件,代码如下。

using Kingdee.BOS;

using Kingdee.BOS.App.Core;

using Kingdee.BOS.Core.DynamicForm.PlugIn;

using Kingdee.BOS.Core.Metadata.FieldElement;

using Kingdee.BOS.Orm.DataEntity;

using Kingdee.BOS.Util;

using System.ComponentModel;

using System.Linq;


namespace Jac.XkDemo.BOS.App.PlugIn

{

    /// <summary>

    /// 【服务插件】动态获取单据编号

    /// </summary>

    [Description("【服务插件】动态获取单据编号"), HotUpdate]

    public class DynamicGetBillNoServicePlugIn : AbstractOperationServicePlugIn

    {

        /// <summary>

        /// 数据保存前,按分组不同,使用不同的编码规则,产生不同的编码。

        /// </summary>

        /// <param name="e"></param>

        public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e)

        {

            base.BeforeDoSaveExecute(e);

            if (e.DataEntities == null)

            {

                return;

            }

            var formName = BusinessInfo.GetForm().Name.ToString();

            var operationName = this.FormOperation.OperationName.ToString();

            var rule1 = "60a719d54e7aef";

            var rule2 = "60a71a1d4e7af3";

            var billCodePropertyName = BusinessInfo.GetField(BusinessInfo.GetForm().NumberFieldKey).PropertyName;

            var groupPropertyName = ((GroupField)BusinessInfo.GetFieldList().First(o => o.Key.EqualsIgnoreCase("FMaterialGroup"))).PropertyName;

            var service = new BillCodeRuleService(Context, BusinessInfo);

            foreach (var dataEntity in e.DataEntities)

            {

                if (dataEntity[billCodePropertyName] != null && !string.IsNullOrWhiteSpace(dataEntity[billCodePropertyName].ToString()))

                {

                    continue;

                }

                var groupObj = (DynamicObject)dataEntity[groupPropertyName];

                string ruleId;

                if (groupObj != null && groupObj["Number"] != null && groupObj["Number"].ToString().StartsWith("001"))

                {

                    // 如果分组编码是001开头的,使用编码规则1

                    ruleId = rule1;

                }

                else

                {

                    // 其它情况,使用编码规则2

                    ruleId = rule2;

                }

                var billNos = service.GetBillNo(new[] { dataEntity }, true, ruleId);

                if (billNos == null || billNos.Count == 0)

                {

                    throw new KDException("#", string.Format("【{0}】在【{1}】时获取编码失败,请联系系统管理员,检查内码为{2}的编码规则设置!", formName, operationName, ruleId));

                }

                dataEntity[billCodePropertyName] = billNos[0].BillNo;

            }

        }

    }

}


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


<5>BOSIDE扩展物料,在保存操作上注册服务插件,保存元数据,开发完毕。




【功能验证】

<1>登录业务站点,打开物料列表新增界面。

当物料分组选择001时,点击保存后,编号会按编码规则1生成。

当物料分组选择002时,点击保存后,编号会按编码规则2生成。

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













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

【服务插件】动态获取单据编号.rar

二开案例.服务插件.动态获取单据编号

【应用场景】使用指定的编码规则,动态获取单据编号。【案例演示】物料,保存物料时,当物料分组编码是001,使用编码规则1生成编号,当物料...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息