[抛砖引玉]二开列表插件:普通销售业务员权限统一配置原创
金蝶云社区-XxcsGmdx
XxcsGmdx
71人赞赏了该文章 226次浏览 未经作者许可,禁止转载编辑于2024年10月14日 15:26:42
summary-icon摘要由AI智能服务提供

文本主要讨论了在企业环境中,当业务人员离职或客户转交时,如何管理相关单据(如销售订单、发货通知单、销售出库单、收款单等)的查看权限问题。文本提到了一种配置方法,通过添加字段和使用插件的方式来实现对销售订单、发货通知单和销售出库单的查看权限控制。然而,这种方法在查看收款单信息时存在限制。为此,文本提供了一段代码示例,这是一个名为`ListQueryFilter_DataRules_Sale`的插件类,用于实现包括收款单在内的所有相关单据的查看权限控制。代码中包含了详细的逻辑,如根据当前用户是否包含特定关键字(如“业务”)来筛选客户和销售员信息,并根据这些信息构建SQL查询以获取允许的单据ID集合,进而用于设置查询参数的权限控制。此外,文本还提到了手动配置的方法作为替代方案。

         不知大家有没有经历过这样的痛:业务人员离职或客户要转交,接手业务要求看之前的订单信息,如销售订单/发货通知单/销售出库单/收款单等...

         销售订单/发货通知单/销售出库单可参照 如图1-2配置

上传图片

 (图1)上传图片

  (图2)

         完成后,即可自动根据客户信息中的销售员进行控制销售订单/发货通知单/销售出库单的查看权限数据隔离了;

        但问题又来了,接手人员还要查看相关的收款单信息,这,这用上述方式就无法实现了;

        下述代码将统一实现以上所有功能,供有需求的人员参考:

using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.List.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
using System.Reflection;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.Remoting.Channels;
using System.Text;
using System.Web.UI.WebControls;
using System.Windows.Controls;
using System.Xml.Linq;

namespace Hjt.Kingdee.PlugIn.列表插件
{
    /// <summary> 
    /// 业务员客户转移,相关单据添加字段也可实现,但现用插件进行实现
    /// 此功能用于加载:创建人为当前用户或客户信息中的销售为当前用户
    /// ①销售业务员用户名称必须包含"业务";
    ///  另:手工配置方法:在销售订单/发货通知单/销售出库单上添加一个[基础资料属性]字段,如客户销售员:,再关联基础资料属性→销售员,查看权限设置中数据规则为:客户销售员=当前销售员(销售员名称)  更简单
    /// </summary>

    [Description("【列表插件】销售业务员单据列表查询数据权限"), HotUpdate]
    public class ListQueryFilter_DataRules_Sale : AbstractListPlugIn
    {
        public override void PrepareFilterParameter(FilterArgs e)
        {
            base.PrepareFilterParameter(e);
            string userName = this.Context.UserName;//获取当前用户名
            string formTitle = this.ListView.GetFormTitle();//获取当前列表的标题
            long userId = this.Context.UserId;
            DynamicObjectCollection stockIdSet = null;
            string queryParameters = "";//
            StringBuilder builder = new StringBuilder();
          
          if (userName.Contains("业务") && !userName.Contains("组长") &&  !userName.Contains("经理") && userName.Contains("主任"))//仅处理普通销售业务员
            {
                builder.Clear();
                builder.Append("/*dialect*/");
                //客户id/销售员内码/销售部门内码/销售组内码/用户名称(多余字段备用)
                builder.Append("   select  t0.FCUSTID,t0.FSELLER,t0.FSALDEPTID, t0.FSALGROUPID,FNAME ");
                builder.Append(" from T_BD_CUSTOMER t0  ");
                builder.Append(" left join V_BD_SALESMAN t1 on t0.FSELLER = t1.fid  ");
                builder.Append("  left join T_BD_STAFF t2 on t1.FSTAFFID = t2.FMASTERID  ");
                builder.Append(" left join T_BD_PERSON t3 on t2.FPERSONID = t3.FPERSONID  ");
                builder.Append(" left join T_SEC_USER t4 on t3.FPERSONID = t4.FLINKOBJECT  ");
                if (userName == "外贸业务3") //一个用户有两个销售员,一为本身另为代管
                {
                    builder.AppendFormat(" WHERE    t0.FForbidStatus = N'A'   and t0.FSELLER in (133584,102313)  ");
                }
                else
                {
                    builder.AppendFormat(" WHERE    t0.FForbidStatus = N'A'   and  t4.FUSERID  ={0}  ", userId);
                }

                stockIdSet = DBUtils.ExecuteDynamicObject(this.Context, builder.ToString());

                if (stockIdSet.Count == 0) { return; }
               

                if (formTitle.Contains("收款"))//收款单/收款退款单时,为字符
                {
                    for (int count = 0; count <= stockIdSet.Count - 1; count++)
                    {
                        if (queryParameters.IsNullOrEmptyOrWhiteSpace())
                        {
                            queryParameters ="'"+ stockIdSet[count][0].ToString()+"'";
                        }
                        else
                        {
                            queryParameters = queryParameters + "," + "'" + stockIdSet[count][0].ToString() + "'";
                        }
                    }
                }
                else
                {
                    for (int count = 0; count <= stockIdSet.Count - 1; count++)
                    {
                        if (queryParameters.IsNullOrEmptyOrWhiteSpace())
                        {
                            queryParameters = stockIdSet[count][0].ToString();
                        }
                        else
                        {
                            queryParameters = queryParameters + "," + stockIdSet[count][0].ToString();
                        }
                    }
                } 
            }
            else
            {
                return;
            } 
            switch (formTitle)
            {
                case "销售订单":
                case "销售订单新变更单":
                    e.FilterString = e.FilterString.JoinFilterString("  FCreatorId  =  " + userId + " or   FCustId in  (" + queryParameters + ")    ");
                    break;
                case "发货通知单":
                case "销售出库单": 
                    e.FilterString = e.FilterString.JoinFilterString("  FCreatorId  =  " + userId + " or   FCustomerID in  (" + queryParameters + ")    ");
                    break;
                case "收款单":
                case "收款退款单":
                    if (userName == "外贸业务3") //一个用户有两个销售员,一为本身另为代管
                    { 
                        //往来单据类型为客户且客户为当前业务所属或销售员为当前用户
                        e.FilterString = e.FilterString.JoinFilterString(" ( FCONTACTUNITTYPE = N'BD_Customer' and   FCONTACTUNIT in  (" + queryParameters + ") ) or FSALEERID in (133584,102313)  ");
                    }
                    else
                    {
                        //往来单据类型为客户且客户为当前业务所属或销售员为当前用户
                        e.FilterString = e.FilterString.JoinFilterString(" ( FCONTACTUNITTYPE = N'BD_Customer' and   FCONTACTUNIT in  (" + queryParameters + ") ) or FSALEERID='" + stockIdSet[0][1].ToString() + "'  ");
                    }
                   
                    break;

            }

        }

    }

}


图标赞 71
71人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0