/// <summary> ///Parent Constructor /// </summary> /// <param name="parent">parent</param> /// <param name="AD_Role_ID">role id</param> public MWorkflowAccess(MWorkflow parent, int AD_Role_ID) : base(parent.GetCtx(), 0, parent.Get_TrxName()) { SetClientOrg(parent); SetAD_Workflow_ID(parent.GetAD_Workflow_ID()); SetAD_Role_ID(AD_Role_ID); }
/// <summary> /// Parent Constructor /// </summary> /// <param name="wf">workflow (parent)</param> /// <param name="Value">value</param> /// <param name="Name">name</param> public MWFNode(MWorkflow wf, String value, String name) : base(wf.GetCtx(), 0, wf.Get_Trx()) { SetClientOrg(wf); SetAD_Workflow_ID(wf.GetAD_Workflow_ID()); SetValue(value); SetName(name); _durationBaseMS = wf.GetDurationBaseSec() * 1000; }
/// <summary> /// New Constructor /// </summary> /// <param name="wf">workflow</param> /// <param name="pi">Process Info (Record_ID)</param> public MWFProcess(MWorkflow wf, ProcessInfo pi) : base(wf.GetCtx(), 0, wf.Get_TrxName()) { if (!Utility.TimeUtil.IsValid(wf.GetValidFrom(), wf.GetValidTo())) // make this class or this function { //throw new IllegalStateException("Workflow not valid"); throw new Exception("Workflow not valid"); } _wf = wf; _pi = pi; SetAD_Client_ID(wf.GetAD_Client_ID()); SetAD_Workflow_ID(wf.GetAD_Workflow_ID()); SetPriority(wf.GetPriority()); base.SetWFState(WFSTATE_NotStarted); // vinay bhatt for window id SetAD_Window_ID(pi.GetAD_Window_ID()); // // Document SetAD_Table_ID(wf.GetAD_Table_ID()); SetRecord_ID(pi.GetRecord_ID()); if (GetPO() == null) { SetTextMsg("No PO with ID=" + pi.GetRecord_ID()); base.SetWFState(WFSTATE_Terminated); } else { SetTextMsg(GetPO()); } // Responsible/User if (wf.GetAD_WF_Responsible_ID() == 0) { SetAD_WF_Responsible_ID(); } else { SetAD_WF_Responsible_ID(wf.GetAD_WF_Responsible_ID()); } SetUser_ID((int)pi.GetAD_User_ID()); // user starting // _state = new StateEngine(GetWFState()); _state.SetCtx(GetCtx()); SetProcessed(false); // Lock Entity GetPO(); if (_po != null) { // Set transaction organization on workflow process SetAD_Org_ID(_po.GetAD_Org_ID()); _po.Lock(); } }
/// <summary> ///Test Start condition /// </summary> /// <param name="wf">workflow</param> /// <param name="document">document</param> /// <returns>true if WF should be started</returns> private bool TestStart(MWorkflow wf, PO document) { bool retValue = false; String logic = wf.GetDocValueLogic(); logic = logic.Substring(4); // "SQL=" String tableName = document.Get_TableName(); String[] keyColumns = document.Get_KeyColumns(); if (keyColumns.Length != 1) { //this is notice for column length log.Severe("Tables with more then one key column not supported - " + tableName + " = " + keyColumns.Length); return(false); } String keyColumn = keyColumns[0]; StringBuilder sql = new StringBuilder("SELECT ") .Append(keyColumn).Append(" FROM ").Append(tableName) .Append(" WHERE AD_Client_ID=" + wf.GetAD_Client_ID() + " AND ") // #1 .Append(keyColumn).Append("=" + document.Get_ID() + " AND ") // #2 .Append(logic) // Duplicate Open Workflow test .Append(" AND NOT EXISTS (SELECT * FROM AD_WF_Process wfp ") .Append("WHERE wfp.AD_Table_ID=" + document.Get_Table_ID() + " AND wfp.Record_ID=") // #3 .Append(tableName).Append(".").Append(keyColumn) .Append(" AND wfp.AD_Workflow_ID=" + wf.GetAD_Workflow_ID()) // #4 .Append(" AND SUBSTR(wfp.WFState,1,1)='O')"); DataSet ds = null; try { ds = DataBase.DB.ExecuteDataset(sql.ToString(), null, document.Get_Trx()); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { retValue = true; } ds = null; } catch (Exception e) { log.Log(Level.SEVERE, "Logic=" + logic + " - SQL=" + sql.ToString(), e); } return(retValue); }