You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2117 lines
84 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Data;
using System.Collections;
using BP.DA;
using BP.Port;
using BP.En;
using BP.Web;
using BP.Sys;
using BP.WF.Data;
namespace BP.Cloud.Template
{
/// <summary>
/// 流程
/// </summary>
public class FlowExt : EntityNoName
{
#region 属性.
/// <summary>
/// 存储表
/// </summary>
public string PTable
{
get
{
return this.GetValStringByKey(FlowAttr.PTable);
}
set
{
this.SetValByKey(FlowAttr.PTable, value);
}
}
/// <summary>
/// 流程类别
/// </summary>
public string FK_FlowSort
{
get
{
return this.GetValStringByKey(FlowAttr.FK_FlowSort);
}
set
{
this.SetValByKey(FlowAttr.FK_FlowSort, value);
}
}
/// <summary>
/// 系统类别第2级流程树节点编号
/// </summary>
public string SysType
{
get
{
return this.GetValStringByKey(FlowAttr.SysType);
}
set
{
this.SetValByKey(FlowAttr.SysType, value);
}
}
/// <summary>
/// 是否可以独立启动
/// </summary>
public bool IsCanStart
{
get
{
return this.GetValBooleanByKey(FlowAttr.IsCanStart);
}
set
{
this.SetValByKey(FlowAttr.IsCanStart, value);
}
}
/// <summary>
/// 流程事件实体
/// </summary>
public string FlowEventEntity
{
get
{
return this.GetValStringByKey(FlowAttr.FlowEventEntity);
}
set
{
this.SetValByKey(FlowAttr.FlowEventEntity, value);
}
}
/// <summary>
/// 流程标记
/// </summary>
public string FlowMark
{
get
{
string str = this.GetValStringByKey(FlowAttr.FlowMark);
if (DataType.IsNullOrEmpty(str) == true)
return this.No;
return str;
}
set
{
this.SetValByKey(FlowAttr.FlowMark, value);
}
}
#region 前置导航
/// <summary>
/// 前置导航参数1
/// </summary>
public string StartGuidePara1
{
get
{
return this.GetValStringByKey(FlowAttr.StartGuidePara1);
}
set
{
this.SetValByKey(FlowAttr.StartGuidePara1, value);
}
}
/// <summary>
/// 前置导航参数2
/// </summary>
public string StartGuidePara2
{
get
{
return this.GetValStringByKey(FlowAttr.StartGuidePara2);
}
set
{
this.SetValByKey(FlowAttr.StartGuidePara2, value);
}
}
/// <summary>
/// 前置导航参数3
/// </summary>
public string StartGuidePara3
{
get
{
return this.GetValStringByKey(FlowAttr.StartGuidePara3);
}
set
{
this.SetValByKey(FlowAttr.StartGuidePara3, value);
}
}
/// <summary>
/// 运行内容
/// </summary>
public string RunObj
{
get
{
return this.GetValStringByKey(FlowAttr.RunObj);
}
set
{
this.SetValByKey(FlowAttr.RunObj, value);
}
}
/// <summary>
/// 是否启用开始节点数据重置按钮
/// </summary>
public bool IsResetData
{
get
{
return this.GetValBooleanByKey(FlowAttr.IsResetData);
}
set
{
this.SetValByKey(FlowAttr.IsResetData, value);
}
}
/// <summary>
/// 是否自动装载上一笔数据
/// </summary>
public bool IsLoadPriData
{
get
{
return this.GetValBooleanByKey(FlowAttr.IsLoadPriData);
}
set
{
this.SetValByKey(FlowAttr.IsLoadPriData, value);
}
}
/// <summary>
/// 是否可以在手机里启用
/// </summary>
public bool IsStartInMobile
{
get
{
return this.GetValBooleanByKey(FlowAttr.IsStartInMobile);
}
set
{
this.SetValByKey(FlowAttr.IsStartInMobile, value);
}
}
#endregion
/// <summary>
/// 设计者编号
/// </summary>
public string DesignerNo
{
get
{
return this.GetValStringByKey(FlowAttr.DesignerNo);
}
set
{
this.SetValByKey(FlowAttr.DesignerNo, value);
}
}
/// <summary>
/// 设计者名称
/// </summary>
public string DesignerName
{
get
{
return this.GetValStringByKey(FlowAttr.DesignerName);
}
set
{
this.SetValByKey(FlowAttr.DesignerName, value);
}
}
/// <summary>
/// 设计时间
/// </summary>
public string DesignTime
{
get
{
return this.GetValStringByKey(FlowAttr.DesignTime);
}
set
{
this.SetValByKey(FlowAttr.DesignTime, value);
}
}
/// <summary>
/// 编号生成格式
/// </summary>
public string BillNoFormat
{
get
{
return this.GetValStringByKey(FlowAttr.BillNoFormat);
}
set
{
this.SetValByKey(FlowAttr.BillNoFormat, value);
}
}
/// <summary>
/// 测试人员
/// </summary>
public string Tester
{
get
{
return this.GetValStringByKey(FlowAttr.Tester);
}
set
{
this.SetValByKey(FlowAttr.Tester, value);
}
}
#endregion 属性.
#region 构造方法
/// <summary>
/// UI界面上的访问控制
/// </summary>
public override UAC HisUAC
{
get
{
UAC uac = new UAC();
if (WebUser.IsAdmin == false)
throw new Exception("err@管理员登录用户信息丢失,当前会话[" + WebUser.No + "," + WebUser.Name + "]");
uac.IsUpdate = true;
//uac.OpenForAdmin(); //zsy修改 2020.5.15
//if (BP.Web.WebUser.No.Equals("admin")==true || this.DesignerNo == WebUser.No)
uac.IsDelete = false;
uac.IsInsert = false;
return uac;
}
}
/// <summary>
/// 流程
/// </summary>
public FlowExt()
{
}
/// <summary>
/// 流程
/// </summary>
/// <param name="_No">编号</param>
public FlowExt(string _No)
{
this.No = _No;
if (SystemConfig.IsDebug)
{
int i = this.RetrieveFromDBSources();
if (i == 0)
throw new Exception("流程编号不存在");
}
else
{
this.Retrieve();
}
}
/// <summary>
/// 重写基类方法
/// </summary>
public override Map EnMap
{
get
{
if (this._enMap != null)
return this._enMap;
Map map = new Map("WF_Flow", "流程");
#region 基本属性。
map.AddTBStringPK(FlowAttr.No, null, "编号", true, true, 1, 4, 3);
map.SetHelperUrl(FlowAttr.No, "http://ccbpm.mydoc.io/?v=5404&t=17023"); //使用alert的方式显示帮助信息.
// map.AddDDLEntities(FlowAttr.FK_FlowSort, null, "类别", new FlowSorts(), true);
//处理流程类别.
string sql = "";
if (SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
{
map.AddDDLEntities(FlowAttr.FK_FlowSort, null, "类别", new FlowSorts(), true);
// map.AddDDLEntities(FlowAttr.FK_FlowSort, "01", "流程类别", new FlowSorts(), true);
}
else
{
sql = "SELECT No,Name FROM WF_FlowSort WHERE OrgNo='@WebUser.OrgNo' ORDER BY NO, IDX";
map.AddDDLSQL(FlowAttr.FK_FlowSort, null, "类别", sql, true);
}
//map.AddDDLEntities(FlowAttr.FK_FlowSort, "01", "流程类别", new FlowSorts(), false);
//map.SetHelperUrl(FlowAttr.FK_FlowSort, "http://ccbpm.mydoc.io/?v=5404&t=17024");
map.AddTBString(FlowAttr.Name, null, "名称", true, false, 0, 50, 10, true);
// add 2013-02-14 唯一确定此流程的标记
map.AddTBString(FlowAttr.FlowMark, null, "流程标记", true, false, 0, 150, 10);
map.AddTBString(FlowAttr.FlowEventEntity, null, "流程事件实体", true, true, 0, 150, 10);
map.SetHelperUrl(FlowAttr.FlowMark, "http://ccbpm.mydoc.io/?v=5404&t=16847");
map.SetHelperUrl(FlowAttr.FlowEventEntity, "http://ccbpm.mydoc.io/?v=5404&t=17026");
// add 2013-02-05.
map.AddTBString(FlowAttr.TitleRole, null, "标题生成规则", true, false, 0, 150, 10, true);
map.SetHelperUrl(FlowAttr.TitleRole, "http://ccbpm.mydoc.io/?v=5404&t=17040");
map.AddTBString(FlowAttr.TitleRoleNodes, null, "生成标题的节点", true, false, 0, 300, 10, true);
string msg = "设置帮助";
msg += "\r\n 1. 如果为空表示只在开始节点生成标题.";
msg += "\r\n 2. * 表示在任意节点可生成标题.";
msg += "\r\n 3. 要在指定的节点重新生成标题用逗号分开,比如: 102,105,109";
map.SetHelperAlert(FlowAttr.TitleRoleNodes, msg);
map.AddBoolean(FlowAttr.IsCanStart, true, "可以独立启动否?(独立启动的流程可以显示在发起流程列表里)", true, true, true);
map.SetHelperUrl(FlowAttr.IsCanStart, "http://ccbpm.mydoc.io/?v=5404&t=17027");
map.AddBoolean(FlowAttr.IsFullSA, false, "是否自动计算未来的处理人?", true, true, true);
map.SetHelperUrl(FlowAttr.IsFullSA, "http://ccbpm.mydoc.io/?v=5404&t=17034");
//map.AddDDLSysEnum(FlowAttr.IsAutoSendSubFlowOver, 0, "为子流程时结束规则", true, true,
// FlowAttr.IsAutoSendSubFlowOver, "@0=不处理@1=让父流程自动运行下一步@2=结束父流程");
map.AddBoolean(FlowAttr.IsGuestFlow, false, "是否外部用户参与流程(非组织结构人员参与的流程)", true, true, false);
map.SetHelperUrl(FlowAttr.IsGuestFlow, "http://ccbpm.mydoc.io/?v=5404&t=17039");
map.AddDDLSysEnum(FlowAttr.FlowAppType, (int)FlowAppType.Normal, "流程应用类型",
true, true, "FlowAppType", "@0=业务流程@1=工程类(项目组流程)@2=公文流程(VSTO)");
map.SetHelperUrl(FlowAttr.FlowAppType, "http://ccbpm.mydoc.io/?v=5404&t=17035");
//map.AddDDLSysEnum(FlowAttr.SDTOfFlow, (int)TimelineRole.ByNodeSet, "时效性规则",
// true, true, FlowAttr.SDTOfFlow, "@0=按节点(由节点属性来定义)@1=按发起人(开始节点SysSDTOfFlow字段计算)");
//map.SetHelperUrl(FlowAttr.TimelineRole, "http://ccbpm.mydoc.io/?v=5404&t=17036");
// 草稿
map.AddDDLSysEnum(FlowAttr.Draft, 0, "草稿规则",
true, true, FlowAttr.Draft, "@0=无(不设草稿)@1=保存到待办@2=保存到草稿箱");
map.SetHelperUrl(FlowAttr.Draft, "http://ccbpm.mydoc.io/?v=5404&t=17037");
// add for 华夏银行.
map.AddDDLSysEnum(FlowAttr.FlowDeleteRole, 0, "流程实例删除规则",
true, true, FlowAttr.FlowDeleteRole,
"@0=超级管理员可以删除@1=分级管理员可以删除@2=发起人可以删除@3=节点启动删除按钮的操作员");
//子流程结束时,让父流程自动运行到下一步
map.AddBoolean(FlowAttr.IsToParentNextNode, false, "子流程结束时,让父流程自动运行到下一步", true, true);
map.AddDDLSysEnum(FlowAttr.FlowAppType, 0, "流程应用类型", true, true, "FlowAppType", "@0=业务流程@1=工程类(项目组流程)@2=公文流程(VSTO)");
map.AddTBString(FlowAttr.HelpUrl, null, "帮助文档", true, false, 0, 100, 10, true);
//为 莲荷科技增加一个系统类型, 用于存储当前所在流程树的第2级流程树编号.
map.AddTBString(FlowAttr.SysType, null, "系统类型", false, false, 0, 50, 10, false);
map.AddTBString(FlowAttr.Tester, null, "发起测试人", true, false, 0, 100, 10, true);
sql = "SELECT No,Name FROM Sys_EnumMain WHERE No LIKE 'Flow_%' ";
map.AddDDLSQL("NodeAppType", null, "业务类型枚举(可为Null)", sql, true);
// add 2014-10-19.
map.AddDDLSysEnum(FlowAttr.ChartType, 0, "节点图形类型", true, true,
"ChartType", "@0=几何图形@1=肖像图片");
map.AddTBString(FlowAttr.HostRun, null, "运行主机(IP+端口)", true, false, 0, 40, 10, true);
#endregion 基本属性。
#region 表单数据.
//批量发起 add 2013-12-27.
map.AddBoolean(FlowAttr.IsBatchStart, false, "是否可以批量发起流程?(如果是就要设置发起的需要填写的字段,多个用逗号分开)", true, true, true);
map.AddTBString(FlowAttr.BatchStartFields, null, "发起字段s", true, false, 0, 100, 10, true);
map.SetHelperUrl(FlowAttr.IsBatchStart, "http://ccbpm.mydoc.io/?v=5404&t=17047");
//add 2013-05-22.
map.AddTBString(FlowAttr.HistoryFields, null, "历史查看字段", true, false, 0, 100, 10, true);
//移动到这里 by zhoupeng 2016.04.08.
map.AddBoolean(FlowAttr.IsResetData, false, "是否启用开始节点数据重置按钮?已经取消)", false, true, true);
map.AddBoolean(FlowAttr.IsLoadPriData, false, "是否自动装载上一笔数据?", true, true, true);
map.AddBoolean(FlowAttr.IsDBTemplate, true, "是否启用数据模版?", true, true, true);
map.AddBoolean(FlowAttr.IsStartInMobile, true, "是否可以在手机里启用?(如果发起表单特别复杂就不要在手机里启用了)", true, true, true);
map.SetHelperAlert(FlowAttr.IsStartInMobile, "用于控制手机端流程发起列表.");
map.AddBoolean(FlowAttr.IsMD5, false, "是否是数据加密流程(MD5数据加密防篡改)", true, true, true);
map.SetHelperUrl(FlowAttr.IsMD5, "http://ccbpm.mydoc.io/?v=5404&t=17028");
// 数据存储.
map.AddDDLSysEnum(FlowAttr.DataStoreModel, (int)DataStoreModel.ByCCFlow, "数据存储", true, true, FlowAttr.DataStoreModel, "@0=数据轨迹模式@1=数据合并模式");
map.SetHelperUrl(FlowAttr.DataStoreModel, "http://ccbpm.mydoc.io/?v=5404&t=17038");
map.AddTBString(FlowAttr.PTable, null, "流程数据存储表", true, false, 0, 30, 10);
map.SetHelperUrl(FlowAttr.PTable, "http://ccbpm.mydoc.io/?v=5404&t=17897");
//map.SetHelperBaidu(FlowAttr.HistoryFields, "ccflow 历史查看字段");
map.AddTBString(FlowAttr.FlowNoteExp, null, "备注的表达式", true, false, 0, 100, 10, true);
map.SetHelperUrl(FlowAttr.FlowNoteExp, "http://ccbpm.mydoc.io/?v=5404&t=17043");
//add 2013-08-30.
map.AddTBString(FlowAttr.BillNoFormat, null, "单据编号格式", true, false, 0, 50, 10, false);
map.SetHelperUrl(FlowAttr.BillNoFormat, "http://ccbpm.mydoc.io/?v=5404&t=17041");
// add 2019-09-25 by zhoupeng
map.AddTBString(FlowAttr.BuessFields, null, "关键业务字段", true, false, 0, 100, 10, false);
msg = "用于显示在待办上的业务字段信息.";
msg += "\t\n 1. 用户在看到待办的时候,就可以看到流程的实例的关键信息。";
msg += "\t\n 2. 用于待办的列表信息显示.";
msg += "\t\n 3. 配置格式为. Tel,Addr,Email 这些字段区分大小写并且是节点表单字段.";
msg += "\t\n 4. 数据存储在WF_GenerWorkFlow.AtPara里面.";
msg += "\t\n 5. 存储格式为: @BuessFields = 电话^Tel^18992323232;地址^Addr^山东济南;";
map.SetHelperAlert(FlowAttr.BuessFields, msg);
//表单URL. //@liuqiang 把他翻译到java里面去.
map.AddDDLSysEnum(FlowAttr.FlowFrmType, 0, "流程全局表单类型", true, false, FlowAttr.FlowFrmType,
"@0=完整版-2019年更早版本@1=开发者表单@2=傻瓜表单@3=自定义(嵌入)表单@4=SDK表单");
map.AddTBString(FlowAttr.FrmUrl, null, "表单Url", true, false, 0, 150, 10, true);
map.SetHelperAlert(FlowAttr.FrmUrl, "对嵌入式表单,SDK表单的url的表单,嵌入式表单有效,用与整体流程的设置.");
#endregion 表单数据.
#region 数据同步方案
//数据同步方式.
/**map.AddDDLSysEnum(FlowAttr.FlowDTSWay, (int)FlowDTSWay.None, "同步方式", true, true,
FlowAttr.FlowDTSWay, "@0=不同步@1=同步",true);
map.SetHelperUrl(FlowAttr.FlowDTSWay, "http://ccbpm.mydoc.io/?v=5404&t=17893");
map.AddDDLEntities(FlowAttr.DTSDBSrc, "", "数据库", new BP.Sys.SFDBSrcs(), true);
map.AddTBString(FlowAttr.DTSBTable, null, "业务表名", true, false, 0, 50, 50, false);
map.AddTBString(FlowAttr.DTSBTablePK, null, "业务表主键", true, false, 0, 50, 50, false);
map.SetHelperAlert(FlowAttr.DTSBTablePK, "如果同步方式设置了按照业务表主键字段计算,那么需要在流程的节点表单里设置一个同名同类型的字段,系统将会按照这个主键进行数据同步。");
map.AddTBString(FlowAttr.DTSFields, null, "要同步的字段s,中间用逗号分开.", false, false, 0, 200, 100, false);
map.AddDDLSysEnum(FlowAttr.DTSTime, (int)FlowDTSTime.AllNodeSend, "执行同步时间点", true, true,
FlowAttr.DTSTime, "@0=所有的节点发送后@1=指定的节点发送后@2=当流程结束时");
map.SetHelperUrl(FlowAttr.DTSTime, "http://ccbpm.mydoc.io/?v=5404&t=17894");
map.AddTBString(FlowAttr.DTSSpecNodes, null, "指定的节点ID", true, false, 0, 50, 50, false);
map.SetHelperAlert(FlowAttr.DTSSpecNodes, "如果执行同步时间点选择了按指定的节点发送后,多个节点用逗号分开.比如: 101,102,103");
map.AddDDLSysEnum(FlowAttr.DTSField, (int)DTSField.SameNames, "要同步的字段计算方式", true, true,
FlowAttr.DTSField, "@0=字段名相同@1=按设置的字段匹配");
map.SetHelperUrl(FlowAttr.DTSField, "http://ccbpm.mydoc.io/?v=5404&t=17895");
*/
#endregion 数据同步方案
#region 轨迹信息
map.AddBoolean(FlowAttr.IsFrmEnable, true, "是否显示表单", true, true, false);
map.AddBoolean(FlowAttr.IsTruckEnable, true, "是否显示轨迹图", true, true, false);
map.AddBoolean(FlowAttr.IsTimeBaseEnable, true, "是否显示时间轴", true, true, false);
map.AddBoolean(FlowAttr.IsTableEnable, true, "是否显示时间表", true, true, false);
map.AddBoolean(FlowAttr.IsOPEnable, true, "是否显示操作", true, true, false);
#endregion 轨迹信息
#region 开发者信息.
map.AddTBString(FlowAttr.DesignerNo, null, "设计者编号", true, true, 0, 50, 10, false);
map.AddTBString(FlowAttr.DesignerName, null, "设计者名称", true, true, 0, 50, 10, false);
map.AddTBDateTime(FlowAttr.DesignTime, null, "创建时间", true, true);
// map.AddTBStringDoc(FlowAttr.Note, null, "流程描述", true, false, true);
#endregion 开发者信息.
#region 基本功能.
//map.AddRefMethod(rm);
RefMethod rm = new RefMethod();
rm = new RefMethod();
rm.Title = "自动发起";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/AutoStart.png";
rm.ClassMethodName = this.ToString() + ".DoSetStartFlowDataSources()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "发起限制规则";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Limit.png";
rm.ClassMethodName = this.ToString() + ".DoLimit()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "发起前置导航";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/StartGuide.png";
rm.ClassMethodName = this.ToString() + ".DoStartGuide()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "发起前置导航(实验中)";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/StartGuide.png";
rm.ClassMethodName = this.ToString() + ".DoStartGuideV2019()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "流程事件"; // "调用事件接口";
rm.ClassMethodName = this.ToString() + ".DoAction";
rm.Icon = "../../WF/Img/Event.png";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "流程消息"; // "调用事件接口";
rm.ClassMethodName = this.ToString() + ".DoMessage";
rm.Icon = "../../WF/Img/Message24.png";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "流程计划时间计算规则"; // "调用事件接口";
rm.ClassMethodName = this.ToString() + ".DoSDTOfFlow";
//rm.Icon = "../../WF/Img/Event.png";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "修改ICON"; // "调用事件接口";
rm.ClassMethodName = this.ToString() + ".DoNodesICON";
// rm.Icon = "../../WF/Img/Event.png";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "版本管理";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Node.png";
rm.ClassMethodName = this.ToString() + ".DoVer()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
// rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "权限控制";
// rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Node.png";
rm.ClassMethodName = this.ToString() + ".DoPowerModel()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
// rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "独立表单树";
//rm.Icon = "../../WF/Img/Btn/DTS.gif";
//rm.ClassMethodName = this.ToString() + ".DoFlowFormTree()";
//map.AddRefMethod(rm);
#endregion 流程设置.
#region 时限规则
rm = new RefMethod();
rm.GroupName = "时限规则";
rm.Title = "时限规则";
rm.Icon = "../../WF/Admin/CCFormDesigner/Img/CH.png";
rm.ClassMethodName = this.ToString() + ".DoDeadLineRole()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
// rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.GroupName = "时限规则";
rm.Title = "预警、超期消息事件";
rm.Icon = "../../WF/Admin/CCFormDesigner/Img/OvertimeRole.png";
rm.ClassMethodName = this.ToString() + ".DoOverDeadLineRole()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
// rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
#endregion 时限规则
#region 模拟测试.
//rm = new RefMethod();
//rm.GroupName = "模拟测试";
//rm.Title = "调试运行"; // "设计检查报告";
////rm.ToolTip = "检查流程设计的问题。";
//rm.Icon = "../../WF/Img/EntityFunc/Flow/Run.png";
//rm.ClassMethodName = this.ToString() + ".DoRunIt";
//rm.RefMethodType = RefMethodType.LinkeWinOpen;
//map.AddRefMethod(rm);
rm = new RefMethod();
rm.GroupName = "模拟测试";
rm.Title = "检查报告"; // "设计检查报告";
rm.Icon = "../../WF/Img/EntityFunc/Flow/CheckRpt.png";
rm.ClassMethodName = this.ToString() + ".DoCheck2018Url";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
rm = new RefMethod();
rm.GroupName = "模拟测试";
rm.Title = "检查报告(旧)"; // "设计检查报告";
rm.Icon = "../../WF/Img/EntityFunc/Flow/CheckRpt.png";
rm.ClassMethodName = this.ToString() + ".DoCheck";
rm.RefMethodType = RefMethodType.RightFrameOpen;
map.AddRefMethod(rm);
#endregion 模拟测试.
#region 流程模版管理.
rm = new RefMethod();
rm.Title = "模版导入";
rm.Icon = "../../WF/Img/redo.png";
rm.ClassMethodName = this.ToString() + ".DoImp()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "流程模版";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "模版导出";
rm.Icon = "../../WF/Img/undo.png";
rm.ClassMethodName = this.ToString() + ".DoExps()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "流程模版";
map.AddRefMethod(rm);
#endregion 流程模版管理.
#region 开发接口.
rm = new RefMethod();
rm.Title = "与业务表数据同步";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/DTS.png";
rm.ClassMethodName = this.ToString() + ".DoDTSBTable()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "开发接口";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "URL调用接口";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/URL.png";
rm.ClassMethodName = this.ToString() + ".DoAPI()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "开发接口";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "SDK开发接口";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/API.png";
rm.ClassMethodName = this.ToString() + ".DoAPICode()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "开发接口";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "代码事件开发接口";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/API.png";
rm.ClassMethodName = this.ToString() + ".DoAPICodeFEE()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "开发接口";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "流程属性自定义";
rm.ClassMethodName = this.ToString() + ".DoFlowAttrExt()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "开发接口";
map.AddRefMethod(rm);
#endregion 开发接口.
#region 流程运行维护.
rm = new RefMethod();
rm.Icon = "../../WF/Img/Btn/DTS.gif";
rm.Title = "重生成报表数据"; // "删除数据";
rm.Warning = "您确定要执行吗? 注意:此方法耗费资源。";// "您确定要执行删除流程数据吗?";
rm.ClassMethodName = this.ToString() + ".DoReloadRptData";
rm.GroupName = "流程维护";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "重生成流程标题";
rm.Icon = "../../WF/Img/Btn/DTS.gif";
rm.ClassMethodName = this.ToString() + ".DoGenerTitle()";
//设置相关字段.
//rm.RefAttrKey = FlowAttr.TitleRole;
rm.RefAttrLinkLabel = "重新生成流程标题";
rm.RefMethodType = RefMethodType.Func;
rm.Target = "_blank";
rm.Warning = "您确定要根据新的规则重新产生标题吗?";
rm.GroupName = "流程维护";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "重生成FlowEmps字段";
rm.Icon = "../../WF/Img/Btn/DTS.gif";
rm.ClassMethodName = this.ToString() + ".DoGenerFlowEmps()";
rm.RefAttrLinkLabel = "补充修复emps字段包括wf_generworkflow,NDxxxRpt字段.";
rm.RefMethodType = RefMethodType.Func;
rm.Target = "_blank";
rm.Warning = "您确定要重新生成吗?";
rm.GroupName = "流程维护";
map.AddRefMethod(rm);
//带有参数的方法.
rm = new RefMethod();
rm.GroupName = "流程维护";
rm.Title = "重命名节点表单字段";
// rm.Warning = "您确定要处理吗?";
rm.HisAttrs.AddTBString("FieldOld", null, "旧字段英文名", true, false, 0, 100, 100);
rm.HisAttrs.AddTBString("FieldNew", null, "新字段英文名", true, false, 0, 100, 100);
rm.HisAttrs.AddTBString("FieldNewName", null, "新字段中文名", true, false, 0, 100, 100);
rm.HisAttrs.AddBoolen("thisFlowOnly", true, "仅仅当前流程");
rm.ClassMethodName = this.ToString() + ".DoChangeFieldName";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "节点表单字段视图";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Field.png";
rm.ClassMethodName = this.ToString() + ".DoFlowFields()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "流程维护";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Icon = "../../WF/Img/Btn/Delete.gif";
rm.Title = "删除该流程全部数据"; // this.ToE("DelFlowData", "删除数据"); // "删除数据";
rm.Warning = "您确定要执行删除流程数据吗? \t\n该流程的数据删除后就不能恢复请注意删除的内容。";// "您确定要执行删除流程数据吗?";
rm.ClassMethodName = this.ToString() + ".DoDelData";
rm.GroupName = "流程维护";
map.AddRefMethod(rm);
//带有参数的方法.
rm = new RefMethod();
rm.GroupName = "流程维护";
rm.Title = "删除指定日期范围内的流程";
rm.Warning = "您确定要删除吗?";
rm.Icon = "../../WF/Img/Btn/Delete.gif";
rm.HisAttrs.AddTBDateTime("DTFrom", null, "时间从", true, true);
rm.HisAttrs.AddTBDateTime("DTTo", null, "时间到", true, true);
rm.HisAttrs.AddBoolen("thisFlowOnly", true, "仅仅当前流程");
rm.ClassMethodName = this.ToString() + ".DoDelFlows";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Icon = "../../WF/Img/Btn/Delete.gif";
rm.Title = "按工作ID删除"; // this.ToE("DelFlowData", "删除数据"); // "删除数据";
rm.GroupName = "流程维护";
rm.ClassMethodName = this.ToString() + ".DoDelDataOne";
rm.HisAttrs.AddTBInt("WorkID", 0, "输入工作ID", true, false);
rm.HisAttrs.AddTBString("beizhu", null, "删除备注", true, false, 0, 100, 100);
map.AddRefMethod(rm);
//带有参数的方法.
rm = new RefMethod();
rm.GroupName = "流程维护";
rm.Title = "强制设置接收人";
rm.HisAttrs.AddTBInt("WorkID", 0, "输入工作ID", true, false);
rm.HisAttrs.AddTBInt("NodeID", 0, "节点ID", true, false);
rm.HisAttrs.AddTBString("Worker", null, "接受人编号", true, false, 0, 100, 100);
rm.ClassMethodName = this.ToString() + ".DoSetTodoEmps";
map.AddRefMethod(rm);
rm = new RefMethod();
// rm.Icon = "../../WF/Img/Btn/Delete.gif";
rm.Title = "按工作ID强制结束"; // this.ToE("DelFlowData", "删除数据"); // "删除数据";
rm.GroupName = "流程维护";
rm.ClassMethodName = this.ToString() + ".DoStopFlow";
rm.HisAttrs.AddTBInt("WorkID", 0, "输入工作ID", true, false);
rm.HisAttrs.AddTBString("beizhu", null, "备注", true, false, 0, 100, 100);
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "回滚流程";
rm.Icon = "../../WF/Img/Btn/Back.png";
rm.ClassMethodName = this.ToString() + ".DoRebackFlowData()";
// rm.Warning = "您确定要回滚它吗?";
rm.HisAttrs.AddTBInt("workid", 0, "请输入要会滚WorkID", true, false);
rm.HisAttrs.AddTBInt("nodeid", 0, "回滚到的节点ID", true, false);
rm.HisAttrs.AddTBString("note", null, "回滚原因", true, false, 0, 600, 200);
rm.GroupName = "流程维护";
map.AddRefMethod(rm);
#endregion 流程运行维护.
#region 流程监控.
rm = new RefMethod();
rm.Title = "设计报表"; // "报表运行";
rm.Icon = "../../WF/Img/Btn/Rpt.gif";
rm.ClassMethodName = this.ToString() + ".DoOpenRpt()";
rm.RefMethodType = RefMethodType.LinkeWinOpen;
map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "监控面板";
//rm.Icon = ../../Admin/CCBPMDesigner/Img/Monitor.png";
//rm.ClassMethodName = this.ToString() + ".DoDataManger_Welcome()";
//rm.RefMethodType = RefMethodType.RightFrameOpen;
//rm.GroupName = "流程监控";
//map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "图形分析";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Group.png";
rm.ClassMethodName = this.ToString() + ".DoDataManger_DataCharts()";
rm.RefMethodType = RefMethodType.LinkeWinOpen;
rm.GroupName = "流程监控";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "综合查询";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Search.png";
rm.ClassMethodName = this.ToString() + ".DoDataManger_Search()";
rm.RefMethodType = RefMethodType.LinkeWinOpen;
rm.GroupName = "流程监控";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "综合分析";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Group.png";
rm.ClassMethodName = this.ToString() + ".DoDataManger_Group()";
rm.RefMethodType = RefMethodType.LinkeWinOpen;
rm.GroupName = "流程监控";
map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "实例增长分析";
//rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Grow.png";
//rm.ClassMethodName = this.ToString() + ".DoDataManger_InstanceGrowOneFlow()";
//rm.RefMethodType = RefMethodType.RightFrameOpen;
//rm.GroupName = "流程监控";
//rm.Visable = false;
//map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "逾期未完成实例";
//rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Warning.png";
//rm.ClassMethodName = this.ToString() + ".DoDataManger_InstanceWarning()";
//rm.RefMethodType = RefMethodType.RightFrameOpen;
//rm.GroupName = "流程监控";
//map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "逾期已完成实例";
//rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/overtime.png";
//rm.ClassMethodName = this.ToString() + ".DoDataManger_InstanceOverTimeOneFlow()";
//rm.RefMethodType = RefMethodType.RightFrameOpen;
//rm.Visable = false;
//rm.GroupName = "流程监控";
//map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "删除日志";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/log.png";
rm.ClassMethodName = this.ToString() + ".DoDataManger_DeleteLog()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "流程监控";
map.AddRefMethod(rm);
#endregion 流程监控.
#region 实验中的功能
rm = new RefMethod();
rm.Title = "数据订阅-实验中";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/RptOrder.png";
rm.ClassMethodName = this.ToString() + ".DoDataManger_RptOrder()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "实验中的功能";
rm.Visable = false;
map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = "流程轨迹表单";
//rm.Icon = "../../WF/Img/Btn/DTS.gif";
//rm.ClassMethodName = this.ToString() + ".DoBindFlowExt()";
//rm.RefMethodType = RefMethodType.RightFrameOpen;
//rm.GroupName = "实验中的功能";
//map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "批量设置节点";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Node.png";
rm.ClassMethodName = this.ToString() + ".DoNodeAttrs()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "轨迹查看权限";
rm.Icon = "../../WF/Img/Setting.png";
rm.ClassMethodName = this.ToString() + ".DoTruckRight()";
rm.RefMethodType = RefMethodType.RightFrameOpen;
rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "数据源管理(如果新增数据源后需要关闭重新打开)";
rm.ClassMethodName = this.ToString() + ".DoDBSrc";
rm.Icon = "../../WF/Img/Btn/DTS.gif";
//设置相关字段.
rm.RefAttrKey = FlowAttr.DTSDBSrc;
rm.RefAttrLinkLabel = "数据源管理";
rm.RefMethodType = RefMethodType.LinkeWinOpen;
rm.Target = "_blank";
rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "业务表字段同步配置";
rm.ClassMethodName = this.ToString() + ".DoBTable";
rm.Icon = BP.WF.Glo.CCFlowAppPath + "WF/Img/Btn/DTS.gif";
//设置相关字段.
rm.RefAttrKey = FlowAttr.DTSField;
rm.RefAttrLinkLabel = "业务表字段同步配置";
rm.RefMethodType = RefMethodType.LinkeWinOpen;
rm.Target = "_blank";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "一键设置审核组件工作模式";
rm.Icon = "../../WF/Admin/CCBPMDesigner/Img/Node.png";
rm.RefMethodType = RefMethodType.Func;
rm.Warning = "您确定要设置审核组件模式吗? \t\n 1, 第2个节点以后的节点表单都指向第2个节点表单. \t\n 2, 结束节点都设置为只读模式. ";
rm.GroupName = "实验中的功能";
rm.ClassMethodName = this.ToString() + ".DoSetFWCModel()";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "删除NDxxxRpt表,多余字段.";
rm.ClassMethodName = this.ToString() + ".DoDeleteFields()";
rm.RefMethodType = RefMethodType.Func;
rm.Warning = "您确定要设置审核组件模式吗? \t\n 1, 表NDxxxRpt是自动创建的. \t\n 2, 在设置流程过程中有些多余的字段会生成到NDxxRpt表里. \t\n 3,这里是删除数据字段为null 并且是多余的字段.";
rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
rm = new RefMethod();
rm.Title = "删除NDxxxRpt表,数据为null的多余字段.";
rm.ClassMethodName = this.ToString() + ".DoDeleteFieldsIsNull()";
rm.RefMethodType = RefMethodType.Func;
rm.Warning = "您确定要设置审核组件模式吗? \t\n 1, 表NDxxxRpt是自动创建的. \t\n 2, 在设置流程过程中有些多余的字段会生成到NDxxxRpt表里. \t\n 3,这里是删除数据字段为null 并且是多余的字段.";
rm.GroupName = "实验中的功能";
map.AddRefMethod(rm);
#endregion 实验中的功能
//rm = new RefMethod();
//rm.Title = "设置自动发起"; // "报表运行";
//rm.Icon = "/WF/Img/Btn/View.gif";
//rm.ClassMethodName = this.ToString() + ".DoOpenRpt()";
////rm.Icon = "/WF/Img/Btn/Table.gif";
//map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = this.ToE("Event", "事件"); // "报表运行";
//rm.Icon = "/WF/Img/Btn/View.gif";
//rm.ClassMethodName = this.ToString() + ".DoOpenRpt()";
////rm.Icon = "/WF/Img/Btn/Table.gif";
//map.AddRefMethod(rm);
//rm = new RefMethod();
//rm.Title = this.ToE("FlowExtDataOut", "数据转出定义"); //"数据转出定义";
// rm.Icon = "/WF/Img/Btn/Table.gif";
//rm.ToolTip = "在流程完成时间,流程数据转储存到其它系统中应用。";
//rm.ClassMethodName = this.ToString() + ".DoExp";
//map.AddRefMethod(rm);
this._enMap = map;
return this._enMap;
}
}
#endregion
#region 流程监控.
public string DoDataManger_DataCharts()
{
return "/WF/Admin/AttrFlow/DataCharts.htm?FK_Flow=" + this.No;
// return "/WF/Comm/Search.htm?EnsName=BP.WF.Data.GenerWorkFlowViews&FK_Flow=" + this.No + "&WFSta=all";
}
public string DoDataManger_Search()
{
return "/WF/Comm/Search.htm?EnsName=BP.WF.Data.GenerWorkFlowViews&FK_Flow=" + this.No + "&WFSta=all";
}
public string DoDataManger_Group()
{
return "/WF/Comm/Group.htm?EnsName=BP.WF.Data.GenerWorkFlowViews&FK_Flow=" + this.No + "&WFSta=all";
}
public string DoDataManger_DeleteLog()
{
return "/WF/Comm/Search.htm?EnsName=BP.WF.WorkFlowDeleteLogs&FK_Flow=" + this.No + "&WFSta=all";
}
/// <summary>
/// 数据订阅
/// </summary>
/// <returns></returns>
public string DoDataManger_RptOrder()
{
return "/WF/Admin/CCBPMDesigner/App/RptOrder.aspx?anaTime=mouth&FK_Flow=" + this.No;
}
#endregion 流程监控.
#region 开发接口.
/// <summary>
/// 执行删除指定日期范围内的流程
/// </summary>
/// <param name="dtFrom">日期从</param>
/// <param name="dtTo">日期到</param>
/// <param name="isOk">仅仅删除当前流程1=删除当前流程, 0=删除全部流程.</param>
/// <returns></returns>
public string DoDelFlows(string dtFrom, string dtTo, string isDelCurrFlow)
{
if (BP.Web.WebUser.No != "admin")
return "非admin用户不能删除。";
string sql = "";
if (isDelCurrFlow == "1")
sql = "SELECT WorkID, FK_Flow FROM WF_GenerWorkFlow WHERE RDT >= '" + dtFrom + "' AND RDT <= '" + dtTo + "' AND FK_Flow='" + this.No + "' ";
else
sql = "SELECT WorkID, FK_Flow FROM WF_GenerWorkFlow WHERE RDT >= '" + dtFrom + "' AND RDT <= '" + dtTo + "' ";
DataTable dt = DBAccess.RunSQLReturnTable(sql);
string msg = "如下流程ID被删除:";
foreach (DataRow dr in dt.Rows)
{
Int64 workid = Int64.Parse(dr["WorkID"].ToString());
string fk_flow = dr["FK_Flow"].ToString();
BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(workid, false);
msg += " " + workid;
}
return msg;
}
/// <summary>
/// 批量重命名字段.
/// </summary>
/// <param name="FieldOld"></param>
/// <param name="FieldNew"></param>
/// <param name="FieldNewName"></param>
/// <returns></returns>
public string DoChangeFieldName(string fieldOld, string fieldNew, string FieldNewName, string thisFlowOnly)
{
if (thisFlowOnly == "1")
return DoChangeFieldNameOne(this, fieldOld, fieldNew, FieldNewName);
FlowExts fls = new FlowExts();
fls.RetrieveAll();
string resu = "";
foreach (FlowExt item in fls)
{
resu += " ==== " + DoChangeFieldNameOne(item, fieldOld, fieldNew, FieldNewName);
}
return resu;
}
/// <summary>
/// 字段视图
/// </summary>
/// <returns></returns>
public string DoFlowFields()
{
return "/WF/Admin/AttrFlow/FlowFields.htm?FK_Flow=" + this.No;
}
/// <summary>
/// 与业务表数据同步
/// </summary>
/// <returns></returns>
public string DoDTSBTable()
{
return "/WF/Admin/AttrFlow/DTSBTable.htm?FK_Flow=" + this.No;
}
public string DoAPI()
{
return "/WF/Admin/AttrFlow/API.htm?FK_Flow=" + this.No;
}
public string DoAPICode()
{
return "/WF/Admin/AttrFlow/APICode.htm?FK_Flow=" + this.No;
}
public string DoAPICodeFEE()
{
return "/WF/Admin/AttrFlow/APICodeFEE.htm?FK_Flow=" + this.No;
}
/// <summary>
/// 流程属性自定义
/// </summary>
/// <returns></returns>
public string DoFlowAttrExt()
{
return "/DataUser/OverrideFiles/FlowAttrExts.html?FK_Flow=" + this.No;
}
public string DoVer()
{
return "/WF/Admin/AttrFlow/Ver.htm?FK_Flow=" + this.No;
}
public string DoPowerModel()
{
return "/WF/Admin/AttrFlow/PowerModel.htm?FK_Flow=" + this.No;
}
/// <summary>
/// 时限规则
/// </summary>
/// <returns></returns>
public string DoDeadLineRole()
{
return "/WF/Admin/AttrFlow/DeadLineRole.htm?FK_Flow=" + this.No;
}
/// <summary>
/// 预警、超期规则
/// </summary>
/// <returns></returns>
public string DoOverDeadLineRole()
{
return "/WF/Admin/AttrFlow/PushMessage.htm?FK_Flow=" + this.No;
}
#endregion 开发接口
#region 基本功能
/// <summary>
/// 事件
/// </summary>
/// <returns></returns>
public string DoAction()
{
return "/WF/Admin/AttrFlow/Action.htm?FK_Flow=" + this.No + "&tk=" + new Random().NextDouble();
}
/// <summary>
/// 流程事件
/// </summary>
/// <returns></returns>
public string DoMessage()
{
return "/WF/Admin/AttrFlow/PushMessage.htm?FK_Node=0&FK_Flow=" + this.No + "&tk=" + new Random().NextDouble();
}
/// <summary>
/// 计划玩成
/// </summary>
/// <returns></returns>
public string DoSDTOfFlow()
{
return "/WF/Admin/AttrFlow/SDTOfFlow.htm?FK_Flow=" + this.No + "&tk=" + new Random().NextDouble();
}
/// <summary>
/// 节点标签
/// </summary>
/// <returns></returns>
public string DoNodesICON()
{
return "/WF/Admin/AttrFlow/NodesIcon.htm?FK_Flow=" + this.No + "&tk=" + new Random().NextDouble();
}
public string DoDBSrc()
{
return "/WF/Comm/Sys/SFDBSrcNewGuide.htm";
}
public string DoBTable()
{
return "/WF/Admin/AttrFlow/DTSBTable.htm?s=d34&ShowType=FlowFrms&FK_Node=" + int.Parse(this.No) + "01&FK_Flow=" + this.No + "&ExtType=StartFlow&RefNo=" + DataType.CurrentDataTime;
}
/// <summary>
/// 批量修改节点属性
/// </summary>
/// <returns></returns>
public string DoNodeAttrs()
{
return "/WF/Admin/AttrFlow/NodeAttrs.htm?NodeID=0&FK_Flow=" + this.No + "&tk=" + new Random().NextDouble();
}
public string DoBindFlowExt()
{
return "/WF/Admin/Sln/BindFrms.htm?s=d34&ShowType=FlowFrms&FK_Node=0&FK_Flow=" + this.No + "&ExtType=StartFlow";
}
/// <summary>
/// 轨迹查看权限
/// </summary>
/// <returns></returns>
public string DoTruckRight()
{
return "/WF/Admin/AttrFlow/TruckViewPower.htm?FK_Flow=" + this.No;
}
/// <summary>
/// 批量发起字段
/// </summary>
/// <returns></returns>
public string DoBatchStartFields()
{
return "/WF/Admin/AttrNode/BatchStartFields.htm?s=d34&FK_Flow=" + this.No + "&ExtType=StartFlow";
}
/// <summary>
/// 执行流程数据表与业务表数据手工同步
/// </summary>
/// <returns></returns>
public string DoBTableDTS()
{
Flow fl = new Flow(this.No);
return fl.DoBTableDTS();
}
/// <summary>
/// 恢复已完成的流程数据到指定的节点如果节点为0就恢复到最后一个完成的节点上去.
/// </summary>
/// <param name="workid">要恢复的workid</param>
/// <param name="backToNodeID">恢复到的节点编号如果是0标示回复到流程最后一个节点上去.</param>
/// <param name="note"></param>
/// <returns></returns>
public string DoRebackFlowData(Int64 workid, int backToNodeID, string note)
{
if (note.Length <= 2)
return "请填写恢复已完成的流程原因.";
Flow fl = new Flow(this.No);
BP.WF.Data.GERpt rpt = new BP.WF.Data.GERpt("ND" + int.Parse(this.No) + "Rpt");
rpt.OID = workid;
int i = rpt.RetrieveFromDBSources();
if (i == 0)
throw new Exception("@错误,流程数据丢失。");
if (backToNodeID == 0)
backToNodeID = rpt.FlowEndNode;
Emp empStarter = new Emp(rpt.FlowStarter);
// 最后一个节点.
Node endN = new Node(backToNodeID);
GenerWorkFlow gwf = null;
bool isHaveGener = false;
try
{
#region 创建流程引擎主表数据.
gwf = new GenerWorkFlow();
gwf.WorkID = workid;
if (gwf.RetrieveFromDBSources() == 1)
{
isHaveGener = true;
//判断状态
if (gwf.WFState != WFState.Complete)
throw new Exception("@当前工作ID为:" + workid + "的流程没有结束,不能采用此方法恢复。");
}
gwf.FK_Flow = this.No;
gwf.FlowName = this.Name;
gwf.WorkID = workid;
gwf.PWorkID = rpt.PWorkID;
gwf.PFlowNo = rpt.PFlowNo;
gwf.PNodeID = rpt.PNodeID;
gwf.PEmp = rpt.PEmp;
gwf.FK_Node = backToNodeID;
gwf.NodeName = endN.Name;
gwf.Starter = rpt.FlowStarter;
gwf.StarterName = empStarter.Name;
gwf.FK_FlowSort = fl.FK_FlowSort;
gwf.SysType = fl.SysType;
gwf.Title = rpt.Title;
gwf.WFState = WFState.ReturnSta; /*设置为退回的状态*/
gwf.FK_Dept = rpt.FK_Dept;
Dept dept = new Dept(empStarter.FK_Dept);
gwf.DeptName = dept.Name;
gwf.PRI = 1;
DateTime dttime = DateTime.Now;
dttime = dttime.AddDays(3);
gwf.SDTOfNode = dttime.ToString("yyyy-MM-dd HH:mm:ss");
gwf.SDTOfFlow = dttime.ToString("yyyy-MM-dd HH:mm:ss");
if (isHaveGener)
gwf.Update();
else
gwf.Insert(); /*插入流程引擎数据.*/
#endregion 创建流程引擎主表数据
string ndTrack = "ND" + int.Parse(this.No) + "Track";
string actionType = (int)ActionType.Forward + "," + (int)ActionType.FlowOver + "," + (int)ActionType.ForwardFL + "," + (int)ActionType.ForwardHL;
string sql = "SELECT * FROM " + ndTrack + " WHERE ActionType IN (" + actionType + ") and WorkID=" + workid + " ORDER BY RDT DESC, NDFrom ";
System.Data.DataTable dt = DBAccess.RunSQLReturnTable(sql);
if (dt.Rows.Count == 0)
throw new Exception("@工作ID为:" + workid + "的数据不存在.");
string starter = "";
bool isMeetSpecNode = false;
GenerWorkerList currWl = new GenerWorkerList();
foreach (DataRow dr in dt.Rows)
{
int ndFrom = int.Parse(dr["NDFrom"].ToString());
Node nd = new Node(ndFrom);
string ndFromT = dr["NDFromT"].ToString();
string EmpFrom = dr[TrackAttr.EmpFrom].ToString();
string EmpFromT = dr[TrackAttr.EmpFromT].ToString();
// 增加上 工作人员的信息.
GenerWorkerList gwl = new GenerWorkerList();
gwl.WorkID = workid;
gwl.FK_Flow = this.No;
gwl.FK_Node = ndFrom;
gwl.FK_NodeText = ndFromT;
if (gwl.FK_Node == backToNodeID)
{
gwl.IsPass = false;
currWl = gwl;
}
else
gwl.IsPass = true;
gwl.FK_Emp = EmpFrom;
gwl.FK_EmpText = EmpFromT;
if (gwl.IsExits)
continue; /*有可能是反复退回的情况.*/
Emp emp = new Emp(gwl.FK_Emp);
gwl.FK_Dept = emp.FK_Dept;
gwl.SDT = dr["RDT"].ToString();
gwl.DTOfWarning = gwf.SDTOfNode;
gwl.IsEnable = true;
gwl.WhoExeIt = nd.WhoExeIt;
gwl.Insert();
}
#region 加入退回信息, 让接受人能够看到退回原因.
ReturnWork rw = new ReturnWork();
rw.Delete(ReturnWorkAttr.WorkID, workid); //先删除历史的信息.
rw.WorkID = workid;
rw.ReturnNode = backToNodeID;
rw.ReturnNodeName = endN.Name;
rw.Returner = WebUser.No;
rw.ReturnerName = WebUser.Name;
rw.ReturnToNode = currWl.FK_Node;
rw.ReturnToEmp = currWl.FK_Emp;
rw.BeiZhu = note;
rw.RDT = DataType.CurrentDataTime;
rw.IsBackTracking = false;
rw.MyPK = DBAccess.GenerGUID();
rw.Insert();
#endregion 加入退回信息, 让接受人能够看到退回原因.
//更新流程表的状态.
rpt.FlowEnder = currWl.FK_Emp;
rpt.WFState = WFState.ReturnSta; /*设置为退回的状态*/
rpt.FlowEndNode = currWl.FK_Node;
rpt.Update();
// 向接受人发送一条消息.
BP.WF.Dev2Interface.Port_SendMsg(currWl.FK_Emp, "工作恢复:" + gwf.Title, "工作被:" + WebUser.No + " 恢复." + note, "ReBack" + workid, BP.WF.SMSMsgType.SendSuccess, this.No, int.Parse(this.No + "01"), workid, 0);
//写入该日志.
WorkNode wn = new WorkNode(workid, currWl.FK_Node);
wn.AddToTrack(ActionType.RebackOverFlow, currWl.FK_Emp, currWl.FK_EmpText, currWl.FK_Node, currWl.FK_NodeText, note);
return "@已经还原成功,现在的流程已经复原到(" + currWl.FK_NodeText + "). @当前工作处理人为(" + currWl.FK_Emp + " , " + currWl.FK_EmpText + ") @请通知他处理工作.";
}
catch (Exception ex)
{
//此表的记录删除已取消
//gwf.Delete();
GenerWorkerList wl = new GenerWorkerList();
wl.Delete(GenerWorkerListAttr.WorkID, workid);
string sqls = "";
sqls += "@UPDATE " + fl.PTable + " SET WFState=" + (int)WFState.Complete + " WHERE OID=" + workid;
DBAccess.RunSQLs(sqls);
return "<font color=red>会滚期间出现错误</font><hr>" + ex.Message;
}
}
/// <summary>
/// 重新产生标题,根据新的规则.
/// </summary>
public string DoGenerFlowEmps()
{
if (WebUser.No != "admin")
return "非admin用户不能执行。";
Flow fl = new Flow(this.No);
GenerWorkFlows gwfs = new GenerWorkFlows();
gwfs.Retrieve(GenerWorkFlowAttr.FK_Flow, this.No);
foreach (GenerWorkFlow gwf in gwfs)
{
string emps = "@";
string sql = "SELECT EmpFrom,EmpFromT FROM ND" + int.Parse(this.No) + "Track WHERE WorkID=" + gwf.WorkID;
DataTable dt = DBAccess.RunSQLReturnTable(sql);
foreach (DataRow dr in dt.Rows)
{
if (emps.Contains("@" + dr[0].ToString() + "@") || emps.Contains("@" + dr[0].ToString() + "," + dr[1].ToString() + "@"))
continue;
emps += dr[0].ToString() + "," + dr[1].ToString() + "@";
}
sql = "UPDATE " + fl.PTable + " SET FlowEmps='" + emps + "' WHERE OID=" + gwf.WorkID;
DBAccess.RunSQL(sql);
sql = "UPDATE WF_GenerWorkFlow SET Emps='" + emps + "' WHERE WorkID=" + gwf.WorkID;
DBAccess.RunSQL(sql);
}
Node nd = fl.HisStartNode;
Works wks = nd.HisWorks;
wks.RetrieveAllFromDBSource(WorkAttr.Rec);
string table = nd.HisWork.EnMap.PhysicsTable;
string tableRpt = "ND" + int.Parse(this.No) + "Rpt";
Sys.MapData md = new Sys.MapData(tableRpt);
foreach (Work wk in wks)
{
if (wk.Rec != WebUser.No)
{
BP.Web.WebUser.Exit();
try
{
Emp emp = new Emp(wk.Rec);
BP.Web.WebUser.SignInOfGener(emp);
}
catch
{
continue;
}
}
string sql = "";
string title = BP.WF.WorkFlowBuessRole.GenerTitle(fl, wk);
Paras ps = new Paras();
ps.Add("Title", title);
ps.Add("OID", wk.OID);
ps.SQL = "UPDATE " + table + " SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE OID=" + SystemConfig.AppCenterDBVarStr + "OID";
DBAccess.RunSQL(ps);
ps.SQL = "UPDATE " + md.PTable + " SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE OID=" + SystemConfig.AppCenterDBVarStr + "OID";
DBAccess.RunSQL(ps);
ps.SQL = "UPDATE WF_GenerWorkFlow SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE WorkID=" + SystemConfig.AppCenterDBVarStr + "OID";
DBAccess.RunSQL(ps);
}
Emp emp1 = new Emp("admin");
BP.Web.WebUser.SignInOfGener(emp1);
return "全部生成成功,影响数据(" + wks.Count + ")条";
}
/// <summary>
/// 重新产生标题,根据新的规则.
/// </summary>
public string DoGenerTitle()
{
if (WebUser.IsAdmin == false)
return "非管理员用户不能执行。";
string adminNo = WebUser.No;
Flow fl = new Flow(this.No);
Node nd = fl.HisStartNode;
Works wks = nd.HisWorks;
wks.RetrieveAllFromDBSource(WorkAttr.Rec);
string table = nd.HisWork.EnMap.PhysicsTable;
string tableRpt = "ND" + int.Parse(this.No) + "Rpt";
MapData md = new MapData(tableRpt);
foreach (Work wk in wks)
{
if (wk.Rec != WebUser.No)
{
WebUser.Exit();
try
{
Emp emp = new Emp(wk.Rec);
WebUser.SignInOfGener(emp);
}
catch
{
continue;
}
}
string title = WorkFlowBuessRole.GenerTitle(fl, wk);
Paras ps = new Paras();
ps.Add("Title", title);
ps.Add("OID", wk.OID);
if(DBAccess.IsExitsTableCol(md.PTable,"Title") == true)
{
ps.SQL = "UPDATE " + md.PTable + " SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE OID=" + SystemConfig.AppCenterDBVarStr + "OID";
DBAccess.RunSQL(ps);
}
if(table.Equals(md.PTable)==false && DBAccess.IsExitsTableCol(table, "Title") == true)
{
ps.SQL = "UPDATE " + table + " SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE OID=" + SystemConfig.AppCenterDBVarStr + "OID";
DBAccess.RunSQL(ps);
}
ps.SQL = "UPDATE WF_GenerWorkFlow SET Title=" + SystemConfig.AppCenterDBVarStr + "Title WHERE WorkID=" + SystemConfig.AppCenterDBVarStr + "OID";
DBAccess.RunSQL(ps);
}
Emp emp1 = new Emp(adminNo);
WebUser.SignInOfGener(emp1);
return "全部生成成功,影响数据(" + wks.Count + ")条";
}
/// <summary>
/// 定义报表
/// </summary>
/// <returns></returns>
public string DoAutoStartIt()
{
Flow fl = new Flow();
fl.No = this.No;
fl.RetrieveFromDBSources();
return fl.DoAutoStartIt();
}
/// <summary>
/// 强制设置接受人
/// </summary>
/// <param name="workid">工作人员ID</param>
/// <param name="nodeID">节点ID</param>
/// <param name="worker">工作人员</param>
/// <returns>执行结果.</returns>
public string DoSetTodoEmps(int workid, int nodeID, string worker)
{
GenerWorkFlow gwf = new GenerWorkFlow();
gwf.WorkID = workid;
if (gwf.RetrieveFromDBSources() == 0)
return "workid=" + workid + "不正确.";
BP.Port.Emp emp = new Emp();
emp.NoOfSAAS = worker;
if (emp.RetrieveFromDBSources() == 0)
return "人员编号不正确" + worker + ".";
BP.WF.Node nd = new Node();
nd.NodeID = nodeID;
if (nd.RetrieveFromDBSources() == 0)
return "err@节点编号[" + nodeID + "]不正确.";
gwf.FK_Node = nodeID;
gwf.NodeName = nd.Name;
gwf.TodoEmps = emp.NoOfSAAS + "," + emp.Name + ";";
gwf.TodoEmpsNum = 1;
gwf.HuiQianTaskSta = HuiQianTaskSta.None;
gwf.Update();
DBAccess.RunSQL("UPDATE WF_GenerWorkerList SET IsPass=1 WHERE WorkID=" + workid);
GenerWorkerList gwl = new GenerWorkerList();
gwl.FK_Node = nodeID;
gwl.WorkID = workid;
gwl.FK_Emp = emp.NoOfSAAS;
if (gwl.RetrieveFromDBSources() == 0)
{
DateTime dt = DateTime.Now;
gwl.FK_EmpText = emp.Name;
if (nd.HisCHWay == CHWay.None)
gwl.SDT = "无";
else
gwl.SDT = dt.AddDays(3).ToString("yyyy-MM-dd HH:mm:ss");
gwl.RDT = dt.ToString("yyyy-MM-dd HH:mm:ss");
gwl.IsRead = false;
gwl.Insert();
}
else
{
gwl.IsRead = false;
gwl.IsPassInt = 0;
gwl.Update();
}
return "执行成功.";
}
/// <summary>
/// 删除流程
/// </summary>
/// <param name="workid"></param>
/// <param name="sd"></param>
/// <returns></returns>
public string DoDelDataOne(int workid, string note)
{
try
{
BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(workid, true);
return "删除成功 workid=" + workid + " 理由:" + note;
}
catch (Exception ex)
{
return "删除失败:" + ex.Message;
}
}
public string DoStopFlow(Int64 workid, string note)
{
try
{
BP.WF.Dev2Interface.Flow_DoFlowOver(workid, note);
return "流程被强制结束 workid=" + workid + " 理由:" + note;
}
catch (Exception ex)
{
return "删除失败:" + ex.Message;
}
}
/// <summary>
/// 设置发起数据源
/// </summary>
/// <returns></returns>
public string DoSetStartFlowDataSources()
{
if (DataType.IsNullOrEmpty(this.No) == true)
throw new Exception("传入的流程编号为空,请检查流程");
string flowID = int.Parse(this.No).ToString() + "01";
return "/WF/Admin/AttrFlow/AutoStart.htm?s=d34&FK_Flow=" + this.No + "&ExtType=StartFlow&RefNo=";
}
/// <summary>
/// 执行运行
/// </summary>
/// <returns></returns>
public string DoRunIt()
{
return "/WF/Admin/TestFlow.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 执行检查
/// </summary>
/// <returns></returns>
public string DoCheck()
{
return "/WF/Admin/AttrFlow/CheckFlow.htm?FK_Flow=" + this.No + "&Lang=CH";
}
public string DoCheck2018Url()
{
return "/WF/Admin/Testing/FlowCheckError.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 启动限制规则
/// </summary>
/// <returns>返回URL</returns>
public string DoLimit()
{
return "/WF/Admin/AttrFlow/Limit.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 设置发起前置导航
/// </summary>
/// <returns></returns>
public string DoStartGuide()
{
return "/WF/Admin/AttrFlow/StartGuide.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 设置发起前置导航
/// </summary>
/// <returns></returns>
public string DoStartGuideV2019()
{
return "/WF/Admin/AttrFlow/StartGuide/Default.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 导入
/// </summary>
/// <returns></returns>
public string DoImp()
{
return "/WF/Admin/AttrFlow/Imp.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 导出
/// </summary>
/// <returns></returns>
public string DoExps()
{
return "/WF/Admin/AttrFlow/Exp.htm?FK_Flow=" + this.No + "&Lang=CH";
}
/// <summary>
/// 删除数据.
/// </summary>
/// <returns></returns>
public string DoDelData()
{
Flow fl = new Flow();
fl.No = this.No;
fl.RetrieveFromDBSources();
return fl.DoDelData();
}
/// <summary>
/// 运行报表
/// </summary>
/// <returns></returns>
public string DoOpenRpt()
{
if (DataType.IsNullOrEmpty(this.No) == true)
throw new Exception("传入的流程编号为空,请检查流程");
return "/WF/Admin/RptDfine/Default.htm?FK_Flow=" + this.No + "&DoType=Edit&FK_MapData=ND" + int.Parse(this.No) + "Rpt";
}
/// <summary>
/// 更新之后的事情,也要更新缓存。
/// </summary>
protected override void afterUpdate()
{
// Flow fl = new Flow();
// fl.No = this.No;
// fl.RetrieveFromDBSources();
//fl.Update();
}
protected override bool beforeUpdate()
{
//更新流程版本
Flow.UpdateVer(this.No);
#region 同步事件实体.
try
{
string flowMark = this.FlowMark;
if (DataType.IsNullOrEmpty(flowMark) == true)
flowMark = this.No;
this.FlowEventEntity = BP.WF.Glo.GetFlowEventEntityStringByFlowMark(flowMark);
}
catch
{
this.FlowEventEntity = "";
}
#endregion 同步事件实体.
//更新缓存数据。
Flow fl = new Flow(this.No);
fl.RetrieveFromDBSources();
#region StartFlows的清缓存
if (fl.IsStartInMobile != this.IsStartInMobile || fl.IsCanStart != this.IsCanStart)
{
//清空WF_Emp 的StartFlows
DBAccess.RunSQL("UPDATE WF_Emp Set StartFlows =''");
}
#endregion StartFlows的清缓存
fl.Copy(this);
//2019-09-25 -by zhoupeng 为周大福增加 关键业务字段.
fl.BuessFields = this.GetValStrByKey(FlowAttr.BuessFields);
fl.DirectUpdate();
#region 检查数据完整性 - 同步业务表数据。
// 检查业务是否存在.
if (fl.DTSWay != DataDTSWay.None)
{
/*检查业务表填写的是否正确.*/
string sql = "select count(*) as Num from " + fl.DTSBTable + " where 1=2";
try
{
DBAccess.RunSQLReturnValInt(sql, 0);
}
catch (Exception)
{
throw new Exception("@业务表配置无效,您配置业务数据表[" + fl.DTSBTable + "]在数据中不存在,请检查拼写错误如果是跨数据库请加上用户名比如: for sqlserver: HR.dbo.Emps, For oracle: HR.Emps");
}
sql = "select " + fl.DTSBTablePK + " from " + fl.DTSBTable + " where 1=2";
try
{
DBAccess.RunSQLReturnValInt(sql, 0);
}
catch (Exception)
{
throw new Exception("@业务表配置无效,您配置业务数据表[" + fl.DTSBTablePK + "]的主键不存在。");
}
//检查节点配置是否符合要求.
if (fl.DTSTime == FlowDTSTime.SpecNodeSend)
{
// 检查节点ID是否符合格式.
string nodes = fl.DTSSpecNodes;
nodes = nodes.Replace("", ",");
this.SetValByKey(FlowAttr.DTSSpecNodes, nodes);
if (DataType.IsNullOrEmpty(nodes) == true)
throw new Exception("@业务数据同步数据配置错误,您设置了按照指定的节点配置,但是您没有设置节点,节点的设置格式如下101,102,103");
string[] strs = nodes.Split(',');
foreach (string str in strs)
{
if (DataType.IsNullOrEmpty(str) == true)
continue;
if (DataType.IsNumStr(str) == false)
throw new Exception("@业务数据同步数据配置错误,您设置了按照指定的节点配置,但是节点格式错误[" + nodes + "]。正确的格式如下101,102,103");
Node nd = new Node();
nd.NodeID = int.Parse(str);
if (nd.IsExits == false)
throw new Exception("@业务数据同步数据配置错误,您设置的节点格式错误,节点[" + str + "]不是有效的节点。");
nd.RetrieveFromDBSources();
if (nd.FK_Flow != this.No)
throw new Exception("@业务数据同步数据配置错误,您设置的节点[" + str + "]不再本流程内。");
}
}
//检查流程数据存储表是否正确
if (DataType.IsNullOrEmpty(fl.PTable) == false)
{
/*检查流程数据存储表填写的是否正确.*/
sql = "select count(*) as Num from " + fl.PTable + " WHERE 1=2";
try
{
DBAccess.RunSQLReturnValInt(sql, 0);
}
catch (Exception)
{
throw new Exception("@流程数据存储表配置无效,您配置流程数据存储表[" + fl.PTable + "]在数据中不存在,请检查拼写错误如果是跨数据库请加上用户名比如: for sqlserver: HR.dbo.Emps, For oracle: HR.Emps");
}
}
}
#endregion 检查数据完整性. - 同步业务表数据。
return base.beforeUpdate();
}
protected override void afterInsertUpdateAction()
{
#region 更新PTale 后的业务处理
// 同步流程数据表.
string ndxxRpt = "ND" + int.Parse(this.No) + "Rpt";
Flow fl = new Flow(this.No);
MapData md = new MapData(ndxxRpt);
if (md.PTable.Equals(fl.PTable) == false)
{
md.PTable = fl.PTable;
md.Update();
Nodes nds = new Nodes();
nds.Retrieve(NodeAttr.FK_Flow, this.No);
foreach (Node nd in nds)
{
string sql = "";
if (nd.HisRunModel == RunModel.SubThread)
sql = "UPDATE Sys_MapData SET PTable=No WHERE No='ND" + nd.NodeID + "'";
else
sql = "UPDATE Sys_MapData SET PTable='" + fl.PTable + "' WHERE No='ND" + nd.NodeID + "'";
DBAccess.RunSQL(sql);
}
fl.CheckRpt(); // 检查业务表.
}
#endregion 更新PTale 后的业务处理
#region 为systype设置当前所在节点的第2级别目录。
FlowSort fs = new FlowSort(fl.FK_FlowSort);
if (fs.ParentNo == "99" || fs.ParentNo == "0")
{
this.SysType = fl.FK_FlowSort;
}
else
{
FlowSort fsP = new FlowSort(fs.ParentNo);
if (fsP.ParentNo == "99" || fsP.ParentNo == "0")
{
this.SysType = fsP.No;
}
else
{
FlowSort fsPP = new FlowSort(fsP.ParentNo);
this.SysType = fsPP.No;
}
}
#endregion 为systype设置当前所在节点的第2级别目录。
fl = new Flow();
fl.No = this.No;
fl.RetrieveFromDBSources();
fl.Update();
base.afterInsertUpdateAction();
}
#endregion
#region 实验中的功能.
/// <summary>
/// 删除多余的字段.
/// </summary>
/// <returns></returns>
public string DoDeleteFields()
{
return "尚未完成.";
}
/// <summary>
/// 删除多余的字段.
/// </summary>
/// <returns></returns>
public string DoDeleteFieldsIsNull()
{
return "尚未完成.";
}
/// <summary>
/// 一件设置审核模式.
/// </summary>
/// <returns></returns>
public string DoSetFWCModel()
{
Nodes nds = new Nodes(this.No);
foreach (Node nd in nds)
{
if (nd.IsStartNode)
{
nd.HisFormType = NodeFormType.FoolForm;
nd.Update();
continue;
}
BP.WF.Template.FrmNodeComponent fnd = new FrmNodeComponent(nd.NodeID);
if (nd.IsEndNode == true || nd.HisToNodes.Count == 0)
{
nd.FrmWorkCheckSta = FrmWorkCheckSta.Readonly;
nd.NodeFrmID = "ND" + int.Parse(this.No) + "02";
nd.HisFormType = NodeFormType.FoolForm;
nd.Update();
fnd.SetValByKey(NodeAttr.NodeFrmID, nd.NodeFrmID);
fnd.SetValByKey(NodeAttr.FWCSta, (int)nd.FrmWorkCheckSta);
fnd.Update();
continue;
}
// fnd.HisFormType = NodeFormType.FoolForm;
fnd.Update(); //不执行更新,会导致部分字段错误.
nd.FrmWorkCheckSta = FrmWorkCheckSta.Enable;
nd.NodeFrmID = "ND" + int.Parse(this.No) + "02";
nd.HisFormType = NodeFormType.FoolForm;
nd.Update();
}
return "设置成功...";
}
#endregion
}
/// <summary>
/// 流程集合
/// </summary>
public class FlowExts : EntitiesNoName
{
#region 查询
/// <summary>
/// 查询出来全部的在生存期间内的流程
/// </summary>
/// <param name="FlowSort">流程类别</param>
/// <param name="IsCountInLifeCycle">是不是计算在生存期间内 true 查询出来全部的 </param>
public void Retrieve(string FlowSort)
{
QueryObject qo = new QueryObject(this);
qo.AddWhere(BP.WF.Template.FlowAttr.FK_FlowSort, FlowSort);
qo.addOrderBy(BP.WF.Template.FlowAttr.No);
qo.DoQuery();
}
#endregion
#region 构造方法
/// <summary>
/// 工作流程
/// </summary>
public FlowExts() { }
/// <summary>
/// 工作流程
/// </summary>
/// <param name="fk_sort"></param>
public FlowExts(string fk_sort)
{
this.Retrieve(BP.WF.Template.FlowAttr.FK_FlowSort, fk_sort);
}
#endregion
#region 得到实体
/// <summary>
/// 得到它的 Entity
/// </summary>
public override Entity GetNewEntity
{
get
{
return new FlowExt();
}
}
#endregion
#region 为了适应自动翻译成java的需要,把实体转换成List.
/// <summary>
/// 转化成 java list,C#不能调用.
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.IList<FlowExt> ToJavaList()
{
return (System.Collections.Generic.IList<FlowExt>)this;
}
/// <summary>
/// 转化成list
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.List<FlowExt> Tolist()
{
System.Collections.Generic.List<FlowExt> list = new System.Collections.Generic.List<FlowExt>();
for (int i = 0; i < this.Count; i++)
{
list.Add((FlowExt)this[i]);
}
return list;
}
#endregion 为了适应自动翻译成java的需要,把实体转换成List.
}
}