您现在的位置是:首页> ERP实施维护 > 金蝶云星空插件开发ERP实施维护 > 金蝶云星空插件开发
金蝶云星空基础资料多选人员拆分
2026-09-04
金蝶云星空插件开发浏览量389
简介usingSystem;usingSystem.ComponentModel;usingKingdee.BOS.Core.Bill.PlugIn;usingKingdee.BOS.Core.Bill.PlugIn.Args;usingKingdee.BOS.Orm.DataEntity;usingKingdee.BOS.Util;namespaceWN.NBLLH.BC{///<summar
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
namespace WN.NBLLH.BC
{
/// <summary>
/// 内部联络函 - 保存时自动拆分人员
/// 规则:仅取抄送人员(按员工内码去重),依次写入 人员1 / 人员2 / 人员3 / 人员4
///
/// 已验证的取值路径(诊断版弹窗确认):
/// GetValue(多选字段) → DynamicObjectCollection
/// 元素属性: PkId / F_QOYB_CSRY_Id(员工内码) / F_QOYB_CSRY
/// 用 F_QOYB_CSRY_Id 取内码,SetItemValueByID 赋值给单选字段
/// </summary>
[Description("内部联络函-保存时自动拆分抄送人员")]
[HotUpdate]
public class NbllhBillPlugIn : AbstractBillPlugIn
{
#region 字段标识
/// <summary>抄送人员(多选基础资料 167)</summary>
private const string SRC_CC = "F_QOYB_MulBase_83g";
/// <summary>抄送人员元素上的内码列名</summary>
private const string ID_CC = "F_QOYB_CSRY_Id";
/// <summary>目标字段</summary>
private const string FIELD_RY1 = "F_VNMY_RY1";
private const string FIELD_RY2 = "F_VNMY_RY2";
private const string FIELD_RY3 = "F_VNMY_CSRY3";
private const string FIELD_RY4 = "F_VNMY_RY4";
#endregion
public override void BeforeSave(BeforeSaveEventArgs e)
{
base.BeforeSave(e);
// 只取抄送人员,按选择顺序填充到 人员1~4(按员工内码去重)
List<long> empIds = new List<long>();
CollectIds(empIds, SRC_CC, ID_CC);
// 目标字段按"人员1→人员2→人员3→人员4"顺序排好。
// 以后要扩到更多人,只在这个数组里往下加字段标识即可,循环不用动。
string[] targetFields = { FIELD_RY1, FIELD_RY2, FIELD_RY3, FIELD_RY4 };
// 一个循环统一赋值:SetItemValueByID(字段, 内码, 行号),0 = 单据头
for (int i = 0; i < targetFields.Length; i++)
{
// 第 i 个人存在就取他的内码,否则传 null 把该字段清空
object val = i < empIds.Count ? (object)empIds[i] : null;
this.View.Model.SetItemValueByID(targetFields[i], val, 0);
}
}
public override void AfterSave(AfterSaveEventArgs e)
{
base.AfterSave(e);
if (e.OperationResult.IsSuccess)
{
this.View.UpdateView(FIELD_RY1);
this.View.UpdateView(FIELD_RY2);
this.View.UpdateView(FIELD_RY3);
this.View.UpdateView(FIELD_RY4);
}
}
#region 私有方法
/// <summary>
/// 从多选字段的集合里取出员工内码,按选择顺序追加到列表(按内码去重)
/// </summary>
private void CollectIds(List<long> ids, string fieldKey, string idColumn)
{
DynamicObjectCollection list =
this.View.Model.GetValue(fieldKey) as DynamicObjectCollection;
if (list == null) return;
foreach (DynamicObject row in list)
{
if (row == null) continue;
// 元素上直接有内码列(诊断已确认存在)
object idVal = null;
if (row.DynamicObjectType.Properties.Contains(idColumn))
{
idVal = row[idColumn];
}
if (idVal != null)
{
long id = ToLong(idVal);
if (id > 0 && !ids.Contains(id))
{
ids.Add(id); // 按内码去重:同一人重复选只留一个;
// 两个不同员工同名(内码不同)则都保留
}
}
}
}
private static long ToLong(object value)
{
if (value == null) return 0;
try { return Convert.ToInt64(value); }
catch { return 0; }
}
#endregion
}
}
上一篇:金蝶对接fastapi优化版本
随机文章
随机图文

金蝶云星空赋值插件
首先在BOS新增一个按钮 按钮唯一标识 QOYB_tbButtonusingSystem;usingKingdee.BOS;usingKingdee.BOS.Core.Bill.PlugIn;usingKingdee.BOS.Core.DynamicForm.PlugIn.Args;namespacetes...
金蝶云星空获取销售订单获取统一社会信用代码插件
在销售订单获取客户的统一社会信用代码,点击test按钮 赋值到备注上显示需要引用社会信用代码默认没有引用,不然程序会报错。usingKingdee.BOS;usingKingdee.BOS.Core;usingKingdee.BOS.Core.Bill.P...
金蝶云星空万能批改插件
新建一个普通动态表单,标识:BPW_BulkEditFldInput,名称:单据批改字段 本案例采用动态表单嵌套的方式在实现动态展示不同字段的控件,动态表单中的内容其实比较简单: ①添加一个单选下拉列表字段:F...
云之家根据对应的枚举值必录字段
当调薪类型等于入职定薪时候,让试用期薪资跟转正薪资都必填<scripttype="text/javascript">cf.ready(function(){cf.addEventHook(cf.EVENT_HOOKS.BEFORE_SUBMIT,function(...
星空多选基础资料人员拆分赋值
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingKingdee.BOS.Core.Bill.PlugIn;usingKingdee.BOS.Core.Bill.PlugIn.Args;usingKingdee.BOS.Orm.DataE...


微信收款码
支付宝收款码