/// <summary> /// Start Workflow. /// </summary> /// <param name="AD_Workflow_ID">AD_Workflow_ID </param> /// <returns>true if started</returns> private bool StartWorkflow(int AD_Workflow_ID) { //Remote process not implemented //Only local process is implemented //log.Fine(AD_Workflow_ID + " - " + _pi.ToString()); bool started = false; // Run locally if (!started) { MWorkflow WF = new MWorkflow(_ctx, AD_Workflow_ID, null); MWFProcess wfProcess = null; if (_pi.IsBatch()) { wfProcess = WF.Start(_pi); // may return null } else { wfProcess = WF.StartWait(_pi); // may return null } started = wfProcess != null; } return(started); }
/// <summary> /// Run Workflow (and wait) on Server /// @ejb.interface-method view-type="both" /// </summary> /// <param name="ctx"></param> /// <param name="pi"></param> /// <param name="AD_Workflow_ID"></param> /// <returns></returns> public ProcessInfo Workflow(Ctx ctx, ProcessInfo pi, int AD_Workflow_ID) { log.Info("[" + _no + "] " + AD_Workflow_ID); _workflowCount++; MWorkflow wf = MWorkflow.Get(ctx, AD_Workflow_ID); MWFProcess wfProcess = null; if (pi.IsBatch()) { wfProcess = wf.Start(pi); // may return null } else { wfProcess = wf.StartWait(pi); // may return null } log.Fine(pi.ToString()); return(pi); }
/// <summary> /// Assign/UnAssign workflow from group to role /// </summary> /// <param name="AD_Group_ID"></param> /// <param name="AD_Role_ID"></param> /// <param name="grantAccess"></param> private void ProvideWorkflowAccessToRole(int AD_Group_ID, int AD_Role_ID, bool grantAccess) { string sql = "SELECT AD_Workflow_ID from AD_Group_Workflow WHERE IsActive='Y' AND AD_GroupInfo_ID=" + AD_Group_ID; DataSet ds = DB.ExecuteDataset(sql); List <int> groupWindowIDs = new List <int>(); Dictionary <int, bool> roleWindowIDsDictinary = new Dictionary <int, bool>(); StringBuilder winIDs = new StringBuilder(); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { if (ds.Tables[0].Rows[i]["AD_Workflow_ID"] != null && ds.Tables[0].Rows[i]["AD_Workflow_ID"] != DBNull.Value) { if (winIDs.Length > 0) { winIDs.Append(","); } winIDs.Append(ds.Tables[0].Rows[i]["AD_Workflow_ID"].ToString()); groupWindowIDs.Add(Convert.ToInt32(ds.Tables[0].Rows[i]["AD_Workflow_ID"])); } } groupWindowIDs.Sort(); sql = "SELECT AD_Workflow_ID,IsReadWrite FROM AD_workflow_Access WHERE AD_Role_ID=" + AD_Role_ID + " AND AD_Workflow_ID IN(" + winIDs.ToString() + ")"; ds = DB.ExecuteDataset(sql); if (ds != null && ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { roleWindowIDsDictinary[Convert.ToInt32(ds.Tables[0].Rows[i]["AD_Workflow_ID"])] = ds.Tables[0].Rows[i]["IsReadWrite"].ToString() == "Y" ? true : false; } } for (int i = 0; i < groupWindowIDs.Count(); i++) { MWorkflow wind = new MWorkflow(ctx, groupWindowIDs[i], null); MWorkflowAccess wAccess = new MWorkflowAccess(wind, AD_Role_ID); if (roleWindowIDsDictinary.ContainsKey(groupWindowIDs[i])) { if (roleWindowIDsDictinary[groupWindowIDs[i]] != grantAccess) { //wAccess.SetIsReadWrite(grantAccess); //wAccess.Save(); if (grantAccess) { sql = "UPDATE AD_Workflow_Access Set IsReadWrite='Y',IsActive='Y' WHERE AD_Workflow_ID=" + groupWindowIDs[i] + " AND AD_Role_ID=" + AD_Role_ID; } else { sql = "UPDATE AD_Workflow_Access Set IsReadWrite='N',IsActive='N' WHERE AD_Workflow_ID=" + groupWindowIDs[i] + " AND AD_Role_ID=" + AD_Role_ID; } DB.ExecuteQuery(sql, null, null); } } else { wAccess.SetAD_Client_ID(ctx.GetAD_Client_ID()); wAccess.SetAD_Org_ID(ctx.GetAD_Org_ID()); wAccess.SetAD_Role_ID(AD_Role_ID); wAccess.SetAD_Workflow_ID(groupWindowIDs[i]); wAccess.SetIsReadWrite(grantAccess); wAccess.Save(); } } } }