核算维度录入实现两个维度之间联动的二开方案

录入核算维度时,有可能两个维度之间存在某个关联关系,如员工和部门,银行和银行账号之间,为了提高录入效率,需要在它们之间建议联动关系,当选择A员工,自动带出该员工所在的部门,当录入了D部门时,如果该部门员工仅一人,则自动带出该员工。为了实现这一联动功能,二开时,关键是从DataChanged事件着手,通过代码来限定相关维度的取值。下面以二开银行与银行账号的联动功能为例。
首先,二开插件应该继承AbstractDynamicFormPlugIn类,并覆写DataChanged方法,如下所示:
[Description("凭证的维度数据录入 客户端插件核算维度联动演示")]
public partial class ShowFlexGLCustomPageEdit_Demo : AbstractDynamicFormPlugIn
{
/// <summary>
/// 数据改变时处理相关业务逻辑
/// </summary>
/// <param name="e"></param>
public override void DataChanged(DataChangedEventArgs e)
{
//银行账号改变时自动带出银行
this.BankAcntChanged(e);
//银行改变的时候,如果只存在一个账号,则自动带出银行账号
this.BankChanged(e);
base.DataChanged(e);
}
}
在BankAcntChanged方法中需要处理以下内容:
1,获取当前科目的维度 :
Dictionary<string,
List<string>> dctSourceAndFelxNumber = GetFlexNumber(e.Field, e.Row,
"BD_Bank", "CN_BANKACNT");
2,获得新的银行账号值:
long lBankCNTID =
this.GetValueId(e.NewValue);
3,通过新的银行账号值,从数据库查出该账号对应的银行:
SELECT
B.FMASTERID FBANKID FROM T_CN_BANKACNT BA JOIN T_BD_BANK B ON
B.FBANKID=BA.FBANKID WHERE BA.FBANKACNTID=@FBANKACNTID
注意,核算维度用到的通过是基础资料的FMASTERID,而不是它的主键ID。
4,获得银行维度对应的界面上的字段:
var
bankFields = GetFormFields(e, "BD_BANK", dctSourceAndFelxNumber["BD_BANK"]);
5,设置界面上的银行字段的值为查询出来的银行ID:
foreach (var bankField in
bankFields)
{
string key = string.Format
核算维度录入实现两个维度之间联动的二开方案
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



