|
|
using System;
|
|
|
using System.Data;
|
|
|
using System.Text;
|
|
|
using System.Web;
|
|
|
using BP.DA;
|
|
|
using BP.Sys;
|
|
|
using BP.Web;
|
|
|
using BP.Port;
|
|
|
using BP.En;
|
|
|
using BP.WF.Template;
|
|
|
using BP.Difference;
|
|
|
|
|
|
namespace BP.WF.HttpHandler
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 抄送处理类
|
|
|
/// </summary>
|
|
|
public class WF_MyView : DirectoryPageBase
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
/// 抄送处理类
|
|
|
/// </summary>
|
|
|
public WF_MyView()
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
#region 表单查看.
|
|
|
/// <summary>
|
|
|
/// 表单数据
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public string MyFrm_Init_Data()
|
|
|
{
|
|
|
string trackID = this.GetRequestVal("TrackID");
|
|
|
if (DataType.IsNullOrEmpty(trackID) == true)
|
|
|
return "";
|
|
|
//根据TrackID从Track表中获取历史数据
|
|
|
return DBAccess.GetBigTextFromDB("ND" + int.Parse(this.FK_Flow) + "Track", "MyPK", trackID, "FrmDB");
|
|
|
}
|
|
|
|
|
|
#endregion 表单查看.
|
|
|
|
|
|
#region 运行变量
|
|
|
/// <summary>
|
|
|
/// 从节点.
|
|
|
/// </summary>
|
|
|
public string FromNode
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetRequestVal("FromNode");
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 是否抄送
|
|
|
/// </summary>
|
|
|
public bool IsCC
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
string str = this.GetRequestVal("Paras");
|
|
|
|
|
|
if (DataType.IsNullOrEmpty(str) == false)
|
|
|
{
|
|
|
string myps = str;
|
|
|
|
|
|
if (myps.Contains("IsCC=1") == true)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
str = this.GetRequestVal("AtPara");
|
|
|
if (DataType.IsNullOrEmpty(str) == false)
|
|
|
{
|
|
|
if (str.Contains("IsCC=1") == true)
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 轨迹ID
|
|
|
/// </summary>
|
|
|
public string TrackID
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetRequestVal("TrackeID");
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 到达的节点ID
|
|
|
/// </summary>
|
|
|
public int ToNode
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return this.GetRequestValInt("ToNode");
|
|
|
}
|
|
|
}
|
|
|
private int _FK_Node = 0;
|
|
|
/// <summary>
|
|
|
/// 当前的 NodeID ,在开始时间,nodeID,是地一个,流程的开始节点ID.
|
|
|
/// </summary>
|
|
|
public new int FK_Node
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
string fk_nodeReq = this.GetRequestVal("FK_Node"); //this.Request.Form["FK_Node"];
|
|
|
if (DataType.IsNullOrEmpty(fk_nodeReq))
|
|
|
fk_nodeReq = this.GetRequestVal("NodeID");// this.Request.Form["NodeID"];
|
|
|
|
|
|
if (DataType.IsNullOrEmpty(fk_nodeReq) == false)
|
|
|
return int.Parse(fk_nodeReq);
|
|
|
|
|
|
if (_FK_Node == 0)
|
|
|
{
|
|
|
if (this.WorkID != 0)
|
|
|
{
|
|
|
Paras ps = new Paras();
|
|
|
ps.SQL = "SELECT FK_Node FROM WF_GenerWorkFlow WHERE WorkID=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "WorkID";
|
|
|
ps.Add("WorkID", this.WorkID);
|
|
|
_FK_Node = DBAccess.RunSQLReturnValInt(ps, 0);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
_FK_Node = int.Parse(this.FK_Flow + "01");
|
|
|
}
|
|
|
}
|
|
|
return _FK_Node;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private string _width = "";
|
|
|
/// <summary>
|
|
|
/// 表单宽度
|
|
|
/// </summary>
|
|
|
public string Width
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return _width;
|
|
|
}
|
|
|
set { _width = value; }
|
|
|
}
|
|
|
private string _height = "";
|
|
|
/// <summary>
|
|
|
/// 表单高度
|
|
|
/// </summary>
|
|
|
public string Height
|
|
|
{
|
|
|
get { return _height; }
|
|
|
set { _height = value; }
|
|
|
}
|
|
|
public string _btnWord = "";
|
|
|
public string BtnWord
|
|
|
{
|
|
|
get { return _btnWord; }
|
|
|
set { _btnWord = value; }
|
|
|
}
|
|
|
private GenerWorkFlow _HisGenerWorkFlow = null;
|
|
|
public GenerWorkFlow HisGenerWorkFlow
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (_HisGenerWorkFlow == null)
|
|
|
_HisGenerWorkFlow = new GenerWorkFlow(this.WorkID);
|
|
|
return _HisGenerWorkFlow;
|
|
|
}
|
|
|
}
|
|
|
private Node _currNode = null;
|
|
|
public Node currND
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (_currNode == null)
|
|
|
_currNode = new Node(this.FK_Node);
|
|
|
return _currNode;
|
|
|
}
|
|
|
}
|
|
|
private Flow _currFlow = null;
|
|
|
public Flow currFlow
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (_currFlow == null)
|
|
|
_currFlow = new Flow(this.FK_Flow);
|
|
|
return _currFlow;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 定义跟路径
|
|
|
/// </summary>
|
|
|
public string appPath = "/";
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
public string InitToolBar()
|
|
|
{
|
|
|
DataTable dt = new DataTable("ToolBar");
|
|
|
dt.Columns.Add("No");
|
|
|
dt.Columns.Add("Name");
|
|
|
dt.Columns.Add("Oper");
|
|
|
|
|
|
BtnLab btnLab = new BtnLab(this.FK_Node);
|
|
|
string tKey = DateTime.Now.ToString("MM-dd-hh:mm:ss");
|
|
|
string toolbar = "";
|
|
|
try
|
|
|
{
|
|
|
|
|
|
DataRow dr = dt.NewRow();
|
|
|
/*if (this.IsMobile == false)
|
|
|
{
|
|
|
dr["No"] = "Close";
|
|
|
dr["Name"] = "关闭";
|
|
|
dr["Oper"] = "Close();";
|
|
|
dt.Rows.Add(dr);
|
|
|
}*/
|
|
|
|
|
|
|
|
|
GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);
|
|
|
|
|
|
Node nd = null;
|
|
|
|
|
|
if (gwf.WFState == WFState.Runing)
|
|
|
nd = new Node(gwf.FK_Node);
|
|
|
|
|
|
|
|
|
#region 根据流程权限控制规则获取可以操作的按钮功能
|
|
|
string sql = "SELECT A.PowerFlag,A.EmpNo,A.EmpName FROM WF_PowerModel A WHERE PowerCtrlType =1"
|
|
|
+ " UNION "
|
|
|
+ "SELECT A.PowerFlag,B." + BP.Sys.Base.Glo.UserNo + ",B.Name FROM WF_PowerModel A, Port_Emp B, Port_Deptempstation C WHERE A.PowerCtrlType = 0 AND B.No=C.FK_Emp AND A.StaNo = C.FK_Station";
|
|
|
sql = "SELECT PowerFlag From(" + sql + ")D WHERE D.EmpNo='" + WebUser.No + "'";
|
|
|
|
|
|
string powers = DBAccess.RunSQLReturnStringIsNull(sql, "");
|
|
|
switch (gwf.WFState)
|
|
|
{
|
|
|
case WFState.Runing: /* 运行时*/
|
|
|
/*删除流程.*/
|
|
|
if (powers.Contains("FlowDataDelete") == true || (BP.WF.Dev2Interface.Flow_IsCanDeleteFlowInstance(this.FK_Flow, this.WorkID, WebUser.No) == true && btnLab.DeleteEnable != 0))
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "Delete";
|
|
|
dr["Name"] = btnLab.DeleteLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
///*取回审批*/
|
|
|
//string para = "";
|
|
|
//sql = "SELECT NodeID FROM WF_Node WHERE CheckNodes LIKE '%" + gwf.FK_Node + "%'";
|
|
|
//int myNode = DBAccess.RunSQLReturnValInt(sql, 0);
|
|
|
//if (myNode != 0)
|
|
|
//{
|
|
|
// GetTask gt = new GetTask(myNode);
|
|
|
// if (gt.Can_I_Do_It())
|
|
|
// {
|
|
|
// dr = dt.NewRow();
|
|
|
// dr["No"] = "TackBack";
|
|
|
// dr["Name"] = "取回审批";
|
|
|
// dr["Oper"] = "TackBack(" + gwf.FK_Node + "," + myNode + ")";
|
|
|
// dt.Rows.Add(dr);
|
|
|
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
|
|
|
/*撤销发送*/
|
|
|
sql = "SELECT WorkID,FK_Emp,FK_Node,WhoExeIt From WF_GenerWorkerList WHERE FK_Emp='" + WebUser.No + "' AND ((IsPass=0 AND WhoExeIt=1) OR IsPass=1) AND IsEnable=1 AND WorkID=" + this.WorkID;
|
|
|
DataTable dtt = DBAccess.RunSQLReturnTable(sql);
|
|
|
|
|
|
if (dtt.Rows.Count > 0 || powers.Contains("FlowDataUnSend") == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "UnSend";
|
|
|
dr["Name"] = "撤销";
|
|
|
if(dtt.Rows.Count > 0 && dtt.Rows[0][3].ToString().Equals("1"))
|
|
|
dr["Oper"] = "UnSend(1)";
|
|
|
else
|
|
|
dr["Oper"] = "UnSend()";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
//流程结束
|
|
|
if (powers.Contains("FlowDataOver") == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "EndFlow";
|
|
|
dr["Name"] = btnLab.EndFlowLab;
|
|
|
dr["Oper"] = "DoStop('" + btnLab.EndFlowLab + "','" + this.FK_Flow + "','" + this.WorkID + "');";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
//催办
|
|
|
if (powers.Contains("FlowDataPress") == true ||( gwf.Emps.Contains(WebUser.No) == true && btnLab.PressEnable==true))
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "Press";
|
|
|
dr["Name"] = btnLab.GetValStringByKey(BtnAttr.PressLab);
|
|
|
dr["Oper"] = "Press();";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
break;
|
|
|
case WFState.Complete: // 完成.
|
|
|
case WFState.Delete: // 逻辑删除..
|
|
|
/*恢复使用流程*/
|
|
|
if (WebUser.No.Equals("admin") == true || powers.Contains("FlowDataRollback") == true || (gwf.Emps.Contains(WebUser.No) == true && btnLab.GetValBooleanByKey(BtnAttr.RollbackEnable) == true))
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "Rollback";
|
|
|
dr["Name"] = btnLab.GetValStringByKey(BtnAttr.RollbackLab);
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (btnLab.GetValBooleanByKey(BtnAttr.ShowParentFormEnableMyView) && this.PWorkID != 0)
|
|
|
{
|
|
|
/*如果要查看父流程.*/
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "ParentForm";
|
|
|
dr["Name"] = btnLab.ShowParentFormLab;
|
|
|
dr["Oper"] = "";
|
|
|
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
if (btnLab.GetValBooleanByKey(BtnAttr.TrackEnableMyView))
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "Track";
|
|
|
dr["Name"] = btnLab.TrackLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
|
|
|
#endregion 根据流程权限控制规则获取可以操作的按钮功能
|
|
|
|
|
|
#region 加载流程查看器 - 按钮
|
|
|
|
|
|
/* 判断是否是分合流? 从而增加子线程按钮.*/
|
|
|
if (gwf.WFState == WFState.Runing)
|
|
|
{
|
|
|
if (nd.IsFLHL == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "Thread";
|
|
|
dr["Name"] = btnLab.ThreadLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* 打包下载zip */
|
|
|
if (btnLab.PrintZipMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PackUp_zip";
|
|
|
dr["Name"] = btnLab.PrintZipLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
/* 打包下载html */
|
|
|
if (btnLab.PrintHtmlMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PackUp_html";
|
|
|
dr["Name"] = btnLab.PrintHtmlLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
/* 打包下载pdf */
|
|
|
if (btnLab.PrintPDFMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PackUp_pdf";
|
|
|
dr["Name"] = btnLab.PrintPDFLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
if (btnLab.PrintDocEnable == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PrintDoc";
|
|
|
dr["Name"] = btnLab.PrintDocLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
/**数据库版本*/
|
|
|
if (btnLab.FrmDBVerMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "FrmDBVer";
|
|
|
dr["Name"] = btnLab.FrmDBVerLab;
|
|
|
dr["Oper"] = "FrmDBVer_Init()";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
//数据批阅
|
|
|
if (btnLab.GetValIntByKey(BtnAttr.FrmDBRemarkEnableMyView) != 0)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "FrmDBRemark";
|
|
|
dr["Name"] = btnLab.FrmDBRemarkLab;
|
|
|
dr["Oper"] = "FrmDBRemark("+ btnLab.FrmDBRemarkEnable+")";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
//评论
|
|
|
if (btnLab.FlowBBSRole != 0)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "FlowBBS";
|
|
|
dr["Name"] = btnLab.FlowBBSLab;
|
|
|
dr["Oper"] = btnLab.FlowBBSRole;
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
/* 公文标签 */
|
|
|
if (btnLab.OfficeBtnEnable == true && btnLab.OfficeBtnLocal == 0)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "DocWord";
|
|
|
dr["Name"] = btnLab.OfficeBtnLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
#endregion 加载流程查看器 - 按钮
|
|
|
|
|
|
#region 加载自定义的button.
|
|
|
BP.WF.Template.NodeToolbars bars = new NodeToolbars();
|
|
|
bars.Retrieve(NodeToolbarAttr.FK_Node, this.FK_Node, NodeToolbarAttr.IsMyView, 1, NodeToolbarAttr.Idx);
|
|
|
foreach (NodeToolbar bar in bars)
|
|
|
{
|
|
|
|
|
|
if (bar.ExcType == 1 || (!DataType.IsNullOrEmpty(bar.Target) == false && bar.Target.ToLower() == "javascript"))
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "NodeToolBar";
|
|
|
dr["Name"] = bar.Title;
|
|
|
dr["Oper"] = bar.Url;
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string urlr3 = bar.Url + "&FK_Node=" + this.FK_Node + "&FID=" + this.FID + "&WorkID=" + this.WorkID + "&FK_Flow=" + this.FK_Flow + "&s=" + tKey;
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "NodeToolBar";
|
|
|
dr["Name"] = bar.Title;
|
|
|
dr["Oper"] = "WinOpen('" + urlr3 + "')";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
}
|
|
|
#endregion //加载自定义的button.
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
BP.DA.Log.DebugWriteError(ex);
|
|
|
toolbar = "err@" + ex.Message;
|
|
|
}
|
|
|
return BP.Tools.Json.ToJson(dt);
|
|
|
}
|
|
|
|
|
|
public string MyFrm_InitToolBar()
|
|
|
{
|
|
|
DataTable dt = new DataTable("ToolBar");
|
|
|
dt.Columns.Add("No");
|
|
|
dt.Columns.Add("Name");
|
|
|
dt.Columns.Add("Oper");
|
|
|
|
|
|
BtnLab btnLab = new BtnLab(this.FK_Node);
|
|
|
string tKey = DateTime.Now.ToString("MM-dd-hh:mm:ss");
|
|
|
string toolbar = "";
|
|
|
try
|
|
|
{
|
|
|
DataRow dr = dt.NewRow();
|
|
|
dr["No"] = "Close";
|
|
|
dr["Name"] = "关闭";
|
|
|
dr["Oper"] = "Close();";
|
|
|
dt.Rows.Add(dr);
|
|
|
|
|
|
GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);
|
|
|
|
|
|
#region 根据流程权限控制规则获取可以操作的按钮功能
|
|
|
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "Track";
|
|
|
dr["Name"] = "轨迹";
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
#endregion 根据流程权限控制规则获取可以操作的按钮功能
|
|
|
|
|
|
#region 加载流程查看器 - 按钮
|
|
|
|
|
|
/* 打包下载zip */
|
|
|
if (btnLab.PrintZipMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PackUp_zip";
|
|
|
dr["Name"] = btnLab.PrintZipLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
/* 打包下载html */
|
|
|
if (btnLab.PrintHtmlMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PackUp_html";
|
|
|
dr["Name"] = btnLab.PrintHtmlLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
|
|
|
/* 打包下载pdf */
|
|
|
if (btnLab.PrintPDFMyView == true)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "PackUp_pdf";
|
|
|
dr["Name"] = btnLab.PrintPDFLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
/* 公文标签 */
|
|
|
if (btnLab.OfficeBtnEnable == true && btnLab.OfficeBtnLocal == 0)
|
|
|
{
|
|
|
dr = dt.NewRow();
|
|
|
dr["No"] = "DocWord";
|
|
|
dr["Name"] = btnLab.OfficeBtnLab;
|
|
|
dr["Oper"] = "";
|
|
|
dt.Rows.Add(dr);
|
|
|
}
|
|
|
#endregion 加载流程查看器 - 按钮
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
BP.DA.Log.DebugWriteError(ex);
|
|
|
toolbar = "err@" + ex.Message;
|
|
|
}
|
|
|
return BP.Tools.Json.ToJson(dt);
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 撤销
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public string MyView_UnSend()
|
|
|
{
|
|
|
bool isUnDelayedSend = this.GetRequestValBoolen("IsUnDelayedSend");
|
|
|
//是否撤销延期发送
|
|
|
if(isUnDelayedSend == true)
|
|
|
{
|
|
|
GenerWorkerList gwl = new GenerWorkerList();
|
|
|
int i = gwl.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.FK_Node, GenerWorkerListAttr.FK_Emp, WebUser.No);
|
|
|
if (i != 0)
|
|
|
{
|
|
|
gwl.WhoExeIt = 0;
|
|
|
gwl.SetPara("Day",0);
|
|
|
gwl.SetPara("hour", 0);
|
|
|
gwl.SetPara("Minute", 0);
|
|
|
gwl.SetPara("DelayedData", "");
|
|
|
gwl.SetPara("ToNodeID", 0);
|
|
|
gwl.SetPara("ToEmps", "");
|
|
|
gwl.Update();
|
|
|
}
|
|
|
return "撤销成功";
|
|
|
}
|
|
|
//获取用户当前所在的节点
|
|
|
String currNode = "";
|
|
|
switch (DBAccess.AppCenterDBType)
|
|
|
{
|
|
|
case DBType.Oracle:
|
|
|
case DBType.KingBaseR3:
|
|
|
case DBType.KingBaseR6:
|
|
|
currNode = "SELECT FK_Node FROM (SELECT FK_Node FROM WF_GenerWorkerlist WHERE FK_Emp='" + WebUser.No + "' Order by RDT DESC ) WHERE rownum=1";
|
|
|
break;
|
|
|
case DBType.MySQL:
|
|
|
case DBType.PostgreSQL:
|
|
|
case DBType.UX:
|
|
|
currNode = "SELECT FK_Node FROM WF_GenerWorkerlist WHERE FK_Emp='" + WebUser.No + "' Order by RDT DESC LIMIT 1";
|
|
|
break;
|
|
|
case DBType.MSSQL:
|
|
|
currNode = "SELECT TOP 1 FK_Node FROM WF_GenerWorkerlist WHERE FK_Emp='" + WebUser.No + "' Order by RDT DESC";
|
|
|
break;
|
|
|
default:
|
|
|
currNode = "SELECT FK_Node FROM WF_GenerWorkerlist WHERE FK_Emp='" + WebUser.No + "' Order by RDT DESC";
|
|
|
break;
|
|
|
}
|
|
|
String unSendToNode = DBAccess.RunSQLReturnString(currNode);
|
|
|
if (DataType.IsNullOrEmpty(unSendToNode) == true)
|
|
|
return "err@你没有撤销当前流程的权限";
|
|
|
try
|
|
|
{
|
|
|
return BP.WF.Dev2Interface.Flow_DoUnSend(this.FK_Flow, this.WorkID, int.Parse(unSendToNode), this.FID);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
return "err@" + ex.Message;
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 是否可以查看工作.
|
|
|
/// </summary>
|
|
|
/// <param name="gwf"></param>
|
|
|
/// <returns></returns>
|
|
|
public bool IsCanView(GenerWorkFlow gwf)
|
|
|
{
|
|
|
//是否可以处理当前工作?
|
|
|
bool isCanDoCurrWorker = gwf.TodoEmps.Contains(WebUser.No + "," + WebUser.Name + ";");
|
|
|
// bool isCanDoCurrWorker = gwf.TodoEmps.Contains(WebUser.No + ",");
|
|
|
|
|
|
if (isCanDoCurrWorker)
|
|
|
return true;
|
|
|
|
|
|
//如果是发起人.
|
|
|
if (gwf.Starter.Equals(WebUser.No))
|
|
|
return true;
|
|
|
|
|
|
//如果是本部门发起的.
|
|
|
if (gwf.FK_Dept.Equals(WebUser.FK_Dept))
|
|
|
return true;
|
|
|
|
|
|
//是否是工作参与人?
|
|
|
string emps = gwf.Emps;
|
|
|
if (DataType.IsNullOrEmpty(emps) == false)
|
|
|
emps += "@";
|
|
|
bool isWorker = gwf.Emps.Contains("@" + WebUser.No + "," + WebUser.Name);
|
|
|
if (isWorker == true || emps.Contains("@" + WebUser.No + "@") == true)
|
|
|
return true;
|
|
|
|
|
|
if (WebUser.No.Equals("admin") == true)
|
|
|
return true;
|
|
|
|
|
|
if (WebUser.IsAdmin == true && gwf.OrgNo.Equals(WebUser.OrgNo) == true)
|
|
|
return true;
|
|
|
|
|
|
//处理流程控制权限.
|
|
|
TruckViewPower viewEn = new TruckViewPower(gwf.FK_Flow);
|
|
|
|
|
|
#region 基本权限控制.
|
|
|
//如果任何人可见.
|
|
|
if (viewEn.PAnyOne == true)
|
|
|
return true;
|
|
|
|
|
|
if (viewEn.PSpecDept == true && DataType.IsNullOrEmpty(viewEn.PSpecDeptExt) == false)
|
|
|
{
|
|
|
viewEn.PSpecDeptExt += ",";
|
|
|
if (viewEn.PSpecDeptExt.Equals(WebUser.FK_Dept + ",") == true)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
#endregion 基本权限控制.
|
|
|
|
|
|
#region 按照部门控制.
|
|
|
//本部门可见.
|
|
|
if (viewEn.PMyDept == true)
|
|
|
{
|
|
|
if (gwf.FK_Dept.Equals(WebUser.FK_Dept) == true)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
//直属上级部门可看(比如:我是).
|
|
|
if (viewEn.PPMyDept == true)
|
|
|
{
|
|
|
//上级部门可见.
|
|
|
Dept dept = new Dept(gwf.FK_Dept);
|
|
|
if (dept.ParentNo.Equals(WebUser.FK_Dept) == true)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
//上级部门可看
|
|
|
if (viewEn.PPMyDept == true)
|
|
|
{
|
|
|
//上级部门可见.
|
|
|
Dept dept = new Dept(gwf.FK_Dept);
|
|
|
if (dept.ParentNo.Equals(WebUser.FK_Dept) == true)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
//同级部门可见.
|
|
|
if (viewEn.PSameDept == true)
|
|
|
{
|
|
|
//如果发起人的部门,与当前人员的部门是同一级部门.
|
|
|
Dept dept = new Dept(gwf.FK_Dept);
|
|
|
Dept mydept = new Dept(WebUser.FK_Dept);
|
|
|
if (mydept.ParentNo.Equals(dept.ParentNo) == true)
|
|
|
return true;
|
|
|
}
|
|
|
#endregion 按照部门控制.
|
|
|
if (viewEn.PSpecSta == true && DataType.IsNullOrEmpty(viewEn.PSpecStaExt) == false)
|
|
|
{
|
|
|
string sql = "Select FK_Station From Port_DeptEmpStation Where FK_Emp='" + WebUser.No + "'";
|
|
|
string stas = DBAccess.RunSQLReturnStringIsNull(sql, "");
|
|
|
if (DataType.IsNullOrEmpty(stas) == false)
|
|
|
{
|
|
|
viewEn.PSpecStaExt += ",";
|
|
|
foreach (string sta in stas.Split(','))
|
|
|
if (viewEn.PSpecStaExt.Equals(sta + ",") == true)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
#region 指定角色可见
|
|
|
#endregion 指定角色可见
|
|
|
|
|
|
#region 指定人员可见
|
|
|
if (viewEn.PSpecEmp == true && DataType.IsNullOrEmpty(viewEn.PSpecEmpExt) == false)
|
|
|
{
|
|
|
viewEn.PSpecEmpExt += ",";
|
|
|
if (viewEn.PSpecEmpExt.Equals(WebUser.No + ",") == true)
|
|
|
return true;
|
|
|
}
|
|
|
#endregion 指定人员可见
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 初始化(处理分发)
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public string MyView_Init()
|
|
|
{
|
|
|
//获得注册实体.
|
|
|
GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);
|
|
|
if (gwf.WFState == WFState.Delete)
|
|
|
return "err@当前流程已经删除无法查看.";
|
|
|
|
|
|
if (gwf.WFState == WFState.Blank)
|
|
|
return "err@当前流程还没有启动.";
|
|
|
|
|
|
if (gwf.WFState == WFState.Draft)
|
|
|
return "err@当前流程还是草稿.";
|
|
|
|
|
|
//是否可以处理当前工作?
|
|
|
bool isCanDoCurrWorker = false;
|
|
|
|
|
|
string toDoEmps = ";" + gwf.TodoEmps;
|
|
|
bool isReadonly = this.GetRequestValBoolen("IsReadonly");
|
|
|
//当前的流程还是运行中的,并且可以执行当前工作,如果是,就直接转到工作处理器.
|
|
|
if (gwf.FID != 0)
|
|
|
{
|
|
|
Node nd = new Node(gwf.FK_Node);
|
|
|
if (nd.IsSubThread ==true && toDoEmps.Contains(";" + WebUser.No + ",") && isReadonly==false)
|
|
|
{
|
|
|
WF_MyFlow handler = new WF_MyFlow();
|
|
|
return handler.MyFlow_Init();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (gwf.FID == 0 && gwf.WFState != WFState.Complete && toDoEmps.Contains(";" + WebUser.No + ",") && isReadonly == false)
|
|
|
{
|
|
|
WF_MyFlow handler = new WF_MyFlow();
|
|
|
return handler.MyFlow_Init();
|
|
|
}
|
|
|
|
|
|
//是否是工作参与人?
|
|
|
bool isWorker = gwf.Emps.Contains("@" + WebUser.No + "," + WebUser.Name);
|
|
|
if (isWorker == true || WebUser.No.Equals("admin") == true
|
|
|
|| WebUser.IsAdmin == true)
|
|
|
{
|
|
|
//可以查看工作,就执行以后的.
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//判断是否是抄送人员?
|
|
|
CCList list = new CCList();
|
|
|
bool isExit = list.IsExit(CCListAttr.WorkID, this.WorkID,
|
|
|
CCListAttr.CCTo, WebUser.No);
|
|
|
//如果是抄送人员.
|
|
|
if (isExit == true)
|
|
|
{
|
|
|
//是一个抄送人员.
|
|
|
WF_MyCC mycc = new WF_MyCC();
|
|
|
return mycc.MyCC_Init();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (IsCanView(gwf) == false)
|
|
|
{
|
|
|
string msg = "err@您无权查看该工作,";
|
|
|
msg += "\t\n如下情况可以查看该工作.";
|
|
|
msg += "\t\n1. 该流程发起人, 审批人,抄送人,可以查看.";
|
|
|
msg += "\t\n2. 默认与发起人是同一个部门的人可以查看.";
|
|
|
msg += "\t\n3. 二级管理员可以查看本组织的工作.";
|
|
|
msg += "\t\n4. 超级管理员可以查看.";
|
|
|
msg += "\t\n5. 流程属性的权限控制设置权限的人可以查看.";
|
|
|
msg += "\t\n6. 如果该流程的数据,任何人都可以查看,请在流程属性里设置权限控制,任何人可见.";
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
#region 处理表单类型.
|
|
|
if (this.currND.HisFormType == NodeFormType.SheetTree
|
|
|
|| this.currND.HisFormType == NodeFormType.SheetAutoTree
|
|
|
|| this.currFlow.FlowDevModel == FlowDevModel.FrmTree)
|
|
|
{
|
|
|
|
|
|
#region 开始组合url.
|
|
|
string toUrl = "";
|
|
|
|
|
|
if (this.IsMobile == true)
|
|
|
{
|
|
|
if (gwf.Paras_Frms.Equals("") == false)
|
|
|
toUrl = "MyViewGener.htm?WorkID=" + this.WorkID + "&FK_Flow=" + this.FK_Flow + "&UserNo=" + WebUser.No + "&FID=" + this.FID + "&Token=" + WebUser.Token + "&PFlowNo=" + gwf.PFlowNo + "&PNodeID=" + gwf.PNodeID + "&PWorkID=" + gwf.PWorkID + "&Frms=" + gwf.Paras_Frms;
|
|
|
else
|
|
|
toUrl = "MyViewGener.htm?WorkID=" + this.WorkID + "&FK_Flow=" + this.FK_Flow + "&UserNo=" + WebUser.No + "&FID=" + this.FID + "&Token=" + WebUser.Token + "&PFlowNo=" + gwf.PFlowNo + "&PNodeID=" + gwf.PNodeID + "&PWorkID=" + gwf.PWorkID;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (gwf.Paras_Frms.Equals("") == false)
|
|
|
toUrl = "MyViewTree.htm?WorkID=" + this.WorkID + "&FK_Flow=" + this.FK_Flow + "&UserNo=" + WebUser.No + "&FID=" + this.FID + "&Token=" + WebUser.Token + "&PFlowNo=" + gwf.PFlowNo + "&PNodeID=" + gwf.PNodeID + "&PWorkID=" + gwf.PWorkID + "&Frms=" + gwf.Paras_Frms;
|
|
|
else
|
|
|
toUrl = "MyViewTree.htm?WorkID=" + this.WorkID + "&FK_Flow=" + this.FK_Flow + "&UserNo=" + WebUser.No + "&FID=" + this.FID + "&Token=" + WebUser.Token + "&PFlowNo=" + gwf.PFlowNo + "&PNodeID=" + gwf.PNodeID + "&PWorkID=" + gwf.PWorkID;
|
|
|
}
|
|
|
|
|
|
string[] strs = this.RequestParas.Split('&');
|
|
|
foreach (string str in strs)
|
|
|
{
|
|
|
if (toUrl.Contains(str) == true)
|
|
|
continue;
|
|
|
if (str.Contains("DoType=") == true)
|
|
|
continue;
|
|
|
if (str.Contains("DoMethod=") == true)
|
|
|
continue;
|
|
|
if (str.Contains("HttpHandlerName=") == true)
|
|
|
continue;
|
|
|
if (str.Contains("IsLoadData=") == true)
|
|
|
continue;
|
|
|
if (str.Contains("IsCheckGuide=") == true)
|
|
|
continue;
|
|
|
|
|
|
toUrl += "&" + str;
|
|
|
}
|
|
|
foreach (string key in HttpContextHelper.RequestParamKeys)
|
|
|
{
|
|
|
if (toUrl.Contains(key + "=") == true)
|
|
|
continue;
|
|
|
toUrl += "&" + key + "=" + HttpContextHelper.RequestParams(key);
|
|
|
}
|
|
|
#endregion 开始组合url.
|
|
|
|
|
|
//增加fk_node
|
|
|
if (toUrl.Contains("&FK_Node=") == false)
|
|
|
toUrl += "&FK_Node=" + this.currND.NodeID;
|
|
|
return "url@" + toUrl;
|
|
|
}
|
|
|
|
|
|
if (this.currND.HisFormType == NodeFormType.SDKForm
|
|
|
|| this.currFlow.FlowDevModel == FlowDevModel.SDKFrmSelfPK
|
|
|
|| this.currFlow.FlowDevModel == FlowDevModel.SDKFrmWorkID)
|
|
|
{
|
|
|
string url = currND.FormUrl;
|
|
|
if (DataType.IsNullOrEmpty(url))
|
|
|
{
|
|
|
return "err@设置读取状流程设计错误态错误,没有设置表单url.";
|
|
|
}
|
|
|
|
|
|
//处理连接.
|
|
|
url = this.MyView_Init_DealUrl(currND, url);
|
|
|
|
|
|
//sdk表单就让其跳转.
|
|
|
return "url@" + url;
|
|
|
}
|
|
|
#endregion 处理表单类型.
|
|
|
|
|
|
//求出当前节点frm的类型.
|
|
|
NodeFormType frmtype = this.currND.HisFormType;
|
|
|
if (frmtype != NodeFormType.RefOneFrmTree)
|
|
|
{
|
|
|
currND.WorkID = this.WorkID; //为获取表单ID ( NodeFrmID )提供参数.
|
|
|
|
|
|
if (this.currND.NodeFrmID.Contains(this.currND.NodeID.ToString()) == false)
|
|
|
{
|
|
|
/*如果当前节点引用的其他节点的表单.*/
|
|
|
string nodeFrmID = currND.NodeFrmID;
|
|
|
string refNodeID = nodeFrmID.Replace("ND", "");
|
|
|
BP.WF.Node nd = new Node(int.Parse(refNodeID));
|
|
|
|
|
|
//表单类型.
|
|
|
frmtype = nd.HisFormType;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#region 内置表单类型的判断.
|
|
|
/*如果是傻瓜表单,就转到傻瓜表单的解析执行器上,为软通动力改造。*/
|
|
|
|
|
|
if (frmtype == NodeFormType.FoolTruck)
|
|
|
{
|
|
|
string url = "MyViewGener.htm";
|
|
|
|
|
|
//处理连接.
|
|
|
url = this.MyView_Init_DealUrl(currND, url);
|
|
|
return "url@" + url;
|
|
|
}
|
|
|
|
|
|
if (frmtype == NodeFormType.WebOffice)
|
|
|
{
|
|
|
string url = "MyViewWebOffice.htm";
|
|
|
|
|
|
//处理连接.
|
|
|
url = this.MyView_Init_DealUrl(currND, url);
|
|
|
return "url@" + url;
|
|
|
}
|
|
|
|
|
|
if (frmtype == NodeFormType.FoolForm && this.IsMobile == false)
|
|
|
{
|
|
|
string url = "MyViewGener.htm";
|
|
|
if (this.IsMobile)
|
|
|
url = "MyViewGener.htm";
|
|
|
|
|
|
//处理连接.
|
|
|
url = this.MyView_Init_DealUrl(currND, url);
|
|
|
|
|
|
url = url.Replace("DoType=MyView_Init&", "");
|
|
|
url = url.Replace("&DoWhat=StartClassic", "");
|
|
|
return "url@" + url;
|
|
|
}
|
|
|
|
|
|
//自定义表单
|
|
|
if ((frmtype == NodeFormType.SelfForm || this.currFlow.FlowDevModel == FlowDevModel.SelfFrm) && this.IsMobile == false)
|
|
|
{
|
|
|
|
|
|
string url = "MyViewSelfForm.htm";
|
|
|
|
|
|
//处理连接.
|
|
|
url = this.MyView_Init_DealUrl(currND, url);
|
|
|
|
|
|
url = url.Replace("DoType=MyView_Init&", "");
|
|
|
url = url.Replace("&DoWhat=StartClassic", "");
|
|
|
return "url@" + url;
|
|
|
}
|
|
|
#endregion 内置表单类型的判断.
|
|
|
|
|
|
string myurl = "MyViewGener.htm";
|
|
|
//MapData md = new MapData(this.currND.NodeFrmID);
|
|
|
//if (md.HisFrmType == FrmType.ChapterFrm)
|
|
|
// myurl = "MyViewTree.htm?NodeFrmType=11";
|
|
|
//处理连接.
|
|
|
myurl = this.MyView_Init_DealUrl(currND, myurl);
|
|
|
myurl = myurl.Replace("DoType=MyView_Init&", "");
|
|
|
myurl = myurl.Replace("&DoWhat=StartClassic", "");
|
|
|
|
|
|
return "url@" + myurl;
|
|
|
}
|
|
|
private string MyView_Init_DealUrl(BP.WF.Node currND, string url = null)
|
|
|
{
|
|
|
if (url == null)
|
|
|
url = currND.FormUrl;
|
|
|
|
|
|
string urlExt = this.RequestParas;
|
|
|
//防止查询不到.
|
|
|
urlExt = urlExt.Replace("?WorkID=", "&WorkID=");
|
|
|
if (urlExt.Contains("&WorkID") == false)
|
|
|
{
|
|
|
urlExt += "&WorkID=" + this.WorkID;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
urlExt = urlExt.Replace("&WorkID=0", "&WorkID=" + this.WorkID);
|
|
|
urlExt = urlExt.Replace("&WorkID=&", "&WorkID=" + this.WorkID + "&");
|
|
|
}
|
|
|
|
|
|
//SDK表单上服务器地址,应用到使用ccflow的时候使用的是sdk表单,该表单会存储在其他的服务器上,珠海驰骋提出.
|
|
|
url = url.Replace("@SDKFromServHost", BP.Difference.SystemConfig.AppSettings["SDKFromServHost"]);
|
|
|
|
|
|
if (urlExt.Contains("&NodeID") == false)
|
|
|
urlExt += "&NodeID=" + currND.NodeID;
|
|
|
|
|
|
if (urlExt.Contains("FK_Node") == false)
|
|
|
urlExt += "&FK_Node=" + currND.NodeID;
|
|
|
|
|
|
if (urlExt.Contains("&FID") == false)
|
|
|
urlExt += "&FID=" + this.FID;
|
|
|
|
|
|
if (urlExt.Contains("&UserNo") == false)
|
|
|
urlExt += "&UserNo=" + HttpUtility.UrlEncode(WebUser.No);
|
|
|
|
|
|
if (urlExt.Contains("&Token") == false)
|
|
|
urlExt += "&Token=" + WebUser.Token;
|
|
|
|
|
|
if (url.Contains("?") == true)
|
|
|
url += "&" + urlExt;
|
|
|
else
|
|
|
url += "?" + urlExt;
|
|
|
|
|
|
foreach (string str in HttpContextHelper.RequestParamKeys)
|
|
|
{
|
|
|
if (DataType.IsNullOrEmpty(str) == true || str.ToLower().Equals("t") == true)
|
|
|
continue;
|
|
|
if (url.Contains(str + "=") == true)
|
|
|
continue;
|
|
|
url += "&" + str + "=" + this.GetRequestVal(str);
|
|
|
}
|
|
|
|
|
|
url = url.Replace("?&", "?");
|
|
|
url = url.Replace("&&", "&");
|
|
|
return url;
|
|
|
}
|
|
|
|
|
|
|
|
|
#region 表单树操作
|
|
|
/// <summary>
|
|
|
/// 获取表单树数据
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public string FlowFormTree_Init()
|
|
|
{
|
|
|
BP.WF.Template.FlowFormTrees appFlowFormTree = new FlowFormTrees();
|
|
|
|
|
|
//add root
|
|
|
BP.WF.Template.FlowFormTree root = new BP.WF.Template.FlowFormTree();
|
|
|
root.No = "1";
|
|
|
root.ParentNo = "0";
|
|
|
root.Name = "目录";
|
|
|
root.NodeType = "root";
|
|
|
appFlowFormTree.AddEntity(root);
|
|
|
|
|
|
#region 添加表单及文件夹
|
|
|
|
|
|
//节点表单
|
|
|
BP.WF.Node nd = new BP.WF.Node(this.FK_Node);
|
|
|
|
|
|
FrmNodes frmNodes = new FrmNodes();
|
|
|
frmNodes.Retrieve(FrmNodeAttr.FK_Node, this.FK_Node, FrmNodeAttr.Idx);
|
|
|
|
|
|
//文件夹
|
|
|
//SysFormTrees formTrees = new SysFormTrees();
|
|
|
//formTrees.RetrieveAll(SysFormTreeAttr.Name);
|
|
|
|
|
|
//所有表单集合. 为了优化效率,这部分重置了一下.
|
|
|
MapDatas mds = new MapDatas();
|
|
|
if (frmNodes.Count <= 3)
|
|
|
{
|
|
|
foreach (FrmNode fn in frmNodes)
|
|
|
{
|
|
|
MapData md = new MapData(fn.FK_Frm);
|
|
|
mds.AddEntity(md);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
mds.RetrieveInSQL("SELECT FK_Frm FROM WF_FrmNode WHERE FK_Node=" + this.FK_Node);
|
|
|
}
|
|
|
|
|
|
|
|
|
string frms = HttpContextHelper.RequestParams("Frms");
|
|
|
GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);
|
|
|
if (DataType.IsNullOrEmpty(frms) == true)
|
|
|
{
|
|
|
frms = gwf.Paras_Frms;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
gwf.Paras_Frms = frms;
|
|
|
gwf.Update();
|
|
|
}
|
|
|
|
|
|
foreach (FrmNode frmNode in frmNodes)
|
|
|
{
|
|
|
#region 增加判断是否启用规则.
|
|
|
switch (frmNode.FrmEnableRole)
|
|
|
{
|
|
|
case FrmEnableRole.Allways:
|
|
|
break;
|
|
|
case FrmEnableRole.WhenHaveData: //判断是否有数据.
|
|
|
MapData md = mds.GetEntityByKey(frmNode.FK_Frm) as MapData;
|
|
|
if (md == null)
|
|
|
continue;
|
|
|
Int64 pk = this.WorkID;
|
|
|
switch (frmNode.WhoIsPK)
|
|
|
{
|
|
|
case WhoIsPK.FID:
|
|
|
pk = this.FID;
|
|
|
break;
|
|
|
case WhoIsPK.PWorkID:
|
|
|
pk = this.PWorkID;
|
|
|
break;
|
|
|
case WhoIsPK.CWorkID:
|
|
|
pk = this.CWorkID;
|
|
|
break;
|
|
|
case WhoIsPK.OID:
|
|
|
default:
|
|
|
pk = this.WorkID;
|
|
|
break;
|
|
|
}
|
|
|
if (DBAccess.RunSQLReturnValInt("SELECT COUNT(*) as Num FROM " + md.PTable + " WHERE OID=" + pk) == 0)
|
|
|
continue;
|
|
|
break;
|
|
|
case FrmEnableRole.WhenHaveFrmPara: //判断是否有参数.
|
|
|
|
|
|
frms = frms.Trim();
|
|
|
frms = frms.Replace(" ", "");
|
|
|
frms = frms.Replace(" ", "");
|
|
|
|
|
|
if (DataType.IsNullOrEmpty(frms) == true)
|
|
|
{
|
|
|
continue;
|
|
|
//return "err@当前表单设置为仅有参数的时候启用,但是没有传递来参数.";
|
|
|
}
|
|
|
|
|
|
if (frms.Contains(",") == false)
|
|
|
{
|
|
|
if (frms != frmNode.FK_Frm)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (frms.Contains(",") == true)
|
|
|
{
|
|
|
if (frms.Contains(frmNode.FK_Frm + ",") == false)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case FrmEnableRole.ByFrmFields:
|
|
|
throw new Exception("@这种类型的判断,ByFrmFields 还没有完成。");
|
|
|
|
|
|
case FrmEnableRole.BySQL: // 按照SQL的方式.
|
|
|
string mysql = frmNode.FrmEnableExp.Clone() as string;
|
|
|
|
|
|
if (DataType.IsNullOrEmpty(mysql) == true)
|
|
|
{
|
|
|
MapData FrmMd = new MapData(frmNode.FK_Frm);
|
|
|
return "err@表单" + frmNode.FK_Frm + ",[" + FrmMd.Name + "]在节点[" + frmNode.FK_Node + "]启用方式按照sql启用但是您没有给他设置sql表达式.";
|
|
|
}
|
|
|
|
|
|
|
|
|
mysql = mysql.Replace("@OID", this.WorkID.ToString());
|
|
|
mysql = mysql.Replace("@WorkID", this.WorkID.ToString());
|
|
|
|
|
|
mysql = mysql.Replace("@NodeID", this.FK_Node.ToString());
|
|
|
mysql = mysql.Replace("@FK_Node", this.FK_Node.ToString());
|
|
|
|
|
|
mysql = mysql.Replace("@FK_Flow", this.FK_Flow);
|
|
|
|
|
|
mysql = mysql.Replace("@WebUser.No", WebUser.No);
|
|
|
mysql = mysql.Replace("@WebUser.Name", WebUser.Name);
|
|
|
mysql = mysql.Replace("@WebUser.FK_Dept", WebUser.FK_Dept);
|
|
|
|
|
|
|
|
|
//替换特殊字符.
|
|
|
mysql = mysql.Replace("~", "'");
|
|
|
|
|
|
if (DBAccess.RunSQLReturnValFloat(mysql) <= 0)
|
|
|
continue;
|
|
|
break;
|
|
|
|
|
|
case FrmEnableRole.ByStation:
|
|
|
string exp = frmNode.FrmEnableExp.Clone() as string;
|
|
|
string Sql = "SELECT FK_Station FROM Port_DeptEmpStation where FK_Emp='" + WebUser.No + "'";
|
|
|
string station = DBAccess.RunSQLReturnString(Sql);
|
|
|
if (DataType.IsNullOrEmpty(station) == true)
|
|
|
continue;
|
|
|
string[] stations = station.Split(';');
|
|
|
bool isExit = false;
|
|
|
foreach (string s in stations)
|
|
|
{
|
|
|
if (exp.Contains(s) == true)
|
|
|
{
|
|
|
isExit = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (isExit == false)
|
|
|
continue;
|
|
|
break;
|
|
|
|
|
|
case FrmEnableRole.ByDept:
|
|
|
exp = frmNode.FrmEnableExp.Clone() as string;
|
|
|
Sql = "SELECT FK_Dept FROM Port_DeptEmp where FK_Emp='" + WebUser.No + "'";
|
|
|
string dept = DBAccess.RunSQLReturnString(Sql);
|
|
|
if (DataType.IsNullOrEmpty(dept) == true)
|
|
|
continue;
|
|
|
string[] deptStrs = dept.Split(';');
|
|
|
isExit = false;
|
|
|
foreach (string s in deptStrs)
|
|
|
{
|
|
|
if (exp.Contains(s) == true)
|
|
|
{
|
|
|
isExit = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (isExit == false)
|
|
|
continue;
|
|
|
|
|
|
break;
|
|
|
case FrmEnableRole.Disable: // 如果禁用了,就continue出去..
|
|
|
continue;
|
|
|
default:
|
|
|
throw new Exception("@没有判断的规则." + frmNode.FrmEnableRole);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
#region 检查是否有没有目录的表单?
|
|
|
bool isHave = false;
|
|
|
foreach (MapData md in mds)
|
|
|
{
|
|
|
if (md.FK_FormTree == "")
|
|
|
{
|
|
|
isHave = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
string treeNo = "0";
|
|
|
if (isHave && mds.Count == 1)
|
|
|
{
|
|
|
treeNo = "00";
|
|
|
}
|
|
|
else if (isHave == true)
|
|
|
{
|
|
|
foreach (MapData md in mds)
|
|
|
{
|
|
|
if (md.FK_FormTree != "")
|
|
|
{
|
|
|
treeNo = md.FK_FormTree;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
#endregion 检查是否有没有目录的表单?
|
|
|
|
|
|
foreach (MapData md in mds)
|
|
|
{
|
|
|
if (frmNode.FK_Frm != md.No)
|
|
|
continue;
|
|
|
|
|
|
if (md.FK_FormTree == "")
|
|
|
md.FK_FormTree = treeNo;
|
|
|
|
|
|
//给他增加目录.
|
|
|
if (appFlowFormTree.Contains("Name", md.FK_FormTreeText) == false)
|
|
|
{
|
|
|
BP.WF.Template.FlowFormTree nodeFolder = new BP.WF.Template.FlowFormTree();
|
|
|
nodeFolder.No = md.FK_FormTree;
|
|
|
nodeFolder.ParentNo = "1";
|
|
|
nodeFolder.Name = md.FK_FormTreeText;
|
|
|
nodeFolder.NodeType = "folder";
|
|
|
appFlowFormTree.AddEntity(nodeFolder);
|
|
|
}
|
|
|
|
|
|
//检查必填项.
|
|
|
bool IsNotNull = false;
|
|
|
FrmFields formFields = new FrmFields();
|
|
|
QueryObject obj = new QueryObject(formFields);
|
|
|
obj.AddWhere(FrmFieldAttr.FK_Node, this.FK_Node);
|
|
|
obj.addAnd();
|
|
|
obj.AddWhere(FrmFieldAttr.FK_MapData, md.No);
|
|
|
obj.addAnd();
|
|
|
obj.AddWhere(FrmFieldAttr.IsNotNull, 1);
|
|
|
obj.DoQuery();
|
|
|
if (formFields != null && formFields.Count > 0)
|
|
|
IsNotNull = true;
|
|
|
|
|
|
BP.WF.Template.FlowFormTree nodeForm = new BP.WF.Template.FlowFormTree();
|
|
|
nodeForm.No = md.No;
|
|
|
nodeForm.ParentNo = md.FK_FormTree;
|
|
|
|
|
|
//设置他的表单显示名字. 2019.09.30
|
|
|
string frmName = md.Name;
|
|
|
FrmNode fn = frmNodes.GetEntityByKey(FrmNodeAttr.FK_Frm, md.No) as FrmNode;
|
|
|
if (fn != null)
|
|
|
{
|
|
|
string str = fn.FrmNameShow;
|
|
|
if (DataType.IsNullOrEmpty(str) == false)
|
|
|
frmName = str;
|
|
|
}
|
|
|
nodeForm.Name = frmName;
|
|
|
nodeForm.NodeType = IsNotNull ? "form|1" : "form|0";
|
|
|
nodeForm.IsEdit = frmNode.IsEditInt.ToString();// Convert.ToString(Convert.ToInt32(frmNode.IsEdit));
|
|
|
nodeForm.IsCloseEtcFrm = frmNode.IsCloseEtcFrmInt.ToString();
|
|
|
appFlowFormTree.AddEntity(nodeForm);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
//扩展工具,显示位置为表单树类型.
|
|
|
|
|
|
//增加到数据结构上去.
|
|
|
TansEntitiesToGenerTree(appFlowFormTree, root.No, "");
|
|
|
|
|
|
|
|
|
return appendMenus.ToString();
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 将实体转为树形
|
|
|
/// </summary>
|
|
|
/// <param name="ens"></param>
|
|
|
/// <param name="rootNo"></param>
|
|
|
/// <param name="checkIds"></param>
|
|
|
StringBuilder appendMenus = new StringBuilder();
|
|
|
StringBuilder appendMenuSb = new StringBuilder();
|
|
|
public void TansEntitiesToGenerTree(Entities ens, string rootNo, string checkIds)
|
|
|
{
|
|
|
EntityTree root = ens.GetEntityByKey(rootNo) as EntityTree;
|
|
|
if (root == null)
|
|
|
throw new Exception("@没有找到rootNo=" + rootNo + "的entity.");
|
|
|
appendMenus.Append("[{");
|
|
|
appendMenus.Append("\"id\":\"" + rootNo + "\"");
|
|
|
appendMenus.Append(",\"text\":\"" + root.Name + "\"");
|
|
|
|
|
|
//attributes
|
|
|
BP.WF.Template.FlowFormTree formTree = root as BP.WF.Template.FlowFormTree;
|
|
|
if (formTree != null)
|
|
|
{
|
|
|
string url = formTree.Url == null ? "" : formTree.Url;
|
|
|
url = url.Replace("/", "|");
|
|
|
appendMenus.Append(",\"attributes\":{\"NodeType\":\"" + formTree.NodeType + "\",\"IsEdit\":\"" + formTree.IsEdit + "\",\"IsCloseEtcFrm\":\"" + formTree.IsCloseEtcFrm + "\",\"Url\":\"" + url + "\"}");
|
|
|
}
|
|
|
appendMenus.Append(",iconCls:\"icon-Wave\"");
|
|
|
// 增加它的子级.
|
|
|
appendMenus.Append(",\"children\":");
|
|
|
AddChildren(root, ens, checkIds);
|
|
|
|
|
|
appendMenus.Append(appendMenuSb);
|
|
|
appendMenus.Append("}]");
|
|
|
}
|
|
|
|
|
|
private void AddChildren(EntityTree parentEn, Entities ens, string checkIds)
|
|
|
{
|
|
|
appendMenus.Append(appendMenuSb);
|
|
|
appendMenuSb.Clear();
|
|
|
|
|
|
appendMenuSb.Append("[");
|
|
|
foreach (EntityTree item in ens)
|
|
|
{
|
|
|
if (item.ParentNo != parentEn.No)
|
|
|
continue;
|
|
|
|
|
|
if (checkIds.Contains("," + item.No + ","))
|
|
|
appendMenuSb.Append("{\"id\":\"" + item.No + "\",\"text\":\"" + item.Name + "\",\"checked\":true");
|
|
|
else
|
|
|
appendMenuSb.Append("{\"id\":\"" + item.No + "\",\"text\":\"" + item.Name + "\",\"checked\":false");
|
|
|
|
|
|
|
|
|
//attributes
|
|
|
BP.WF.Template.FlowFormTree formTree = item as BP.WF.Template.FlowFormTree;
|
|
|
if (formTree != null)
|
|
|
{
|
|
|
string url = formTree.Url == null ? "" : formTree.Url;
|
|
|
string ico = "icon-tree_folder";
|
|
|
if (BP.Difference.SystemConfig.SysNo == "YYT")
|
|
|
{
|
|
|
ico = "icon-boat_16";
|
|
|
}
|
|
|
url = url.Replace("/", "|");
|
|
|
appendMenuSb.Append(",\"attributes\":{\"NodeType\":\"" + formTree.NodeType + "\",\"IsEdit\":\"" + formTree.IsEdit + "\",\"IsCloseEtcFrm\":\"" + formTree.IsCloseEtcFrm + "\",\"Url\":\"" + url + "\"}");
|
|
|
//图标
|
|
|
if (formTree.NodeType == "form|0")
|
|
|
{
|
|
|
ico = "form0";
|
|
|
if (BP.Difference.SystemConfig.SysNo == "YYT")
|
|
|
{
|
|
|
ico = "icon-Wave";
|
|
|
}
|
|
|
}
|
|
|
if (formTree.NodeType == "form|1")
|
|
|
{
|
|
|
ico = "form1";
|
|
|
if (BP.Difference.SystemConfig.SysNo == "YYT")
|
|
|
{
|
|
|
ico = "icon-Shark_20";
|
|
|
}
|
|
|
}
|
|
|
if (formTree.NodeType.Contains("tools"))
|
|
|
{
|
|
|
ico = "icon-4";
|
|
|
if (BP.Difference.SystemConfig.SysNo == "YYT")
|
|
|
{
|
|
|
ico = "icon-Wave";
|
|
|
}
|
|
|
}
|
|
|
appendMenuSb.Append(",iconCls:\"");
|
|
|
appendMenuSb.Append(ico);
|
|
|
appendMenuSb.Append("\"");
|
|
|
}
|
|
|
// 增加它的子级.
|
|
|
appendMenuSb.Append(",\"children\":");
|
|
|
AddChildren(item, ens, checkIds);
|
|
|
appendMenuSb.Append("},");
|
|
|
}
|
|
|
if (appendMenuSb.Length > 1)
|
|
|
appendMenuSb = appendMenuSb.Remove(appendMenuSb.Length - 1, 1);
|
|
|
appendMenuSb.Append("]");
|
|
|
appendMenus.Append(appendMenuSb);
|
|
|
appendMenuSb.Clear();
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
|
/// <summary>
|
|
|
/// 产生一个工作节点
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public string GenerWorkNode()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
DataSet ds = new DataSet();
|
|
|
|
|
|
Int64 workID = this.WorkID;
|
|
|
if (this.currND.HisFormType == NodeFormType.RefOneFrmTree)
|
|
|
{
|
|
|
MapData md = new MapData(this.currND.NodeFrmID);
|
|
|
if (md.HisFrmType == FrmType.ChapterFrm)
|
|
|
{
|
|
|
string url = "Frm.htm?FK_MapData=" + md.No;
|
|
|
url = MyView_Init_DealUrl(this.currND, url);
|
|
|
return "url@" + url;
|
|
|
}
|
|
|
|
|
|
//获取绑定的表单
|
|
|
FrmNode frmnode = new FrmNode(this.FK_Node, this.currND.NodeFrmID);
|
|
|
switch (frmnode.WhoIsPK)
|
|
|
{
|
|
|
case WhoIsPK.FID:
|
|
|
workID = this.FID;
|
|
|
break;
|
|
|
case WhoIsPK.PWorkID:
|
|
|
workID = this.PWorkID;
|
|
|
break;
|
|
|
case WhoIsPK.P2WorkID:
|
|
|
GenerWorkFlow gwff = new GenerWorkFlow(this.PWorkID);
|
|
|
workID = gwff.PWorkID;
|
|
|
break;
|
|
|
case WhoIsPK.P3WorkID:
|
|
|
string sqlId = "Select PWorkID From WF_GenerWorkFlow Where WorkID=(Select PWorkID From WF_GenerWorkFlow Where WorkID=" + this.PWorkID + ")";
|
|
|
workID = DBAccess.RunSQLReturnValInt(sqlId, 0);
|
|
|
break;
|
|
|
case WhoIsPK.RootFlowWorkID:
|
|
|
workID = BP.WF.Dev2Interface.GetRootWorkIDBySQL(this.WorkID, this.PWorkID);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
ds = BP.WF.CCFlowAPI.GenerWorkNode(this.FK_Flow, this.currND, workID,
|
|
|
this.FID, BP.Web.WebUser.No, this.WorkID, "1", true);
|
|
|
|
|
|
#region 如果是移动应用就考虑多表单的问题.
|
|
|
if (currND.HisFormType == NodeFormType.SheetTree && this.IsMobile == true)
|
|
|
{
|
|
|
/*如果是表单树并且是,移动模式.*/
|
|
|
|
|
|
|
|
|
FrmNodes fns = new FrmNodes();
|
|
|
QueryObject qo = new QueryObject(fns);
|
|
|
|
|
|
qo.AddWhere(FrmNodeAttr.FK_Node, currND.NodeID);
|
|
|
qo.addAnd();
|
|
|
qo.AddWhere(FrmNodeAttr.FrmEnableRole, "!=", (int)FrmEnableRole.Disable);
|
|
|
qo.addOrderBy("Idx");
|
|
|
qo.DoQuery();
|
|
|
|
|
|
|
|
|
//把节点与表单的关联管理放入到系统.
|
|
|
ds.Tables.Add(fns.ToDataTableField("FrmNodes"));
|
|
|
}
|
|
|
#endregion 如果是移动应用就考虑多表单的问题.
|
|
|
|
|
|
if (WebUser.SysLang.Equals("CH") == true)
|
|
|
return BP.Tools.Json.ToJson(ds);
|
|
|
|
|
|
//#region 处理多语言.
|
|
|
//if (WebUser.SysLang.Equals("CH") == false)
|
|
|
//{
|
|
|
// Langues langs = new Langues();
|
|
|
// langs.Retrieve(LangueAttr.Model, LangueModel.CCForm,
|
|
|
// LangueAttr.Sort, "Fields", LangueAttr.Langue, WebUser.SysLang); //查询语言.
|
|
|
//}
|
|
|
//#endregion 处理多语言.
|
|
|
|
|
|
return BP.Tools.Json.ToJson(ds);
|
|
|
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
BP.DA.Log.DebugWriteError(ex);
|
|
|
return "err@" + ex.Message;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|