// If your activity returns a value, derive from CodeActivity<TResult> // and return the value from the Execute method. protected override void Execute(CodeActivityContext context) { //var approver = context.GetValue(this.Approver); var approverType = context.GetValue(this.ApproverType); var quoteId = context.GetValue(this.QuoteId); var levelNum = context.GetValue(this.LevelNum); var url = context.GetValue(this.Url); var viewGP = context.GetValue(this.ViewGp); foreach (var approver in context.GetValue(this.Approvers)) { if (!string.IsNullOrEmpty(approver)) { // Obtain the runtime value of the Text input argument var approvalList = context.GetValue(this.ApprovalList); if (approvalList == null) { approvalList = new List <WorkFlowApproval>(); } var existApproval = approvalList .SingleOrDefault(p => p.TypeID == quoteId && p.Approver == approver && p.LevelNum == (decimal)levelNum); if (existApproval == null) { var approval = new WorkFlowApproval(); approval.UID = System.Guid.NewGuid().ToString(); approval.Approver = approver; approval.ApproverType = approverType; approval.TypeID = quoteId; approval.LevelNum = (decimal)levelNum; approval.Url = url; approval.ViewGP = viewGP ? 1 : 0; approvalList.Add(approval); this.ApprovalList.Set(context, approvalList); } } } }
public static void ResumeFlow(string quoteId, List <WorkFlowApproval> addtionlApprovals) { relatedQuoteId = quoteId; WorkFlowApproval approval = eQuotationContext.Current.WorkFlowApproval.OrderByDescending(q => q.LevelNum).FirstOrDefault(q => q.TypeID == quoteId && q.WorkFlowID != ""); if (approval != null) { string strSqlCmd = String.Format( "select top 1 Id,BlockingBookmarks from [System.Activities.DurableInstancing].[InstancesTable] where id='{0}'", approval.WorkFlowID); DataTable dt = dbGetDataTable("WFDB", strSqlCmd); if (dt.Rows.Count == 1) { string bookmark = dt.Rows[0]["BlockingBookmarks"].ToString(); string bookmarkName = bookmark.Substring(1, bookmark.IndexOf(":") - 1); AutoResetEvent syncEvent = new AutoResetEvent(false); WorkflowApplication wfApp = GetWorkFlowApplication(null, syncEvent); Guid instanceId = new Guid(approval.WorkFlowID); wfApp.Load(instanceId); wfApp.ResumeBookmark(bookmarkName, addtionlApprovals); wfApp.Run(); syncEvent.WaitOne(); } else { SendErrorMail("Bookmark is not found in InstancesTable, resume flow fail!"); ApprovalResult = ApprovalResult.ApprovalBookmarkNotFound; } } else { SendErrorMail("Approval is not found in WorkFlowApproval Table, resume flow fail!"); ApprovalResult = ApprovalResult.WaitingApproverNotFound; } }
public static void CreateQuoteApprover(string quoteID, double approveLevel, string workFlowID, string url, string approver, string approverType, bool viewGP, string mailBody, string finalMailBody) { if (!string.IsNullOrEmpty(approver)) { WorkFlowApproval existApproval = eQuotationContext.Current.WorkFlowApproval.Where(p => p.TypeID == quoteID && p.Approver == approver && p.LevelNum == (decimal)approveLevel && p.WorkFlowID == workFlowID).FirstOrDefault(); if (existApproval == null) { WorkFlowApproval QA = new WorkFlowApproval(); QA.UID = System.Guid.NewGuid().ToString(); QA.Type = "Quote"; QA.TypeID = quoteID; QA.ApproverType = approverType; QA.LevelNum = (decimal)approveLevel; QA.Approver = approver; QA.Status = (int)QuoteApprovalStatus.Wait_for_review; QA.WorkFlowID = workFlowID; QA.IsSendSuccessfully = 0; QA.MobileYes = "MY" + System.Guid.NewGuid().ToString(); QA.MobileNo = "MN" + System.Guid.NewGuid().ToString(); QA.CreatedDate = DateTime.Now; QA.LastUpdatedDate = DateTime.Now; //QA.Mailbody = getGPmailBodyForInterconApprover(quoteID); if (mailBody == null) { var maxLevelApproved = eQuotationContext.Current.WorkFlowApproval.Where(p => p.TypeID == quoteID && p.WorkFlowID == workFlowID && p.Status == (int)QuoteApprovalStatus.Approved).OrderByDescending(p => p.LevelNum).FirstOrDefault(); if (maxLevelApproved != null) { QA.Mailbody = maxLevelApproved.Mailbody; } else { QA.Mailbody = ""; } } else { QA.Mailbody = mailBody; } if (finalMailBody == null) { var maxLevelApproved = eQuotationContext.Current.WorkFlowApproval.Where(p => p.TypeID == quoteID && p.WorkFlowID == workFlowID && p.Status == (int)QuoteApprovalStatus.Approved).OrderByDescending(p => p.LevelNum).FirstOrDefault(); if (maxLevelApproved != null) { QA.FinalMailBody = maxLevelApproved.FinalMailBody; } else { QA.FinalMailBody = ""; } } else { QA.FinalMailBody = finalMailBody; } QA.Url = url; QA.ViewGP = viewGP ? 1 : 0; QA.Add(); } } }