金蝶云星空服务端基础资料赋值-公共方法

发布时间 2023-08-29 17:58:59作者: lanrenka

背景:

单据转换下游基础资料无法从上游携带,但又需要赋值。

 

方案设计:

基础资料的赋值不止是在当前这个单据转换需要,它也会在别的单据转换出现,也可能会出现服务端的操作赋值需要界面显示,但是赋值的逻辑是不变的,因此为了减少代码冗余,将公共部分抽出来做成方法,供有需要的地方调用。

 

场景需求:

采购价目表下推采购调价单,调价原因默认为:定期询价

 

具体实现:

1、创建一个类库

 

 

2、添加引用

 

using Kingdee.BOS;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Util;

 

3、新建静态类:BOSCommon

 

 

 

完整如下:

using Kingdee.BOS;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace mm_k3cloud.App.Service.Common
{
    public static class BOSCommon
    {
        /// <summary>
        /// 给基础资料赋值
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="field"></param>
        /// <param name="data"></param>
        /// <param name="value"></param>
        public static void SetBaseDataFieldValue(Context ctx, BaseDataField field, DynamicObject data, object value)
        {
            long result = 0L;
            long.TryParse(value.ToString(), out result);
            if ((value.ToString().Length > 1) || (result > 0L))
            {
                DynamicObject newValue = LoadReferenceData(ctx, field.RefFormDynamicObjectType, value);
                field.DynamicProperty.SetValue(data, newValue);
                field.RefIDDynamicProperty.SetValue(data, value);
            }
            else
            {
                field.DynamicProperty.SetValue(data, null);
                field.RefIDDynamicProperty.SetValue(data, 0);
            }
        }

        public static DynamicObject LoadReferenceData(Context ctx, DynamicObjectType dt, object pkValue)
        {
            if (pkValue.IsEmptyPrimaryKey())
            {
                return null;
            }
            OperateOption option = OperateOption.Create();
            option.SetThrowExceptionWhenNotFind(false);
            return Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.LoadSingle(ctx, pkValue, dt, option);

        }
    }
}
BOSCommon

 

 

4、使用

//单选辅助资料:调价原因:默认值
                BaseDataField reasonField = e.TargetBusinessInfo.GetField("FPaReason") as BaseDataField;
                BOSCommon.SetBaseDataFieldValue(this.Context, reasonField, item.DataEntity, "7590e08cf9064cdfbfe7e3a7fb0741e2");

 

单选辅助资料的内码是字符串,基础资料的值就是整型。

 

5、界面效果

代码编译后,重启IIS,打开所属功能。

 说明代码生效