using BP.DA;
using BP.Sys;
using BP.En;
using BP.WF;
using BP.WF.HttpHandler;
using BP.CCBill.Template;
namespace BP.CCBill
{
///
/// 实体集合的处理
///
public class WF_CCBill_Admin_Collection : DirectoryPageBase
{
#region 属性.
///
/// 模块编号
///
public string ModuleNo
{
get
{
string str = this.GetRequestVal("ModuleNo");
return str;
}
}
///
/// 菜单ID.
///
public string MenuNo
{
get
{
string str = this.GetRequestVal("MenuNo");
return str;
}
}
public string GroupID
{
get
{
string str = this.GetRequestVal("GroupID");
return str;
}
}
#endregion 属性.
///
/// 构造函数
///
public WF_CCBill_Admin_Collection()
{
}
///
/// 新建实体流程
///
///
public string FlowNewEntity_Save()
{
//当前表单的信息
MapData mapData = new MapData(this.FrmID);
#region 第1步: 创建一个流程.
//首先创建流程. 参数都通过 httrp传入了。
BP.WF.HttpHandler.WF_Admin_CCBPMDesigner_FlowDevModel handler = new WF_Admin_CCBPMDesigner_FlowDevModel();
string flowNo = handler.FlowDevModel_Save();
//执行更新. 设置为不能独立启动.
BP.WF.Flow fl = new BP.WF.Flow(flowNo);
fl.ItIsCanStart = false;
fl.TitleRole = "@WebUser.No 在@RDT 发起【@DictName】";
fl.Update();
//更新开始节点.
BP.WF.Node nd = new BP.WF.Node(int.Parse(flowNo + "01"));
nd.Name = this.Name;
if (mapData.HisFrmType == FrmType.Develop)
{
nd.FormType = NodeFormType.Develop;
MapData map = new MapData(nd.NodeFrmID);
map.HisFrmType = FrmType.Develop;
map.Update();
}
nd.Update();
#endregion 创建一个流程.
#region 第2步 把表单导入到流程上去.
//如果是发起流程的方法,就要表单的字段复制到,流程的表单上去.
BP.WF.HttpHandler.WF_Admin_FoolFormDesigner_ImpExp handlerFrm = new BP.WF.HttpHandler.WF_Admin_FoolFormDesigner_ImpExp();
// handler.AddPara
string ndFrmID = "ND" + int.Parse(flowNo + "01");
handlerFrm.Imp_CopyFrm(ndFrmID, this.FrmID);
MapAttr attr = new MapAttr(ndFrmID + "_Title");
attr.setUIVisible(false);
attr.setName("流程标题");
attr.Update();
//生成名称字段.
attr.setKeyOfEn("DictName");
attr.setName("名称");
attr.setUIVisible(true);
attr.setMyPK(attr.FrmID + "_" + attr.KeyOfEn);
attr.DirectInsert();
#endregion 把表单导入到流程上去.
//创建查询菜单.放入到与该实体平行的位置.
BP.CCFast.CCMenu.Menu menu = new BP.CCFast.CCMenu.Menu();
menu.ModuleNo = this.ModuleNo; //隶属与实体一个模块.
menu.Name = this.Name;
menu.Idx = 0;
menu.MenuModel = MethodModelClass.FlowNewEntity; //新建实体流程..
//menu.MenuModel = menuModel "FlowEtc"; //其他类型的业务流程.
menu.Mark = "Search"; //流程查询.
menu.Tag1 = flowNo; //流程编号.
menu.No = this.FrmID + "_" + flowNo;
menu.Icon = "icon-paper-plane";
menu.Insert();
//处理启动此流程后与实体的关系设计.
MethodFlowNewEntity en = new MethodFlowNewEntity(menu.No);
en.FlowNo = flowNo;
en.FrmID = this.FrmID;
en.DTSWhenFlowOver = true; // 是否在流程结束后同步?
en.DTSDataWay = 1; // 同步所有相同的字段.
en.UrlExt = "/WF/CCBill/Opt/StartFlowByNewEntity.htm?FlowNo=" + en.FlowNo + "&FrmID=" + this.FrmID + "&MenuNo=" + menu.No;
en.Update();
//增加一个集合链接.
Collection enColl = new Collection();
enColl.FrmID = this.FrmID;
enColl.MethodID = MethodModelClass.FlowNewEntity;
enColl.Mark = MethodModelClass.FlowNewEntity;
enColl.Name = this.Name;
enColl.FlowNo = flowNo;
enColl.Tag1 = flowNo;
enColl.MethodModel = MethodModelClass.FlowNewEntity; //方法模式.
// enColl.UrlExt = "../CCBill/Opt/StartFlowByNewEntity.htm?FlowNo=" + en.FlowNo + "&FrmID=" + this.FrmID + "&MenuNo=" + menu.No;
enColl.Icon = "icon-drop";
enColl.Idx = 100;
enColl.SetPara("EnName", "TS.CCBill.CollectionFlowNewEntity");
enColl.Insert();
return menu.No; //返回的方法ID;
}
///
/// 单据批量发起流程
///
///
public string Bill_Save()
{
string fromFrmID = this.GetRequestVal("DictFrmID");
string toFrmID = this.GetRequestVal("BillFrmID");
//创建从表
MapDtl mapDtl = new MapDtl();
mapDtl.FrmID =toFrmID;
mapDtl.No = toFrmID + "Dtl1";
mapDtl.NodeID = 0;
mapDtl.Name = "从表";
mapDtl.PTable = mapDtl.No;
mapDtl.H = 300;
mapDtl.Insert();
mapDtl.IntMapAttrs();
//这里仅仅复制主表的字段.
MapAttrs attrsFrom = new MapAttrs();
attrsFrom.Retrieve(MapAttrAttr.FK_MapData, fromFrmID);
foreach (MapAttr attr in attrsFrom)
{
if (attr.IsExit(MapAttrAttr.FK_MapData, mapDtl.No, MapAttrAttr.KeyOfEn, attr.KeyOfEn) == true)
continue;
if (attr.IsExit(MapAttrAttr.FK_MapData, mapDtl.No, MapAttrAttr.KeyOfEn, attr.KeyOfEn) == true)
continue;
attr.FrmID =mapDtl.No;
attr.setMyPK(attr.FrmID + "_" + attr.KeyOfEn);
attr.Insert();
}
//增加一个关联的实体字段的OID
MapAttr mapAttr = new BP.Sys.MapAttr();
mapAttr.FrmID =mapDtl.No;
mapAttr.setEditType(EditType.Readonly);
mapAttr.setKeyOfEn("DictOID");
mapAttr.setName("关联实体的OID");
mapAttr.setMyDataType(DataType.AppInt);
mapAttr.setUIContralType(UIContralType.TB);
mapAttr.setLGType(FieldTypeS.Normal);
mapAttr.setUIVisible(false);
mapAttr.setUIIsEnable(false);
mapAttr.DefVal = "0";
mapAttr.Insert();
return "复制成功.";
}
///
/// 实体批量发起流程
///
///
public string FlowEntityBatchStart_Save()
{
#region 第1步: 创建一个流程.
//首先创建流程. 参数都通过 httrp传入了。
BP.WF.HttpHandler.WF_Admin_CCBPMDesigner_FlowDevModel handler = new WF_Admin_CCBPMDesigner_FlowDevModel();
string flowNo = handler.FlowDevModel_Save();
//执行更新. 设置为不能独立启动.
BP.WF.Flow fl = new BP.WF.Flow(flowNo);
fl.ItIsCanStart = false;
fl.Update();
#endregion 创建一个流程.
#region 第2步 把表单导入到流程的从表中去.
//如果是发起流程的方法,就要表单的字段复制到,流程的表单上去.
string frmID = "ND" + int.Parse(fl.No) + "01";
MapDtl mapDtl = new MapDtl();
mapDtl.FrmID =frmID;
mapDtl.No = frmID + "Dtl1";
mapDtl.NodeID = 0;
mapDtl.Name = "从表";
mapDtl.PTable = mapDtl.No;
mapDtl.H = 300;
mapDtl.Insert();
mapDtl.IntMapAttrs();
//这里仅仅复制主表的字段.
MapAttrs attrsFrom = new MapAttrs();
attrsFrom.Retrieve(MapAttrAttr.FK_MapData, this.FrmID);
foreach (MapAttr attr in attrsFrom)
{
//是否包含,系统字段?
if (BP.WF.Glo.FlowFields.Contains("," + attr.KeyOfEn + ",") == true)
continue;
if (attr.IsExit(MapAttrAttr.FK_MapData, mapDtl.No, MapAttrAttr.KeyOfEn, attr.KeyOfEn) == true)
continue;
attr.FrmID =mapDtl.No;
attr.setMyPK(attr.FrmID + "_" + attr.KeyOfEn);
attr.Insert();
}
//增加一个关联的实体字段的OID
MapAttr mapAttr = new BP.Sys.MapAttr();
mapAttr.FrmID =mapDtl.No;
mapAttr.setEditType(EditType.Readonly);
mapAttr.setKeyOfEn("DictOID");
mapAttr.setName("关联实体的OID");
mapAttr.setMyDataType(DataType.AppInt);
mapAttr.setUIContralType(UIContralType.TB);
mapAttr.setLGType(FieldTypeS.Normal);
mapAttr.setUIVisible(false);
mapAttr.setUIIsEnable(false);
mapAttr.DefVal = "0";
mapAttr.Insert();
//更新开始节点.
BP.WF.Node nd = new BP.WF.Node(int.Parse(flowNo + "01"));
nd.Name = this.Name;
nd.Update();
#endregion 把表单导入到流程上去.
//创建方法.
BP.CCBill.Template.Method en = new BP.CCBill.Template.Method();
en.FrmID = this.FrmID;
en.No = en.FrmID + "_" + flowNo;
en.Name = this.Name;
en.GroupID = this.GroupID; //分组的编号.
en.FlowNo = flowNo;
en.Icon = "icon-paper-plane";
en.RefMethodType = RefMethodType.LinkeWinOpen; // = 1;
en.MethodModel = MethodModelClass.FlowEntityBatchStart; //类型.
en.Mark = "Search"; //发起流程.
en.Tag1 = flowNo; //标记为空.
en.SetValByKey("IsCanBatch", 1);
en.MethodID = flowNo; // 就是流程编号.
en.FlowNo = flowNo;
en.Insert();
//增加一个集合链接.
Collection enColl = new Collection();
enColl.FrmID = this.FrmID;
enColl.MethodID = MethodModelClass.FlowEntityBatchStart;
enColl.Mark = MethodModelClass.FlowEntityBatchStart;
enColl.Name = this.Name;
enColl.FlowNo = flowNo;
enColl.Tag1 = flowNo;
enColl.MethodModel = MethodModelClass.FlowEntityBatchStart; //方法模式.
enColl.Icon = "icon-drop";
enColl.Insert();
//返回方法编号。
return en.No;
}
}
}