二开案例.单据插件.公式编辑器

【应用场景】
通过界面鼠标操作完成计算公式的编辑。
【案例演示】
采购订单,编辑界面,通过公式编辑器生成自定义公式。

【实现步骤】
<1>编写单据插件,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Formula;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【单据插件】公式编辑器
/// </summary>
[Description("【单据插件】公式编辑器"), HotUpdate]
public class ExpressionEditorBillPlugIn : AbstractBillPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("tbGetExp"))
{
// 读取公式信息
var expValue = (string)this.View.Model.GetValue("F_Jac_Expression");
if (!expValue.IsNullOrEmpty())
{
var expText = FormulaUtils.GetFormulaText(expValue, FormulaUtils.GetProvider(string.Empty));
var expDisplayText = FormulaUtils.GetFormulaDisplayText(expValue, FormulaUtils.GetProvider(string.Empty));
this.View.ShowMessage(string.Format("公式:{0}\r\n公式描述:{1}", expText, expDisplayText));
}
}
}
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);
BindTree();
}
/// <summary>
/// 公式编辑器初始化左边的树
/// </summary>
private void BindTree()
{
var expressionEditor = this.View.GetControl<ExpressionEditor>("F_Jac_Expression");
// 公式编辑器绑定已有公式
var expValue = (string)this.View.Model.GetValue("F_Jac_Expression");
if (!expValue.IsNullOrEmpty())
{
expressionEditor.SetData(expValue);
}
else
{
expressionEditor.SetData("");
}
var formId = this.View.BillBusinessInfo.GetForm().Id;
var expConfigData = new ExpConfigData();
var nodes = new List<ExpPreItemNode>();
nodes.Add(GetNode(formId));
// 添加业务对象节点
expConfigData.itemstore = nodes;
//// 添加函数
//var lstFunctions = new List<ExpPreItemNode>();
//lstFunctions.Add(new ExpPreItemNode
//{
// id = "sum()",
// text = "求和",
// desc = "求和"
//});
//lstFunctions.Add(new ExpPreItemNode
//{
// id = "avg()",
// text = "计算平均值",
// desc = "计算平均值"
//});
//expConfigData.functionsstore = lstFunctions;
//// 添加操作符
//var lstOperators = new List<ExpPreItemNode>();
//lstOperators.Add(new ExpPreItemNode
//{
// id = "[",
// text = "左中括号",
// desc = "左中括号"
//});
//lstOperators.Add(new ExpPreItemNode
//{
// id = "]",
// text = "右中括号",
// desc = "右中括号"
//});
//expConfigData.operatorsstore = lstOperators;
//// 添加变量
//var lstVariables = new List<ExpPreItemNode>();
//lstVariables.Add(new ExpPreItemNode
//{
// id = "CurrentUser",
// text = "当前用户",
// desc = "当前用户"
//});
//lstVariables.Add(new ExpPreItemNode
//{
// id = "CurrentOrg",
// text = "当前组织",
// desc = "当前组织"
//});
//expConfigData.privatevarstore = lstVariables;
// 公式编辑器绑定左侧的节点树的数据源
expressionEditor.SetStore(expConfigData);
}
/// <summary>
/// 获取业务对象分层展开的节点树
/// </summary>
/// <param name="formId"></param>
/// <returns></returns>
private ExpPreItemNode
二开案例.单据插件.公式编辑器
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



