如何为单据设置员工、部门、操作员默认值

需求背景:
单据新增时,需要把登录用户对应的员工、员工任岗、部门、业务员等信息,填写到单据头字段中作为默认值。
20160127 01设置字段默认值1.png 


困难点:
1. K/3 Cloud BOS平台,并没有封装取登录用户对应员工等信息的函数,无从配置默认值
2. 用户与员工、部门、业务员之间的对应关系比较复杂


解决方案:
需要开发插件实现此需求,在界面初始化时,加载用户对应的员工等信息,然后在创建新单时,填写到字段上,作为默认值。

案例说明:
本案例,在单据头上,分别增加了如下几个基础资料字段
1. 员工 F_JD_EmpId
2. 员工任岗  F_JD_StaffId
3. 部门  F_JD_DeptId
4. 采购员 F_JD_BuyerId
5. 仓管员 F_JD_StockerId
6. 销售员 F_JD_SalerId

在插件中,需要把当前登录用户对应的信息,填写到各字段上做为默认值

完整插件代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.ComponentModel;


// 引用 Kingdee.BOS.dll
using Kingdee.BOS;
using Kingdee.BOS.Util;
// 引用 Kingdee.BOS.Core.dll
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
// 引用 Kingdee.BOS.ServiceHelper.dll
using Kingdee.BOS.ServiceHelper;
// 引用 Kingdee.BOS.DataEntity.dll
using Kingdee.BOS.Orm.DataEntity;


namespace JDSample.FormPlugIn.Bill
{
    /// <summary>
    /// 演示如何设置字段默认值
    /// </summary>
    [Description("设置字段默认值")]
    public class S160127SetDefaultValueEdit : AbstractBillPlugIn
    {
        /// <summary>
        /// 登录用户对应的员工内码
        /// </summary>
        private long _empId = 0;


        /// <summary>
        /// 登录用户对应的员工任岗内码
        /// </summary>
        private long _staffId = 0;


        /// <summary>
        /// 登录用户对应的部门内码
        /// </summary>
        private long _deptId = 0;


        /// <summary>
        /// 登录用户对应的采购员内码
        /// </summary>
        private long _buyerId = 0;


        /// <summary>
        /// 登录用户对应的仓管员内码
        /// </summary>
        private long _stockerId = 0;


        /// <summary>
        /// 登录用户对应的销售员内码
        /// </summary>
        private long _salerId = 0;


        /// <summary>
        /// 界面初始化时触发此事件:提前读取登录用户信息
        /// </summary>
        /// <param name="e"></param>
        public override void OnInitialize(InitializeEventArgs e)
        {
            SqlParam userIdParam = new SqlParam("@FUserId", KDDbType.Int64, this.Context.UserId);
            List<SqlParam> paramList = new List<SqlParam>() { userIdParam };
            // 读取登录用户对应的员工(BD_Empinfo)
            // 用户 -> 人员 -> 员工
            string sqlGetEmpId = @"
select E.FID, E_L.FNAME, P.FPERSONID, U.FUSERID, U.FNAME 
  from T_SEC_USER U
inner join t_BD_Person P ON (u.FLINKOBJECT = P.FPERSONID)
inner join T_HR_EmpInfo E ON (P.FPERSONID = E.FPERSONID)
  left join T_HR_EmpInfo_L E_L ON (E.FID = E_L.FID AND E_L.FLOCALEID = 2052)
where U.FUserId = @FUserId";
            using(IDataReader reader = DBServiceHelper.ExecuteReader(this.Context, sqlGetEmpId, paramList))
            {
                while(reader.Read())
                {
                    this._empId = Convert.ToInt64(reader[0]);
                    break;
                }
            }


            // 根据用户,找员工任岗 BD_NEWSTAFF  
            // 用户 -> 人员 -> 员工任岗
            string sqlGetStaffId = @"
select S.FSTAFFID, S_L.FNAME, P.FPERSONID, U.FUSERID, U.FNAME 
  from T_SEC_USER U
inner join t_BD_Person P ON (u.FLINKOBJECT = P.FPERSONID)
inner join T_BD_STAFF S ON (P.FPERSONID = S.FPERSONID)
  left join T_BD_STAFF_L S_L ON (S.FSTAFFID = S_L.FSTAFFID AND S_L.FLOCALEID = 2052)
where U.FUserId = @FUserId";
            using (IDataReader reader = DBServiceHelper.ExecuteReader(this.Context, sqlGetStaffId, paramList))
            {
                while (reader.Read())
                {
                    this._staffId = Convert.ToInt64(reader[0]);
                    break;
                }
            }


            // 读取登录用户对应的部门 BD_Department
            // 用户 -> 人员 -> 员工任岗 - 部门
            string sqlGetDeptId = @"
select D.FDEPTID, D_L.FNAME , S.FSTAFFID, P.FPERSONID, U.FUSERID, U.FNAME 
  from T_SEC_USER U
inner join t_BD_Person P ON (u.FLINKOBJECT = P.FPERSONID)
inner join T_BD_STAFF S ON (P.FPERSONID = S.FPERSONID)
inner join T_BD_DEPARTMENT D ON (S.FDEPTID = D.FDEPTID)
  left join T_BD_DEPARTMENT_L D_L ON (D.FDEPTID= D_L.FDEPTID AND D_L.FLOCALEID = 2052)  
where U.FUserId = @FUserId";
            using (IDataReader reader = DBServiceHelper.ExecuteReader(this.Context, sqlGetDeptId, paramList))
            {
                while (reader.Read())
                {
                    this._deptId = Convert.ToInt64(reader[0]);
                    break;
                }
            }


            // 读取登录用户对应的采购员 BD_BUYER
            // 用户 -> 人员 -> 员工任岗 -> 操作员
            string sqlGetBuyerId = @"
select O.FENTRYID, S.FSTAFFID, S_L.FNAME, P.FPERSONID, U.FUSERID, U.FNAME 
  from T_SEC_USER U
inner join t_BD_Person P ON (u.FLINKOBJECT = P.FPERSONID)
inner join T_BD_STAFF S ON (P.FPERSONID = S.FPERSONID)
  left join T_BD_STAFF_L S_L ON (S.FSTAFFID = S_L.FSTAFFID AND S_L.FLOCALEID = 2052)
inner join T_BD_OPERATORENTRY O ON (O.FSTAFFID = S.FSTAFFID AND O.FOPERATORTYPE = 'CGY')
where U.FUserId = @FUserId";
            using (IDataReader reader = DBServiceHelper.ExecuteReader(this.Context, sqlGetBuyerId, paramList))
            {
                while (reader.Read())
                {
                    this._buyerId = Convert.ToInt64(reader[0]);
                    break;
                }
            }


            // 读取登录用户对应的仓管员 BD_WAREHOUSEWORKERS
            // 用户 -> 人员 -> 员工任岗 - 操作员
            string sqlGetStockerId = @"
select O.FENTRYID, S.FSTAFFID, S_L.FNAME, P.FPERSONID, U.FUSERID, U.FNAME 
  from T_SEC_USER U
inner join t_BD_Person P ON (u.FLINKOBJECT = P.FPERSONID)
inner join T_BD_STAFF S ON (P.FPERSONID = S.FPERSONID)
  left join T_BD_STAFF_L S_L ON (S.FSTAFFID = S_L.FSTAFFID AND S_L.FLOCALEID = 2052)
inner join T_BD_OPERATORENTRY O ON (O.FSTAFFID = S.FSTAFFID AND O.FOPERATORTYPE = 'WHY')
where U.FUserId = @FUserId";
            using (IDataReader reader = DBServiceHelper.ExecuteReader(this.Context, sqlGetStockerId, paramList))
            {
                while (reader.Read())
                {
                    this._stockerId = Convert.ToInt64(reader[0]);
                    break;
                }
            }


            // 读取登录用户对应的销售员 BD_Saler
            // 用户 -> 人员 -> 员工任岗 - 操作员
            string sqlGetSalerId = @"
select O.FENTRYID, S.FSTAFFID, S_L.FNAME, P.FPERSONID, U.FUSERID, U.FNAME 
  from T_SEC_USER U
inner join t_BD_Person P ON (u.FLINKOBJECT = P.FPERSONID)
inner join T_BD_STAFF S ON (P.FPERSONID = S.FPERSONID)
  left join T_BD_STAFF_L S_L ON (S.FSTAFFID = S_L.FSTAFFID AND S_L.FLOCALEID = 2052)
inner join T_BD_OPERATORENTRY O ON (O.FSTAFFID = S.FSTAFFID AND O.FOPERATORTYPE = 'XSY')
where U.FUserId = @FUserId";
            using (IDataReader reader = DBServiceHelper.ExecuteReader(this.Context, sqlGetSalerId, paramList))
            {
                while (reader.Read())
                {
                    this._salerId = Convert.ToInt64(reader[0]);
                    break;
                }
            }

        }
        /// <summary>
        /// 新增单据时触发此事件:在此事件中,设置各字段默认值
        /// </summary>
        /// <param name="e"></param>
        public override void AfterCreateNewData(EventArgs e)
        {
            this.Model.SetItemValueByID("F_JD_UserId", this.Context.UserId, 0);
            this.Model.SetItemValueByID("F_JD_EmpId", this._empId, 0);
            this.Model.SetItemValueByID("F_JD_StaffId", this._staffId, 0);
            this.Model.SetItemValueByID("F_JD_DeptId", this._deptId, 0);
            this.Model.SetItemValueByID("F_JD_BuyerId", this._buyerId, 0);
            this.Model.SetItemValueByID("F_JD_StockerId", this._stockerId, 0);
            this.Model.SetItemValueByID("F_JD_SalerId", this._salerId, 0);
        }
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值