void UniSelector_OnItemsSelected(object sender, EventArgs e) { try { int contactId = ValidationHelper.GetInteger(ucSelector.Value, 0); AutomationManager manager = AutomationManager.GetInstance(CurrentUser); var infoObj = ContactInfoProvider.GetContactInfo(contactId); if (WorkflowStepInfoProvider.CanUserStartAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(infoObj.ContactSiteID))) { using (CMSActionContext context = new CMSActionContext()) { context.AllowAsyncActions = false; manager.StartProcess(infoObj, ProcessID); } } } catch (ProcessRecurrenceException ex) { ShowError(ex.Message); } catch (Exception ex) { LogAndShowError("Automation", "STARTPROCESS", ex); } listContacts.ReloadData(); pnlUpdate.Update(); }
protected void Page_Init(object sender, EventArgs e) { if (Contact == null) { RedirectToAccessDenied(GetString("general.invalidparameters")); } AuthorizationHelper.AuthorizedReadContact(true); // Initialize process selector ucSelector.UniSelector.SelectionMode = SelectionModeEnum.SingleButton; // Check permissions if (WorkflowStepInfoProvider.CanUserStartAutomationProcess(CurrentUser, CurrentSiteName)) { ucSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected; ucSelector.UniSelector.SetValue("IsLiveSite", false); ucSelector.Enabled = true; } else { ucSelector.Enabled = false; } listElem.ObjectID = Contact.ContactID; listElem.ObjectType = ContactInfo.OBJECT_TYPE; listElem.EditActionUrl = "Process_Detail.aspx?stateid={0}"; }
/// <summary> /// Gets and bulk updates process steps. Called when the "Get and bulk update steps" button is pressed. /// Expects the CreateProcessStep method to be run first. /// </summary> private bool GetAndBulkUpdateProcessSteps() { // Prepare the parameters string where = "StepName LIKE N'MyNewProcessStep%'"; // Get the data InfoDataSet <WorkflowStepInfo> steps = WorkflowStepInfoProvider.GetWorkflowSteps(where, null); if (!DataHelper.DataSourceIsEmpty(steps)) { // Loop through the individual items foreach (WorkflowStepInfo modifyStep in steps) { // Update the properties modifyStep.StepDisplayName = modifyStep.StepDisplayName.ToUpper(); // Save the changes WorkflowStepInfoProvider.SetWorkflowStepInfo(modifyStep); } return(true); } return(false); }
protected void Page_Load(object sender, EventArgs e) { workflowStepId = QueryHelper.GetInteger("workflowstepid", 0); string currentWorkflowStep = null; int workflowId = 0; if (workflowStepId > 0) { wsi = WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowStepId); // Set edited object EditedObject = wsi; if (wsi != null) { workflowId = wsi.StepWorkflowID; currentWorkflowStep = WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowStepId).StepDisplayName; } } string workflowStepsUrl = "~/CMSModules/Workflows/Workflow_Steps.aspx?workflowid=" + workflowId + "&showtab=steps"; string workflowSteps = GetString("Publish.WorkflowSteps"); if (!RequestHelper.IsPostBack()) { InitalizeMenu(); } // Initialize PageTitle InitializeMasterPage(workflowSteps, workflowStepsUrl, currentWorkflowStep); }
protected void Page_Init(object sender, EventArgs e) { node = (TreeNode)Form.EditedObject; TreeNode workflowNode; if (Form.IsInsertMode) { workflowNode = (TreeNode)Form.ParentObject; } else { workflowNode = (TreeNode)Form.EditedObject; } // Setup the workflow information WorkflowManager wm = WorkflowManager.GetInstance(new TreeProvider(CMSContext.CurrentUser)); WorkflowInfo wi = wm.GetNodeWorkflow(workflowNode); if (wi != null) { // Get current step info, do not update document WorkflowStepInfo si = wm.GetStepInfo(workflowNode) ?? WorkflowStepInfoProvider.GetFirstStep(wi.WorkflowID); // Set IsWorkflow. mIsWorkflow = !string.IsNullOrEmpty(si.StepName); } else { mIsWorkflow = false; } }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that threw event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void OnAction(string actionName, object actionArgument) { int workflowstepid = Convert.ToInt32(actionArgument); if (actionName == "delete") { // Check if documents use the workflow WorkflowStepInfo si = WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowstepid); if (si != null) { List <string> documentNames = new List <string>(); if (WorkflowStepInfoProvider.CheckDependencies(workflowstepid, ref documentNames)) { // Encode and localize names StringBuilder sb = new StringBuilder(); documentNames.ForEach(item => sb.Append("<br />", HTMLHelper.HTMLEncode(ResHelper.LocalizeString(item)))); Control.ShowError(Control.GetString("Workflow.CannotDeleteStepUsed"), Control.GetString("workflow.documentlist") + sb); } else { // Delete the workflow step WorkflowStepInfoProvider.DeleteWorkflowStepInfo(workflowstepid); } } } else if (actionName == "moveup") { WorkflowStepInfoProvider.MoveStepUp(WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowstepid)); } else if (actionName == "movedown") { WorkflowStepInfoProvider.MoveStepDown(WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowstepid)); } }
/// <summary> /// Getting WorkFlowStatus by noadAliaspath /// </summary> /// <param name="data">noadAliaspath</param> public static string WorkFlowStatusBynodeAliasPath(string nodeAliasPath) { // Create an instance of the Tree provider first //TreeProvider tree = new TreeProvider(MembershipContext.AuthenticatedUser); TreeProvider tree = new TreeProvider(); // Get the document TreeNode node = tree.SelectSingleNode(SiteContext.CurrentSiteName, nodeAliasPath, "en-us", false, null, false, false, false); var workFlow = string.Empty; if (node != null) { //Get the document per NodeID and culture TreeNode tn = tree.SelectSingleNode(node.NodeID, "en-us"); //Return its workflow step ID int iStepID = tn.DocumentWorkflowStepID; if (iStepID > 0) { // Get workflow step display name WorkflowStepInfo wsi = WorkflowStepInfoProvider.GetWorkflowStepInfo(iStepID); if (wsi != null) { workFlow = ResHelper.LocalizeString(wsi.StepDisplayName); } } } return(workFlow); }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that threw event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void gridProcesses_OnAction(string actionName, object actionArgument) { int processId = Convert.ToInt32(actionArgument); switch (actionName) { case "edit": var url = UIContextHelper.GetElementUrl(ModuleName.ONLINEMARKETING, "EditProcess"); url = URLHelper.AddParameterToUrl(url, "displayTitle", "false"); url = URLHelper.AddParameterToUrl(url, "objectId", processId.ToString()); URLHelper.Redirect(AddSiteQuery(url, null)); break; case "delete": if (AutomationHelper.CheckProcessDependencies(processId)) { ShowError(GetString("MA.process.CannotDeleteUsed")); return; } if (!WorkflowStepInfoProvider.CanUserManageAutomationProcesses(CurrentUser, CurrentSiteName)) { RedirectToAccessDenied(ModuleName.ONLINEMARKETING, "ManageProcesses"); } // Delete the workflow WorkflowInfoProvider.DeleteWorkflowInfo(processId); break; } }
protected object listElem_OnExternalDataBound(object sender, string sourceName, object parameter) { CMSGridActionButton btn; switch (sourceName.ToLowerInvariant()) { // Delete action case "delete": btn = (CMSGridActionButton)sender; btn.OnClientClick = "if(!confirm(" + ScriptHelper.GetString(String.Format(ResHelper.GetString("autoMenu.RemoveStateConfirmation"), HTMLHelper.HTMLEncode(TypeHelper.GetNiceObjectTypeName(ContactInfo.OBJECT_TYPE).ToLowerCSafe()))) + ")) { return false; }" + btn.OnClientClick; if (!WorkflowStepInfoProvider.CanUserRemoveAutomationProcess(CurrentUser, SiteContext.CurrentSiteName)) { if (btn != null) { btn.Enabled = false; } } break; // Process status column case "statestatus": return(AutomationHelper.GetProcessStatus((ProcessStatusEnum)ValidationHelper.GetInteger(parameter, 0))); } return(null); }
/// <summary> /// Initializes contact selector. /// </summary> private void InitContactSelector() { // Initialize contact selector ucSelector.UniSelector.SelectionMode = SelectionModeEnum.SingleButton; WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo(ProcessID); if (process == null) { RedirectToInformation("editedobject.notexists"); } // Check permissions if (WorkflowStepInfoProvider.CanUserStartAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(listContacts.SiteID)) && (listContacts.SiteID != UniSelector.US_GLOBAL_AND_SITE_RECORD) && ((process != null) && process.WorkflowEnabled)) { ucSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected; ucSelector.SiteID = listContacts.SiteID; ucSelector.IsLiveSite = false; ucSelector.IsSiteManager = ContactHelper.IsSiteManager; ucSelector.Enabled = true; ucSelector.UniSelector.DialogButton.ToolTipResourceString = "automenu.startstatedesc"; } else { ucSelector.Enabled = false; ucSelector.UniSelector.DialogButton.ToolTipResourceString = process.WorkflowEnabled ? "general.nopermission" : "autoMenu.DisabledStateDesc"; } }
/// <summary> /// External history binding. /// </summary> protected object gridState_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "stepname": return(HTMLHelper.HTMLEncode(GetStep(parameter).StepDisplayName)); case "processname": return(HTMLHelper.HTMLEncode(GetProcess(parameter).WorkflowDisplayName)); case "status": return(AutomationHelper.GetProcessStatus((ProcessStatusEnum)ValidationHelper.GetInteger(parameter, 0))); case "delete": ImageButton btn = (ImageButton)sender; btn.OnClientClick = "if(!confirm(" + ScriptHelper.GetString(string.Format(ResHelper.GetString("autoMenu.RemoveStateConfirmation"), HTMLHelper.HTMLEncode(ResHelper.GetString(TypeHelper.GetObjectTypeResourceKey(PredefinedObjectType.CONTACT)).ToLowerCSafe()))) + ")) { return false; }"; if (!WorkflowStepInfoProvider.CanUserRemoveAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(contactSiteId))) { btn.Enabled = false; btn.Attributes.Add("src", GetImageUrl("Design/Controls/UniGrid/Actions/DeleteDisabled.png")); } break; } return(parameter); }
/// <summary> /// Deletes workflow transition. Called when the "Delete transition" button is pressed. /// Expects the CreateWorklow and CreateTransitions method to be run first. /// </summary> private bool DeleteTransition() { // Get the process WorkflowInfo worklow = WorkflowInfoProvider.GetWorkflowInfo("MyNewWorkflow", WorkflowTypeEnum.Approval); if (worklow != null) { // Get step WorkflowStepInfo startStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("MyNewStep", worklow.WorkflowID); if (startStep != null) { // Get existing transition leading from 'My new step' string where = "TransitionStartStepID = " + startStep.StepID; InfoDataSet <WorkflowTransitionInfo> transitions = WorkflowTransitionInfoProvider.GetWorkflowTransitions(worklow.WorkflowID, where, null, 1, null); WorkflowTransitionInfo existingTransition = transitions.First <WorkflowTransitionInfo>(); if (existingTransition != null) { // Delete transition WorkflowTransitionInfoProvider.DeleteWorkflowTransitionInfo(existingTransition); return(true); } } } return(false); }
/// <summary> /// Creates a new workflow step. Called when the "Create workflow step" button is pressed. /// Expects the CreateWorkflow method to be run first. /// </summary> private bool CreateWorkflowStep() { // Get the workflow WorkflowInfo myWorkflow = WorkflowInfoProvider.GetWorkflowInfo("MyNewWorkflow"); if (myWorkflow != null) { // Create new workflow step object WorkflowStepInfo newStep = new WorkflowStepInfo(); // Set the properties newStep.StepWorkflowID = myWorkflow.WorkflowID; newStep.StepName = "MyNewWorkflowStep"; newStep.StepDisplayName = "My new workflow step"; newStep.StepOrder = 1; newStep.StepType = WorkflowStepTypeEnum.Standard; // Save the step into database WorkflowStepInfoProvider.SetWorkflowStepInfo(newStep); // Ensure correct step order WorkflowStepInfoProvider.InitStepOrders(myWorkflow); return(true); } return(false); }
/// <summary> /// Creates workflow transitions. Called when the "Create transition" button is pressed. /// Expects the CreateWorklow and CreateStep method to be run first. /// </summary> private bool CreateTransition() { // Get the workflow WorkflowInfo worklow = WorkflowInfoProvider.GetWorkflowInfo("MyNewWorkflow", WorkflowTypeEnum.Approval); if (worklow != null) { // Get steps with codename 'MyNewStep' and 'Published' WorkflowStepInfo myNewStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("MyNewStep", worklow.WorkflowID); WorkflowStepInfo publishedStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("Published", worklow.WorkflowID); if ((myNewStep != null) && (publishedStep != null)) { // Get existing transition leading to 'Published step' string where = "TransitionEndStepID = " + publishedStep.StepID; InfoDataSet <WorkflowTransitionInfo> transitions = WorkflowTransitionInfoProvider.GetWorkflowTransitions(worklow.WorkflowID, where, null, 1, null); WorkflowTransitionInfo existingTransition = transitions.First <WorkflowTransitionInfo>(); // Change existing transition to leads from 'Start step' to 'My new step' existingTransition.TransitionEndStepID = myNewStep.StepID; // Save existing transition WorkflowTransitionInfoProvider.SetWorkflowTransitionInfo(existingTransition); // Connect 'My new step' step to 'Published' step myNewStep.ConnectTo(myNewStep.StepDefinition.SourcePoints[0].Guid, publishedStep); return(true); } } return(false); }
/// <summary> /// Creates process. Called when the "Create process" button is pressed. /// </summary> private bool CreateProcess() { // Create new process object and set its properties WorkflowInfo newProcess = new WorkflowInfo() { WorkflowDisplayName = "My new process", WorkflowName = "MyNewProcess", WorkflowType = WorkflowTypeEnum.Automation, WorkflowRecurrenceType = ProcessRecurrenceTypeEnum.Recurring }; // Save the process WorkflowInfoProvider.SetWorkflowInfo(newProcess); // Create default steps WorkflowStepInfoProvider.CreateDefaultWorkflowSteps(newProcess); // Get the step with codename 'Finished' and allow Move to previous WorkflowStepInfo finishedStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("Finished", newProcess.WorkflowID); finishedStep.StepAllowReject = true; // Save the 'Finished' step WorkflowStepInfoProvider.SetWorkflowStepInfo(finishedStep); return(true); }
/// <summary> /// Creates process transitions. Called when the "Create transitions" button is pressed. /// Expects the CreateProcess and CreateProcessStep method to be run first. /// </summary> private bool CreateProcessTransitions() { // Get the process WorkflowInfo process = WorkflowInfoProvider.GetWorkflowInfo("MyNewProcess", WorkflowTypeEnum.Automation); if (process != null) { // Get the previously created process step WorkflowStepInfo step = WorkflowStepInfoProvider.GetWorkflowStepInfo("MyNewProcessStep", process.WorkflowID); // Get the step with codename 'Finished' WorkflowStepInfo finishedStep = WorkflowStepInfoProvider.GetWorkflowStepInfo("Finished", process.WorkflowID); if ((step != null) && (finishedStep != null)) { // Get existed transition from 'Start' step to 'Finished' step InfoDataSet <WorkflowTransitionInfo> transitions = WorkflowTransitionInfoProvider.GetWorkflowTransitions(process.WorkflowID, null, null, 1, null); WorkflowTransitionInfo existedTransition = transitions.First <WorkflowTransitionInfo>(); // Change existed transition to leads from 'Start' step to 'My new step' step existedTransition.TransitionEndStepID = step.StepID; // Save existed transition WorkflowTransitionInfoProvider.SetWorkflowTransitionInfo(existedTransition); // Connect 'My new step' step to 'Finished' step step.ConnectTo(step.StepDefinition.SourcePoints[0].Guid, finishedStep); return(true); } } return(false); }
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "condition": return(MacroRuleTree.GetRuleText(ValidationHelper.GetString(parameter, String.Empty))); case "type": DataRowView row = parameter as DataRowView; if (row != null) { ObjectWorkflowTriggerInfo trigger = new ObjectWorkflowTriggerInfo(row.Row); if (!string.IsNullOrEmpty(trigger.TriggerTargetObjectType)) { return(GetTriggerDescription(trigger)); } else { return(AutomationHelper.GetTriggerName(trigger.TriggerType, trigger.TriggerObjectType)); } } return(parameter); case "delete": if (!WorkflowStepInfoProvider.CanUserManageAutomationProcesses(CurrentUser, CurrentSiteName)) { CMSGridActionButton btn = (CMSGridActionButton)sender; btn.Enabled = false; } return(parameter); default: return(parameter); } }
/// <summary> /// Saves new workflow's data and redirects to Workflow_Edit.aspx. /// </summary> /// <param name="sender">Sender</param> /// <param name="e">Event arguments</param> protected void ButtonOK_Click(object sender, EventArgs e) { // finds whether required fields are not empty string result = new Validator().NotEmpty(txtWorkflowDisplayName.Text, GetString("Development-Workflow_New.RequiresDisplayName")).NotEmpty(txtWorkflowCodeName.Text, GetString("Development-Workflow_New.RequiresCodeName")) .IsCodeName(txtWorkflowCodeName.Text, GetString("general.invalidcodename")) .Result; if (result == "") { WorkflowInfo wi = WorkflowInfoProvider.GetWorkflowInfo(txtWorkflowCodeName.Text); if (wi == null) { int workflowId = SaveNewWorkflow(); if (workflowId > 0) { WorkflowStepInfoProvider.CreateDefaultWorkflowSteps(workflowId); URLHelper.Redirect("Workflow_Edit.aspx?workflowid=" + workflowId + "&saved=1"); } } else { lblError.Visible = true; lblError.Text = GetString("Development-Workflow_New.WorkflowExists"); } } else { lblError.Visible = true; lblError.Text = result; } }
/// <summary> /// Initializes master page elements. /// </summary> private void InitializeMasterPage() { if (!CurrentUser.IsGlobalAdministrator) { PageTitle title = CurrentMaster.Title; title.TitleText = GetString("ma.automationprocess.list"); title.TitleImage = GetImageUrl("Objects/MA_AutomationProcess/object.png"); title.HelpName = "helpTopic"; title.HelpTopicName = "ma_process_list"; } if (WorkflowInfoProvider.IsMarketingAutomationAllowed()) { HeaderAction newProcess = new HeaderAction() { // New process link Text = GetString("ma.newprocess"), ImageUrl = GetImageUrl("Objects/MA_AutomationProcess/add.png"), RedirectUrl = AddSiteQuery("Process/New.aspx", null), Enabled = WorkflowStepInfoProvider.CanUserManageAutomationProcesses(CurrentUser, CurrentSiteName) }; AddHeaderAction(newProcess); } }
/// <summary> /// External history binding. /// </summary> protected object gridState_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "stepname": return(HTMLHelper.HTMLEncode(GetStep(parameter).StepDisplayName)); case "processname": return(HTMLHelper.HTMLEncode(GetProcess(parameter).WorkflowDisplayName)); case "status": return(AutomationHelper.GetProcessStatus((ProcessStatusEnum)ValidationHelper.GetInteger(parameter, 0))); case "delete": CMSGridActionButton btn = (CMSGridActionButton)sender; var confirmationMessage = string.Format(ResHelper.GetString("autoMenu.RemoveStateConfirmation"), HTMLHelper.HTMLEncode(TypeHelper.GetNiceObjectTypeName(PredefinedObjectType.CONTACT).ToLowerCSafe())); var confirmationScript = "if(!confirm(" + ScriptHelper.GetString(confirmationMessage) + ")) { return false; } "; // In OnClientClick is JS code to call Unigrid's OnAction, we need to add this code to the end of new JS code to preserve it btn.OnClientClick = confirmationScript + btn.OnClientClick; if (!WorkflowStepInfoProvider.CanUserRemoveAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(contactSiteId))) { btn.Enabled = false; } break; } return(parameter); }
/// <summary> /// Saves new wokflow step's data into DB. /// </summary> /// <returns>Returns ID of created wokflow step</returns> protected int SaveNewWorkflowStep() { WorkflowStepInfo wsi = new WorkflowStepInfo(); wsi.StepDisplayName = txtWorkflowDisplayName.Text; wsi.StepName = txtWorkflowCodeName.Text; // Get published step info for the proper position WorkflowStepInfo psi = WorkflowStepInfoProvider.GetPublishedStep(workflowid); if (psi != null) { wsi.StepOrder = psi.StepOrder; // Move the published step down psi.StepOrder += 1; WorkflowStepInfoProvider.SetWorkflowStepInfo(psi); // Move the archived step down WorkflowStepInfo asi = WorkflowStepInfoProvider.GetArchivedStep(workflowid); if (asi != null) { asi.StepOrder += 1; WorkflowStepInfoProvider.SetWorkflowStepInfo(asi); } } wsi.StepWorkflowID = workflowid; WorkflowStepInfoProvider.SetWorkflowStepInfo(wsi); return(wsi.StepID); }
protected void Page_Load(object sender, EventArgs e) { if (!IsAuthorized()) { RedirectToAccessDenied(GetString("general.nopermission")); } // Initialize contact selector ucSelector.UniSelector.SelectionMode = SelectionModeEnum.SingleButton; ucSelector.UniSelector.ButtonImage = GetImageUrl("/Objects/MA_AutomationState/add.png"); // Check permissions if (WorkflowStepInfoProvider.CanUserStartAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(Contact.ContactSiteID))) { ucSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected; ucSelector.UniSelector.DialogImage.CssClass = "NewItemImage"; ucSelector.UniSelector.DialogLink.CssClass = "MenuItemEdit"; ucSelector.UniSelector.SetValue("SiteID", SiteID); ucSelector.UniSelector.SetValue("IsLiveSite", false); ucSelector.IsSiteManager = ContactHelper.IsSiteManager; ucSelector.Enabled = true; } else { ucSelector.Enabled = false; ucSelector.UniSelector.DialogImage.CssClass = "NewItemImageDisabled"; ucSelector.UniSelector.DialogLink.CssClass = "MenuItemEditDisabled"; } listElem.ObjectID = Contact.ContactID; listElem.ObjectType = PredefinedObjectType.CONTACT; listElem.EditActionUrl = "Process_Detail.aspx?stateid={0}" + (IsSiteManager ? "&issitemanager=1" : String.Empty); }
/// <summary> /// Setup control. /// </summary> private void SetupControl() { mCanRemoveAutomationProcesses = WorkflowStepInfoProvider.CanUserRemoveAutomationProcess(CurrentUser, SiteContext.CurrentSiteName); if (!RequestHelper.IsPostBack() && (PageSize > 0)) { listElem.Pager.DefaultPageSize = PageSize; } listElem.ZeroRowsText = GetString("ma.pendingcontacts.nowaitingcontacts"); listElem.EditActionUrl = "Process_Detail.aspx?stateid={0}&siteid=" + SiteContext.CurrentSiteID; listElem.RememberStateByParam = String.Empty; listElem.OnExternalDataBound += listElem_OnExternalDataBound; // Register scripts for contact details dialog ScriptHelper.RegisterDialogScript(Page); ScriptHelper.RegisterWOpenerScript(Page); ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "ViewContactDetails", ScriptHelper.GetScript( "function Refresh() { \n " + "window.location.href = window.location.href;\n" + "}")); // If widget register action for view process in dialog if (IsWidget) { ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "ViewPendingContactProcess", ScriptHelper.GetScript( "function viewPendingContactProcess(stateId) {" + " modalDialog('" + UrlResolver.ResolveUrl("~/CMSModules/ContactManagement/Pages/Tools/PendingContacts/Process_Detail.aspx") + "?dialog=1&stateId=' + stateId, 'ViewPendingContactProcess', '1024', '800');" + "}")); } }
/// <summary> /// Handles the UniGrid's OnAction event. /// </summary> /// <param name="actionName">Name of item (button) that threw event</param> /// <param name="actionArgument">ID (value of Primary key) of corresponding data row</param> protected void gridProcesses_OnAction(string actionName, object actionArgument) { int processId = Convert.ToInt32(actionArgument); switch (actionName) { case "edit": var url = UIContextHelper.GetElementUrl(ModuleName.ONLINEMARKETING, "EditProcess"); url = URLHelper.AddParameterToUrl(url, "displayTitle", "false"); url = URLHelper.AddParameterToUrl(url, "objectId", processId.ToString()); URLHelper.Redirect(url); break; case "delete": if (!WorkflowStepInfoProvider.CanUserManageAutomationProcesses(CurrentUser, CurrentSiteName)) { RedirectToAccessDenied(ModuleName.ONLINEMARKETING, "ManageProcesses"); } // Delete the workflow with all the dependencies WorkflowInfoProvider.DeleteWorkflowInfo(processId); ShowConfirmation(GetString("ma.process.delete.confirmation")); break; } }
/// <summary> /// Returns object query of automation states for my pending contacts which can be used as datasource for unigrid. /// </summary> /// <param name="user">User for whom pending contacts are shown</param> /// <param name="contactsWhereCondition">Where condition for filtering contacts</param> private ObjectQuery <AutomationStateInfo> GetPendingContacts(UserInfo user, string contactsWhereCondition) { // Get complete where condition for pending steps var condition = WorkflowStepInfoProvider.GetAutomationPendingStepsWhereCondition(user, SiteContext.CurrentSiteID); // Get automation steps specified by condition with permission control var automationWorkflowSteps = WorkflowStepInfoProvider.GetWorkflowSteps() .Where(condition) .Column("StepID") .WhereEquals("StepWorkflowType", (int)WorkflowTypeEnum.Automation); // Get all pending contacts from automation state where status is Pending and current user is the owner var allPendingContacts = AutomationStateInfoProvider.GetAutomationStates() .WhereIn("StateStepID", automationWorkflowSteps) .WhereEquals("StateStatus", (int)ProcessStatusEnum.Pending) .WhereEquals("StateObjectType", ContactInfo.OBJECT_TYPE); var contactIDs = ContactInfoProvider.GetContacts() .Column("ContactID") .Where(contactsWhereCondition); if (ShowOnlyMyPendingContacts) { contactIDs.WhereEquals("ContactOwnerUserID", user.UserID); } return(allPendingContacts.WhereIn("StateObjectID", contactIDs.AsMaterializedList("ContactID"))); }
/// <summary> /// Saves new workflow step's data into DB. /// </summary> /// <returns>Returns ID of created workflow step</returns> protected int SaveNewWorkflowStep() { SetFormValues(CurrentStepInfo); // Ensure correct order for basic workflow if (CurrentWorkflow.IsBasic) { // Get published step info for the proper position WorkflowStepInfo psi = WorkflowStepInfoProvider.GetPublishedStep(WorkflowID); if (psi != null) { CurrentStepInfo.StepOrder = psi.StepOrder; // Move the published step down psi.StepOrder += 1; WorkflowStepInfoProvider.SetWorkflowStepInfo(psi); // Move the archived step down WorkflowStepInfo asi = WorkflowStepInfoProvider.GetArchivedStep(WorkflowID); if (asi != null) { asi.StepOrder += 1; WorkflowStepInfoProvider.SetWorkflowStepInfo(asi); } } } CurrentStepInfo.StepWorkflowID = WorkflowID; WorkflowStepInfoProvider.SetWorkflowStepInfo(CurrentStepInfo); return(CurrentStepInfo.StepID); }
/// <summary> /// UniGrid external data bound. /// </summary> private object gridDocs_OnExternalDataBound(object sender, string sourceName, object parameter) { sourceName = sourceName.ToLowerCSafe(); switch (sourceName) { // Column 'DocumentWorkflowStepID' case "documentworkflowstepid": int stepId = ValidationHelper.GetInteger(parameter, 0); if (stepId > 0) { // Get workflow step display name WorkflowStepInfo wsi = WorkflowStepInfoProvider.GetWorkflowStepInfo(stepId); if (wsi != null) { return(ResHelper.LocalizeString(wsi.StepDisplayName)); } } break; // Column 'Published' case "published": bool published = ValidationHelper.GetBoolean(parameter, true); return(published ? GetString("General.Yes") : GetString("General.No")); case "documentmodifiedwhen": case "documentmodifiedwhentooltip": TimeZoneInfo tzi = null; // Get current time for user contribution list on live site string result = TimeZoneMethods.GetDateTimeForControl(this, ValidationHelper.GetDateTime(parameter, DateTimeHelper.ZERO_TIME), out tzi).ToString(); // Display time zone shift if needed if ((tzi != null) && TimeZoneHelper.TimeZonesEnabled) { if (sourceName.EndsWithCSafe("tooltip")) { result = TimeZoneHelper.GetUTCLongStringOffset(tzi); } else { result += TimeZoneHelper.GetUTCStringOffset(tzi); } } return(result); // Action 'edit' case "edit": ((Control)sender).Visible = AllowEdit && CheckGroupPermission("editpages"); break; // Action 'delete' case "delete": ((Control)sender).Visible = AllowDelete && CheckGroupPermission("deletepages"); break; } return(parameter); }
protected void Page_PreRender(object sender, EventArgs e) { // Check permissions to create new record if (!WorkflowStepInfoProvider.CanUserManageAutomationProcesses(CurrentUser, CurrentSiteName)) { headerActions.Enabled = false; } }
private void UniSelector_OnItemsSelected(object sender, EventArgs e) { var contacts = ValidationHelper.GetString(ucSelector.Value, null); if (String.IsNullOrEmpty(contacts) || !WorkflowStepInfoProvider.CanUserStartAutomationProcess(CurrentUser, CurrentSiteName)) { return; } var contactIds = contacts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Select(i => ValidationHelper.GetInteger(i, 0)); var manager = AutomationManager.GetInstance(CurrentUser); var processId = UIContext.ObjectID; var warningBuilder = new StringBuilder(); using (CMSActionContext context = new CMSActionContext { AllowAsyncActions = false }) { try { foreach (var contactId in contactIds) { var contact = ContactInfo.Provider.Get(contactId); try { manager.StartProcess(contact, processId); } catch (ProcessRecurrenceException ex) { warningBuilder.AppendFormat("<div>{0}</div>", ex.Message); } } } catch (Exception ex) { LogAndShowError("Automation", "STARTPROCESS", ex); return; } } var warning = warningBuilder.ToString(); if (!String.IsNullOrEmpty(warning)) { ShowWarning(String.Format(GetString("sf.automation.error"), ""), warning); } else { ShowConfirmation(GetString("ma.process.startedselected")); } // Reload grid listContacts.ReloadData(); pnlUpdate.Update(); // Reset selector ucSelector.Value = null; }
/// <summary> /// Reloads the form status. /// </summary> protected void SetupForm() { // Check modify permissions if ((CMSContext.CurrentUser.IsAuthorizedPerDocument(Node, NodePermissionsEnum.Modify) == AuthorizationResultEnum.Denied) && !CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Content", "ManageWorkflow")) { ShowInfo(String.Format(GetString("cmsdesk.notauthorizedtoeditdocument"), Node.NodeAliasPath), true); } else { bool autoPublishChanges = false; // Check if auto publish changes is allowed if (WorkflowInfo != null) { autoPublishChanges = WorkflowInfo.WorkflowAutoPublishChanges; } if ((WorkflowInfo != null) || (currentStepId > 0)) { // Setup the form WorkflowStepInfo stepInfo = null; if (Node.IsPublished && (Node.DocumentCheckedOutVersionHistoryID <= 0)) { stepInfo = WorkflowStepInfoProvider.GetPublishedStep(WorkflowInfo.WorkflowID); } else { stepInfo = WorkflowStepInfoProvider.GetWorkflowStepInfo(currentStepId) ?? WorkflowStepInfoProvider.GetFirstStep(WorkflowInfo.WorkflowID); } if (stepInfo != null) { currentStepId = stepInfo.StepID; if (plcAdvanced.Visible) { ucDesigner.SelectedStepID = currentStepId; } } } } // Check if document isn't checked out if (DocumentIsCheckedOut) { ShowInfo(GetString("WorfklowProperties.DocumentIsCheckedOut"), true); } // If no workflow scope set for node, hide the data if (WorkflowInfo == null) { lblWorkflow.Text = GetString("properties.scopenotset"); lblWorkflow.Visible = true; pnlWorkflow.Visible = false; } }