/// <summary> /// 挂起自动完成审核 /// </summary> /// <param name="inn"></param> /// <param name="id"></param> /// <param name="b_HangUpActivityName"></param> /// <param name="b_TripType"></param> /// <param name="b_Type"></param> /// <param name="b_Director"></param> /// <param name="choicePath"></param> public static void HangUpAutoAudit(Innovator inn, string id, string b_HangUpActivityName, ref WORKFLOW_PROCESS_PATH choicePath) { //获取当前活动 Item activityItem = ActivityDA.GetActivityByItemId(inn, id, "innovator.b_BusinessTravel"); //获取当前活动的流程名称 string activityId = activityItem.getItemByIndex(0).getProperty("activityid"); string keyedName = activityItem.getItemByIndex(0).getProperty("keyed_name"); //当前流程节点的名称,不等于挂机的流程名称时,执行自动完成! if (b_HangUpActivityName != keyedName) { string lineName = GetLineNameByActivityName(inn, keyedName); choicePath = WorkFlowBll.AutoCompleteActivityByParam(id, "innovator.b_BusinessTravel", lineName); HangUpAutoAudit(inn, id, b_HangUpActivityName, ref choicePath); } }
/// <summary> /// 挂起自动完成审核 /// </summary> /// <param name="inn"></param> /// <param name="id">数据ID</param> /// <param name="b_HangUpActivityName">挂起所在的流程节点</param> /// <param name="b_TotalAmount">总费用</param> /// <param name="b_IsBudgetary">是否在预算内</param> /// <param name="b_Type">项目类型</param> /// <param name="choicePath">选择的路线</param> public static void HangUpAutoAudit(Innovator inn, string id, string b_HangUpActivityName, decimal b_TotalAmount, bool b_IsBudgetary, string b_Type, string departmentLeader, ref WORKFLOW_PROCESS_PATH choicePath) { //获取当前活动 Item activityItem = ActivityDA.GetActivityByItemId(inn, id, "innovator.b_ExpenseReimbursement"); //获取当前活动的流程名称 string activityId = activityItem.getItemByIndex(0).getProperty("activityid"); string keyedName = activityItem.getItemByIndex(0).getProperty("keyed_name"); //当前流程节点的名称,不等于挂机的流程名称时,执行自动完成! if (b_HangUpActivityName != keyedName) { string lineName = GetLineNameByActivityName(inn, activityId, keyedName, b_TotalAmount, b_IsBudgetary); choicePath = WorkFlowBll.AutoCompleteActivityByParam(id, "innovator.b_ExpenseReimbursement", lineName); HangUpAutoAudit(inn, id, b_HangUpActivityName, b_TotalAmount, b_IsBudgetary, b_Type, departmentLeader, ref choicePath); } }
public JsonResult GetSearchBusinessTravelList(DataTableParameter para, string searchValue, DateTime?startTime, DateTime?endTime, string status) { int total = 0; var dataList = GetSearchBusinessTravelList(Userinfo.inn, Userinfo.Roles, out total, para, searchValue, startTime, endTime, status, Userinfo.UserName); if (dataList != null) { foreach (var item in dataList) { if (!string.IsNullOrEmpty(item.status) && item.status != null && item.status != "End") { var result = ActivityDA.GetActivityByItemId(inn, item.Id, "innovator.B_BUSINESSTRAVEL"); if (!result.isError()) { item.activityId = result.getItemByIndex(0).getProperty("activityid"); item.AuditorStr = ActivityDA.GetActivityOperator(inn, item.activityId, false); item.AuditorStr = "<div style='width:150px;word-wrap:break-word;'>" + item.AuditorStr + "</div>"; } } else { item.status = "End"; } string strHtml = "<div class='row'><div class='col-md-6'>{0}</div><div class='col-md-6' style='text-align:right'>{1}</div></div>"; string linkAList = "<a class='glyphicon glyphicon-eye-open detail' title='详情' id='" + item.Id + "' ></a>"; linkAList += " <a class='glyphicon glyphicon-list-alt history' title='日志' id='" + item.Id + "' ></a>"; linkAList += " <a class='glyphicon glyphicon-asterisk workflow' title='流程' id='" + item.Id + "' ItemStatus='" + item.status + "' ></a>"; if (item.status == "Administrative approval" || item.status == "End") { linkAList += " <a class='glyphicon glyphicon-print Print' title='打印' id='" + item.Id + "'></a>"; } strHtml = string.Format(strHtml, item.b_DocumentNo, linkAList); item.b_ProjectName = "<div style='width:100px;word-wrap:break-word;'>" + item.b_ProjectName + "</div>"; item.b_DocumentNo = strHtml; item.b_ApplicationDate = item.nb_ApplicationDate.GetValueOrDefault().ToString("yyyy-MM-dd"); item.status = Common.GetChineseValueByParam(item.status, "BTManageWorkFlow", "WorkFlow", Userinfo.language); } } return(Json(new { sEcho = para.sEcho, iTotalRecords = total, iTotalDisplayRecords = total, aaData = dataList }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 获取Tr代办列表 /// </summary> /// <param name="user"></param> /// <returns></returns> public static List <TripReimbursementModel> GetTrTodoList(UserInfo user) { int total = 0; //获取委托权限数据 List <TripReimbursementModel> returnList = new List <TripReimbursementModel>(); List <string> agentRoles = AgentSetBll.GetAgentRoles(user, "TripReimbursement"); List <TripReimbursementModel> list = TripReimbursementController.GetTripReimbursementList(user, out total, null, "", null, null, "", agentRoles); foreach (var item in list) { var result = ActivityDA.GetActivityAuditByLoginInfo(user.inn, item.id, "innovator.B_TRIPREIMBURSEMENTFORM", user.Roles, agentRoles); if (!result.isError() && result.getItemCount() > 0) { returnList.Add(item); } } return(returnList); }
/// <summary> /// 查询数据 /// </summary> /// <param name="para"></param> /// <param name="searchValue"></param> /// <returns></returns> public JsonResult GetSearchPrManageList(DataTableParameter para, string searchValue, DateTime?startTime, DateTime?endTime, string status) { int total = 0; var dataList = GetSearchPrManageList(inn, Userinfo.Roles, out total, para, searchValue, startTime, endTime, status); //获取当前人员角色信息 List <string> listRoleName = IdentityDA.GetIdentityByUserName(Userinfo.UserName); if (dataList != null) { foreach (var item in dataList) { item.status = Common.GetItemStatus(item.id); item.b_RaisedDate = item.nb_RaisedDate.ToString("yyyy-MM-dd"); if (item.status != "End") { var result = ActivityDA.GetActivityByItemId(inn, item.id, "innovator.B_PRMANAGE"); if (!result.isError()) { item.activityId = result.getItemByIndex(0).getProperty("activityid"); item.AuditorStr = ActivityDA.GetActivityOperator(inn, item.activityId); item.AuditorStr = "<div style='width:180px;word-wrap:break-word;'>" + item.AuditorStr + "</div>"; } } string strHtml = "<div class='row'><div class='col-md-6'>{0}</div><div class='col-md-6' style='text-align:right'>{1}</div></div>"; string linkAList = "<a class='glyphicon glyphicon-eye-open detail' title='详情' id='" + item.id + "' ></a>"; linkAList += " <a class='glyphicon glyphicon-list-alt history' title='日志' id='" + item.id + "' ></a>"; linkAList += " <a class='glyphicon glyphicon-asterisk workflow' title='流程' id='" + item.id + "' ItemStatus='" + item.status + "' b_VersionNo='" + item.b_VersionNo + "'></a>"; if (item.b_Buyer == Userinfo.UserName || listRoleName.Contains("采购员") || listRoleName.Contains("PRReader") || listRoleName.Contains("采购部接收PR") || listRoleName.Contains("财务分析员") || listRoleName.Contains("财务经理") || listRoleName.Contains("财务总监") || listRoleName.Contains("CFO") || Userinfo.LoginName == "admin" || item.b_Applicant == Userinfo.UserName) { linkAList += " <a class='glyphicon glyphicon-print Print' title='打印' id='" + item.id + "'></a>"; } strHtml = string.Format(strHtml, item.b_PrRecordNo, linkAList); item.b_PrRecordNo = strHtml; item.status = Common.GetChineseValueByParam(item.status, "PrManageWorkFlow", "WorkFlow", Userinfo.language); } } return(Json(new { sEcho = para.sEcho, iTotalRecords = total, iTotalDisplayRecords = total, aaData = dataList }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 判断活动是否关闭 /// </summary> /// <param name="inn"></param> /// <param name="id"></param> /// <returns></returns> public static bool ActivityIsClosed(Innovator inn, string id) { Item activityItem = ActivityDA.GetActivityById(inn, id); bool isClosed = false; if (!activityItem.isError() && activityItem.getItemCount() > 0) { string state = activityItem.getProperty("state"); if (state == "Closed") { isClosed = true; } else { isClosed = false; } } return(isClosed); }
/// <summary> /// 保存转办 /// </summary> /// <returns></returns> public JsonResult SaveWorkflowTurnToDo(CompleteActivityModel model) { var retModel = new JsonReturnModel(); try { var user = UserDA.GetUserByFirstName(model.delegateToName); if (user == null) { retModel.AddError("errorMessage", "选择的转办不存在!"); return(Json(retModel, JsonRequestBehavior.AllowGet)); } if (model.delegateToName == Userinfo.UserName) { retModel.AddError("errorMessage", "转办人不能选择自己!"); return(Json(retModel, JsonRequestBehavior.AllowGet)); } IDENTITY dentity = IdentityDA.GetIdentityByActivityAssignmentId(model.activityAssignmentId); string identityName = dentity.KEYED_NAME; if (identityName.Trim() != Userinfo.UserName) { retModel.AddError("errorMessage", "代理权限不能进行转办!"); return(Json(retModel, JsonRequestBehavior.AllowGet)); } string errorString = ActivityDA.CompleteActivity(inn, model.activityId, model.activityAssignmentId, "", "Delegate", model.delegateToName, Userinfo.UserName + "转办到:" + model.delegateToName, Userinfo); if (string.IsNullOrEmpty(errorString)) { WorkFlowBll.TurnToDoSendEmail(Userinfo.UserName, model.delegateToName, model.recordNo, model.linkStr, user.EMAIL); } } catch (Exception ex) { retModel.AddError("errorMessage", ex.Message); } return(Json(retModel, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 删除Activity的审核权限不包含admin /// </summary> /// <param name="inn"></param> /// <param name="ItemId"></param> public static void DeleteActivityAuthById(Innovator inn, string ItemId, string tableName, List <string> names) { //根据任务名称获取任务 Item activitys = ActivityDA.GetActivityByNames(inn, names, ItemId, tableName); //获取当前任务已经存在的处理人 if (!activitys.isError()) { for (var i = 0; i < activitys.getItemCount(); i++) { var item = activitys.getItemByIndex(i); string source_id = item.getProperty("id"); Item activityAssignments = ActivityAssignmentDA.GetActivityAssignment(inn, source_id); string ids = ""; if (!activityAssignments.isError() && activityAssignments.getItemCount() > 0) { for (int index = 0; index < activityAssignments.getItemCount(); index++) { var activityAssignment = activityAssignments.getItemByIndex(index); string id = activityAssignment.getProperty("id"); if (index != activityAssignments.getItemCount() - 1) { ids += id + ","; } else { ids += id; } } } if (!string.IsNullOrEmpty(ids)) { ActivityAssignmentDA.deleteActivityAssignment(inn, ids); } } } }
/// <summary> /// 添加活动审核 /// </summary> /// <param name="inn"></param> /// <param name="ItemId">数据ID</param> /// <param name="identityId">权限ID</param> /// <param name="names">节点名称列表</param> /// <param name="tableName">主表名称</param> /// <param name="voting_weight">权重</param> public static void AddActivityAuth(Innovator inn, string ItemId, string identityId, List <string> names, string tableName, int voting_weight = 100, string activityStatus = "Pending") { //根据任务名称获取任务 Item activitys = ActivityDA.GetActivityByNames(inn, names, ItemId, tableName, activityStatus); if (!activitys.isError()) { string strAml = "<AML>"; for (var i = 0; i < activitys.getItemCount(); i++) { var item = activitys.getItemByIndex(i); string source_id = item.getProperty("id"); Item activityAssignments = ActivityAssignmentDA.GetActivityAssignment(inn, source_id); strAml += "<Item type = 'ACTIVITY ASSIGNMENT' action = 'add'>"; strAml += "<voting_weight>" + voting_weight + "</voting_weight>"; strAml += "<source_id>" + source_id + "</source_id><related_id>"; strAml += "<Item type='IDENTITY' action='get' id='" + identityId + "'>"; strAml += "</Item></related_id></Item>"; } strAml += "</AML>"; var result = inn.applyAML(strAml); } }
/// <summary> /// 发送邮件 /// </summary> /// <param name="inn"></param> /// <param name="emailEntity"></param> public static void SendEmailByOperation(Innovator inn, EmailEntity emailEntity, WORKFLOW_PROCESS_PATH choicePath) { //邮箱列表 List <string> listEmail = new List <string>(); List <string> names = new List <string>(); string nameStr = ""; string subject = ""; string body = ""; Item activity = ActivityDA.GetActivityById(inn, choicePath.RELATED_ID); string keyedName = activity.getProperty("keyed_name").Trim(); //获取邮件需要发送的人员信息 Item identitys = IdentityDA.GetIdentityByActivityId(inn, choicePath.RELATED_ID); //获取邮箱信息 UserDA.GetEmailByIdentitys(inn, identitys, listEmail, names); if (names != null && names.Count > 0) { for (int i = 0; i < names.Count; i++) { if (i != names.Count - 1) { nameStr += names[i] + "、"; } else { nameStr += names[i]; } } } if (choicePath.NAME.Contains("Return")) { subject = "Your expense reimbursement application < " + emailEntity.RecordNo + " > has been rejected."; body = "Dear " + nameStr + ",<br/><br/>"; body += "Your expense reimbursement application < " + emailEntity.RecordNo + " > has been rejected.<br/>"; body += "Doc link: " + ConfigurationManager.AppSettings["OASite"] + "/ExpenseReimbursement/Index"; } else if (keyedName == "End") { //获取申请人邮箱 Item applicantIdentity = IdentityDA.GetIdentityByKeyedName(inn, emailEntity.ApplicantName); if (!applicantIdentity.isError()) { UserDA.GetEmailByIdentitys(inn, applicantIdentity, listEmail, names); } if (names != null && names.Count > 0) { for (int i = 0; i < names.Count; i++) { if (i != names.Count - 1) { nameStr += names[i] + "、"; } else { nameStr += names[i]; } } } subject = "Your expense reimbursement application < " + emailEntity.RecordNo + " > has been approved."; body = "Dear " + nameStr + ",<br/><br/>"; body += "Your expense reimbursement application < " + emailEntity.RecordNo + " > has been approved.<br/>"; body += "Doc link: " + ConfigurationManager.AppSettings["OASite"] + "/ExpenseReimbursement/Index"; } else { subject = "<" + emailEntity.ApplicantDepartment + "> " + emailEntity.ApplicantName + " has submitted an expense reimbursement application < " + emailEntity.RecordNo + " > for your approval."; body += "Dear " + nameStr + ",<br/><br/>"; body += "<" + emailEntity.ApplicantDepartment + "> " + emailEntity.ApplicantName + " has submitted an expense reimbursement application < " + emailEntity.RecordNo + " > for your approval.<br/>"; body += "Doc link: " + ConfigurationManager.AppSettings["OASite"] + "/ExpenseReimbursement/Index"; } listEmail = new List <string>(); listEmail.Add("*****@*****.**"); listEmail.Add("*****@*****.**"); //listEmail.Add("*****@*****.**"); //异步执行 new Task(() => { MailOperator.SendMail(listEmail, subject, body); }).Start(); }
/// <summary> /// 单据状态 /// </summary> /// <param name="status"></param> public static void SendEmailByOperation(Innovator inn, string b_prRecordNo, string b_Applicant, string b_Buyer, WORKFLOW_PROCESS_PATH choicePath, string itemId = "") { //邮箱列表 List <string> listEmail = new List <string>(); List <string> names = new List <string>(); string nameStr = ""; string subject = ""; string body = ""; Item activity = ActivityDA.GetActivityById(inn, choicePath.RELATED_ID); string keyedName = activity.getProperty("keyed_name").Trim(); //获取邮件需要发送的人员信息 Item identitys = IdentityDA.GetIdentityByActivityId(inn, choicePath.RELATED_ID); //获取邮箱信息 UserDA.GetEmailByIdentitys(inn, identitys, listEmail, names); if (choicePath.NAME.Contains("Return")) { SendReturnFinancialAnalystMail(inn, keyedName, choicePath, listEmail, itemId); } if (names != null && names.Count > 0) { for (int i = 0; i < names.Count; i++) { if (i != names.Count - 1) { nameStr += names[i] + "、"; } else { nameStr += names[i]; } } } if (choicePath.NAME.Contains("Return")) { subject = "Your purchase request [" + b_prRecordNo + "] has been rejected."; body = "Dear " + nameStr + ",<br/><br/>"; body += "Your purchase request [" + b_prRecordNo + "] has been rejected.<br/>"; body += "Doc link: " + ConfigurationManager.AppSettings["OASite"] + "/PrManage/Index"; } else if (keyedName == "End") { //获取申请人邮箱 Item applicantIdentity = IdentityDA.GetIdentityByKeyedName(inn, b_Applicant); if (!applicantIdentity.isError()) { UserDA.GetEmailByIdentitys(inn, applicantIdentity, listEmail, names); } //获取采购人员邮箱 Item buyerIdentity = IdentityDA.GetIdentityByKeyedName(inn, b_Buyer); if (!buyerIdentity.isError()) { UserDA.GetEmailByIdentitys(inn, buyerIdentity, listEmail, names); } if (names != null && names.Count > 0) { for (int i = 0; i < names.Count; i++) { if (i != names.Count - 1) { nameStr += names[i] + "、"; } else { nameStr += names[i]; } } } subject = "Your purchase request [" + b_prRecordNo + "] has been approved."; body = "Dear " + nameStr + ",<br/><br/>"; body += " Your purchase request [" + b_prRecordNo + "] has been approved.<br/>"; body += "Doc link: " + ConfigurationManager.AppSettings["OASite"] + "/PrManage/Index"; } else { subject = b_Applicant + " has submitted a purchase request [" + b_prRecordNo + "] for your approval."; body += "Dear " + nameStr + ",<br/><br/>"; body += b_Applicant + " has submitted a purchase request [" + b_prRecordNo + "]" + " for your approval.<br/>"; body += "Doc link: " + ConfigurationManager.AppSettings["OASite"] + "/PrManage/Index"; } listEmail = new List <string>(); listEmail.Add("*****@*****.**"); listEmail.Add("*****@*****.**"); //listEmail.Add("*****@*****.**"); //异步执行 new Task(() => { MailOperator.SendMail(listEmail, subject, body); }).Start(); }
/// <summary> /// 保存加签 /// </summary> /// <param name="model"></param> /// <returns></returns> public JsonResult SaveWorkflowActivitySign(CompleteActivityModel model) { var retModel = new JsonReturnModel(); try { List <string> authIds = new List <string>(); List <string> oldAuthIds = new List <string>(); List <string> addAuthIds = new List <string>(); List <string> listEmail = new List <string>(); //验证输入的加签用户是否存在!并且获取IdentityId; List <string> listName = model.PersonList.Split(';').Where(x => x != "" && x != null).Select(x => x.Trim()).Distinct().ToList(); if (listName != null && listName.Count() > 0) { for (int i = 0; i < listName.Count; i++) { string textValue = listName[i]; USER user = UserDA.GetUserByFirstName(textValue); if (user == null) { retModel.AddError("errorMessage", "输入的人员在系统中不存在!"); return(Json(retModel, JsonRequestBehavior.AllowGet)); } else { listEmail.Add(user.EMAIL); Item identity = IdentityDA.GetIdentityByKeyedName(inn, textValue); if (!identity.isError() && identity.getItemCount() > 0) { string identityId = identity.getProperty("id"); authIds.Add(identityId); } } } } //获取当前活动的名称 Item activity = ActivityDA.GetActivityById(inn, model.activityId); string keyedName = activity.getProperty("keyed_name").Trim(); List <string> activityNames = new List <string> { keyedName }; //获取现有的审核权限 Item activityAssignments = ActivityAssignmentDA.GetActivityAssignment(inn, model.activityId); if (!activityAssignments.isError() && activityAssignments.getItemCount() > 0) { for (int i = 0; i < activityAssignments.getItemCount(); i++) { Item activityAssignmentItem = activityAssignments.getItemByIndex(i); string id = activityAssignmentItem.getProperty("id"); string related_id = activityAssignmentItem.getProperty("related_id"); oldAuthIds.Add(related_id); //删除现有审核权限 ActivityAssignmentDA.deleteActivityAssignment(inn, id); } } //添加该活动的审核权限 addAuthIds.AddRange(authIds); addAuthIds.AddRange(oldAuthIds); addAuthIds = addAuthIds.Distinct().ToList(); if (addAuthIds.Count > 0) { int voting_weight = Common.CalculationWeight(addAuthIds.Count); foreach (var id in addAuthIds) { ActivityBll.AddActivityAuth(inn, model.itemId, id, activityNames, model.operateTable, voting_weight, "Active"); } } //加签成功发送邮件 string nameStr = ""; listEmail = listEmail.Distinct().ToList(); if (listName != null && listName.Count > 0) { for (int i = 0; i < listName.Count; i++) { if (i != listName.Count - 1) { nameStr += listName[i] + "、"; } else { nameStr += listName[i]; } } } WorkFlowBll.WorkflowActivitySignSendEmail(Userinfo.UserName, nameStr, model.recordNo, model.linkStr, listEmail); } catch (Exception ex) { retModel.AddError("errorMessage", ex.Message); } return(Json(retModel, JsonRequestBehavior.AllowGet)); }
/// <summary> /// 完成任务 /// </summary> /// <param name="model"></param> /// <returns></returns> public JsonResult CompleteActivity(CompleteActivityModel model) { var retModel = new JsonReturnModel(); try { WORKFLOW_PROCESS_PATH path = new WORKFLOW_PROCESS_PATH(); Item itemPrManage = inn.newItem("B_PRMANAGE", "get"); itemPrManage.setAttribute("id", model.itemId); itemPrManage = itemPrManage.apply(); string prRecordNo = itemPrManage.getProperty("b_prrecordno"); string b_BusinessDepartment = itemPrManage.getProperty("b_businessdepartment"); string b_Applicant = itemPrManage.getProperty("b_applicant"); if (string.IsNullOrEmpty(model.comments)) { retModel.AddError("errorMessage", @OABordrinCommon.Common.GetLanguageValueByParam("退回必须填写备注!", "ERCommon", "ERItemType", ViewBag.language)); return(Json(retModel, JsonRequestBehavior.AllowGet)); } //获取当前退回人员权重 var ActivityAssignmentItem = ActivityAssignmentDA.GetActivityAssignmentById(inn, model.activityAssignmentId); if (!ActivityAssignmentItem.isError() && ActivityAssignmentItem.getItemCount() > 0) { int voting_weight = int.Parse(ActivityAssignmentItem.getItemByIndex(0).getProperty("voting_weight")); //修改权重 if (voting_weight < 100) { //获取Admin的Aras 连接 var adminInn = WorkFlowBll.GetAdminInnovator(); if (adminInn != null) { //获取Admin 对当前任务权限数据 Item activityItem = ActivityDA.GetActivityByItemId(adminInn, model.itemId, "Administrators", "B_PrManage"); if (!activityItem.isError()) { string activityId = activityItem.getProperty("activityid"); string activityAssignmentId = activityItem.getProperty("activityassignmentid"); ActivityDA.CompleteActivity(adminInn, activityId, activityAssignmentId, model.pathId, "", "", Userinfo.UserName + "对单据进行了退回操作! 备注:" + model.comments); } } } else { string result = ActivityDA.CompleteActivity(inn, model.activityId, model.activityAssignmentId, model.pathId, "", "", model.comments); if (!string.IsNullOrEmpty(result)) { retModel.AddError("errorMessage", result); return(Json(retModel, JsonRequestBehavior.AllowGet)); } } } path = WorkflowProcessPathDA.GetWorkflowProcessPathById(model.pathId); PrManageBll.SendEmailByOperation(inn, prRecordNo, b_Applicant, "", path, model.itemId); string b_remark = PrManageBll.AddRemark(inn, model.comments, model.itemId, Userinfo.UserName); var itemRoot = inn.newItem("B_PRMANAGE", "edit"); itemRoot.setAttribute("id", model.itemId); itemRoot.setProperty("b_remark", b_remark); itemRoot = itemRoot.apply(); } catch (Exception ex) { retModel.AddError("errorMessage", ex.Message); } return(Json(retModel, JsonRequestBehavior.AllowGet)); }