using System;
using System.Collections;
using System.Data;
using System.Text;
using System.Web;
using BP.DA;
using BP.Sys;
using BP.Web;
using BP.En;
using BP.WF;
using BP.CCFast.CCMenu;
using BP.WF.HttpHandler;
using BP.Difference;
using BP.CCBill.Template;
using LitJson;
namespace BP.CCBill
{
///
/// 页面功能实体
///
public class WF_CCBill : DirectoryPageBase
{
#region 构造方法.
///
/// 方法ID
///
public string MethodID
{
get
{
return this.GetRequestVal("MethodID");
}
}
///
/// 方法编号
///
public string MethodNo
{
get
{
return this.GetRequestVal("MethodNo");
}
}
///
/// 构造函数
///
public WF_CCBill()
{
}
#endregion 构造方法.
#region 方法处理.
public string MyDict_DoBill_Start()
{
//创建单据
Int64 workid = BP.CCBill.Dev2Interface.CreateBlankBillID(this.FrmID);
string workids = GetRequestVal("WorkIDs");
if (DataType.IsNullOrEmpty(workids) == true)
return "err@请选择需要操作的行";
string fromFrmID = GetRequestVal("FromFrmID");
#region 把实体表单的数据集合拷贝到单据从表数据中
GEEntitys ens = new GEEntitys(fromFrmID);
QueryObject qo = new QueryObject(ens);
qo.AddWhereIn("OID", "(" + workids + ")");
qo.DoQuery();
GEDtl gedtl = null;
string mapdtlNo = this.FrmID + "Dtl1";
GEDtls gedtls = new GEDtls(mapdtlNo);
gedtls.Retrieve(GEDtlAttr.RefPK, workid);
foreach (GEEntity en in ens)
{
//先判断从表中是不是存在该实体数据,存在continue;
if (gedtls.IsExits("DictOID", en.OID) == true)
continue;
gedtl = new GEDtl(mapdtlNo);
gedtl.Copy(en);
gedtl.RefPKInt64 = workid;
gedtl.SetValByKey("DictOID", en.OID);
gedtl.OID = 0;
gedtl.Insert();
}
#endregion 把实体表单的数据集合拷贝到单据从表数据中
return "./MyBill.htm?FrmID=" + this.FrmID + "&WorkID=" + workid;
}
public string MyDict_DoFlowBatchBaseData_StartFlow()
{
//创建工作.
Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(this.FK_Flow);
string workids = GetRequestVal("WorkIDs");
if (DataType.IsNullOrEmpty(workids) == true)
return "err@请选择需要操作的行";
string fromFrmID = GetRequestVal("FromFrmID");
#region 把实体表单的数据集合拷贝到流程从表数据中
GEEntitys ens = new GEEntitys(fromFrmID);
QueryObject qo = new QueryObject(ens);
qo.AddWhereIn("OID", "(" + workids + ")");
qo.DoQuery();
GEDtl gedtl = null;
string mapdtlNo = "ND" + int.Parse(this.FK_Flow) + "01" + "Dtl1";
GEDtls gedtls = new GEDtls(mapdtlNo);
gedtls.Retrieve(GEDtlAttr.RefPK, workid);
foreach (GEEntity en in ens)
{
//先判断从表中是不是存在该实体数据,存在continue;
if (gedtls.IsExits("DictOID", en.OID) == true)
continue;
gedtl = new GEDtl(mapdtlNo);
gedtl.Copy(en);
gedtl.RefPKInt64 = workid;
gedtl.SetValByKey("DictOID", en.OID);
gedtl.OID = 0;
gedtl.Insert();
}
#endregion 把实体表单的数据集合拷贝到单据从表数据中
//更新标记, 表示:该流程被谁发起.
GenerWorkFlow gwf = new GenerWorkFlow(workid);
gwf.PWorkID = this.WorkID;
gwf.PFlowNo = fromFrmID;
gwf.SetPara("FlowBaseData", "1"); //启动了修改基础资料流程..
gwf.SetPara("MethodNo", this.MethodNo); //启动了修改基础资料流程..
gwf.SetPara("DictFrmID", fromFrmID); //启动了修改基础资料流程..
gwf.SetPara("DictWorkID", workids); //启动了修改基础资料流程..
gwf.Update();
//写日志.
BP.CCBill.Dev2Interface.Dict_AddTrack(fromFrmID, "0", FrmActionType.StartFlow, "启动:" + gwf.FlowName + ",标题:" + gwf.Title);
return "../MyFlow.htm?FK_Flow=" + this.FK_Flow + "&WorkID=" + workid;
}
///
/// 执行流程:变更基础资料
///
///
public string MyDict_DoFlowBaseData_StartFlow()
{
BP.CCBill.Template.Method md = new BP.CCBill.Template.Method(this.MethodNo);
GEEntity en = new GEEntity(md.FrmID, this.WorkID);
Hashtable ht = new Hashtable();
Attrs attrs = en.EnMap.Attrs;
foreach (Attr item in attrs)
{
if (item.Key.Equals("BillNo") == false && BP.WF.Glo.FlowFields.Contains("," + item.Key + ",") == true)
continue;
var val = en.GetValStrByKey(item.Key);
ht.Add(item.Key, val);
ht.Add("bak" + item.Key, val);
}
//创建工作.
Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(md.FlowNo, ht);
//更新标记, 表示:该流程被谁发起.
GenerWorkFlow gwf = new GenerWorkFlow(workid);
gwf.PWorkID = this.WorkID;
gwf.PFlowNo = md.FrmID;
gwf.SetPara("FlowBaseData", "1"); //启动了修改基础资料流程..
gwf.SetPara("MethodNo", this.MethodNo); //启动了修改基础资料流程..
gwf.SetPara("DictFrmID", md.FrmID); //启动了修改基础资料流程..
gwf.SetPara("DictWorkID", this.WorkID); //启动了修改基础资料流程..
gwf.Update();
//写日志.
BP.CCBill.Dev2Interface.Dict_AddTrack(md.FrmID, this.WorkID.ToString(), FrmActionType.StartFlow, "启动:" + gwf.FlowName + ",标题:" + gwf.Title, null, md.FlowNo, md.Name, int.Parse(md.FlowNo + "01"), workid);
// GEEntity frm=new GEEntity("ND"+int.Parse())
return "../MyFlow.htm?FK_Flow=" + md.FlowNo + "&WorkID=" + workid;
}
///
/// 发起其他业务流程
///
///
public string MyDict_DoFlowEtc_StartFlow()
{
BP.CCBill.Template.Method md = new BP.CCBill.Template.Method(this.MethodNo);
GEEntity en = new GEEntity(md.FrmID, this.WorkID);
Hashtable ht = new Hashtable();
Attrs attrs = en.EnMap.Attrs;
foreach (Attr item in attrs)
{
if (BP.WF.Glo.FlowFields.Contains("," + item.Key + ",") == true)
continue;
var val = en.GetValStrByKey(item.Key);
ht.Add(item.Key, val);
}
//创建工作.
Int64 workid = BP.WF.Dev2Interface.Node_CreateBlankWork(md.MethodID, ht);
//更新标记, 表示:该流程被谁发起.
GenerWorkFlow gwf = new GenerWorkFlow(workid);
gwf.PWorkID = this.WorkID;
gwf.PFlowNo = this.FrmID;
gwf.SetPara("DictFlowEtc", "1"); //启动了其他业务流程.
gwf.Update();
//写日志.
BP.CCBill.Dev2Interface.Dict_AddTrack(md.FrmID, this.WorkID.ToString(), FrmActionType.StartFlow, "启动:" + gwf.FlowName + ",标题:" + gwf.Title,
null, md.FlowNo, md.Name, int.Parse(md.FlowNo + "01"), workid);
//GEEntity frm=new GEEntity("ND"+int.Parse())
return "../MyFlow.htm?FK_Flow=" + md.FlowNo + "&WorkID=" + workid;
}
#endregion
///
/// 发起列表.
///
///
public string Start_Init()
{
//获得发起列表.
DataSet ds = BP.CCBill.Dev2Interface.DB_StartBills(BP.Web.WebUser.No);
//返回组合
return BP.Tools.Json.DataSetToJson(ds, false);
}
///
/// 草稿列表
///
///
public string Draft_Init()
{
//草稿列表.
DataTable dt = BP.CCBill.Dev2Interface.DB_Draft(this.FrmID, BP.Web.WebUser.No);
//返回组合
return BP.Tools.Json.DataTableToJson(dt, false);
}
///
/// 单据初始化
///
///
public string MyBill_Init()
{
//获得发起列表.
DataSet ds = BP.CCBill.Dev2Interface.DB_StartBills(BP.Web.WebUser.No);
//返回组合
return BP.Tools.Json.DataSetToJson(ds, false);
}
///
/// 执行
///
/// 返回执行结果
public string DoMethod_ExeSQL()
{
MethodFunc func = new MethodFunc(this.MyPK);
string doc = func.MethodDoc_SQL;
string workID = this.WorkIDStr;
if (DataType.IsNullOrEmpty(workID) == true)
{
//批量执行方法
string workids = this.GetRequestVal("WorkIDs");
if (DataType.IsNullOrEmpty(workids) == true)
throw new Exception("err@执行方法获取到的WorkID或者WorkIDs不能为空");
string[] strs = workids.Split(',');
workID = strs[0];
doc = doc.Replace("@WorkIDs", workids);
}
GEEntity en = new GEEntity(func.FrmID, workID);
doc = BP.WF.Glo.DealExp(doc, en, null); //替换里面的内容.
string sql = MidStrEx(doc, "/*", "*/");
try
{
DBAccess.RunSQLs(sql);
if (func.MsgSuccess.Equals(""))
func.MsgSuccess = "执行成功.";
BP.CCBill.Dev2Interface.Dict_AddTrack(this.FrmID, workID, "执行方法", func.Name);
return func.MsgSuccess;
}
catch (Exception ex)
{
if (func.MsgErr.Equals(""))
func.MsgErr = "执行失败(DoMethod_ExeSQL).";
return "err@" + func.MsgErr + " @ " + ex.Message;
}
}
public string DoMethod_ExecFunc()
{
MethodFunc func = new MethodFunc(this.MyPK);
string doc = func.Docs;
BuessUnitBase en = BP.Sys.Base.Glo.GetBuessUnitEntityByEnName(doc);
try
{
string workID = this.WorkIDStr;
en.WorkID = Int64.Parse(workID);
en.DoIt();
BP.CCBill.Dev2Interface.Dict_AddTrack(this.FrmID, workID, "执行方法", func.Name);
return func.MsgSuccess;
}
catch (Exception ex)
{
if (func.MsgErr.Equals(""))
func.MsgErr = "执行失败(DoMethod_ExecFunc).";
return "err@" + func.MsgErr + " @ " + ex.Message;
}
}
///
/// 执行SQL
///
///
public string DoMethodPara_ExeSQL()
{
MethodFunc func = new MethodFunc(this.PKVal);
string doc = func.MethodDoc_SQL;
string workID = this.WorkIDStr;
if (DataType.IsNullOrEmpty(workID) == true)
{
//批量执行方法
string workids = this.GetRequestVal("WorkIDs");
if (DataType.IsNullOrEmpty(workids) == true)
throw new Exception("err@执行方法获取到的WorkID或者WorkIDs不能为空");
string[] strs = workids.Split(',');
workID = strs[0];
doc = doc.Replace("@WorkIDs", workids);
}
GEEntity en = new GEEntity(func.FrmID, workID);
#region 替换参数变量.
if (doc.Contains("@") == true)
{
MapAttrs mattrs = new MapAttrs();
mattrs.Retrieve(MapAttrAttr.FK_MapData, this.PKVal);
foreach (MapAttr item in mattrs)
{
if (doc.Contains("@") == false)
break;
if (item.UIContralType == UIContralType.TB)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("TB_" + item.KeyOfEn));
continue;
}
if (item.UIContralType == UIContralType.DDL)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("DDL_" + item.KeyOfEn));
continue;
}
if (item.UIContralType == UIContralType.CheckBok)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("CB_" + item.KeyOfEn));
continue;
}
if (item.UIContralType == UIContralType.RadioBtn)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("RB_" + item.KeyOfEn));
continue;
}
}
}
#endregion 替换参数变量.
doc = BP.WF.Glo.DealExp(doc, en, null); //替换里面的内容.
string sql = MidStrEx(doc, "/*", "*/");
#region 开始执行SQLs.
try
{
DBAccess.RunSQLs(sql);
if (func.MsgSuccess.Equals(""))
func.MsgSuccess = "执行成功.";
return func.MsgSuccess;
}
catch (Exception ex)
{
if (func.MsgErr.Equals(""))
func.MsgErr = "执行失败.";
return "err@" + func.MsgErr + " @ " + ex.Message;
}
#endregion 开始执行SQLs.
BP.CCBill.Dev2Interface.Dict_AddTrack(this.FrmID, workID, "执行方法", func.Name);
return "err@" + func.MethodDocTypeOfFunc + ",执行的类型没有解析.";
}
///
/// 执行url.
///
///
public string DoMethodPara_ExeUrl()
{
MethodFunc func = new MethodFunc(this.PKVal);
string doc = func.MethodDoc_Url;
if (this.WorkID == 0)
{
//批量执行方法
string workids = this.GetRequestVal("WorkIDs");
if (DataType.IsNullOrEmpty(workids) == true)
throw new Exception("err@执行方法获取到的WorkID或者WorkIDs不能为空");
string[] strs = workids.Split(',');
this.WorkID = Int64.Parse(strs[0]);
doc = doc.Replace("@WorkIDs", workids);
}
GEEntity en = new GEEntity(func.FrmID, this.WorkID);
#region 替换参数变量.
if (doc.Contains("@") == true)
{
MapAttrs mattrs = new MapAttrs();
mattrs.Retrieve(MapAttrAttr.FK_MapData, this.PKVal);
foreach (MapAttr item in mattrs)
{
if (doc.Contains("@") == false)
break;
if (item.UIContralType == UIContralType.TB)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("TB_" + item.KeyOfEn));
continue;
}
if (item.UIContralType == UIContralType.DDL)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("DDL_" + item.KeyOfEn));
continue;
}
if (item.UIContralType == UIContralType.CheckBok)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("CB_" + item.KeyOfEn));
continue;
}
if (item.UIContralType == UIContralType.RadioBtn)
{
doc = doc.Replace("@" + item.KeyOfEn, this.GetRequestVal("RB_" + item.KeyOfEn));
continue;
}
}
}
#endregion 替换参数变量.
doc = BP.WF.Glo.DealExp(doc, en, null); //替换里面的内容.
#region 开始执行SQLs.
try
{
doc += "&MethodName=" + func.MethodID;
DataType.ReadURLContext(doc, 99999);
if (func.MsgSuccess.Equals(""))
func.MsgSuccess = "执行成功.";
return func.MsgSuccess;
}
catch (Exception ex)
{
if (func.MsgErr.Equals(""))
func.MsgErr = "执行失败.";
return "err@" + func.MsgErr + " @ " + ex.Message;
}
#endregion 开始执行SQLs.
BP.CCBill.Dev2Interface.Dict_AddTrack(this.FrmID, this.WorkID.ToString(), "执行方法", func.Name);
return "err@" + func.MethodDocTypeOfFunc + ",执行的类型没有解析.";
}
#region 单据处理.
///
/// 创建空白的WorkID.
///
///
public string MyBill_CreateBlankBillID()
{
string billNo = this.GetRequestVal("BillNo");
string PFrmID = this.GetRequestVal("PFrmID");
string PWorkID = this.GetRequestVal("PWorkID");
if (DataType.IsNullOrEmpty(PWorkID) == true)
PWorkID = "0";
return BP.CCBill.Dev2Interface.CreateBlankBillID(this.FrmID, BP.Web.WebUser.No, null, PFrmID, long.Parse(PWorkID)).ToString();
}
///
/// 创建空白的DictID.
///
///
public string MyDict_CreateBlankDictID()
{
return BP.CCBill.Dev2Interface.CreateBlankDictID(this.FrmID, null, null).ToString();
}
///
/// 执行保存
///
///
public string MyBill_SaveIt()
{
//创建entity 并执行copy方法.
GEEntity rpt = new GEEntity(this.FrmID, this.WorkID);
Attrs attrs = rpt.EnMap.Attrs;
//try
//{
// //执行保存.
// rpt = BP.Pub.PubClass.CopyFromRequest(rpt) as GEEntity;
//}
//catch (Exception ex)
//{
// return "err@方法:MyBill_SaveIt错误,在执行 CopyFromRequest 期间" + ex.Message;
//}
//执行copy ,这部分与上一个方法重复了.
try
{
Hashtable ht = this.GetMainTableHT();
foreach (string item in ht.Keys)
{
rpt.SetValByKey(item, ht[item]);
}
}
catch (Exception ex)
{
return "err@方法:MyBill_SaveIt错误,在执行 GetMainTableHT 期间" + ex.Message;
}
//执行保存.
try
{
rpt.OID = this.WorkID;
rpt.SetValByKey("BillState", (int)BillState.Editing);
rpt.Update();
string str = BP.CCBill.Dev2Interface.SaveBillWork(this.FrmID, this.WorkID);
return str;
}
catch (Exception ex)
{
return "err@方法:MyBill_SaveIt 错误,在执行 SaveWork 期间出现错误:" + ex.Message;
}
}
public string MyBill_Submit()
{
//执行保存.
GEEntity rpt = new GEEntity(this.FrmID, this.WorkID);
//rpt = BP.Pub.PubClass.CopyFromRequest(rpt) as GEEntity;
Hashtable ht = GetMainTableHT();
foreach (string item in ht.Keys)
{
rpt.SetValByKey(item, ht[item]);
}
rpt.OID = this.WorkID;
rpt.SetValByKey("BillState", (int)BillState.Over);
rpt.Update();
string str = BP.CCBill.Dev2Interface.SubmitWork(this.FrmID, this.WorkID);
return str;
}
///
/// 执行保存
///
///
public string MyDict_SaveIt()
{
//执行保存.
MapData md = new MapData(this.FrmID);
GEEntity rpt = new GEEntity(this.FrmID, this.WorkID);
//rpt = BP.Pub.PubClass.CopyFromRequest(rpt) as GEEntity;
Hashtable ht = GetMainTableHT();
foreach (string item in ht.Keys)
{
rpt.SetValByKey(item, ht[item]);
}
//执行保存前事件
ExecEvent.DoFrm(md, EventListFrm.SaveBefore, rpt, null);
rpt.OID = this.WorkID;
rpt.SetValByKey("BillState", 100);
rpt.Update();
//执行保存后事件
ExecEvent.DoFrm(md, EventListFrm.SaveAfter, rpt, null);
return "保存成功.";
}
///
/// 执行保存
///
///
public string MyDict_Submit()
{
return "err@不在支持提交功能.";
// throw new Exception("dddssds");
//执行保存.
MapData md = new MapData(this.FrmID);
GEEntity rpt = new GEEntity(this.FrmID, this.WorkID);
//rpt = BP.Pub.PubClass.CopyFromRequest(rpt) as GEEntity;
Hashtable ht = GetMainTableHT();
foreach (string item in ht.Keys)
{
rpt.SetValByKey(item, ht[item]);
}
//执行保存前事件
ExecEvent.DoFrm(md, EventListFrm.SaveBefore, rpt, null);
rpt.OID = this.WorkID;
rpt.SetValByKey("BillState", (int)BillState.Over);
rpt.Update();
//执行保存后事件
ExecEvent.DoFrm(md, EventListFrm.SaveAfter, rpt, null);
return "提交";
}
public string GetFrmEntitys()
{
GEEntitys rpts = new GEEntitys(this.FrmID);
QueryObject qo = new QueryObject(rpts);
qo.AddWhere("BillState", " != ", 0);
qo.DoQuery();
return BP.Tools.Json.ToJson(rpts.ToDataTableField());
}
private Hashtable GetMainTableHT()
{
Hashtable htMain = new Hashtable();
foreach (string key in HttpContextHelper.RequestParamKeys)
{
if (key == null)
continue;
string myKey = key;
string val = HttpContextHelper.RequestParams(key);
myKey = myKey.Replace("TB_", "");
myKey = myKey.Replace("DDL_", "");
myKey = myKey.Replace("CB_", "");
myKey = myKey.Replace("RB_", "");
val = HttpUtility.UrlDecode(val, Encoding.UTF8);
if (htMain.ContainsKey(myKey) == true)
htMain[myKey] = val;
else
htMain.Add(myKey, val);
}
return htMain;
}
public string MyBill_SaveAsDraft()
{
string str = BP.CCBill.Dev2Interface.SaveBillWork(this.FrmID, this.WorkID);
return str;
}
//删除单据
public string MyBill_Delete()
{
return BP.CCBill.Dev2Interface.MyBill_Delete(this.FrmID, this.WorkID);
}
public string MyBill_Deletes()
{
return BP.CCBill.Dev2Interface.MyBill_DeleteBills(this.FrmID, this.GetRequestVal("WorkIDs"));
}
//删除实体
public string MyDict_Delete()
{
return BP.CCBill.Dev2Interface.MyDict_Delete(this.FrmID, this.WorkID);
}
///
/// 删除多个
///
///
public string MyDict_Deletes()
{
return BP.CCBill.Dev2Interface.MyDict_DeleteDicts(this.FrmID, this.GetRequestVal("WorkIDs"));
}
public string MyEntityTree_Delete()
{
return BP.CCBill.Dev2Interface.MyEntityTree_Delete(this.FrmID, this.GetRequestVal("BillNo"));
}
///
/// 复制单据数据
///
///
public string MyBill_Copy()
{
return BP.CCBill.Dev2Interface.MyBill_Copy(this.FrmID, this.WorkID);
}
#endregion 单据处理.
#region 获取查询条件
public string Search_ToolBar()
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
//根据FrmID获取Mapdata
MapData md = new MapData(this.FrmID);
if (md.EntityType == EntityType.DBList)
{
DBListDBSrc dbList = new DBListDBSrc(this.FrmID);
ds.Tables.Add(dbList.ToDataTableField("Sys_DBList"));
}
//如果设置按照时间字段的月度,季度,年度查询数据,需要查询数据显示的最小年份
if (md.DTSearchWay != DTSearchWay.None && md.GetParaInt("DTShowWay") == 1)
{
GEEntity en = new GEEntity(this.FrmID);
try
{
string sql = "SELECT min(" + md.DTSearchKey + ") From " + en.EnMap.PhysicsTable;
md.SetPara("DateShowYear", DBAccess.RunSQLReturnStringIsNull(sql, ""));
}
catch (Exception e)
{
GEEntity rpt = new GEEntity(this.FrmID);
rpt.CheckPhysicsTable();
string sql = "SELECT min(" + md.DTSearchKey + ") From " + en.EnMap.PhysicsTable;
md.SetPara("DateShowYear", DBAccess.RunSQLReturnStringIsNull(sql, ""));
}
}
ds.Tables.Add(md.ToDataTableField("Sys_MapData"));
//获取字段属性
MapAttrs attrs = new MapAttrs(this.FrmID);
#region //增加枚举/外键字段信息
dt.Columns.Add("Field", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Width", typeof(int));
dt.TableName = "Attrs";
dt.PrimaryKey = new DataColumn[] { dt.Columns["Field"] };
ds.Tables.Add(dt);
string[] ctrls = md.RptSearchKeys.Split('*');
DataTable dtNoName = null;
MapAttr mapattr;
DataRow dr = null;
MapExts mapExts = new MapExts();
QueryObject qo = new QueryObject(mapExts);
qo.AddWhere("FK_MapData", this.FrmID);
qo.addAnd();
qo.AddWhereIn("ExtType", "('ActiveDDLSearchCond','AutoFullDLLSearchCond')");
qo.DoQuery();
ds.Tables.Add(mapExts.ToDataTableField("Sys_MapExt"));
foreach (string ctrl in ctrls)
{
//增加判断,如果URL中有传参,则不进行此SearchAttr的过滤条件显示
if (string.IsNullOrWhiteSpace(ctrl) || !DataType.IsNullOrEmpty(HttpContextHelper.RequestParams(ctrl)))
continue;
mapattr = attrs.GetEntityByKey(MapAttrAttr.KeyOfEn, ctrl) as MapAttr;
if (mapattr == null)
continue;
dr = dt.NewRow();
dr["Field"] = mapattr.KeyOfEn;
dr["Name"] = mapattr.Name;
dr["Width"] = mapattr.UIWidth;
dt.Rows.Add(dr);
Attr attr = mapattr.HisAttr;
if (mapattr == null)
continue;
if (attr.Key.Equals("FK_Dept"))
continue;
if (attr.IsEnum == true)
{
SysEnums ses = new SysEnums(mapattr.UIBindKey);
DataTable dtEnum = ses.ToDataTableField();
dtEnum.TableName = mapattr.KeyOfEn;
ds.Tables.Add(dtEnum);
continue;
}
if (attr.IsFK == true)
{
Entities ensFK = attr.HisFKEns;
if (ensFK != null)
{
ensFK.RetrieveAll();
DataTable dtEn = ensFK.ToDataTableField();
dtEn.TableName = attr.Key;
ds.Tables.Add(dtEn);
}
}
//绑定SQL的外键
if (ds.Tables.Contains(attr.Key) == false)
{
DataTable dtSQl = null;
MapExt mapExt = mapExts.GetEntityByKey(MapExtAttr.ExtType, MapExtXmlList.AutoFullDLLSearchCond, MapExtAttr.AttrOfOper, attr.Key) as MapExt;
if (mapExt != null)
{
string fullSQL = mapExt.Doc.Clone() as string;
if (fullSQL == null)
throw new Exception("err@字段[" + attr.Key + "]下拉框AutoFullDLLSearchCond,没有配置SQL");
fullSQL = fullSQL.Replace("~", "'");
fullSQL = BP.WF.Glo.DealExp(fullSQL, null, null);
dtSQl = DBAccess.RunSQLReturnTable(fullSQL);
}
else if (DataType.IsNullOrEmpty(attr.UIBindKey) == false)
{
dtSQl = BP.Pub.PubClass.GetDataTableByUIBineKey(attr.UIBindKey);
}
if (dtSQl != null)
{
foreach (DataColumn col in dtSQl.Columns)
{
string colName = col.ColumnName.ToLower();
switch (colName)
{
case "no":
case "NO":
col.ColumnName = "No";
break;
case "name":
case "NAME":
col.ColumnName = "Name";
break;
case "parentno":
case "PARENTNO":
col.ColumnName = "ParentNo";
break;
default:
break;
}
}
dtSQl.TableName = attr.Key;
ds.Tables.Add(dtSQl);
}
}
}
//数据查询权限除只查看自己创建的数据外增加部门的查询条件
SearchDataRole searchDataRole = (SearchDataRole)md.GetParaInt("SearchDataRole");
if (searchDataRole != SearchDataRole.ByOnlySelf)
{
DataTable dd = GetDeptDataTable(searchDataRole, md);
if (dd.Rows.Count == 0 && md.GetParaInt("SearchDataRoleByDeptStation") == 1)
dd = GetDeptAndSubLevel();
if (dd.Rows.Count != 0)
{
//增加部门的查询条件
if (dt.Rows.Contains("FK_Dept") == false)
{
dr = dt.NewRow();
dr["Field"] = "FK_Dept";
dr["Name"] = "部门";
dr["Width"] = 120;
dt.Rows.Add(dr);
}
dd.TableName = "FK_Dept";
ds.Tables.Add(dd);
}
}
Methods methods = new Methods();
//实体类方法
try
{
methods.Retrieve(MethodAttr.FrmID, this.FrmID, MethodAttr.IsSearchBar, 1, MethodAttr.Idx);
}
catch (Exception e)
{
methods.GetNewEntity.CheckPhysicsTable();
methods.Retrieve(MethodAttr.FrmID, this.FrmID, MethodAttr.IsSearchBar, 1, MethodAttr.IsEnable, 1, MethodAttr.Idx);
}
ds.Tables.Add(methods.ToDataTableField("Frm_Method"));
Collections colls = Search_BtnPower();
ds.Tables.Add(methods.ToDataTableField("ToolBtns"));
ds.Tables.Add(colls.ToDataTableField("Frm_Collection"));
return BP.Tools.Json.ToJson(ds);
}
#endregion 查询条件
private DataTable GetDeptDataTable(SearchDataRole searchDataRole, MapData md)
{
//增加部门的外键
DataTable dt = new DataTable();
string sql = "";
if (searchDataRole == SearchDataRole.ByDept)
{
sql = "SELECT D.No,D.Name From Port_Dept D,Port_DeptEmp E WHERE D.No=E.FK_Dept AND E.FK_Emp='" + WebUser.No + "'";
dt = DBAccess.RunSQLReturnTable(sql);
}
if (searchDataRole == SearchDataRole.ByDeptAndSSubLevel)
{
dt = GetDeptAndSubLevel();
}
if (searchDataRole == SearchDataRole.ByStationDept)
{
sql = "SELECT D.No,D.Name From Port_Dept D WHERE D.No IN(SELECT F.FK_Dept FROM Frm_StationDept F,Port_DeptEmpStation P Where F.FK_Station = P.FK_Station AND F.FK_Frm='" + md.No + "' AND P.FK_Emp='" + WebUser.No + "')";
dt = DBAccess.RunSQLReturnTable(sql);
}
foreach (DataColumn col in dt.Columns)
{
string colName = col.ColumnName.ToLower();
switch (colName)
{
case "no":
col.ColumnName = "No";
break;
case "name":
col.ColumnName = "Name";
break;
default:
break;
}
}
return dt;
}
private DataTable GetDeptAndSubLevel()
{
//获取本部门和兼职部门
string sql = "SELECT D.No,D.Name From Port_Dept D,Port_DeptEmp E WHERE D.No=E.FK_Dept AND E.FK_Emp='" + WebUser.No + "'";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
dt.PrimaryKey = new DataColumn[] { dt.Columns["No"] };
DataTable dd = dt.Copy();
foreach (DataRow dr in dd.Rows)
{
GetSubLevelDeptByParentNo(dt, dr[0].ToString());
}
return dt;
}
private void GetSubLevelDeptByParentNo(DataTable dt, string parentNo)
{
string sql = "SELECT No,Name FROM Port_Dept Where ParentNo='" + parentNo + "'";
DataTable dd = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow dr in dd.Rows)
{
if (dt.Rows.Contains(dr[0].ToString()) == true)
continue;
dt.Rows.Add(dr.ItemArray);
GetSubLevelDeptByParentNo(dt, dr[0].ToString());
}
}
public string Search_TreeData()
{
MapData mapData = new MapData(this.FrmID);
int listShowWay = mapData.GetParaInt("ListShowWay");
string listShowWayKey = mapData.GetParaString("ListShowWayKey");
if (DataType.IsNullOrEmpty(listShowWayKey) == true)
return "err@树形结构展示的字段不存在,请检查查询条件设置中展示方式配置是否正确";
MapAttr mapAttr = new MapAttr(this.FrmID + "_" + listShowWayKey);
//获取绑定的数据源
if (DataType.IsNullOrEmpty(mapAttr.UIBindKey) == true)
return "err@字段" + mapAttr.Name + "绑定的外键或者外部数据源不存在,请检查字段属性[外键SFTable]是否为空";
DataTable dt = BP.Pub.PubClass.GetDataTableByUIBineKey(mapAttr.UIBindKey);
return BP.Tools.Json.ToJson(dt);
}
///
/// 实体、单据列表显示的字段
///
///
public string Search_MapAttr()
{
DBList dblist = new DBList(this.FrmID);
if (dblist.EntityType == EntityType.DBList)
return Search_MapAttrForDB();
#region 查询显示的列
MapAttrs mattrs = new MapAttrs();
mattrs.Retrieve(MapAttrAttr.FK_MapData, this.FrmID, MapAttrAttr.Idx);
MapExts mapExts = new MapExts();
QueryObject qo = new QueryObject(mapExts);
qo.AddWhere(MapExtAttr.FK_MapData, this.FrmID);
qo.addAnd();
qo.AddWhereIn(MapExtAttr.ExtType, "('MultipleChoiceSmall','SingleChoiceSmall')");
qo.DoQuery();
foreach (MapExt mapExt in mapExts)
{
//获取mapAttr
MapAttr mapAttr = mattrs.GetEntityByKey(this.FrmID + "_" + mapExt.AttrOfOper) as MapAttr;
string searchVisable = mapAttr.atPara.GetValStrByKey("SearchVisable");
if (searchVisable == "0")
continue;
mapAttr.SetPara("SearchVisable", 0);
mapAttr.Update();
mapAttr = mattrs.GetEntityByKey(this.FrmID + "_" + mapExt.AttrOfOper + "T") as MapAttr;
mapAttr.SetPara("SearchVisable", 1);
mapAttr.Update();
}
DataRow row = null;
DataTable dt = new DataTable("Attrs");
dt.Columns.Add("KeyOfEn", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Width", typeof(int));
dt.Columns.Add("UIContralType", typeof(int));
dt.Columns.Add("LGType", typeof(int));
dt.Columns.Add("MyDataType", typeof(int));
dt.Columns.Add("UIBindKey", typeof(string));
dt.Columns.Add("AtPara", typeof(string));
dt.Columns.Add("IsRichText", typeof(int));
//设置标题、单据号位于开始位置
foreach (MapAttr attr in mattrs)
{
string searchVisable = attr.atPara.GetValStrByKey("SearchVisable");
if (searchVisable == "0")
continue;
if (DataType.IsNullOrEmpty(searchVisable) == true && attr.UIVisible == false)
continue;
row = dt.NewRow();
row["KeyOfEn"] = attr.KeyOfEn;
row["Name"] = attr.Name;
row["Width"] = attr.UIWidthInt;
row["UIContralType"] = attr.UIContralType;
row["LGType"] = attr.LGType;
row["MyDataType"] = attr.MyDataType;
row["UIBindKey"] = attr.UIBindKey;
row["AtPara"] = attr.GetValStringByKey("AtPara");
row["IsRichText"] = attr.TextModel == 3 ? 1 : 0;
dt.Rows.Add(row);
}
#endregion 查询显示的列
DataSet ds = new DataSet();
ds.Tables.Add(dt);
//增加枚举
MapData mapData = new MapData(this.FK_MapData);
ds.Tables.Add(mapData.SysEnums.ToDataTableField("Sys_Enum"));
//查询一行数据的操作
Methods methods = new Methods();
methods.Retrieve(MethodAttr.FrmID, this.FrmID, MethodAttr.IsList, 1, MethodAttr.Idx);
ds.Tables.Add(methods.ToDataTableField("Frm_Method"));
return BP.Tools.Json.ToJson(ds);
}
///
/// 获取查询列表的按钮权限
///
///
public Collections Search_BtnPower()
{
//获取该表单所有操作按钮的权限
Collections colls = new Collections();
colls.Retrieve(CollectionAttr.FrmID, this.FrmID, CollectionAttr.IsEnable, 1, "Idx");
if (colls.Count == 0)
{
//查询
Collection collection = new Collection();
collection.FrmID = this.FrmID;
collection.MethodID = "Search";
collection.Name = "查询";
collection.MethodModel = "Search";
collection.Mark = "Search";
collection.No = collection.FrmID + "_" + collection.MethodID;
collection.SetValByKey("Idx", 0);
collection.Insert();
//新建
collection = new Collection();
collection.FrmID = this.FrmID;
collection.MethodID = "New";
collection.Name = "新建";
collection.MethodModel = "New";
collection.Mark = "New";
collection.No = collection.FrmID + "_" + collection.MethodID;
collection.SetValByKey("Idx", 1);
collection.Insert();
//删除
collection = new Collection();
collection.FrmID = this.FrmID;
collection.MethodID = "Delete";
collection.Name = "删除";
collection.MethodModel = "Delete";
collection.Mark = "Delete";
collection.No = collection.FrmID + "_" + collection.MethodID;
collection.SetValByKey("Idx", 2);
collection.Insert();
collection = new Collection();
collection.FrmID = this.FrmID;
collection.MethodID = "Group";
collection.Name = "分析";
collection.MethodModel = "Group";
collection.Mark = "Group";
collection.No = collection.FrmID + "_" + collection.MethodID;
collection.SetValByKey("Idx", 3);
collection.SetValByKey("IsEnable", false);
collection.Insert();
//导出
collection = new Collection();
collection.FrmID = this.FrmID;
collection.MethodID = "ExpExcel";
collection.Name = "导出Excel";
collection.MethodModel = "ExpExcel";
collection.Mark = "ExpExcel";
collection.No = collection.FrmID + "_" + collection.MethodID;
collection.SetValByKey("Idx", 4);
collection.Insert();
//导入
collection = new Collection();
collection.FrmID = this.FrmID;
collection.MethodID = "ImpExcel";
collection.Name = "导入Excel";
collection.MethodModel = "ImpExcel";
collection.Mark = "ImpExcel";
collection.No = collection.FrmID + "_" + collection.MethodID;
collection.SetValByKey("Idx", 5);
collection.Insert();
colls.Retrieve(GroupMethodAttr.FrmID, this.FrmID, "Idx");
return colls;
}
//获取针对按钮设置的操作权限
PowerCenters pcs = new PowerCenters();
pcs.Retrieve(PowerCenterAttr.CtrlObj, this.FrmID, PowerCenterAttr.CtrlGroup, "SearchBtn");
string mydepts = "" + WebUser.FK_Dept + ","; //我的部门.
string mystas = ""; //我的角色.
DataTable mydeptsDT = DBAccess.RunSQLReturnTable("SELECT FK_Dept,FK_Station FROM Port_DeptEmpStation WHERE FK_Emp='" + WebUser.No + "'");
foreach (DataRow dr in mydeptsDT.Rows)
{
mydepts += dr[0].ToString() + ",";
mystas += dr[1].ToString() + ",";
}
Collections newCollections = new Collections();
string empIds = "";
foreach (Collection collection in colls)
{
//找到关于系统的控制权限集合.
PowerCenters mypcs = pcs.GetEntitiesByKey(PowerCenterAttr.CtrlPKVal, collection.No) as PowerCenters;
//如果没有权限控制的描述,就默认有权限.
if (mypcs == null)
{
newCollections.AddEntity(collection);
continue;
}
//控制遍历权限.
foreach (PowerCenter pc in mypcs)
{
if (pc.CtrlModel.Equals("Anyone") == true)
{
newCollections.AddEntity(collection);
break;
}
if (pc.CtrlModel.Equals("Adminer") == true && BP.Web.WebUser.No.Equals("admin") == true)
{
newCollections.AddEntity(collection);
break;
}
if (pc.CtrlModel.Equals("AdminerAndAdmin2") == true && BP.Web.WebUser.IsAdmin == true)
{
newCollections.AddEntity(collection);
break;
}
empIds = "," + pc.IDs + ",";
if (pc.CtrlModel.Equals("Emps") == true && empIds.Contains("," + BP.Web.WebUser.No + ",") == true)
{
newCollections.AddEntity(collection);
break;
}
//是否包含部门?
if (pc.CtrlModel.Equals("Depts") == true && BP.DA.DataType.IsHaveIt(pc.IDs, mydepts) == true)
{
newCollections.AddEntity(collection);
break;
}
//是否包含角色?
if (pc.CtrlModel.Equals("Stations") == true && BP.DA.DataType.IsHaveIt(pc.IDs, mystas) == true)
{
newCollections.AddEntity(collection);
break;
}
//SQL?
if (pc.CtrlModel.Equals("SQL") == true)
{
string sql = BP.WF.Glo.DealExp(pc.IDs, null, "");
if (DBAccess.RunSQLReturnValFloat(sql) > 0)
{
newCollections.AddEntity(collection);
}
break;
}
}
}
return newCollections;
}
///
/// 获取数据源实体列表显示的列及操作列方法
///
///
public string Search_MapAttrForDB()
{
DBList dblist = new DBList(this.FrmID);
#region 查询显示的列
MapAttrs mapattrs = new MapAttrs();
mapattrs.Retrieve(MapAttrAttr.FK_MapData, this.FrmID, MapAttrAttr.Idx);
//查询列表数据源显示的列
if (DataType.IsNullOrEmpty(dblist.ExpList) == true)
return "err@数据源实体的列表数据源不能为空,请联系设计人员,检查错误原因.";
//查询结果集返回的字段列表
DataTable listDT = null;
string explist = dblist.ExpList;
//替换
if (dblist.DBType.Equals("local"))
{
if (explist.ToUpper().Contains("WHERE") == false)
explist += " WHERE 1=2";
else
explist += " AND 1=2";
if (DataType.IsNullOrEmpty(dblist.DBSrc) == true)
dblist.DBSrc = "local";
explist = BP.WF.Glo.DealExp(explist, null);
SFDBSrc dbSrc = new SFDBSrc(dblist.DBSrc);
listDT = dbSrc.RunSQLReturnTable(explist);
}
DataRow row = null;
DataTable dt = new DataTable("Attrs");
dt.Columns.Add("KeyOfEn", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Width", typeof(int));
dt.Columns.Add("UIContralType", typeof(int));
dt.Columns.Add("LGType", typeof(int));
dt.Columns.Add("MyDataType", typeof(int));
dt.Columns.Add("UIBindKey", typeof(string));
dt.Columns.Add("AtPara", typeof(string));
if (listDT == null)
{
foreach (MapAttr attr in mapattrs)
{
string searchVisable = attr.atPara.GetValStrByKey("SearchVisable");
if (searchVisable == "0")
continue;
if (DataType.IsNullOrEmpty(searchVisable) == true && attr.UIVisible == false)
continue;
row = dt.NewRow();
row["KeyOfEn"] = attr.KeyOfEn;
row["Name"] = attr.Name;
row["Width"] = attr.UIWidthInt;
row["UIContralType"] = attr.UIContralType;
row["LGType"] = attr.LGType;
row["MyDataType"] = attr.MyDataType;
row["UIBindKey"] = attr.UIBindKey;
row["AtPara"] = attr.GetValStringByKey("AtPara");
dt.Rows.Add(row);
}
}
else
{
//设置标题、单据号位于开始位置
foreach (DataColumn col in listDT.Columns)
{
//获取key
string key = col.ColumnName;
if (DataType.IsNullOrEmpty(key) == true)
continue;
MapAttr attr = mapattrs.GetEntityByKey(this.FrmID + "_" + key) as MapAttr;
row = dt.NewRow();
if (attr == null)
{
row["KeyOfEn"] = key;
row["Name"] = key;
row["Width"] = 120;
row["UIContralType"] = UIContralType.TB;
row["LGType"] = FieldTypeS.Normal;
row["MyDataType"] = DataType.AppString;
row["UIBindKey"] = "";
row["AtPara"] = "";
dt.Rows.Add(row);
continue;
}
string searchVisable = attr.atPara.GetValStrByKey("SearchVisable");
if (searchVisable == "0")
continue;
if (DataType.IsNullOrEmpty(searchVisable) == true && attr.UIVisible == false)
continue;
row["KeyOfEn"] = attr.KeyOfEn;
row["Name"] = attr.Name;
row["Width"] = attr.UIWidthInt;
row["UIContralType"] = attr.UIContralType;
row["LGType"] = attr.LGType;
row["MyDataType"] = attr.MyDataType;
row["UIBindKey"] = attr.UIBindKey;
row["AtPara"] = attr.GetValStringByKey("AtPara");
dt.Rows.Add(row);
}
}
#endregion 查询显示的列
DataSet ds = new DataSet();
ds.Tables.Add(dt);
//增加枚举
MapData mapData = new MapData(this.FK_MapData);
ds.Tables.Add(mapData.SysEnums.ToDataTableField("Sys_Enum"));
#region 把外键表加入 DataSet
DataTable ddlTable = new DataTable();
ddlTable.Columns.Add("No");
foreach (MapAttr attr in mapattrs)
{
//为空、枚举值就continue.
if (DataType.IsNullOrEmpty(attr.UIBindKey) == true || attr.LGType == FieldTypeS.Enum)
continue;
DataTable mydt = BP.Pub.PubClass.GetDataTableByUIBineKey(attr.UIBindKey);
if (mydt == null)
{
DataRow ddldr = ddlTable.NewRow();
ddldr["No"] = attr.UIBindKey;
ddlTable.Rows.Add(ddldr);
}
else
{
ds.Tables.Add(mydt);
}
}
ddlTable.TableName = "UIBindKey";
ds.Tables.Add(ddlTable);
#endregion End把外键表加入DataSet
//查询一行数据的操作
Methods methods = new Methods();
methods.Retrieve(MethodAttr.FrmID, this.FrmID, MethodAttr.IsList, 1, MethodAttr.Idx);
ds.Tables.Add(methods.ToDataTableField("Frm_Method"));
return BP.Tools.Json.ToJson(ds);
}
public string SearchDB_UrlSearchData(string urlExt, string postData)
{
urlExt = BP.WF.Glo.DealExp(urlExt, null);
if (urlExt.Contains("http") == false)
{
/*如果没有绝对路径 */
if (BP.Difference.SystemConfig.IsBSsystem)
{
/*在cs模式下自动获取*/
string host = HttpContextHelper.RequestUrlHost;//BP.Sys.Base.Glo.Request.Url.Host;
if (urlExt.Contains("@AppPath"))
urlExt = urlExt.Replace("@AppPath", "http://" + host + HttpContextHelper.RequestApplicationPath);//BP.Sys.Base.Glo.Request.ApplicationPath
else
urlExt = "http://" + HttpContextHelper.RequestUrlAuthority + urlExt;
}
if (BP.Difference.SystemConfig.IsBSsystem == false)
{
/*在cs模式下它的baseurl 从web.config中获取.*/
string cfgBaseUrl = BP.Difference.SystemConfig.AppSettings["HostURL"];
if (DataType.IsNullOrEmpty(cfgBaseUrl))
{
string err = "调用url失败:没有在web.config中配置BaseUrl,导致url事件不能被执行.";
BP.DA.Log.DebugWriteError(err);
throw new Exception(err);
}
urlExt = cfgBaseUrl + urlExt;
}
}
string json = BP.WF.Glo.HttpPostConnect(urlExt, postData);
return json;
}
public string Search_Init()
{
DataSet ds = new DataSet();
DataTable dt = null;
try
{
#region 查询语句
MapData md = new MapData(this.FrmID);
//取出来查询条件.
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_SearchAttrs");
GEEntitys rpts = new GEEntitys(this.FrmID);
Attrs attrs = rpts.GetNewEntity.EnMap.Attrs;
QueryObject qo = new QueryObject(rpts);
bool isFirst = true; //是否第一次拼接SQL
#region 关键字字段.
string keyWord = ur.SearchKey;
if (md.GetParaBoolen("IsSearchKey") && DataType.IsNullOrEmpty(keyWord) == false && keyWord.Length >= 1)
{
Attr attrPK = new Attr();
foreach (Attr attr in attrs)
{
if (attr.IsPK)
{
attrPK = attr;
break;
}
}
int i = 0;
string enumKey = ","; //求出枚举值外键.
foreach (Attr attr in attrs)
{
switch (attr.MyFieldType)
{
case FieldType.Enum:
enumKey = "," + attr.Key + "Text,";
break;
case FieldType.FK:
continue;
default:
break;
}
if (attr.MyDataType != DataType.AppString)
continue;
//排除枚举值关联refText.
if (attr.MyFieldType == FieldType.RefText)
{
if (enumKey.Contains("," + attr.Key + ",") == true)
continue;
}
if (attr.Key == "FK_Dept")
continue;
i++;
if (i == 1)
{
isFirst = false;
/* 第一次进来。 */
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(attr.Key, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? (" CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey,'%')") : (" '%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey+'%'"));
else
qo.AddWhere(attr.Key, " LIKE ", " '%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey||'%'");
continue;
}
qo.addOr();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(attr.Key, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? ("CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey,'%')") : ("'%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey+'%'"));
else
qo.AddWhere(attr.Key, " LIKE ", "'%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey||'%'");
}
qo.MyParas.Add("SKey", keyWord);
qo.addRightBracket();
}
else if (DataType.IsNullOrEmpty(md.GetParaString("StringSearchKeys")) == false)
{
string field = "";//字段名
string fieldValue = "";//字段值
int idx = 0;
//获取查询的字段
string[] searchFields = md.GetParaString("StringSearchKeys").Split('*');
foreach (String str in searchFields)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
//字段名
string[] items = str.Split(',');
if (items.Length == 2 && DataType.IsNullOrEmpty(items[0]) == true)
continue;
field = items[0];
//字段名对应的字段值
fieldValue = ur.GetParaString(field);
if (DataType.IsNullOrEmpty(fieldValue) == true)
continue;
idx++;
if (idx == 1)
{
isFirst = false;
/* 第一次进来。 */
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(field, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? (" CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + field + ",'%')") : (" '%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "+'%'"));
else
qo.AddWhere(field, " LIKE ", " '%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "||'%'");
qo.MyParas.Add(field, fieldValue);
continue;
}
qo.addAnd();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(field, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? ("CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + field + ",'%')") : ("'%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "+'%'"));
else
qo.AddWhere(field, " LIKE ", "'%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "||'%'");
qo.MyParas.Add(field, fieldValue);
}
if (idx != 0)
qo.addRightBracket();
}
#endregion 关键字段查询
#region 时间段的查询
if (md.GetParaInt("DTSearchWay") != (int)DTSearchWay.None && DataType.IsNullOrEmpty(ur.DTFrom) == false)
{
string dtFrom = ur.DTFrom; // this.GetTBByID("TB_S_From").Text.Trim().Replace("/", "-");
string dtTo = ur.DTTo; // this.GetTBByID("TB_S_To").Text.Trim().Replace("/", "-");
//按日期查询
if (md.GetParaInt("DTSearchWay") == (int)DTSearchWay.ByDate)
{
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addLeftBracket();
dtTo += " 23:59:59";
qo.SQL = md.GetParaString("DTSearchKey") + " >= '" + dtFrom + "'";
qo.addAnd();
qo.SQL = md.GetParaString("DTSearchKey") + " <= '" + dtTo + "'";
qo.addRightBracket();
}
if (md.GetParaInt("DTSearchWay") == (int)DTSearchWay.ByDateTime)
{
//取前一天的24:00
if (dtFrom.Trim().Length == 10) //2017-09-30
dtFrom += " 00:00:00";
if (dtFrom.Trim().Length == 16) //2017-09-30 00:00
dtFrom += ":00";
dtFrom = DateTime.Parse(dtFrom).AddDays(-1).ToString("yyyy-MM-dd") + " 24:00";
if (dtTo.Trim().Length < 11 || dtTo.Trim().IndexOf(' ') == -1)
dtTo += " 24:00";
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addLeftBracket();
qo.SQL = md.GetParaString("DTSearchKey") + " >= '" + dtFrom + "'";
qo.addAnd();
qo.SQL = md.GetParaString("DTSearchKey") + " <= '" + dtTo + "'";
qo.addRightBracket();
}
}
#endregion 时间段的查询
#region 外键或者枚举的查询
//获得关键字.
AtPara ap = new AtPara(ur.Vals);
Attr ddattr = null;
foreach (string str in ap.HisHT.Keys)
{
var val = ap.GetValStrByKey(str);
if (val.Equals("all") || val.Equals("null"))
continue;
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addLeftBracket();
ddattr = attrs.GetAttrByKeyOfEn(str);
if (val.IndexOf(",") != -1)
{
if (ddattr.IsNum == true)
{
qo.AddWhere(str, "IN", "(" + val + ")");
qo.addRightBracket();
continue;
}
val = "('" + val.Replace(",", "','") + "')";
qo.AddWhere(str, "IN", val);
qo.addRightBracket();
continue;
}
if (BP.Difference.SystemConfig.AppCenterDBFieldIsParaDBType == true)
{
var typeVal = BP.Sys.Base.Glo.GenerRealType(attrs, str, ap.GetValStrByKey(str));
qo.AddWhere(str, typeVal);
}
else
{
qo.AddWhere(str, ap.GetValStrByKey(str));
}
qo.addRightBracket();
}
#endregion 外键或者枚举的查询
#region 设置隐藏字段的过滤查询
FrmBill frmBill = new FrmBill(this.FrmID);
string hidenField = frmBill.GetParaString("HidenField");
if (DataType.IsNullOrEmpty(hidenField) == false)
{
hidenField = hidenField.Replace("_WebUser.No", WebUser.No);
hidenField = hidenField.Replace("_WebUser.Name", WebUser.Name);
hidenField = hidenField.Replace("_WebUser.FK_DeptName", WebUser.FK_DeptName);
hidenField = hidenField.Replace("_WebUser.FK_Dept", WebUser.FK_Dept);
hidenField = hidenField.Replace("_WebUser.OrgNo", WebUser.OrgNo);
if (hidenField.IndexOf("_") != -1)
return "err@隐藏条件" + hidenField + "还有未替换的_符号";
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addSQL(hidenField);
}
#endregion 设置隐藏字段的查询
#endregion 查询语句
if (isFirst == false)
{
qo.addAnd();
}
qo.AddWhere("BillState", "!=", 0);
isFirst = false;
if ((SearchDataRole)md.GetParaInt("SearchDataRole") != SearchDataRole.SearchAll)
{
//默认查询本部门的单据
if ((SearchDataRole)md.GetParaInt("SearchDataRole") == SearchDataRole.ByOnlySelf && DataType.IsNullOrEmpty(hidenField) == true
|| (md.GetParaInt("SearchDataRoleByDeptStation") == 0 && DataType.IsNullOrEmpty(ap.GetValStrByKey("FK_Dept")) == true))
{
//qo.addAnd();
//qo.AddWhere("Starter", "=", WebUser.No);
}
}
//增加表单字段的查询
foreach (string key in HttpContextHelper.RequestParamKeys)
{
if (string.IsNullOrEmpty(key) || key.Equals("T") == true
|| key.Equals("t") == true || key.Equals("HttpHandlerName") == true
|| key.Equals("DoMethod") == true || key.Equals("DoType") == true)
continue;
if (attrs.Contains(key) == true)
{
if (isFirst == false)
qo.addAnd();
qo.AddWhere(key, HttpContextHelper.RequestParams(key));
continue;
}
}
//获得行数.
ur.SetPara("RecCount", qo.GetCount());
ur.Save();
//获取配置信息
string fieldSet = frmBill.FieldSet;
string oper = "";
if (DataType.IsNullOrEmpty(fieldSet) == false)
{
string ptable = rpts.GetNewEntity.EnMap.PhysicsTable;
dt = new DataTable("Search_FieldSet");
dt.Columns.Add("Field");
dt.Columns.Add("Type");
dt.Columns.Add("Value");
DataRow dr;
string[] strs = fieldSet.Split('@');
foreach (string str in strs)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
string[] item = str.Split('=');
if (item.Length == 2)
{
if (item[1].Contains(",") == true)
{
string[] ss = item[1].Split(',');
foreach (string s in ss)
{
dr = dt.NewRow();
dr["Field"] = attrs.GetAttrByKey(s).Desc;
dr["Type"] = item[0];
dt.Rows.Add(dr);
oper += item[0] + "(" + ptable + "." + s + ")" + ",";
}
}
else
{
dr = dt.NewRow();
dr["Field"] = attrs.GetAttrByKey(item[1]).Desc;
dr["Type"] = item[0];
dt.Rows.Add(dr);
oper += item[0] + "(" + ptable + "." + item[1] + ")" + ",";
}
}
}
oper = oper.Substring(0, oper.Length - 1);
DataTable dd = qo.GetSumOrAvg(oper);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow ddr = dt.Rows[i];
ddr["Value"] = dd.Rows[0][i];
}
ds.Tables.Add(dt);
}
if (DataType.IsNullOrEmpty(ur.OrderBy) == false && DataType.IsNullOrEmpty(ur.OrderWay) == false)
qo.DoQuery("OID", this.PageSize, this.PageIdx, ur.OrderBy, ur.OrderWay);
else
qo.DoQuery("OID", this.PageSize, this.PageIdx);
DataTable mydt = rpts.ToDataTableField();
mydt.TableName = "DT";
ds.Tables.Add(mydt); //把数据加入里面.
}
catch(Exception ex)
{
if(ex.Message!=null &&(ex.Message.Contains("无效")==true || ex.Message.ToLower().Contains("unknown column") == true))
{
GEEntity en = new GEEntity(this.FrmID);
en.CheckPhysicsTable();
return Search_Init();
}
return ex.Message;
}
return BP.Tools.Json.ToJson(ds);
}
public string SearchDB_Init()
{
DataSet ds = new DataSet();
#region 查询语句
DBList md = new DBList(this.FrmID);
if (DataType.IsNullOrEmpty(md.ExpList) == true)
return "err@列表数据源和的查询不能为空";
string expList = md.ExpList;
expList = BP.WF.Glo.DealExp(expList, null);
//取出来查询条件.
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_SearchAttrs");
GEEntitys rpts = new GEEntitys(this.FrmID);
Attrs attrs = rpts.GetNewEntity.EnMap.Attrs;
string systemKeys = "BillState,RDT,Starter,StarterName,OrgNo,AtPara,";//创建表单时的系统字段
//获取查询条件
DataTable whereDT = new DataTable();
whereDT.Columns.Add("Key");
whereDT.Columns.Add("Oper");
whereDT.Columns.Add("Value");
whereDT.Columns.Add("Type");
DataRow dr;
#region 关键字字段.
string keyWord = ur.SearchKey;
Hashtable ht = new Hashtable();
if (md.GetParaBoolen("IsSearchKey") == true)
{
if (DataType.IsNullOrEmpty(keyWord) == false && keyWord.Length >= 1)
{
ht.Add("SearchKey", keyWord);
}
else
{
Attr attrPK = new Attr();
foreach (Attr attr in attrs)
{
if (attr.IsPK)
{
attrPK = attr;
break;
}
}
int i = 0;
string enumKey = ","; //求出枚举值外键.
foreach (Attr attr in attrs)
{
if (systemKeys.IndexOf(attr.Key + ",") != -1)
continue;
switch (attr.MyFieldType)
{
case FieldType.Enum:
enumKey = "," + attr.Key + "Text,";
break;
case FieldType.FK:
continue;
default:
break;
}
if (attr.MyDataType != DataType.AppString)
continue;
//排除枚举值关联refText.
if (attr.MyFieldType == FieldType.RefText)
{
if (enumKey.Contains("," + attr.Key + ",") == true)
continue;
}
if (attr.Key == "FK_Dept")
continue;
i++;
dr = whereDT.NewRow();
dr["Key"] = attr.Key;
dr["Oper"] = "like";
dr["Value"] = keyWord;
dr["Type"] = "SearchKey";
whereDT.Rows.Add(dr);
}
ht.Add("SearchKey", keyWord);
}
}
else if (DataType.IsNullOrEmpty(md.GetParaString("StringSearchKeys")) == false)
{
string field = "";//字段名
string fieldValue = "";//字段值
//获取查询的字段
string[] searchFields = md.GetParaString("StringSearchKeys").Split('*');
foreach (String str in searchFields)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
//字段名
string[] items = str.Split(',');
if (items.Length == 2 && DataType.IsNullOrEmpty(items[0]) == true)
continue;
field = items[0];
//字段名对应的字段值
fieldValue = ur.GetParaString(field);
if (DataType.IsNullOrEmpty(fieldValue) == true)
{
ht.Add(field, "");
continue;
}
dr = whereDT.NewRow();
dr["Key"] = field;
dr["Oper"] = "like";
dr["Value"] = fieldValue;
dr["Type"] = "StringKey";
whereDT.Rows.Add(dr);
ht.Add(field, fieldValue);
}
}
#endregion 关键字段查询
#region 时间段的查询
if (md.GetParaInt("DTSearchWay") != (int)DTSearchWay.None)
{
if (DataType.IsNullOrEmpty(ur.DTFrom) == true)
{
ht.Add("DTFrom", ur.DTFrom);
ht.Add("DTTo", ur.DTTo);
}
else
{
string dtFrom = ur.DTFrom; // this.GetTBByID("TB_S_From").Text.Trim().Replace("/", "-");
string dtTo = ur.DTTo; // this.GetTBByID("TB_S_To").Text.Trim().Replace("/", "-");
//按日期查询
if (md.GetParaInt("DTSearchWay") == (int)DTSearchWay.ByDate)
{
dr = whereDT.NewRow();
dr["Key"] = md.GetParaString("DTSearchKey");
dr["Oper"] = ">=";
dr["Value"] = dtFrom;
dr["Type"] = "Date";
whereDT.Rows.Add(dr);
dtTo += " 23:59:59";
dr = whereDT.NewRow();
dr["Key"] = md.GetParaString("DTSearchKey");
dr["Oper"] = "<=";
dr["Value"] = dtTo;
dr["Type"] = "Date";
whereDT.Rows.Add(dr);
ht.Add("DTFrom", dtFrom);
ht.Add("DTTo", dtTo);
}
if (md.GetParaInt("DTSearchWay") == (int)DTSearchWay.ByDateTime)
{
//取前一天的24:00
if (dtFrom.Trim().Length == 10) //2017-09-30
dtFrom += " 00:00:00";
if (dtFrom.Trim().Length == 16) //2017-09-30 00:00
dtFrom += ":00";
dtFrom = DateTime.Parse(dtFrom).AddDays(-1).ToString("yyyy-MM-dd") + " 24:00";
if (dtTo.Trim().Length < 11 || dtTo.Trim().IndexOf(' ') == -1)
dtTo += " 24:00";
dr = whereDT.NewRow();
dr["Key"] = md.GetParaString("DTSearchKey");
dr["Oper"] = ">=";
dr["Value"] = dtFrom;
dr["Type"] = "Date";
whereDT.Rows.Add(dr);
dr = whereDT.NewRow();
dr["Key"] = md.GetParaString("DTSearchKey");
dr["Oper"] = "<=";
dr["Value"] = dtTo;
dr["Type"] = "Date";
whereDT.Rows.Add(dr);
ht.Add("DTFrom", dtFrom);
ht.Add("DTTo", dtTo);
}
}
}
#endregion 时间段的查询
#region 外键或者枚举的查询
//获得关键字.
AtPara ap = new AtPara(ur.Vals);
Attr ddattr = null;
foreach (string str in ap.HisHT.Keys)
{
var val = ap.GetValStrByKey(str);
if (val.Equals("all"))
{
ht.Add(str, "");
continue;
}
dr = whereDT.NewRow();
dr["Key"] = str;
dr["Oper"] = "=";
if (val.IndexOf(",") != -1)
dr["Oper"] = "IN";
dr["Value"] = val;
dr["Type"] = "Select";
whereDT.Rows.Add(dr);
ht.Add(str, ap.GetValStrByKey(str));
}
#endregion 外键或者枚举的查询
//增加表单字段的查询
foreach (string key in HttpContextHelper.RequestParamKeys)
{
if (string.IsNullOrEmpty(key) || key.Equals("T") == true
|| key.Equals("t") == true || key.Equals("HttpHandlerName") == true
|| key.Equals("DoMethod") == true || key.Equals("DoType") == true)
continue;
if (attrs.Contains(key) == true)
{
dr = whereDT.NewRow();
dr["Key"] = key;
dr["Oper"] = "=";
dr["Value"] = HttpContextHelper.RequestParams(key);
dr["Type"] = "Normal";
whereDT.Rows.Add(dr);
ht.Add(key, HttpContextHelper.RequestParams(key));
continue;
}
}
#endregion
#region 数据源SQL
if (md.DBType == 0)
{
string mainTable = "A.";
string mainTablePK = md.MainTablePK;
string whereSQL = "";
bool isFirstSearchKey = true;
bool isFirstDateKey = true;
foreach (DataRow dataRow in whereDT.Rows)
{
string key = dataRow["Key"].ToString();
if (expList.IndexOf("@" + Key) != -1)
{
expList = expList.Replace("@" + Key, dataRow["Value"].ToString());
continue;
}
string type = dataRow["Type"].ToString();
if (type.Equals("SearchKey") == true)
{
if (isFirstSearchKey)
{
isFirstSearchKey = false;
whereSQL += " AND (" + mainTable + key + " like '%" + dataRow["Value"].ToString() + "%' ";
}
else
whereSQL += " OR " + mainTable + key + " like '%" + dataRow["Value"].ToString() + "%' ";
}
if (isFirstSearchKey == false && type.Equals("SearchKey") == false)
{
whereSQL += ")";
isFirstSearchKey = true;
}
if (type.Equals("StringKey") == true)
whereSQL += " AND " + mainTable + key + " like '%" + dataRow["Value"].ToString() + "%' ";
//时间解析
if (type.Equals("Date") == true)
{
if (isFirstDateKey == true)
{
isFirstDateKey = false;
whereSQL += " AND (" + mainTable + key + " " + dataRow["Oper"].ToString() + " '" + dataRow["Value"].ToString() + "' ";
continue;
}
if (isFirstDateKey == false)
whereSQL += " AND " + mainTable + key + " " + dataRow["Oper"].ToString() + " '" + dataRow["Value"].ToString() + "')";
}
if (type.Equals("Select") == true || type.Equals("Normal") == true)
{
string oper = dataRow["Oper"].ToString();
string val = dataRow["Value"].ToString();
if (oper.Equals("IN") == true)
{
ddattr = attrs.GetAttrByKeyOfEn(key);
if (ddattr != null)
{
if (ddattr.IsNum)
whereSQL += " AND " + mainTable + key + " " + oper + " (" + val + ") ";
else
{
val = "('" + val.Replace(",", "','") + "')";
whereSQL += " AND " + mainTable + key + " " + oper + val;
}
}
}
else
whereSQL += " AND " + mainTable + key + " " + oper + " '" + val + "'";
}
}
if (isFirstSearchKey == false)
whereSQL += ")";
//expCount = expCount + whereSQL;
//expList = expList + whereSQL;
string hidenField = md.GetParaString("HidenField");
if (DataType.IsNullOrEmpty(hidenField) == false)
{
hidenField = hidenField.Replace("_WebUser.No", WebUser.No);
hidenField = hidenField.Replace("_WebUser.Name", WebUser.Name);
hidenField = hidenField.Replace("_WebUser.FK_DeptName", WebUser.FK_DeptName);
hidenField = hidenField.Replace("_WebUser.FK_Dept", WebUser.FK_Dept);
hidenField = hidenField.Replace("_WebUser.OrgNo", WebUser.OrgNo);
if (hidenField.IndexOf("@") != -1)
return "err@隐藏条件" + hidenField + "还有未替换的_符号";
whereSQL += " AND (" + hidenField + ")";
}
expList = "SELECT * From(" + expList + ") AS A WHERE 1=1 " + whereSQL;//查询列数的
string expCount = "SELECT Count(*) From(" + expList + ") AS A WHERE 1=1 " + whereSQL;//查询总条数的
string expPageSize = "SELECT A.OID From(" + expList + ") AS A WHERE 1=1 " + whereSQL;//查询分页使用的SQL语句
if (DataType.IsNullOrEmpty(md.DBSrc) == true)
md.DBSrc = "local";
expCount = BP.WF.Glo.DealExp(expCount, null, null);
expPageSize = BP.WF.Glo.DealExp(expPageSize, null, null);
SFDBSrc dbsrc = new SFDBSrc(md.DBSrc);
int count = dbsrc.RunSQLReturnInt(expCount, 0);
dbsrc.DoQuery(rpts, expList, expPageSize, "OID", attrs, count, this.PageSize, this.PageIdx, ur.OrderBy);
ur.SetPara("RecCount", count);
ur.Save();
DataTable dt = rpts.ToDataTableField("DT");
ds.Tables.Add(dt); //把数据加入里面.
}
#endregion 数据源SQL
#region URL请求数据
if (md.DBType == 1)
{
ht.Add("PageSize", this.PageSize);
ht.Add("PageIdx", this.PageIdx);
// 请求的参数作为JSON字符串发送给列表URL
string postData = BP.Tools.Json.ToJson(ht);
if (DataType.IsNullOrEmpty(md.ExpList) == true)
return "err@根据URL请求数据的URL为空,请检查配置";
string json = SearchDB_UrlSearchData(md.ExpList, postData);
if (DataType.IsNullOrEmpty(json) == true)
return "err@根据URL请求数据列表数据为空";
JsonData jd = JsonMapper.ToObject(json);
string count = jd["count"].ToString();
if (DataType.IsNullOrEmpty(count) == true)
ur.SetPara("RecCount", 0);
else
ur.SetPara("RecCount", Int32.Parse(count));
ur.Save();
string data = jd["data"].ToJson();
DataTable dt = new DataTable("DT");
if (DataType.IsNullOrEmpty(data) == false)
{
dt = BP.Tools.Json.ToDataTable(data);
dt.TableName = "DT";
ds.Tables.Add(dt); //把数据加入里面.
}
}
#endregion URL请求数据
#region 存储过程的查询
if (md.DBType == 2)
{
string sql = md.ExpList;
sql = sql.Replace("~", "'");
Paras paras = new Paras();
foreach (string key in ht.Keys)
{
paras.Add(key, ht[key]);
}
string hidenField = md.GetParaString("HidenField");
if (DataType.IsNullOrEmpty(hidenField) == false)
{
hidenField = hidenField.Replace("_WebUser.No", WebUser.No);
hidenField = hidenField.Replace("_WebUser.Name", WebUser.Name);
hidenField = hidenField.Replace("_WebUser.FK_DeptName", WebUser.FK_DeptName);
hidenField = hidenField.Replace("_WebUser.FK_Dept", WebUser.FK_Dept);
hidenField = hidenField.Replace("_WebUser.OrgNo", WebUser.OrgNo);
if (hidenField.IndexOf("@") != -1)
return "err@隐藏条件" + hidenField + "还有未替换的_符号";
string[] strs = hidenField.Split(',');
foreach (string str in strs)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
string[] strVal = str.Split('=');
if (strVal.Length == 1)
paras.Add(strVal[0], "");
else
paras.Add(strVal[0], strVal[1]);
}
}
DataTable dt = DBAccess.RunProcReturnTable(sql, paras);
dt.TableName = "DT";
ds.Tables.Add(dt); //把数据加入里面.
}
#endregion 存储过程的查询
return BP.Tools.Json.ToJson(ds);
}
///
/// 初始化
///
///
public string GenerBill_Init()
{
GenerBills bills = new GenerBills();
bills.Retrieve(GenerBillAttr.Starter, WebUser.No);
return bills.ToJson();
}
///
/// 查询初始化
///
///
public string SearchData_Init()
{
DataSet ds = new DataSet();
string sql = "";
string tSpan = this.GetRequestVal("TSpan");
if (tSpan == "")
tSpan = null;
#region 1、获取时间段枚举/总数.
SysEnums ses = new SysEnums("TSpan");
DataTable dtTSpan = ses.ToDataTableField();
dtTSpan.TableName = "TSpan";
ds.Tables.Add(dtTSpan);
GenerBill gb = new GenerBill();
gb.CheckPhysicsTable();
sql = "SELECT TSpan as No, COUNT(WorkID) as Num FROM Frm_GenerBill WHERE FrmID='" + this.FrmID + "' AND Starter='" + WebUser.No + "' AND BillState >= 1 GROUP BY TSpan";
DataTable dtTSpanNum = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow drEnum in dtTSpan.Rows)
{
string no = drEnum["IntKey"].ToString();
foreach (DataRow dr in dtTSpanNum.Rows)
{
if (dr["No"].ToString() == no)
{
drEnum["Lab"] = drEnum["Lab"].ToString() + "(" + dr["Num"] + ")";
break;
}
}
}
#endregion
#region 2、处理流程类别列表.
sql = " SELECT A.BillState as No, B.Lab as Name, COUNT(WorkID) as Num FROM Frm_GenerBill A, " + BP.Sys.Base.Glo.SysEnum() + " B ";
sql += " WHERE A.BillState=B.IntKey AND B.EnumKey='BillState' AND A.Starter='" + WebUser.No + "' AND BillState >=1";
if (tSpan.Equals("-1") == false)
sql += " AND A.TSpan=" + tSpan;
sql += " GROUP BY A.BillState, B.Lab ";
DataTable dtFlows = DBAccess.RunSQLReturnTable(sql);
if (BP.Difference.SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
dtFlows.Columns[0].ColumnName = "No";
dtFlows.Columns[1].ColumnName = "Name";
dtFlows.Columns[2].ColumnName = "Num";
}
dtFlows.TableName = "Flows";
ds.Tables.Add(dtFlows);
#endregion
#region 3、处理流程实例列表.
string sqlWhere = "";
sqlWhere = "(1 = 1)AND Starter = '" + WebUser.No + "' AND BillState >= 1";
if (tSpan.Equals("-1") == false)
{
sqlWhere += "AND (TSpan = '" + tSpan + "') ";
}
if (this.FK_Flow != null)
{
sqlWhere += "AND (FrmID = '" + this.FrmID + "') ";
}
else
{
// sqlWhere += ")";
}
sqlWhere += "ORDER BY RDT DESC";
string fields = " WorkID,FrmID,FrmName,Title,BillState, Starter, StarterName,Sender,RDT ";
switch (BP.Difference.SystemConfig.AppCenterDBType)
{
case DBType.MySQL:
case DBType.PostgreSQL:
case DBType.UX:
sql = "SELECT " + fields + " FROM Frm_GenerBill WHERE " + sqlWhere + " LIMIT 50";
break;
case DBType.MSSQL:
sql = "SELECT TOP 50 " + fields + " FROM Frm_GenerBill WHERE " + sqlWhere;
break;
case DBType.Oracle:
case DBType.KingBaseR3:
case DBType.KingBaseR6:
sql = "SELECT " + fields + " FROM (SELECT * FROM Frm_GenerBill WHERE " + sqlWhere + ") WHERE rownum <= 50";
break;
default:
throw new Exception("err@没有判断的数据库类型.");
break;
}
DataTable mydt = DBAccess.RunSQLReturnTable(sql);
if (BP.Difference.SystemConfig.AppCenterDBFieldCaseModel != FieldCaseModel.None)
{
mydt.Columns[0].ColumnName = "WorkID";
mydt.Columns[1].ColumnName = "FrmID";
mydt.Columns[2].ColumnName = "FrmName";
mydt.Columns[3].ColumnName = "Title";
mydt.Columns[4].ColumnName = "BillState";
mydt.Columns[5].ColumnName = "Starter";
mydt.Columns[6].ColumnName = "StarterName";
mydt.Columns[7].ColumnName = "Sender";
mydt.Columns[8].ColumnName = "RDT";
}
mydt.TableName = "Frm_Bill";
if (mydt != null)
{
mydt.Columns.Add("TDTime");
foreach (DataRow dr in mydt.Rows)
{
// dr["TDTime"] = GetTraceNewTime(dr["FK_Flow"].ToString(), int.Parse(dr["WorkID"].ToString()), int.Parse(dr["FID"].ToString()));
}
}
#endregion
ds.Tables.Add(mydt);
return BP.Tools.Json.ToJson(ds);
}
#endregion 查询.
#region 单据导出
public string Search_Exp()
{
FrmBill frmBill = new FrmBill(this.FrmID);
GEEntitys rpts = new GEEntitys(this.FrmID);
string name = "数据导出";
string filename = frmBill.Name + "_" + DataType.CurrentDateTimeCNOfLong + ".xls";
string filePath = BP.Tools.ExportExcelUtil.ExportDGToExcel(Search_Data(), rpts.GetNewEntity, null, null, filename);
return filePath;
}
public DataTable Search_Data()
{
DataSet ds = new DataSet();
#region 查询语句
MapData md = new MapData(this.FrmID);
//取出来查询条件.
UserRegedit ur = new UserRegedit(WebUser.No, this.FrmID + "_SearchAttrs");
GEEntitys rpts = new GEEntitys(this.FrmID);
Attrs attrs = rpts.GetNewEntity.EnMap.Attrs;
QueryObject qo = new QueryObject(rpts);
#region 关键字字段.
string keyWord = ur.SearchKey;
bool isFirst = true; //是否第一次拼接SQL
if (md.GetParaBoolen("IsSearchKey") && DataType.IsNullOrEmpty(keyWord) == false && keyWord.Length >= 1)
{
Attr attrPK = new Attr();
foreach (Attr attr in attrs)
{
if (attr.IsPK)
{
attrPK = attr;
break;
}
}
int i = 0;
string enumKey = ","; //求出枚举值外键.
foreach (Attr attr in attrs)
{
switch (attr.MyFieldType)
{
case FieldType.Enum:
enumKey = "," + attr.Key + "Text,";
break;
case FieldType.FK:
continue;
default:
break;
}
if (attr.MyDataType != DataType.AppString)
continue;
//排除枚举值关联refText.
if (attr.MyFieldType == FieldType.RefText)
{
if (enumKey.Contains("," + attr.Key + ",") == true)
continue;
}
if (attr.Key == "FK_Dept")
continue;
i++;
if (i == 1)
{
isFirst = false;
/* 第一次进来。 */
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(attr.Key, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? (" CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey,'%')") : (" '%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey+'%'"));
else
qo.AddWhere(attr.Key, " LIKE ", " '%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey||'%'");
continue;
}
qo.addOr();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(attr.Key, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? ("CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey,'%')") : ("'%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey+'%'"));
else
qo.AddWhere(attr.Key, " LIKE ", "'%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + "SKey||'%'");
}
qo.MyParas.Add("SKey", keyWord);
qo.addRightBracket();
}
else if (DataType.IsNullOrEmpty(md.GetParaString("StringSearchKeys")) == false)
{
string field = "";//字段名
string fieldValue = "";//字段值
int idx = 0;
//获取查询的字段
string[] searchFields = md.GetParaString("StringSearchKeys").Split('*');
foreach (String str in searchFields)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
//字段名
string[] items = str.Split(',');
if (items.Length == 2 && DataType.IsNullOrEmpty(items[0]) == true)
continue;
field = items[0];
//字段名对应的字段值
fieldValue = ur.GetParaString(field);
if (DataType.IsNullOrEmpty(fieldValue) == true)
continue;
idx++;
if (idx == 1)
{
isFirst = false;
/* 第一次进来。 */
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(field, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? (" CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + field + ",'%')") : (" '%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "+'%'"));
else
qo.AddWhere(field, " LIKE ", " '%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "||'%'");
qo.MyParas.Add(field, fieldValue);
continue;
}
qo.addAnd();
if (BP.Difference.SystemConfig.AppCenterDBVarStr == "@" || BP.Difference.SystemConfig.AppCenterDBVarStr == "?")
qo.AddWhere(field, " LIKE ", BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL ? ("CONCAT('%'," + BP.Difference.SystemConfig.AppCenterDBVarStr + field + ",'%')") : ("'%'+" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "+'%'"));
else
qo.AddWhere(field, " LIKE ", "'%'||" + BP.Difference.SystemConfig.AppCenterDBVarStr + field + "||'%'");
qo.MyParas.Add(field, fieldValue);
}
if (idx != 0)
qo.addRightBracket();
}
#endregion 关键字段查询
#region 时间段的查询
if (md.GetParaInt("DTSearchWay") != (int)DTSearchWay.None && DataType.IsNullOrEmpty(ur.DTFrom) == false)
{
string dtFrom = ur.DTFrom; // this.GetTBByID("TB_S_From").Text.Trim().Replace("/", "-");
string dtTo = ur.DTTo; // this.GetTBByID("TB_S_To").Text.Trim().Replace("/", "-");
//按日期查询
if (md.GetParaInt("DTSearchWay") == (int)DTSearchWay.ByDate)
{
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addLeftBracket();
dtTo += " 23:59:59";
qo.SQL = md.GetParaString("DTSearchKey") + " >= '" + dtFrom + "'";
qo.addAnd();
qo.SQL = md.GetParaString("DTSearchKey") + " <= '" + dtTo + "'";
qo.addRightBracket();
}
if (md.GetParaInt("DTSearchWay") == (int)DTSearchWay.ByDateTime)
{
//取前一天的24:00
if (dtFrom.Trim().Length == 10) //2017-09-30
dtFrom += " 00:00:00";
if (dtFrom.Trim().Length == 16) //2017-09-30 00:00
dtFrom += ":00";
dtFrom = DateTime.Parse(dtFrom).AddDays(-1).ToString("yyyy-MM-dd") + " 24:00";
if (dtTo.Trim().Length < 11 || dtTo.Trim().IndexOf(' ') == -1)
dtTo += " 24:00";
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addLeftBracket();
qo.SQL = md.GetParaString("DTSearchKey") + " >= '" + dtFrom + "'";
qo.addAnd();
qo.SQL = md.GetParaString("DTSearchKey") + " <= '" + dtTo + "'";
qo.addRightBracket();
}
}
#endregion 时间段的查询
#region 外键或者枚举的查询
//获得关键字.
AtPara ap = new AtPara(ur.Vals);
foreach (string str in ap.HisHT.Keys)
{
var val = ap.GetValStrByKey(str);
if (val.Equals("all"))
continue;
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addLeftBracket();
if (BP.Difference.SystemConfig.AppCenterDBFieldIsParaDBType == true)
{
var typeVal = BP.Sys.Base.Glo.GenerRealType(attrs, str, ap.GetValStrByKey(str));
qo.AddWhere(str, typeVal);
}
else
{
qo.AddWhere(str, ap.GetValStrByKey(str));
}
qo.addRightBracket();
}
#endregion 外键或者枚举的查询
#region 设置隐藏字段的过滤查询
FrmBill frmBill = new FrmBill(this.FrmID);
string hidenField = frmBill.GetParaString("HidenField");
if (DataType.IsNullOrEmpty(hidenField) == false)
{
hidenField = hidenField.Replace("_WebUser.No", WebUser.No);
hidenField = hidenField.Replace("_WebUser.Name", WebUser.Name);
hidenField = hidenField.Replace("_WebUser.FK_DeptName", WebUser.FK_DeptName);
hidenField = hidenField.Replace("_WebUser.FK_Dept", WebUser.FK_Dept);
hidenField = hidenField.Replace("_WebUser.OrgNo", WebUser.OrgNo);
if (isFirst == false)
qo.addAnd();
else
isFirst = false;
qo.addSQL(hidenField);
}
#endregion 设置隐藏字段的查询
if (isFirst == false)
qo.addAnd();
qo.AddWhere("BillState", "!=", 0);
if ((SearchDataRole)md.GetParaInt("SearchDataRole") != SearchDataRole.SearchAll)
{
//默认查询本部门的单据
if ((SearchDataRole)md.GetParaInt("SearchDataRole") == SearchDataRole.ByOnlySelf && DataType.IsNullOrEmpty(hidenField) == true
|| (md.GetParaInt("SearchDataRoleByDeptStation") == 0 && DataType.IsNullOrEmpty(ap.GetValStrByKey("FK_Dept")) == true))
{
//qo.addAnd();
//qo.AddWhere("Starter", "=", WebUser.No);
}
}
#endregion 查询语句
qo.addOrderBy("OID");
return qo.DoQueryToTable();
}
#endregion 执行导出
#region 单据导入
public string ImpData_Done()
{
if (BP.Difference.SystemConfig.CustomerNo.Equals("ASSET") == true)
return ImpData_ASSETDone();
var files = HttpContextHelper.RequestFiles();
if (HttpContextHelper.RequestFilesCount == 0)
return "err@请选择要导入的数据信息。";
string errInfo = "";
string ext = ".xls";
string fileName = System.IO.Path.GetFileName(HttpContextHelper.RequestFiles(0).FileName);
if (fileName.Contains(".xlsx"))
ext = ".xlsx";
//设置文件名
string fileNewName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ext;
//文件存放路径
string filePath = BP.Difference.SystemConfig.PathOfTemp + "/" + fileNewName;
HttpContextHelper.UploadFile(HttpContextHelper.RequestFiles(0), filePath);
//从excel里面获得数据表.
DataTable dt = DBLoad.ReadExcelFileToDataTable(filePath);
//删除临时文件
System.IO.File.Delete(filePath);
if (dt.Rows.Count == 0)
return "err@无导入的数据";
//获得entity.
FrmBill bill = new FrmBill(this.FrmID);
GEEntitys rpts = new GEEntitys(this.FrmID);
GEEntity en = new GEEntity(this.FrmID);
string noColName = ""; //编号(针对实体表单).
string nameColName = ""; //名称(针对实体表单).
BP.En.Map map = en.EnMap;
Attr attr = map.GetAttrByKey("BillNo");
noColName = attr.Desc; //
String codeStruct = bill.EnMap.CodeStruct;
attr = map.GetAttrByKey("Title");
nameColName = attr.Desc; //
//定义属性.
Attrs attrs = map.Attrs;
int impWay = this.GetRequestValInt("ImpWay");
#region 清空方式导入.
//清空方式导入.
int count = 0;//导入的行数
int changeCount = 0;//更新的行数
String successInfo = "";
if (impWay == 0)
{
rpts.ClearTable();
GEEntity myen = new GEEntity(this.FrmID);
foreach (DataRow dr in dt.Rows)
{
//如果是实体单据,导入的excel必须包含BillNo
if (bill.EntityType == EntityType.FrmDict && dt.Columns.Contains(noColName) == false)
return "err@导入的excel不包含编号列";
string no = "";
if (dt.Columns.Contains(noColName) == true)
no = dr[noColName].ToString();
string name = "";
if (dt.Columns.Contains(nameColName) == true)
name = dr[nameColName].ToString();
myen.OID = 0;
//判断是否是自增序列,序列的格式
if (DataType.IsNullOrEmpty(codeStruct) == false && DataType.IsNullOrEmpty(no) == false)
no = no.PadLeft(System.Int32.Parse(codeStruct), '0');
myen.SetValByKey("BillNo", no);
if (bill.EntityType == EntityType.FrmDict)
{
if (myen.Retrieve("BillNo", no) == 1)
{
errInfo += "err@编号[" + no + "][" + name + "]重复.";
continue;
}
}
//给实体赋值
errInfo += SetEntityAttrVal(no, dr, attrs, myen, dt, 0, bill);
count++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的导入成功
";
}
}
#endregion 清空方式导入.
#region 更新方式导入
if (impWay == 1 || impWay == 2)
{
foreach (DataRow dr in dt.Rows)
{
//如果是实体单据,导入的excel必须包含BillNo
if (bill.EntityType == EntityType.FrmDict && dt.Columns.Contains(noColName) == false)
return "err@导入的excel不包含编号列";
string no = "";
if (dt.Columns.Contains(noColName) == true)
no = dr[noColName].ToString();
string name = "";
if (dt.Columns.Contains(nameColName) == true)
name = dr[nameColName].ToString();
//判断是否是自增序列,序列的格式
if (DataType.IsNullOrEmpty(codeStruct) == false && DataType.IsNullOrEmpty(no) == false)
{
no = no.PadLeft(System.Int32.Parse(codeStruct), '0');
}
GEEntity myen = rpts.GetNewEntity as GEEntity;
myen.SetValByKey("BillNo", no);
if (myen.Retrieve("BillNo", no) == 1 && bill.EntityType == EntityType.FrmDict)
{
//给实体赋值
errInfo += SetEntityAttrVal(no, dr, attrs, myen, dt, 1, bill);
changeCount++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的更新成功
";
continue;
}
//给实体赋值
errInfo += SetEntityAttrVal(no, dr, attrs, myen, dt, 0, bill);
count++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的导入成功
";
}
}
#endregion
return "errInfo=" + errInfo + "@Split" + "count=" + count + "@Split" + "successInfo=" + successInfo + "@Split" + "changeCount=" + changeCount;
}
private string SetEntityAttrVal(string no, DataRow dr, Attrs attrs, GEEntity en, DataTable dt, int saveType, FrmBill fbill)
{
//单据数据不存在
if (saveType == 0)
{
Int64 oid = 0;
if (fbill.EntityType == EntityType.FrmDict)
oid = BP.CCBill.Dev2Interface.CreateBlankDictID(fbill.No, WebUser.No, null);
if (fbill.EntityType == EntityType.FrmBill)
oid = BP.CCBill.Dev2Interface.CreateBlankBillID(fbill.No, WebUser.No, null);
en.OID = oid;
en.RetrieveFromDBSources();
}
string errInfo = "";
//按照属性赋值.
foreach (Attr item in attrs)
{
if (item.Key.Equals("BillNo") && dt.Columns.Contains(item.Desc) == true)
{
en.SetValByKey(item.Key, no);
continue;
}
if (item.Key.Equals("Title") && dt.Columns.Contains(item.Desc) == true)
{
en.SetValByKey(item.Key, dr[item.Desc].ToString());
continue;
}
if (dt.Columns.Contains(item.Desc) == false)
continue;
//枚举处理.
if (item.MyFieldType == FieldType.Enum)
{
string val = dr[item.Desc].ToString();
SysEnum se = new SysEnum();
int i = se.Retrieve(SysEnumAttr.EnumKey, item.UIBindKey, SysEnumAttr.Lab, val);
if (i == 0)
{
errInfo += "err@枚举[" + item.Key + "][" + item.Desc + "],值[" + val + "]不存在.";
continue;
}
en.SetValByKey(item.Key, se.IntKey);
continue;
}
//外键处理.
if (item.MyFieldType == FieldType.FK)
{
string val = dr[item.Desc].ToString();
Entity attrEn = item.HisFKEn;
int i = attrEn.Retrieve("Name", val);
if (i == 0)
{
errInfo += "err@外键[" + item.Key + "][" + item.Desc + "],值[" + val + "]不存在.";
continue;
}
if (i != 1)
{
errInfo += "err@外键[" + item.Key + "][" + item.Desc + "],值[" + val + "]重复..";
continue;
}
//把编号值给他.
en.SetValByKey(item.Key, attrEn.GetValByKey("No"));
continue;
}
//boolen类型的处理..
if (item.MyDataType == DataType.AppBoolean)
{
string val = dr[item.Desc].ToString();
if (val == "是" || val == "有")
en.SetValByKey(item.Key, 1);
else
en.SetValByKey(item.Key, 0);
continue;
}
string myval = dr[item.Desc].ToString();
en.SetValByKey(item.Key, myval);
}
if (DataType.IsNullOrEmpty(en.GetValStrByKey("BillNo")) == true && DataType.IsNullOrEmpty(fbill.BillNoFormat) == false)
en.SetValByKey("BillNo", Dev2Interface.GenerBillNo(fbill.BillNoFormat, en.OID, en, fbill.No));
if (DataType.IsNullOrEmpty(en.GetValStrByKey("Title")) == true && DataType.IsNullOrEmpty(fbill.TitleRole) == false)
en.SetValByKey("Title", Dev2Interface.GenerTitle(fbill.TitleRole, en));
en.SetValByKey("BillState", (int)BillState.Editing);
en.Update();
GenerBill gb = new GenerBill();
gb.WorkID = en.OID;
if (gb.RetrieveFromDBSources() == 0)
{
gb.BillState = BillState.Over; //初始化状态.
gb.Starter = BP.Web.WebUser.No;
gb.StarterName = BP.Web.WebUser.Name;
gb.FrmName = fbill.Name; //单据名称.
gb.FrmID = fbill.No; //单据ID
if (en.Row.ContainsKey("Title") == true)
gb.Title = en.GetValStringByKey("Title");
if (en.Row.ContainsKey("BillNo") == true)
gb.BillNo = en.GetValStringByKey("BillNo");
gb.FK_FrmTree = fbill.FK_FormTree; //单据类别.
gb.RDT = DataType.CurrentDateTime;
gb.NDStep = 1;
gb.NDStepName = "启动";
gb.Insert();
}
else
{
gb.BillState = BillState.Editing;
if (en.Row.ContainsKey("Title") == true)
gb.Title = en.GetValStringByKey("Title");
if (en.Row.ContainsKey("BillNo") == true)
gb.BillNo = en.GetValStringByKey("BillNo");
gb.Update();
}
return errInfo;
}
#endregion
/**
* 针对于北京农芯科技的单据导入的处理
*/
public string ImpData_ASSETDone()
{
var files = HttpContextHelper.RequestFiles();
if (HttpContextHelper.RequestFilesCount == 0)
return "err@请选择要导入的数据信息。";
string errInfo = "";
string ext = ".xls";
string fileName = System.IO.Path.GetFileName(HttpContextHelper.RequestFiles(0).FileName);
if (fileName.Contains(".xlsx"))
ext = ".xlsx";
//设置文件名
string fileNewName = DateTime.Now.ToString("yyyyMMddHHmmssff") + ext;
//文件存放路径
string filePath = BP.Difference.SystemConfig.PathOfTemp + "/" + fileNewName;
HttpContextHelper.UploadFile(HttpContextHelper.RequestFiles(0), filePath);
//从excel里面获得数据表.
DataTable dt = DBLoad.ReadExcelFileToDataTable(filePath);
//删除临时文件
System.IO.File.Delete(filePath);
if (dt.Rows.Count == 0)
return "err@无导入的数据";
//获得entity.
FrmBill bill = new FrmBill(this.FrmID);
GEEntitys rpts = new GEEntitys(this.FrmID);
GEEntity en = new GEEntity(this.FrmID);
string noColName = ""; //编号(唯一值)
string nameColName = ""; //名称
BP.En.Map map = en.EnMap;
//获取表单的主键,合同类的(合同编号),人员信息类的(身份证号),其他(BillNo)
bool isContractBill = false;
bool isPersonBill = false;
if (dt.Columns.Contains("合同编号") == true)
{
noColName = "合同编号";
isContractBill = true;
}
else if (dt.Columns.Contains("身份证号") == true)
{
noColName = "身份证号";
isPersonBill = true;
}
else
{
Attr attr = map.GetAttrByKey("BillNo");
noColName = attr.Desc;
attr = map.GetAttrByKey("Title");
nameColName = attr.Desc;
}
string codeStruct = bill.EnMap.CodeStruct;
//定义属性.
Attrs attrs = map.Attrs;
int impWay = this.GetRequestValInt("ImpWay");
#region 清空方式导入.
//清空方式导入.
int count = 0;//导入的行数
int changeCount = 0;//更新的行数
String successInfo = "";
if (impWay == 0)
{
rpts.ClearTable();
GEEntity myen = new GEEntity(this.FrmID);
foreach (DataRow dr in dt.Rows)
{
//如果是实体单据,导入的excel必须包含BillNo
if (bill.EntityType == EntityType.FrmDict && dt.Columns.Contains(noColName) == false)
return "err@导入的excel不包含编号列";
string no = "";
if (dt.Columns.Contains(noColName) == true)
no = dr[noColName].ToString();
string name = "";
if (dt.Columns.Contains(nameColName) == true)
name = dr[nameColName].ToString();
myen.OID = 0;
if (isContractBill == false && isPersonBill == false)
{
//判断是否是自增序列,序列的格式
if (DataType.IsNullOrEmpty(codeStruct) == false && DataType.IsNullOrEmpty(no) == false)
no = no.PadLeft(System.Int32.Parse(codeStruct), '0');
myen.SetValByKey("BillNo", no);
if (bill.EntityType == EntityType.FrmDict)
{
if (myen.Retrieve("BillNo", no) == 1)
{
errInfo += "err@编号[" + no + "][" + name + "]重复.";
continue;
}
}
}
//给实体赋值
errInfo += SetEntityAttrValForASSET(no, dr, attrs, myen, dt, 0, bill);
count++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的导入成功
";
}
}
#endregion 清空方式导入.
#region 更新方式导入
if (impWay == 1 || impWay == 2)
{
foreach (DataRow dr in dt.Rows)
{
//如果是实体单据,导入的excel必须包含BillNo
if (bill.EntityType == EntityType.FrmDict && dt.Columns.Contains(noColName) == false)
return "err@导入的excel不包含编号列";
string no = "";
if (dt.Columns.Contains(noColName) == true)
no = dr[noColName].ToString();
string name = "";
if (dt.Columns.Contains(nameColName) == true)
name = dr[nameColName].ToString();
GEEntity myen = rpts.GetNewEntity as GEEntity;
//合同类
if (isContractBill == true || isPersonBill == true)
{
Attr attr = map.GetAttrByDesc(noColName);
myen.SetValByKey(attr.Key, no);
//存在就编辑修改数据
if (myen.Retrieve(attr.Key, no) == 1)
{
//给实体赋值
errInfo += SetEntityAttrValForASSET(no, dr, attrs, myen, dt, 1, bill);
changeCount++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的更新成功
";
continue;
}
else
{
//给实体赋值
errInfo += SetEntityAttrValForASSET(no, dr, attrs, myen, dt, 0, bill);
count++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的导入成功
";
continue;
}
}
else
{
//判断是否是自增序列,序列的格式
if (DataType.IsNullOrEmpty(codeStruct) == false && DataType.IsNullOrEmpty(no) == false)
{
no = no.PadLeft(System.Int32.Parse(codeStruct), '0');
}
myen.SetValByKey("BillNo", no);
if (myen.Retrieve("BillNo", no) == 1 && bill.EntityType == EntityType.FrmDict)
{
//给实体赋值
errInfo += SetEntityAttrValForASSET(no, dr, attrs, myen, dt, 1, bill);
changeCount++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的更新成功
";
continue;
}
}
//给实体赋值
errInfo += SetEntityAttrValForASSET(no, dr, attrs, myen, dt, 0, bill);
count++;
successInfo += " " + noColName + "为" + no + "," + nameColName + "为" + name + "的导入成功
";
}
}
#endregion
return "errInfo=" + errInfo + "@Split" + "count=" + count + "@Split" + "successInfo=" + successInfo + "@Split" + "changeCount=" + changeCount;
}
private string SetEntityAttrValForASSET(string no, DataRow dr, Attrs attrs, GEEntity en, DataTable dt, int saveType, FrmBill fbill)
{
//单据数据不存在
if (saveType == 0)
{
Int64 oid = 0;
if (fbill.EntityType == EntityType.FrmDict)
oid = BP.CCBill.Dev2Interface.CreateBlankDictID(fbill.No, WebUser.No, null);
if (fbill.EntityType == EntityType.FrmBill)
oid = BP.CCBill.Dev2Interface.CreateBlankBillID(fbill.No, WebUser.No, null);
en.OID = oid;
en.RetrieveFromDBSources();
}
string errInfo = "";
//按照属性赋值.
foreach (Attr item in attrs)
{
if (item.Key.Equals("BillNo") && dt.Columns.Contains(item.Desc) == true)
{
en.SetValByKey(item.Key, no);
continue;
}
if (item.Key.Equals("Title") && dt.Columns.Contains(item.Desc) == true)
{
en.SetValByKey(item.Key, dr[item.Desc].ToString());
continue;
}
if (dt.Columns.Contains(item.Desc) == false)
continue;
string val = dr[item.Desc].ToString();
//枚举处理.
if (item.MyFieldType == FieldType.Enum)
{
SysEnum se = new SysEnum();
int i = se.Retrieve(SysEnumAttr.EnumKey, item.UIBindKey, SysEnumAttr.Lab, val);
if (i == 0)
{
errInfo += "err@枚举[" + item.Key + "][" + item.Desc + "],值[" + val + "]不存在.";
continue;
}
en.SetValByKey(item.Key, se.IntKey);
//en.SetValByKey(item.Key.Replace("Code",""), val);
continue;
}
//外键处理.
if (item.MyFieldType == FieldType.FK)
{
Entity attrEn = item.HisFKEn;
int i = attrEn.Retrieve("Name", val);
if (i == 0)
{
errInfo += "err@外键[" + item.Key + "][" + item.Desc + "],值[" + val + "]不存在.";
continue;
}
if (i != 1)
{
errInfo += "err@外键[" + item.Key + "][" + item.Desc + "],值[" + val + "]重复..";
continue;
}
//把编号值给他.
en.SetValByKey(item.Key, attrEn.GetValByKey("No"));
if (item.Key.EndsWith("BaseCode") == true)
en.SetValByKey(item.Key.Replace("BaseCode", "BaseName"), val);
else
en.SetValByKey(item.Key.Replace("Code", ""), val);
continue;
}
//外部数据源
if (item.MyFieldType == FieldType.Normal && item.MyDataType == DataType.AppString && item.UIContralType == UIContralType.DDL)
{
string uiBindKey = item.UIBindKey;
if (DataType.IsNullOrEmpty(uiBindKey) == true)
errInfo += "err@外部数据源[" + item.Key + "][" + item.Desc + "],绑定的外键为空";
DataTable mydt = BP.Pub.PubClass.GetDataTableByUIBineKey(uiBindKey);
if (mydt.Rows.Count == 0)
errInfo += "err@外部数据源[" + item.Key + "][" + item.Desc + "],对应的外键没有获取到外键列表";
bool isHave = false;
//给赋值名称
if (item.Key.EndsWith("BaseCode") == true)
en.SetValByKey(item.Key.Replace("BaseCode", "BaseName"), val);
else
en.SetValByKey(item.Key.Replace("Code", ""), val);
en.SetValByKey(item.Key + "T", val);
foreach (DataRow mydr in mydt.Rows)
{
if (mydr["Name"].ToString().Equals(val) == true)
{
en.SetValByKey(item.Key, mydr["No"].ToString());
isHave = true;
break;
}
}
if (isHave == false)
errInfo += "err@外部数据源[" + item.Key + "][" + item.Desc + "],没有获取到" + val + "对应的Code值";
continue;
}
//boolen类型的处理..
if (item.MyDataType == DataType.AppBoolean)
{
if (val == "是" || val == "有")
en.SetValByKey(item.Key, 1);
else
en.SetValByKey(item.Key, 0);
continue;
}
if (item.MyDataType == DataType.AppDate)
{
if (DataType.IsNullOrEmpty(val) == false)
{
}
}
if (item.Key.EndsWith("BaseName") == true)
{
BP.Port.Depts depts = new BP.Port.Depts();
depts.Retrieve(BP.Port.DeptAttr.Name, val);
if (depts.Count != 0)
en.SetValByKey(item.Key.Replace("BaseName", "BaseCode"), (depts[0] as BP.Port.Dept).No);
en.SetValByKey(item.Key, val);
continue;
}
else
{
if (item.Key.Equals("CI_SmallBusinessFormatCode"))
{
string mypk = "MultipleChoiceSmall_" + fbill.No + "_" + item.Key;
MapExt mapExt = new MapExt();
mapExt.setMyPK(mypk);
if (mapExt.RetrieveFromDBSources() == 1 && mapExt.DoWay == 3 && DataType.IsNullOrEmpty(mapExt.Tag3) == false)
{
string newVal = "," + val + ",";
string keyVal = "";
DataTable dataTable = BP.Pub.PubClass.GetDataTableByUIBineKey(mapExt.Tag3);
foreach (DataRow drr in dataTable.Rows)
{
if (drr["Name"] != null && newVal.Contains("," + drr["Name"].ToString() + ",") == true)
keyVal += drr["No"].ToString() + ",";
}
keyVal = keyVal.Substring(0, keyVal.Length - 1);
en.SetValByKey(item.Key, keyVal);
en.SetValByKey(item.Key.Replace("Code", ""), val);
en.SetValByKey(item.Key + "T", val);
}
else
{
en.SetValByKey(item.Key, val);
}
}
else
{
if (item.IsNum)
{
if (DataType.IsNullOrEmpty(val) == true || val.Equals("null") == true)
val = "0";
}
en.SetValByKey(item.Key, val);
}
}
}
if (DataType.IsNullOrEmpty(en.GetValStrByKey("BillNo")) == true && DataType.IsNullOrEmpty(fbill.BillNoFormat) == false)
en.SetValByKey("BillNo", Dev2Interface.GenerBillNo(fbill.BillNoFormat, en.OID, en, fbill.No));
if (DataType.IsNullOrEmpty(en.GetValStrByKey("Title")) == true && DataType.IsNullOrEmpty(fbill.TitleRole) == false)
en.SetValByKey("Title", Dev2Interface.GenerTitle(fbill.TitleRole, en));
en.SetValByKey("Rec", WebUser.No);
en.SetValByKey("BillState", (int)BillState.Editing);
en.SetValByKey("WFState", WFState.Complete);
en.Update();
GenerBill gb = new GenerBill();
gb.WorkID = en.OID;
if (gb.RetrieveFromDBSources() == 0)
{
gb.BillState = BillState.Over; //初始化状态.
gb.Starter = BP.Web.WebUser.No;
gb.StarterName = BP.Web.WebUser.Name;
gb.FrmName = fbill.Name; //单据名称.
gb.FrmID = fbill.No; //单据ID
if (en.Row.ContainsKey("Title") == true)
gb.Title = en.GetValStringByKey("Title");
if (en.Row.ContainsKey("BillNo") == true)
gb.BillNo = en.GetValStringByKey("BillNo");
gb.FK_FrmTree = fbill.FK_FormTree; //单据类别.
gb.RDT = DataType.CurrentDateTime;
gb.NDStep = 1;
gb.NDStepName = "启动";
gb.Insert();
}
else
{
gb.BillState = BillState.Editing;
if (en.Row.ContainsKey("Title") == true)
gb.Title = en.GetValStringByKey("Title");
if (en.Row.ContainsKey("BillNo") == true)
gb.BillNo = en.GetValStringByKey("BillNo");
gb.Update();
}
return errInfo;
}
#region 执行父类的重写方法.
///
/// 默认执行的方法
///
///
protected override string DoDefaultMethod()
{
switch (this.DoType)
{
case "DtlFieldUp": //字段上移
return "执行成功.";
default:
break;
}
//找不不到标记就抛出异常.
throw new Exception("@标记[" + this.DoType + "],没有找到. @RowURL:" + HttpContextHelper.RequestRawUrl);
}
#endregion 执行父类的重写方法.
#region 获得demo信息.
public string MethodDocDemoJS_Init()
{
var func = new MethodFunc(this.MyPK);
return func.MethodDoc_JavaScript_Demo;
}
public string MethodDocDemoSQL_Init()
{
var func = new MethodFunc(this.MyPK);
return func.MethodDoc_SQL_Demo;
}
#endregion 获得demo信息.
#region 处理SQL文中注释信息.
public static string MidStrEx(string sourse, string startstr, string endstr)
{
int startindex, endindex;
string tmpstr = string.Empty;
string tmpstr2 = string.Empty;
try
{
startindex = sourse.IndexOf(startstr);
if (startindex == -1)
return sourse;
int i = 0;
while (startindex != -1)
{
if (i == 0)
{
endindex = sourse.IndexOf(endstr);
if (startindex != 0)
{
endindex = endindex - startindex;
}
tmpstr = sourse.Remove(startindex, endindex + endstr.Length);
}
else
{
endindex = tmpstr.IndexOf(endstr);
if (startindex != 0)
{
endindex = endindex - startindex;
}
tmpstr = tmpstr.Remove(startindex, endindex + endstr.Length);
}
if (endindex == -1)
return tmpstr;
// tmpstr = tmpstr.Substring(endindex + endstr.Length);
startindex = tmpstr.IndexOf(startstr);
i++;
}
//result = tmpstr.Remove(endindex);
}
catch (Exception ex)
{
BP.DA.Log.DebugWriteError("MidStrEx Err:" + ex.Message);
}
return tmpstr;
}
#endregion 处理SQL文中注释信息..
#region 实体单据查询启动指定子流程显示的字段
public string DictFlow_MapAttrs()
{
DataSet ds = new DataSet();
string fk_mapData = "ND" + int.Parse(this.FK_Flow) + "01";
//查询出单流程的所有字段
MapAttrs mattrs = new MapAttrs();
mattrs.Retrieve(MapAttrAttr.FK_MapData, fk_mapData, MapAttrAttr.Idx);
ds.Tables.Add(mattrs.ToDataTableField("Sys_MapAttr"));
MapAttrs mattrsOfSystem1 = new MapAttrs();
//判断表单中是否存在默认值@WebUser.No,@WebUser.FK_Dept,@RDT
bool isHaveNo = false;
bool isHaveRDT = false;
bool isHaveTitle = false;
//系统字段字符串
string sysFields = "";
foreach (MapAttr mapAttr in mattrs)
{
if (mapAttr.KeyOfEn.Equals(GERptAttr.Rec) || mapAttr.KeyOfEn.Equals(GERptAttr.RDT) || mapAttr.KeyOfEn.Equals(GERptAttr.CDT))
continue;
if (mapAttr.KeyOfEn.Equals(GERptAttr.Title) == true)
{
mattrsOfSystem1.AddEntity(mapAttr);
isHaveTitle = true;
continue;
}
switch (mapAttr.DefValReal)
{
case "@WebUser.No":
case "@WebUser.Name":
sysFields += "," + mapAttr.KeyOfEn;
isHaveNo = true;
mattrsOfSystem1.AddEntity(mapAttr);
break;
case "@RDT":
mattrsOfSystem1.AddEntity(mapAttr);
isHaveRDT = true;
sysFields += "," + mapAttr.KeyOfEn;
break;
default: break;
}
}
//默认显示的系统字段 标题、发起人、发起时间、当前所在节点、状态 , 系统字段需要在RPT中查找
string fields = "(";
if (isHaveTitle == false)
fields += "'" + GERptAttr.Title + "',";
if (isHaveNo == false)
fields += "'" + GERptAttr.FlowStarter + "',";
if (isHaveRDT == false)
fields += "'" + GERptAttr.FlowStartRDT + "',";
fields += "'" + GERptAttr.WFState + "','" + GERptAttr.FlowEndNode + "')";
MapAttrs mattrsOfSystem = new MapAttrs();
QueryObject qo = new QueryObject(mattrsOfSystem);
qo.AddWhere(MapAttrAttr.FK_MapData, "ND" + int.Parse(this.FK_Flow) + "Rpt");
qo.addAnd();
qo.AddWhereIn(MapAttrAttr.KeyOfEn, fields);
//qo.addOrderBy(MapAttrAttr.Idx);
//qo.addOrderByOfSelf("CHARINDEX(" + MapAttrAttr.KeyOfEn + ",'" + fields.Replace("'", "") + "')");
qo.DoQuery();
mattrsOfSystem.AddEntities(mattrsOfSystem1);
ds.Tables.Add(mattrsOfSystem.ToDataTableField("Sys_MapAttrOfSystem"));
//系统字段字符串
fields = fields.Replace("(", "").Replace(")", "").Replace("'", "") + ",";
sysFields += ",OID,FID,RDT,CDT,Rec,FK_Dept,MyNum,FK_NY,Emps,Title," + fields;
DataTable dt = new DataTable();
dt.Columns.Add("Field");
dt.TableName = "Sys_Fields";
DataRow dr = dt.NewRow();
dr["Field"] = sysFields;
dt.Rows.Add(dr);
ds.Tables.Add(dt);
//用户查询注册信息中记录使用到的流程业务表中的字段
UserRegedit ur = new UserRegedit(WebUser.No, "ND" + int.Parse(this.FK_Flow) + "Rpt_SearchAttrs");
ur.SetPara("RptField", "," + fields);
ur.Update();
return BP.Tools.Json.ToJson(ds);
}
#endregion
#region 实体单据启动多个子流程的查询
public string DictFlow_Search()
{
//实体单据的信息
string frmID = this.GetRequestVal("FrmID");
string frmOID = this.GetRequestVal("FrmOID");
//表单编号
string fk_mapData = "ND" + int.Parse(this.FK_Flow) + "01";
//当前用户查询信息表
UserRegedit ur = new UserRegedit(WebUser.No, "ND" + int.Parse(this.FK_Flow) + "Rpt_SearchAttrs");
//表单属性
MapData mapData = new MapData(fk_mapData);
//流程的系统字段
string rptFields = ur.GetParaString("RptField");
rptFields = rptFields.Substring(1, rptFields.Length - 1);
rptFields = "('" + rptFields.Replace(",", "','") + "'" + ",'" + GERptAttr.FlowStarter + "','" + GERptAttr.FK_Dept + "','" + GERptAttr.FlowEmps + "','" + GERptAttr.FlowEndNode + "','" + GERptAttr.PWorkID + "','" + GERptAttr.PFlowNo + "')";
MapAttrs mattrsOfSystem = new MapAttrs();
QueryObject qo = new QueryObject(mattrsOfSystem);
qo.AddWhere(MapAttrAttr.FK_MapData, "ND" + int.Parse(this.FK_Flow) + "Rpt");
qo.addAnd();
qo.AddWhereIn(MapAttrAttr.KeyOfEn, rptFields);
qo.DoQuery();
//流程表单对应的所有字段
MapAttrs attrs = new MapAttrs();
attrs.Retrieve(MapAttrAttr.FK_MapData, fk_mapData, MapAttrAttr.Idx);
attrs.AddEntities(mattrsOfSystem);
//流程表单对应的流程数据
GEEntitys ens = new GEEntitys(fk_mapData);
GEEntity en = ens.GetNewEntity as GEEntity;
foreach (MapAttr mapAttr in mattrsOfSystem)
en.EnMap.AddAttr(mapAttr.HisAttr);
Cash.SQL_Cash.Remove(fk_mapData);
qo = new QueryObject(ens);
qo.AddWhere(GERptAttr.PWorkID, frmOID);
qo.addAnd();
qo.AddWhere(GERptAttr.PFlowNo, frmID);
qo.AddWhere(" AND WFState > 1 ");
//qo.addAnd();
qo.AddWhere(" AND FID = 0 ");
if (DataType.IsNullOrEmpty(ur.OrderBy) == false)
if (ur.OrderWay.ToUpper().Equals("DESC") == true)
qo.addOrderByDesc(ur.OrderBy);
else
qo.addOrderBy(ur.OrderBy);
ur.Update();
qo.DoQuery();
return BP.Tools.Json.ToJson(ens.ToDataTableField("FlowSearch_Data"));
}
#endregion 实体单据启动多个子流程的查询
public string RefDict_CreateBillWorkID()
{
Int64 refOID = GetRequestValInt64("RefOID");
string refDict = GetRequestVal("RefDict");
//获取关联实体表单的数据信息
GERpt refRpt = new GERpt(refDict, refOID);
string billNo = this.GetRequestVal("BillNo");
Int64 workID = BP.CCBill.Dev2Interface.CreateBlankBillID(this.FrmID, BP.Web.WebUser.No, null, billNo);
GenerBill gb = new GenerBill(workID);
gb.BillState = BillState.Draft;
gb.Update();
//获取当前单据表单的数据信息
GERpt rpt = new GERpt(this.FrmID, workID);
rpt.Copy(refRpt);
rpt.SetValByKey("BillState", (int)gb.BillState);
rpt.Update();
return workID.ToString();
}
#region 外部流程网页授权URL
public string DictFlow_Qcode()
{
string state = "FlowNo_" + this.FK_Flow + "|OrgNo_" + WebUser.OrgNo + "|FrmID_" + this.FrmID + "|FrmOID_" + this.GetRequestVal("FrmOID");
//回调url
string redirect_uri = HttpUtility.UrlEncode("http://www.citydo.com.cn/WF/CCBill/DictFlowStart.htm");
//授权链接
string oatuth2 = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + BP.Difference.SystemConfig.AppID + "&redirect_uri=" + redirect_uri + "&response_type=code&scope=snsapi_userinfo&&state=" + state + "#wechat_redirect";
return oatuth2;
}
#endregion 外部流程网页授权URL
}
}