二开案例.表达式函数.获取字段在上一行中的值

【应用场景】获取字段在上一行中的值,通常应用于单据体或子单据体中。
【案例演示】新增函数,用于获取字段在上一行中的值,在采购订单的明细单据体中,当录入物料时,设置当前行的采购数量等于上一行的采购数量。

【实现步骤】
<1>编写函数,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.Core.DependencyRules;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.Expression.FuncDefine;
using System;
namespace Jac.XkDemo.BOS.Core.Functions
{
/// <summary>
/// 【函数】获取字段在上一行中的值
/// </summary>
[Serializable]
public class GetPreRowFieldValueFuncDefine : AbstractFuncDefine
{
public GetPreRowFieldValueFuncDefine()
{
}
public GetPreRowFieldValueFuncDefine(Context ctx, dynamic obj)
{
m_ctx = ctx;
m_obj = obj;
}
public override IFuncDefine GetFunctionDefine(Context ctx, dynamic obj)
{
return new GetPreRowFieldValueFuncDefine(ctx, obj);
}
public override object GetFuncDefine()
{
return new Func<string, object>(FuncDefine);
}
/// <summary>
/// 获取字段在上一行中的值
/// </summary>
/// <param name="fieldKey">字段名</param>
/// <returns>返回字段在上一行中的值</returns>
object FuncDefine(string fieldKey)
{
if (string.IsNullOrWhiteSpace(fieldKey))
{
return null;
}
var businessInfo = (BusinessInfo)m_obj.ActiveInfo;
var dynamicRowModel = (BOSDynamicRow)m_obj.ActiveObject;
// 获取字段元数据
var field = businessInfo.GetField(fieldKey);
if (field == null)
{
return null;
}
// 获取字段所在的单据体的数据包
var entityDataObject = dynamicRowModel.Model.GetEntityDataObject(field.Entity);
if (entityDataObject == null || entityDataObject.Count == 0)
{
return null;
}
// 获取当前行的行索引
var currentRowIndex = dynamicRowModel.Model.GetEntryCurrentRowIndex(field.EntityKey);
if (currentRowIndex <= 0 || currentRowIndex > entityDataObject.Count - 1)
{
return null;
}
// 获取上一行的行索引
var preRowIndex = currentRowI
二开案例.表达式函数.获取字段在上一行中的值
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



