|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using BP.WF.Template;
|
|
|
|
|
using BP.WF.Data;
|
|
|
|
|
using BP.DA;
|
|
|
|
|
using BP.En;
|
|
|
|
|
using BP.Sys;
|
|
|
|
|
using BP.WF.Template.SFlow;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace BP.WF
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 流程检查类
|
|
|
|
|
/// 1. 创建修复数据表.
|
|
|
|
|
/// 2. 检查流程设计的合法性.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class FlowCheckError
|
|
|
|
|
{
|
|
|
|
|
#region 构造方法与属性.
|
|
|
|
|
public DataTable dt = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 流程
|
|
|
|
|
/// </summary>
|
|
|
|
|
public Flow flow = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 节点s
|
|
|
|
|
/// </summary>
|
|
|
|
|
public Nodes nds = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 通用的
|
|
|
|
|
/// </summary>
|
|
|
|
|
public GERpt HisGERpt
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return this.flow.HisGERpt;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 流程检查
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="fl">流程实体</param>
|
|
|
|
|
public FlowCheckError(Flow fl)
|
|
|
|
|
{
|
|
|
|
|
this.flow = fl;
|
|
|
|
|
this.nds = new Nodes(fl.No);
|
|
|
|
|
//构造消息存储.
|
|
|
|
|
dt = new DataTable();
|
|
|
|
|
dt.Columns.Add("InfoType");
|
|
|
|
|
dt.Columns.Add("Msg");
|
|
|
|
|
dt.Columns.Add("NodeID");
|
|
|
|
|
dt.Columns.Add("NodeName");
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 流程检查
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="flNo">流程编号</param>
|
|
|
|
|
public FlowCheckError(string flNo)
|
|
|
|
|
{
|
|
|
|
|
this.flow = new Flow(flNo);
|
|
|
|
|
this.nds = new Nodes(this.flow.No);
|
|
|
|
|
|
|
|
|
|
//构造消息存储.
|
|
|
|
|
dt = new DataTable();
|
|
|
|
|
dt.Columns.Add("InfoType");
|
|
|
|
|
dt.Columns.Add("Msg");
|
|
|
|
|
dt.Columns.Add("NodeID");
|
|
|
|
|
dt.Columns.Add("NodeName");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="info"></param>
|
|
|
|
|
/// <param name="nd"></param>
|
|
|
|
|
private void AddMsgInfo(string info, Node nd = null)
|
|
|
|
|
{
|
|
|
|
|
AddMsg("信息", info, nd);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 警告
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="info"></param>
|
|
|
|
|
/// <param name="nd"></param>
|
|
|
|
|
private void AddMsgWarning(string info, Node nd = null)
|
|
|
|
|
{
|
|
|
|
|
AddMsg("警告", info, nd);
|
|
|
|
|
}
|
|
|
|
|
private void AddMsgError(string info, Node nd = null)
|
|
|
|
|
{
|
|
|
|
|
AddMsg("错误", info, nd);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 增加审核信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="type">类型</param>
|
|
|
|
|
/// <param name="info">消息</param>
|
|
|
|
|
/// <param name="nd">节点</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private void AddMsg(string type, string info, Node nd = null)
|
|
|
|
|
{
|
|
|
|
|
DataRow dr = this.dt.NewRow();
|
|
|
|
|
dr[0] = type;
|
|
|
|
|
dr[1] = info;
|
|
|
|
|
|
|
|
|
|
if (nd != null)
|
|
|
|
|
{
|
|
|
|
|
dr[2] = nd.NodeID;
|
|
|
|
|
dr[3] = nd.Name;
|
|
|
|
|
}
|
|
|
|
|
this.dt.Rows.Add(dr);
|
|
|
|
|
}
|
|
|
|
|
#endregion 构造方法与属性.
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 校验流程
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public void DoCheck()
|
|
|
|
|
{
|
|
|
|
|
Cash.ClearCash();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//设置自动计算.
|
|
|
|
|
CheckMode_Auto();
|
|
|
|
|
|
|
|
|
|
///检查独立表单的完整性.
|
|
|
|
|
CheckMode_Frms();
|
|
|
|
|
|
|
|
|
|
//通用检查.
|
|
|
|
|
CheckMode_Gener();
|
|
|
|
|
|
|
|
|
|
//检查数据合并模式.
|
|
|
|
|
CheckMode_SpecTable();
|
|
|
|
|
|
|
|
|
|
//节点表单字段数据类型检查
|
|
|
|
|
CheckModel_FormFields();
|
|
|
|
|
|
|
|
|
|
//检查越轨流程,子流程发起.
|
|
|
|
|
CheckModel_SubFlowYanXus();
|
|
|
|
|
|
|
|
|
|
//检查报表.
|
|
|
|
|
this.DoCheck_CheckRpt(this.nds);
|
|
|
|
|
|
|
|
|
|
//检查焦点字段设置是否还有效.
|
|
|
|
|
CheckMode_FocusField();
|
|
|
|
|
|
|
|
|
|
//检查质量考核点.
|
|
|
|
|
CheckMode_EvalModel();
|
|
|
|
|
|
|
|
|
|
//检查如果是合流节点必须不能是由上一个节点指定接受人员.
|
|
|
|
|
CheckMode_HeliuAccpterRole();
|
|
|
|
|
|
|
|
|
|
//创建track.
|
|
|
|
|
Track.CreateOrRepairTrackTable(this.flow.No);
|
|
|
|
|
|
|
|
|
|
//如果是引用的表单库的表单,就要检查该表单是否有FID字段,没有就自动增加.
|
|
|
|
|
CheckMode_Ref();
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgError("err@" + ex.Message + " " + ex.StackTrace);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 通用的检查.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_Gener()
|
|
|
|
|
{
|
|
|
|
|
//条件集合.
|
|
|
|
|
Conds conds = new Conds(this.flow.No);
|
|
|
|
|
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
//设置它的位置类型.
|
|
|
|
|
nd.SetValByKey(NodeAttr.NodePosType, (int)nd.GetHisNodePosType());
|
|
|
|
|
|
|
|
|
|
this.AddMsgInfo("修复&检查节点信息", nd);
|
|
|
|
|
nd.RepareMap(this.flow);
|
|
|
|
|
|
|
|
|
|
// 从表检查。
|
|
|
|
|
Sys.MapDtls dtls = new BP.Sys.MapDtls("ND" + nd.NodeID);
|
|
|
|
|
foreach (BP.Sys.MapDtl dtl in dtls)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgInfo("检查明细表" + dtl.Name, nd);
|
|
|
|
|
dtl.HisGEDtl.CheckPhysicsTable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MapAttrs mattrs = new MapAttrs("ND" + nd.NodeID);
|
|
|
|
|
|
|
|
|
|
#region 对节点的访问规则进行检查
|
|
|
|
|
|
|
|
|
|
this.AddMsgInfo("开始对节点的访问规则进行检查", nd);
|
|
|
|
|
|
|
|
|
|
switch (nd.HisDeliveryWay)
|
|
|
|
|
{
|
|
|
|
|
case DeliveryWay.ByStation:
|
|
|
|
|
case DeliveryWay.FindSpecDeptEmpsInStationlist:
|
|
|
|
|
if (nd.NodeStations.Count == 0)
|
|
|
|
|
this.AddMsgInfo("错误:您设置了该节点的访问规则是按角色,但是您没有为节点绑定角色。", nd);
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.ByDept:
|
|
|
|
|
if (nd.NodeDepts.Count == 0)
|
|
|
|
|
this.AddMsgInfo("设置了该节点的访问规则是按部门,但是您没有为节点绑定部门", nd);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.ByBindEmp:
|
|
|
|
|
if (nd.NodeEmps.Count == 0)
|
|
|
|
|
this.AddMsgInfo("您设置了该节点的访问规则是按人员,但是您没有为节点绑定人员。", nd);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.BySpecNodeEmp: /*按指定的角色计算.*/
|
|
|
|
|
case DeliveryWay.BySpecNodeEmpStation: /*按指定的角色计算.*/
|
|
|
|
|
if (nd.DeliveryParas.Trim().Length == 0)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgInfo("您设置了该节点的访问规则是按指定的角色计算,但是您没有设置节点编号。", nd);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (DataType.IsNumStr(nd.DeliveryParas) == false)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgInfo("您没有设置指定角色的节点编号,目前设置的为{" + nd.DeliveryParas + "}", nd);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.ByDeptAndStation: /*按部门与角色的交集计算.*/
|
|
|
|
|
string mysql = string.Empty;
|
|
|
|
|
//added by liuxc,2015.6.30.
|
|
|
|
|
//区别集成与BPM模式
|
|
|
|
|
|
|
|
|
|
mysql = "SELECT pdes.FK_Emp AS No"
|
|
|
|
|
+ " FROM Port_DeptEmpStation pdes"
|
|
|
|
|
+ " INNER JOIN WF_NodeDept wnd"
|
|
|
|
|
+ " ON wnd.FK_Dept = pdes.FK_Dept"
|
|
|
|
|
+ " AND wnd.FK_Node = " + nd.NodeID
|
|
|
|
|
+ " INNER JOIN WF_NodeStation wns"
|
|
|
|
|
+ " ON wns.FK_Station = pdes.FK_Station"
|
|
|
|
|
+ " AND wnd.FK_Node =" + nd.NodeID
|
|
|
|
|
+ " ORDER BY"
|
|
|
|
|
+ " pdes.FK_Emp";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DataTable mydt = DBAccess.RunSQLReturnTable(mysql);
|
|
|
|
|
if (mydt.Rows.Count == 0)
|
|
|
|
|
this.AddMsgInfo("按照角色与部门的交集计算错误,没有人员集合{" + mysql + "}", nd);
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.BySQL:
|
|
|
|
|
case DeliveryWay.BySQLAsSubThreadEmpsAndData:
|
|
|
|
|
if (nd.DeliveryParas.Trim().Length <= 5)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgInfo("您设置了该节点的访问规则是按SQL查询,但是您没有在节点属性里设置查询sql,此sql的要求是查询必须包含No,Name两个列,sql表达式里支持@+字段变量,详细参考开发手册.", nd);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string sql = nd.DeliveryParas;
|
|
|
|
|
foreach (MapAttr item in mattrs)
|
|
|
|
|
{
|
|
|
|
|
if (item.IsNum)
|
|
|
|
|
sql = sql.Replace("@" + item.KeyOfEn, "0");
|
|
|
|
|
else
|
|
|
|
|
sql = sql.Replace("@" + item.KeyOfEn, "'0'");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sql = sql.Replace("@WebUser.No", "'ss'");
|
|
|
|
|
sql = sql.Replace("@WebUser.Name", "'ss'");
|
|
|
|
|
sql = sql.Replace("@WebUser.FK_DeptName", "'ss'");
|
|
|
|
|
sql = sql.Replace("@WebUser.FK_Dept", "'ss'");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sql = sql.Replace("''''", "''"); //出现双引号的问题.
|
|
|
|
|
|
|
|
|
|
if (sql.Contains("@"))
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgError("您编写的sql变量填写不正确,实际执行中,没有被完全替换下来" + sql, nd);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DataTable testDB = null;
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
testDB = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgError("您设置了该节点的访问规则是按SQL查询,执行此语句错误." + sql + " err:" + ex.Message, nd);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (testDB.Columns.Contains("no") == false
|
|
|
|
|
|| testDB.Columns.Contains("name") == false)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgError("您设置了该节点的访问规则是按SQL查询,设置的sql不符合规则,此sql的要求是查询必须包含No,Name两个列,sql表达式里支持@+字段变量,详细参考开发手册.", nd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.ByPreviousNodeFormEmpsField:
|
|
|
|
|
case DeliveryWay.ByPreviousNodeFormStationsAI:
|
|
|
|
|
case DeliveryWay.ByPreviousNodeFormStationsOnly:
|
|
|
|
|
case DeliveryWay.ByPreviousNodeFormDepts:
|
|
|
|
|
//去rpt表中,查询是否有这个字段
|
|
|
|
|
string str = nd.NodeID.ToString().Substring(0, nd.NodeID.ToString().Length - 2);
|
|
|
|
|
MapAttrs rptAttrs = new BP.Sys.MapAttrs();
|
|
|
|
|
rptAttrs.Retrieve(MapAttrAttr.FK_MapData, "ND" + str + "Rpt", MapAttrAttr.KeyOfEn);
|
|
|
|
|
|
|
|
|
|
if (rptAttrs.Contains(BP.Sys.MapAttrAttr.KeyOfEn, nd.DeliveryParas) == false)
|
|
|
|
|
{
|
|
|
|
|
/*检查节点字段是否有FK_Emp字段*/
|
|
|
|
|
this.AddMsgError("您设置了该节点的访问规则是[06.按上一节点表单指定的字段值作为本步骤的接受人],但是您没有在节点属性的[访问规则设置内容]里设置指定的表单字段,详细参考开发手册.", nd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.BySelected: /* 由上一步发送人员选择 */
|
|
|
|
|
break;
|
|
|
|
|
case DeliveryWay.ByPreviousNodeEmp: /* 与上一个节点人员相同. */
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region 检查节点完成条件,方向条件的定义.
|
|
|
|
|
if (conds.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgInfo("开始检查(" + nd.Name + ")方向条件:", nd);
|
|
|
|
|
|
|
|
|
|
foreach (Cond cond in conds)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Node ndOfCond = new Node();
|
|
|
|
|
ndOfCond.NodeID = ndOfCond.NodeID;
|
|
|
|
|
if (ndOfCond.RetrieveFromDBSources() == 0)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
if (cond.AttrKey.Length < 2)
|
|
|
|
|
continue;
|
|
|
|
|
if (ndOfCond.HisWork.EnMap.Attrs.Contains(cond.AttrKey) == false)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgError("@错误:属性:" + cond.AttrKey + " , " + cond.AttrName + " 不存在。", nd);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
#endregion 检查节点完成条件的定义.
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 流程属性的预先计算与基础的更新
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_Auto()
|
|
|
|
|
{
|
|
|
|
|
// 设置流程名称.
|
|
|
|
|
DBAccess.RunSQL("UPDATE WF_Node SET FlowName = (SELECT Name FROM WF_Flow WHERE NO=WF_Node.FK_Flow)");
|
|
|
|
|
|
|
|
|
|
//设置单据编号只读格式.
|
|
|
|
|
DBAccess.RunSQL("UPDATE Sys_MapAttr SET UIIsEnable=0 WHERE KeyOfEn='BillNo' AND UIIsEnable=1");
|
|
|
|
|
|
|
|
|
|
//开始节点不能有会签.
|
|
|
|
|
DBAccess.RunSQL("UPDATE WF_Node SET HuiQianRole=0 WHERE NodePosType=0 AND HuiQianRole !=0");
|
|
|
|
|
|
|
|
|
|
//开始节点不能有退回.
|
|
|
|
|
DBAccess.RunSQL("UPDATE WF_Node SET ReturnRole=0 WHERE NodePosType=0 AND ReturnRole !=0");
|
|
|
|
|
|
|
|
|
|
//删除垃圾,非法数据.
|
|
|
|
|
string sqls = "DELETE FROM Sys_FrmSln WHERE FK_MapData NOT IN (SELECT No from Sys_MapData)";
|
|
|
|
|
sqls += "@ DELETE FROM WF_Direction WHERE Node=ToNode";
|
|
|
|
|
DBAccess.RunSQLs(sqls);
|
|
|
|
|
|
|
|
|
|
//更新计算数据.
|
|
|
|
|
this.flow.NumOfBill = DBAccess.RunSQLReturnValInt("SELECT count(*) FROM Sys_FrmPrintTemplate WHERE NodeID IN (SELECT NodeID FROM WF_Flow WHERE No='" + this.flow.No + "')");
|
|
|
|
|
this.flow.NumOfDtl = DBAccess.RunSQLReturnValInt("SELECT count(*) FROM Sys_MapDtl WHERE FK_MapData='ND" + int.Parse(this.flow.No) + "Rpt'");
|
|
|
|
|
this.flow.DirectUpdate();
|
|
|
|
|
|
|
|
|
|
//一直没有找到设置3列,自动回到四列的情况.
|
|
|
|
|
DBAccess.RunSQL("UPDATE Sys_MapAttr SET ColSpan=3 WHERE UIHeight<=23 AND ColSpan=4");
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查独立表单的完整性.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_Frms()
|
|
|
|
|
{
|
|
|
|
|
FrmNodes fns = new FrmNodes();
|
|
|
|
|
fns.Retrieve(FrmNodeAttr.FK_Flow, this.flow.No);
|
|
|
|
|
string frms = "";
|
|
|
|
|
string err = "";
|
|
|
|
|
foreach (FrmNode item in fns)
|
|
|
|
|
{
|
|
|
|
|
if (frms.Contains(item.FK_Frm + ","))
|
|
|
|
|
continue;
|
|
|
|
|
frms += item.FK_Frm + ",";
|
|
|
|
|
|
|
|
|
|
MapData md = new MapData();
|
|
|
|
|
md.No = item.FK_Frm;
|
|
|
|
|
if (md.RetrieveFromDBSources() == 0)
|
|
|
|
|
{
|
|
|
|
|
this.AddMsgError("节点绑定的表单ID=" + item.FK_Frm + ",但该表单已经不存在.", new Node(item.FK_Node));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 如果是引用的表单库的表单,就要检查该表单是否有FID字段,没有就自动增加.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_Ref()
|
|
|
|
|
{
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
if (nd.HisFormType == NodeFormType.RefOneFrmTree)
|
|
|
|
|
{
|
|
|
|
|
MapAttr mattr = new MapAttr();
|
|
|
|
|
mattr.setMyPK(nd.NodeFrmID + "_FID");
|
|
|
|
|
if (mattr.RetrieveFromDBSources() == 0)
|
|
|
|
|
{
|
|
|
|
|
mattr.SetValByKey(MapAttrAttr.KeyOfEn,"FID");
|
|
|
|
|
mattr.SetValByKey(MapAttrAttr.FK_MapData, nd.NodeFrmID);
|
|
|
|
|
mattr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
mattr.SetValByKey(MapAttrAttr.UIVisible, false);
|
|
|
|
|
mattr.SetValByKey(MapAttrAttr.Name, "FID(自动增加)");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mattr.Insert();
|
|
|
|
|
|
|
|
|
|
GEEntity en = new GEEntity(nd.NodeFrmID);
|
|
|
|
|
en.CheckPhysicsTable();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查是否是数据合并模式
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_SpecTable()
|
|
|
|
|
{
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
MapData md = new MapData();
|
|
|
|
|
md.No = "ND" + nd.NodeID;
|
|
|
|
|
if (md.RetrieveFromDBSources() == 1)
|
|
|
|
|
{
|
|
|
|
|
if (md.PTable != this.flow.PTable)
|
|
|
|
|
{
|
|
|
|
|
md.PTable = this.flow.PTable;
|
|
|
|
|
md.Update();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查越轨流程,子流程发起.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckModel_SubFlowYanXus()
|
|
|
|
|
{
|
|
|
|
|
string msg = "";
|
|
|
|
|
SubFlowYanXus yanxuFlows = new SubFlowYanXus();
|
|
|
|
|
yanxuFlows.Retrieve(SubFlowYanXuAttr.SubFlowNo, this.flow.No);
|
|
|
|
|
|
|
|
|
|
foreach (SubFlowYanXu flow in yanxuFlows)
|
|
|
|
|
{
|
|
|
|
|
Flow fl = new Flow(flow.SubFlowNo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查焦点字段设置是否还有效
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_FocusField()
|
|
|
|
|
{
|
|
|
|
|
string msg = "";
|
|
|
|
|
//获得gerpt字段.
|
|
|
|
|
GERpt rpt = this.flow.HisGERpt;
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
if (nd.FocusField.Trim() == "")
|
|
|
|
|
{
|
|
|
|
|
Work wk = nd.HisWork;
|
|
|
|
|
string attrKey = "";
|
|
|
|
|
foreach (Attr attr in wk.EnMap.Attrs)
|
|
|
|
|
{
|
|
|
|
|
if (attr.UIVisible == true && attr.UIIsDoc && attr.UIIsReadonly == false)
|
|
|
|
|
attrKey = attr.Desc + ":@" + attr.Key;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrKey == "")
|
|
|
|
|
{
|
|
|
|
|
msg = "@警告:节点ID:" + nd.NodeID + " 名称:" + nd.Name + "属性里没有设置焦点字段,会导致信息写入轨迹表空白,为了能够保证流程轨迹是可读的请设置焦点字段.";
|
|
|
|
|
this.AddMsgWarning(msg, nd);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
msg = "@信息:节点ID:" + nd.NodeID + " 名称:" + nd.Name + "属性里没有设置焦点字段,会导致信息写入轨迹表空白,为了能够保证流程轨迹是可读的系统自动设置了焦点字段为" + attrKey + ".";
|
|
|
|
|
this.AddMsgInfo(msg, nd);
|
|
|
|
|
|
|
|
|
|
nd.FocusField = attrKey;
|
|
|
|
|
nd.DirectUpdate();
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string strs = nd.FocusField.Clone() as string;
|
|
|
|
|
strs = Glo.DealExp(strs, rpt, "err");
|
|
|
|
|
if (strs.Contains("@") == true)
|
|
|
|
|
{
|
|
|
|
|
msg = "@警告:焦点字段(" + nd.FocusField + ")在节点(step:" + nd.Step + " 名称:" + nd.Name + ")属性里的设置已无效,表单里不存在该字段.";
|
|
|
|
|
this.AddMsgError(msg, nd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (this.flow.IsMD5)
|
|
|
|
|
{
|
|
|
|
|
if (nd.HisWork.EnMap.Attrs.Contains(WorkAttr.MD5) == false)
|
|
|
|
|
nd.RepareMap(this.flow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查质量考核点
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void CheckMode_EvalModel()
|
|
|
|
|
{
|
|
|
|
|
string msg = "";
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
if (nd.IsEval)
|
|
|
|
|
{
|
|
|
|
|
/*如果是质量考核点,检查节点表单是否具别质量考核的特别字段?*/
|
|
|
|
|
string sql = "SELECT COUNT(*) FROM Sys_MapAttr WHERE FK_MapData='ND" + nd.NodeID + "' AND KeyOfEn IN ('EvalEmpNo','EvalEmpName','EvalEmpCent')";
|
|
|
|
|
if (DBAccess.RunSQLReturnValInt(sql) != 3)
|
|
|
|
|
{
|
|
|
|
|
msg = "@信息:您设置了节点(" + nd.NodeID + "," + nd.Name + ")为质量考核节点,但是您没有在该节点表单中设置必要的节点考核字段.";
|
|
|
|
|
this.AddMsgError(msg, nd);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查如果是合流节点必须不能是由上一个节点指定接受人员.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public void CheckMode_HeliuAccpterRole()
|
|
|
|
|
{
|
|
|
|
|
string msg = "";
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
//如果是合流节点.
|
|
|
|
|
if (nd.HisNodeWorkType == NodeWorkType.WorkHL || nd.HisNodeWorkType == NodeWorkType.WorkFHL)
|
|
|
|
|
{
|
|
|
|
|
if (nd.HisDeliveryWay == DeliveryWay.BySelected)
|
|
|
|
|
{
|
|
|
|
|
msg = "@错误:节点ID:" + nd.NodeID + " 名称:" + nd.Name + "是合流或者分合流节点,但是该节点设置的接收人规则为由上一步指定,这是错误的,应该为自动计算而非每个子线程人为的选择.";
|
|
|
|
|
this.AddMsgError(msg, nd);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//子线程节点
|
|
|
|
|
if (nd.HisNodeWorkType == NodeWorkType.SubThreadWork)
|
|
|
|
|
{
|
|
|
|
|
if (nd.CondModel != DirCondModel.ByLineCond)
|
|
|
|
|
{
|
|
|
|
|
Nodes toNodes = nd.HisToNodes;
|
|
|
|
|
if (toNodes.Count == 1)
|
|
|
|
|
{
|
|
|
|
|
//msg += "@错误:节点ID:" + nd.NodeID + " 名称:" + nd.Name + " 错误当前节点为子线程,但是该节点的到达.";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 节点表单字段数据类型检查,名字相同的字段出现类型不同的处理方法:依照不同于NDxxRpt表中同名字段类型为基准
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns>检查结果</returns>
|
|
|
|
|
private string CheckModel_FormFields()
|
|
|
|
|
{
|
|
|
|
|
StringBuilder errorAppend = new StringBuilder();
|
|
|
|
|
errorAppend.Append("@信息: -------- 流程节点表单的字段类型检查: ------ ");
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Nodes nds = new Nodes(this.flow.No);
|
|
|
|
|
string fk_mapdatas = "'ND" + int.Parse(this.flow.No) + "Rpt'";
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
fk_mapdatas += ",'ND" + nd.NodeID + "'";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//筛选出类型不同的字段
|
|
|
|
|
string checkSQL = "SELECT AA.KEYOFEN, COUNT(*) AS MYNUM FROM ("
|
|
|
|
|
+ " SELECT A.KEYOFEN, MYDATATYPE, COUNT(*) AS MYNUM"
|
|
|
|
|
+ " FROM SYS_MAPATTR A WHERE FK_MAPDATA IN (" + fk_mapdatas + ") GROUP BY KEYOFEN, MYDATATYPE"
|
|
|
|
|
+ ") AA GROUP BY AA.KEYOFEN HAVING COUNT(*) > 1";
|
|
|
|
|
DataTable dt_Fields = DBAccess.RunSQLReturnTable(checkSQL);
|
|
|
|
|
foreach (DataRow row in dt_Fields.Rows)
|
|
|
|
|
{
|
|
|
|
|
string keyOfEn = row["KEYOFEN"].ToString();
|
|
|
|
|
string myNum = row["MYNUM"].ToString();
|
|
|
|
|
int iMyNum = 0;
|
|
|
|
|
int.TryParse(myNum, out iMyNum);
|
|
|
|
|
|
|
|
|
|
//存在2种以上数据类型,有手动进行调整
|
|
|
|
|
if (iMyNum > 2)
|
|
|
|
|
{
|
|
|
|
|
errorAppend.Append("@错误:字段名" + keyOfEn + "在此流程表(" + fk_mapdatas + ")中存在2种以上数据类型(如:int,float,varchar,datetime),请手动修改。");
|
|
|
|
|
return errorAppend.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//存在2种数据类型,以不同于NDxxRpt字段类型为主
|
|
|
|
|
MapAttr baseMapAttr = new MapAttr();
|
|
|
|
|
MapAttr rptMapAttr = new MapAttr("ND" + int.Parse(this.flow.No) + "Rpt", keyOfEn);
|
|
|
|
|
|
|
|
|
|
//Rpt表中不存在此字段
|
|
|
|
|
if (rptMapAttr == null || rptMapAttr.MyPK == "")
|
|
|
|
|
{
|
|
|
|
|
this.DoCheck_CheckRpt(this.nds);
|
|
|
|
|
rptMapAttr = new MapAttr("ND" + int.Parse(this.flow.No) + "Rpt", keyOfEn);
|
|
|
|
|
this.HisGERpt.CheckPhysicsTable();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Rpt表中不存在此字段,直接结束
|
|
|
|
|
if (rptMapAttr == null || rptMapAttr.MyPK == "")
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
MapAttr ndMapAttr = new MapAttr("ND" + nd.NodeID, keyOfEn);
|
|
|
|
|
if (ndMapAttr == null || ndMapAttr.MyPK == "")
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
//找出与NDxxRpt表中字段数据类型不同的表单
|
|
|
|
|
if (rptMapAttr.MyDataType != ndMapAttr.MyDataType)
|
|
|
|
|
{
|
|
|
|
|
baseMapAttr = ndMapAttr;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
errorAppend.Append("@基础表" + baseMapAttr.FK_MapData + ",字段" + keyOfEn + "数据类型为:" + baseMapAttr.MyDataTypeStr);
|
|
|
|
|
//根据基础属性类修改数据类型不同的表单
|
|
|
|
|
foreach (Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
MapAttr ndMapAttr = new MapAttr("ND" + nd.NodeID, keyOfEn);
|
|
|
|
|
//不包含此字段的进行返回,类型相同的进行返回
|
|
|
|
|
if (ndMapAttr == null || ndMapAttr.MyPK == "" || baseMapAttr.MyPK == ndMapAttr.MyPK || baseMapAttr.MyDataType == ndMapAttr.MyDataType)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
ndMapAttr.SetValByKey(MapAttrAttr.Name, baseMapAttr.Name);
|
|
|
|
|
ndMapAttr.SetValByKey(MapAttrAttr.MyDataType, baseMapAttr.MyDataType);
|
|
|
|
|
ndMapAttr.SetValByKey(MapAttrAttr.UIWidth, baseMapAttr.UIWidth);
|
|
|
|
|
ndMapAttr.SetValByKey(MapAttrAttr.UIHeight, baseMapAttr.UIHeight);
|
|
|
|
|
ndMapAttr.SetValByKey(MapAttrAttr.MinLen, baseMapAttr.MinLen);
|
|
|
|
|
ndMapAttr.SetValByKey(MapAttrAttr.MaxLen, baseMapAttr.MaxLen);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ndMapAttr.Update() > 0)
|
|
|
|
|
errorAppend.Append("@修改了" + "ND" + nd.NodeID + " 表,字段" + keyOfEn + "修改为:" + baseMapAttr.MyDataTypeStr);
|
|
|
|
|
else
|
|
|
|
|
errorAppend.Append("@错误:修改" + "ND" + nd.NodeID + " 表,字段" + keyOfEn + "修改为:" + baseMapAttr.MyDataTypeStr + "失败。");
|
|
|
|
|
}
|
|
|
|
|
//修改NDxxRpt
|
|
|
|
|
|
|
|
|
|
rptMapAttr.SetValByKey(MapAttrAttr.Name,baseMapAttr.Name);
|
|
|
|
|
rptMapAttr.SetValByKey(MapAttrAttr.MyDataType, baseMapAttr.MyDataType);
|
|
|
|
|
rptMapAttr.SetValByKey(MapAttrAttr.UIWidth , baseMapAttr.UIWidth);
|
|
|
|
|
rptMapAttr.SetValByKey(MapAttrAttr.UIHeight , baseMapAttr.UIHeight);
|
|
|
|
|
rptMapAttr.SetValByKey(MapAttrAttr.MinLen , baseMapAttr.MinLen);
|
|
|
|
|
rptMapAttr.SetValByKey(MapAttrAttr.MaxLen ,baseMapAttr.MaxLen);
|
|
|
|
|
if (rptMapAttr.Update() > 0)
|
|
|
|
|
errorAppend.Append("@修改了" + "ND" + int.Parse(this.flow.No) + "Rpt 表,字段" + keyOfEn + "修改为:" + baseMapAttr.MyDataTypeStr);
|
|
|
|
|
else
|
|
|
|
|
errorAppend.Append("@错误:修改" + "ND" + int.Parse(this.flow.No) + "Rpt 表,字段" + keyOfEn + "修改为:" + baseMapAttr.MyDataTypeStr + "失败。");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
errorAppend.Append("@错误:" + ex.Message);
|
|
|
|
|
}
|
|
|
|
|
return errorAppend.ToString();
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 检查数据报表.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="nds"></param>
|
|
|
|
|
private void DoCheck_CheckRpt(Nodes nds)
|
|
|
|
|
{
|
|
|
|
|
string fk_mapData = "ND" + int.Parse(this.flow.No) + "Rpt";
|
|
|
|
|
string flowId = int.Parse(this.flow.No).ToString();
|
|
|
|
|
|
|
|
|
|
//生成该节点的 nds 比如 "'ND101','ND102','ND103'"
|
|
|
|
|
string ndsstrs = "";
|
|
|
|
|
foreach (BP.WF.Node nd in nds)
|
|
|
|
|
{
|
|
|
|
|
ndsstrs += "'ND" + nd.NodeID + "',";
|
|
|
|
|
}
|
|
|
|
|
ndsstrs = ndsstrs.Substring(0, ndsstrs.Length - 1);
|
|
|
|
|
|
|
|
|
|
#region 插入字段。
|
|
|
|
|
string sql = "SELECT distinct KeyOfEn FROM Sys_MapAttr WHERE FK_MapData IN (" + ndsstrs + ")";
|
|
|
|
|
if (BP.Difference.SystemConfig.AppCenterDBType == DBType.MySQL)
|
|
|
|
|
{
|
|
|
|
|
sql = "SELECT A.* FROM (" + sql + ") AS A ";
|
|
|
|
|
string sql3 = "DELETE FROM Sys_MapAttr WHERE KeyOfEn NOT IN (" + sql + ") AND FK_MapData='" + fk_mapData + "' ";
|
|
|
|
|
DBAccess.RunSQL(sql3); // 删除不存在的字段.
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string sql2 = "DELETE FROM Sys_MapAttr WHERE KeyOfEn NOT IN (" + sql + ") AND FK_MapData='" + fk_mapData + "' ";
|
|
|
|
|
DBAccess.RunSQL(sql2); // 删除不存在的字段.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//所有节点表单字段的合集.
|
|
|
|
|
sql = "SELECT MyPK, KeyOfEn FROM Sys_MapAttr WHERE FK_MapData IN (" + ndsstrs + ")";
|
|
|
|
|
DataTable dt = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
|
|
|
|
|
|
//求已经存在的字段集合。
|
|
|
|
|
sql = "SELECT KeyOfEn FROM Sys_MapAttr WHERE FK_MapData='ND" + flowId + "Rpt'";
|
|
|
|
|
DataTable dtExits = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
|
string pks = "@";
|
|
|
|
|
foreach (DataRow dr in dtExits.Rows)
|
|
|
|
|
pks += dr[0] + "@";
|
|
|
|
|
|
|
|
|
|
//遍历 - 所有节点表单字段的合集
|
|
|
|
|
foreach (DataRow dr in dt.Rows)
|
|
|
|
|
{
|
|
|
|
|
if (pks.Contains("@" + dr["KeyOfEn"].ToString() + "@") == true)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
string mypk = dr["MyPK"].ToString();
|
|
|
|
|
|
|
|
|
|
pks += dr["KeyOfEn"].ToString() + "@";
|
|
|
|
|
|
|
|
|
|
//找到这个属性.
|
|
|
|
|
BP.Sys.MapAttr ma = new BP.Sys.MapAttr(mypk);
|
|
|
|
|
|
|
|
|
|
ma.setMyPK("ND" + flowId + "Rpt_" + ma.KeyOfEn);
|
|
|
|
|
ma.setFK_MapData("ND" + flowId + "Rpt");
|
|
|
|
|
ma.setUIIsEnable(false);
|
|
|
|
|
|
|
|
|
|
if (ma.DefValReal.Contains("@"))
|
|
|
|
|
{
|
|
|
|
|
/*如果是一个有变量的参数.*/
|
|
|
|
|
ma.DefVal = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 如果不存在.
|
|
|
|
|
if (ma.IsExits == false)
|
|
|
|
|
ma.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MapAttrs attrs = new MapAttrs(fk_mapData);
|
|
|
|
|
|
|
|
|
|
// 创建mapData.
|
|
|
|
|
BP.Sys.MapData md = new BP.Sys.MapData();
|
|
|
|
|
md.No = "ND" + flowId + "Rpt";
|
|
|
|
|
if (md.RetrieveFromDBSources() == 0)
|
|
|
|
|
{
|
|
|
|
|
md.Name = this.flow.Name;
|
|
|
|
|
md.PTable = this.flow.PTable;
|
|
|
|
|
md.Insert();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
md.Name = this.flow.Name;
|
|
|
|
|
md.PTable = this.flow.PTable;
|
|
|
|
|
md.Update();
|
|
|
|
|
}
|
|
|
|
|
#endregion 插入字段。
|
|
|
|
|
|
|
|
|
|
#region 补充上流程字段到NDxxxRpt.
|
|
|
|
|
int groupID = 0;
|
|
|
|
|
foreach (MapAttr attr in attrs)
|
|
|
|
|
{
|
|
|
|
|
switch (attr.KeyOfEn)
|
|
|
|
|
{
|
|
|
|
|
case GERptAttr.FK_Dept:
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIContralType,(int)UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.GroupID, groupID);
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.DefVal, "");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 100);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
attr.Update();
|
|
|
|
|
break;
|
|
|
|
|
case "FK_NY":
|
|
|
|
|
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.GroupID, groupID);
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.DefVal, "");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 100);
|
|
|
|
|
|
|
|
|
|
//// attr.UIBindKey = "BP.Pub.NYs";
|
|
|
|
|
//attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
//attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
//attr.setUIVisible(true);
|
|
|
|
|
//attr.setUIIsEnable(false);
|
|
|
|
|
//attr.GroupID = groupID;
|
|
|
|
|
attr.Update();
|
|
|
|
|
break;
|
|
|
|
|
case "FK_Emp":
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.Title) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 标题 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.Title);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "Title");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 300);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.OID) == false)
|
|
|
|
|
{
|
|
|
|
|
/* WorkID */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.OID);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "WorkID");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 1);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FID) == false)
|
|
|
|
|
{
|
|
|
|
|
/* FID */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FID);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "FID");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 1);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.WFState) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 流程状态 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.WFState);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "流程状态");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.DDL);
|
|
|
|
|
attr.setLGType(FieldTypeS.Enum);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 1);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
//attr.setFK_MapData(md.No);
|
|
|
|
|
//attr.HisEditType = EditType.UnDel;
|
|
|
|
|
//attr.setKeyOfEn(GERptAttr.WFState;
|
|
|
|
|
//attr.setName("流程状态"; //
|
|
|
|
|
//attr.setMyDataType(DataType.AppInt);
|
|
|
|
|
//attr.UIBindKey = GERptAttr.WFState;
|
|
|
|
|
//attr.setUIContralType(UIContralType.DDL);
|
|
|
|
|
//attr.setLGType(FieldTypeS.Enum);
|
|
|
|
|
//attr.setUIVisible(true);
|
|
|
|
|
//attr.setUIIsEnable(false);
|
|
|
|
|
//attr.setMinLen(0);
|
|
|
|
|
//attr.setMaxLen(1000;
|
|
|
|
|
//attr.Idx = -1;
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.WFSta) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 流程状态Ext */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.WFSta);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "状态");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.DDL);
|
|
|
|
|
attr.setLGType(FieldTypeS.Enum);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 1);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowEmps) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 参与人 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowEmps);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "参与人");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 1000);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowStarter) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 发起人 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowStarter);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "发起人");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 20);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowStartRDT) == false)
|
|
|
|
|
{
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowStartRDT);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "发起时间");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppDateTime);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 20);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowEnder) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 发起人 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowEnder);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "结束人");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 20);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
//attr.setFK_MapData(md.No);
|
|
|
|
|
//attr.HisEditType = EditType.UnDel;
|
|
|
|
|
//attr.setKeyOfEn(GERptAttr.FlowEnder;
|
|
|
|
|
//attr.setName("结束人"; //
|
|
|
|
|
//attr.setMyDataType(DataType.AppString);
|
|
|
|
|
//// attr.UIBindKey = "BP.Port.Emps";
|
|
|
|
|
//attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
//attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
//attr.setUIVisible(true);
|
|
|
|
|
//attr.setUIIsEnable(false);
|
|
|
|
|
//attr.setMinLen(0);
|
|
|
|
|
//attr.setMaxLen(32);
|
|
|
|
|
//attr.Idx = -1;
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowEnderRDT) == false)
|
|
|
|
|
{
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowEnderRDT);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "结束时间");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppDateTime);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 20);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowEndNode) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 结束节点 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowEndNode);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "结束节点");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 10);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.FlowDaySpan) == false)
|
|
|
|
|
{
|
|
|
|
|
/* FlowDaySpan */
|
|
|
|
|
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.FlowDaySpan);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "流程时长(天)");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 10);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.PFlowNo) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 父流程 流程编号 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.PFlowNo);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "父流程编号");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 30);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.PNodeID) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 父流程WorkID */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.PNodeID);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "父流程启动的节点");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 50);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.PWorkID) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 父流程WorkID */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.PWorkID);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "父流程WorkID");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppInt);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 50);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.PEmp) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 调起子流程的人员 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.PEmp);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "调起子流程的人员");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 50);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.BillNo) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 父流程 流程编号 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.BillNo);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "单据编号");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 500);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.AtPara) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 父流程 流程编号 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.AtPara);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "参数");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 500);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.GUID) == false)
|
|
|
|
|
{
|
|
|
|
|
/* GUID */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.GUID);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "GUID");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 40);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
attr.Insert();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.PrjNo) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 项目编号 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.PrjNo);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "项目编号");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 100);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
attr.Insert();
|
|
|
|
|
}
|
|
|
|
|
if (attrs.Contains(md.No + "_" + GERptAttr.PrjName) == false)
|
|
|
|
|
{
|
|
|
|
|
/* 项目名称 */
|
|
|
|
|
MapAttr attr = new BP.Sys.MapAttr();
|
|
|
|
|
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.FK_MapData, md.No);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.EditType, (int)EditType.UnDel);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.KeyOfEn, GERptAttr.PrjName);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Name, "项目名称");
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MyDataType, DataType.AppString);
|
|
|
|
|
attr.setUIContralType(UIContralType.TB);
|
|
|
|
|
attr.setLGType(FieldTypeS.Normal);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIVisible, true);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsEnable, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.UIIsLine, false);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MinLen, 0);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.MaxLen, 100);
|
|
|
|
|
attr.SetValByKey(MapAttrAttr.Idx, -100);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
#endregion 补充上流程字段。
|
|
|
|
|
|
|
|
|
|
#region 为流程字段设置分组。
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
string flowInfo = "流程信息";
|
|
|
|
|
GroupField flowGF = new GroupField();
|
|
|
|
|
int num = flowGF.Retrieve(GroupFieldAttr.FrmID, fk_mapData, GroupFieldAttr.Lab, "流程信息");
|
|
|
|
|
if (num == 0)
|
|
|
|
|
{
|
|
|
|
|
flowGF = new GroupField();
|
|
|
|
|
flowGF.Lab = flowInfo;
|
|
|
|
|
flowGF.FrmID = fk_mapData;
|
|
|
|
|
flowGF.Idx = -1;
|
|
|
|
|
flowGF.Insert();
|
|
|
|
|
}
|
|
|
|
|
sql = "UPDATE Sys_MapAttr SET GroupID='" + flowGF.OID + "' WHERE FK_MapData='" + fk_mapData + "' AND KeyOfEn IN('" + GERptAttr.PFlowNo + "','" + GERptAttr.PWorkID + "','" + GERptAttr.FK_Dept + "','" + GERptAttr.FK_NY + "','" + GERptAttr.FlowDaySpan + "','" + GERptAttr.FlowEmps + "','" + GERptAttr.FlowEnder + "','" + GERptAttr.FlowEnderRDT + "','" + GERptAttr.FlowEndNode + "','" + GERptAttr.FlowStarter + "','" + GERptAttr.FlowStartRDT + "','" + GERptAttr.WFState + "')";
|
|
|
|
|
DBAccess.RunSQL(sql);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
BP.DA.Log.DebugWriteError(ex.Message);
|
|
|
|
|
}
|
|
|
|
|
#endregion 为流程字段设置分组
|
|
|
|
|
|
|
|
|
|
#region 尾后处理.
|
|
|
|
|
GERpt gerpt = this.HisGERpt;
|
|
|
|
|
gerpt.CheckPhysicsTable(); //让报表重新生成.
|
|
|
|
|
|
|
|
|
|
if (DBAccess.AppCenterDBType == DBType.PostgreSQL || BP.Difference.SystemConfig.AppCenterDBType == DBType.HGDB || DBAccess.AppCenterDBType == DBType.UX)
|
|
|
|
|
DBAccess.RunSQL("DELETE FROM Sys_GroupField WHERE FrmID='" + fk_mapData + "' AND ''||OID NOT IN (SELECT GroupID FROM Sys_MapAttr WHERE FK_MapData = '" + fk_mapData + "')");
|
|
|
|
|
else
|
|
|
|
|
DBAccess.RunSQL("DELETE FROM Sys_GroupField WHERE FrmID='" + fk_mapData + "' AND OID NOT IN (SELECT GroupID FROM Sys_MapAttr WHERE FK_MapData = '" + fk_mapData + "')");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DBAccess.RunSQL("UPDATE Sys_MapAttr SET Name='活动时间' WHERE FK_MapData='ND" + flowId + "Rpt' AND KeyOfEn='CDT'");
|
|
|
|
|
DBAccess.RunSQL("UPDATE Sys_MapAttr SET Name='参与者' WHERE FK_MapData='ND" + flowId + "Rpt' AND KeyOfEn='Emps'");
|
|
|
|
|
#endregion 尾后处理.
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|