最近做项目用到继承,说实话以前没有具体的用到过, 所以在开始的时候有点懵逼; 后来还是我们老大给的模板, 有点惭愧, 哈哈。
这是我项目中用到后积累的, 肯定不完整,有什么不足和错误的地方 欢迎大神们提点。
下面是基类。
1 public interface IWorkflowProcess 2 { 3 ListGetNextOperator(int id, int projectId); 4 List GetNextWF(int projectId); 5 } 6 public class WorkflowProcess : IWorkflowProcess 7 { 8 public int ID { get; set; } 9 public string Name { get; set; }10 public string Description { get; set; }11 public string Controller { get; set; }12 public WorkflowProcess()13 {14 }15 public bool CanGetPrerepotNo()16 {17 return (int)enumUserRole.Reviewer == REASContext.CurrentUser.RoleID || ((int)enumDepartment.EvalueDepartmentTwo == REASContext.CurrentUser.DepartmentID);18 }19 public bool CanGetRepotNo()20 {21 return (int)enumUserRole.Reviewer == REASContext.CurrentUser.RoleID;22 }23 public virtual List GetNextWF(int projectId)24 {25 var nextprocess = WorkflowManager.NextOf(WorkflowManager.GetByID(ID));26 return new List () 27 { WorkflowManager.GetSelectListItem(nextprocess)28 };29 }30 public virtual List GetNextOperator(int id, int projectId)31 {32 return bll_Common.GetOperatorByDepartmentSelectList();33 }34 }
子类:
例1、 4 public class WF_ReportApprove : WorkflowProcess, IWorkflowProcess 5 { 6 public override ListGetNextOperator(int id, int projectId) 7 { 8 return bll_Common.GetBeforOperatorSelectList(projectId); 9 }10 }11
例二、
4 15 public class WF_Balance : WorkflowProcess, IWorkflowProcess 5 16 { 7 18 public override ListGetNextWF(int projectId) 8 19 { 10 21 return new List ()11 22 {12 23 new System.Web.Mvc.SelectListItem()13 24 {14 25 Text =15 26 WorkflowManager.GetByControllerName(enum_WorkflowProcess.WF_Preestimate.GetDescription()).Name,16 27 Value = ((int) enum_WorkflowProcess.WF_Preestimate).ToString(),17 28 Selected = true18 29 },19 30 20 31 new System.Web.Mvc.SelectListItem()21 32 {22 33 Text = WorkflowManager.GetByControllerName(enum_WorkflowProcess.WF_Archive.GetDescription()).Name,23 34 Value = ((int) enum_WorkflowProcess.WF_Archive).ToString()24 35 }25 36 };27 38 }28 39 29 40 public override List GetNextOperator(int id, int projectId)30 41 {31 42 if (id == (int)enum_WorkflowProcess.WF_Preestimate)32 43 if (REASContext.CurrentUser.DeparmentTypeID == (int)enumDepartmentType.BranchOffice)33 44 {34 45 var user = bll_LoginUser.GetAll().First(p => p.ManageDepID.HasValue && p.ManageDepID.Value == REASContext.CurrentUser.DepartmentID);35 46 return new List ()36 47 {37 48 new SelectListItem()38 49 {39 50 Text = user.DisplayName,40 51 Value = user.ID.ToString()41 52 }42 53 };43 54 }44 55 45 56 return base.GetNextOperator(id, projectId);46 57 }47 58 48 59 }
例三、
public class WF_Archive : WorkflowProcess, IWorkflowProcess { }
例子中主要继承的方法为:GetNextWF(int projectId) ,GetNextOperator(int id , int projectId)
例一的返回的是子类的GetNextOperator()方法和基类的 GetNextWF(),
例二返回的是子类的GetNextOperator()和GetNextWF()
例三返回的是基类的GetNextOperator()和GetNextWF()