[抛砖引玉]二开列表插件:普通销售业务员权限统一配置原创
71人赞赏了该文章
226次浏览
编辑于2024年10月14日 15:26:42
摘要由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; } } } }
ListQueryFilter_DataRules_Sale …(1.98KB)
赞 71
71人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *
10金币20金币30金币40金币50金币60金币
可用金币: 0