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

【应用场景】
使用指定的编码规则,动态获取单据编号。
【案例演示】
物料,保存物料时,当物料分组编码是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].ToStri
二开案例.服务插件.动态获取单据编号
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



