需求:
入库提醒列表,需要业务员只能看到关于自己的跟单的订单产品入库
方案:
主页面绑定入库提醒Grid,通过SQL查询对应数据并筛选。
以下方法写在BindGrid方法中:
判断登录人员是否是业务员或者销售经理,如果是对应角色,则将该业务员的可见标识(销售订单绑定跟单员后会储存此类标识)放入变量中。
string prefix = "";
string ids = DB.Select<Entity.SysRole>().Where(u => u.RoleName == "销售经理").First(u => u.ID) + ","
+ DB.Select<Entity.SysRole>().Where(u => u.RoleName == "业务员").First(u => u.ID);
if (ids.Contains(cUser.RoleID.ToString()) && cUser.RoleID != 1)
{
prefix = cUser.VisiblePrefix;
}
将登录人员对应消息查询SQL分割判断,并取出与该条消息相关的SQL语句。(此处选择拼接SQL语句然后利用Free SQL 中 withsql关键词直接进行查询)
string roleId = ConvertEx.ToString(cUser.RoleID);
Entity.SysRole mo = DBServices.SysRole.GetRoleByCache(long.Parse(roleId));
if (mo.MsgSql != null && mo.MsgSql != string.Empty)
{
string para = "YRKTX==";
string roleMsgSql = mo.MsgSql.Trim();
try
{
string[] sqlTxts = roleMsgSql.Split(';');
roleMsgSql = sqlTxts.Where(x => x.Contains(para)).FirstOrDefault();
if (!string.IsNullOrEmpty(roleMsgSql))
{
roleMsgSql = roleMsgSql.Replace(para, "");
roleMsgSql = roleMsgSql + string.Format(@" where c.CreateTime > '{0}' and c.Code like '%{1}%' and c.prefix like '%{2}%'", DateTime.Now.AddMonths(-2), TextBox11.Text.Trim(), prefix);
var dt = DB.Select<Object>().WithSql(roleMsgSql)
.As("a")
.ToDataTable("*");
DataView dataViewTemp = dt.DefaultView;
dataViewTemp.Sort = "CreatedTime desc";
Grid_YRKTX.DataSource = dataViewTemp;
Grid_YRKTX.DataBind();
}
}
catch (Exception)
{
NotifyError("已入库提醒配置消息不正确!");
}
}
//将有数据时的表单展示出来
if (Grid_YRKTX.Rows.Count <= 0)
{
Grid_YRKTX.Hidden = true;
}
else
{
Grid_YRKTX.Hidden = false;
}
使用拼接SQL:
优点:较易分析语法错误和数据差异,数据集成简单,将生成的SQL语句直接通过数据库查询,可得到结果,不需要进行二次操作。
缺点:可读性较差。限制条件需要对上下文和需求追溯。