Skip to main content
Notice removed Authoritative reference needed by CommunityBot
Bounty Ended with no winning answer by CommunityBot
added 243 characters in body
Source Link

Workflow Designer:![Workflow sample][1]Workflow sample [1]: https://i.sstatic.net/tBJnn.png

OnWorkflowActivatedCodeOnWorkflowActivatedCode:

I tried with Designer Reusable workflow . Attached is my Designer Workflow. As stated below we can not get the Updated Status Column when we go for Reusable workflows. When I used Title the workflow is working fine

Designer Workflow

Workflow Designer:![Workflow sample][1] [1]: https://i.sstatic.net/tBJnn.png

OnWorkflowActivatedCode:

Workflow Designer:Workflow sample OnWorkflowActivatedCode:

I tried with Designer Reusable workflow . Attached is my Designer Workflow. As stated below we can not get the Updated Status Column when we go for Reusable workflows. When I used Title the workflow is working fine

Designer Workflow

Notice added Authoritative reference needed by santosh kondapalli
Bounty Started worth 50 reputation by santosh kondapalli
added 7056 characters in body
Source Link

Below is the scenario which I tried.

Workflow Designer:![Workflow sample][1] [1]: https://i.sstatic.net/tBJnn.png

OnWorkflowActivatedCode:

  private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
        {
            try
            {


                CurrentDate = String.Format("{0:MM/dd/yyyy}", CTDate);
                SPListItem CurrentWorkflowitem = onWorkflowActivated1.WorkflowProperties.Item;
                _ItemListDuedate = DateTime.Parse(Convert.ToString(CurrentWorkflowitem["Due Date"]));
                _ItemSurveySubmittedBy = Convert.ToString(CurrentWorkflowitem["Survey Submitted By"]);
                _ItemStatus = Convert.ToString(workflowProperties.Item["Status"]);
                SPFieldUserValue SubmitteduserValue = new SPFieldUserValue(CurrentWorkflowitem.Web, _ItemSurveySubmittedBy);
                SubmittedUserLastName = SubmitteduserValue.User.Name.Split(',').LastOrDefault();
                SubmittedUserEmail = SubmitteduserValue.User.Email;              
            }

            catch (Exception ex)
            {

                SendEmailToAdmin(ex.Message);
            }

        }

WORKFLOW STATUS LOOP:

private void WorkflowStatus_Loop(object sender, ConditionalEventArgs e)
        {
           bool workflowstatus= CompareCurrentDate_DueDate(_ItemStatus, _ItemListDuedate);
           if (workflowstatus)
           {
               e.Result = true;
           }
 private bool CompareCurrentDate_DueDate(String CurrentStatus, DateTime ListDuedate)
        {
            try
            {
                if (CurrentStatus != "Completed")
                {
                    CTDate = DateTime.Parse(Convert.ToString(DateTime.Now));
                    int Cmin = CTDate.Minute;
                    int Listmin = ListDuedate.Minute;
                    diff = Cmin - Listmin;
                    //TimeSpan age = ListDueDate.Subtract(CTDate);
                    // diff = Convert.ToInt32(age.Days);
                    if (diff > 48)
                    {
                        datechk = false;

                    }
                }
                else
                {
                    datechk = false;
                }
                
            }
            catch (Exception ex)
            {
                datechk = false;
                SendEmailToAdmin(ex.Message);

            }
            return datechk;
        }}
        
Code to check Status 
 private void codeToCheckStatus_Initial(object sender, EventArgs e)
        {
            try
            {


                String Duedate = String.Format("{0:MM/dd/yyyy}", _ItemListDuedate);
                Remainder1 = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["Remainder1"];
                Remainder2 = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["Remainder2"];
                Remainder3 = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["Remainder3"];
                InitialMail = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["InitialMail"];

                if (InitialMail == true)
                {
                    Email_Body = "Please complete the below survey before the Due date has completed. ";
                    Email_Subject = "Survey Task with Title " + onWorkflowActivated1.WorkflowProperties.Item.Title + "has been assigned";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    updatelist("InitialMail", false);
                }
                if (diff == 41 && Remainder1 == true)
                {
                    Email_Subject = "Week Remainder Email for the Task " + workflowProperties.Item.Title;
                    Email_Body = "The Task is due kindly act on it";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    updatelist("Remainder1", false);

                }
                if (diff == 44 && Remainder2 == true)
                {
                    Email_Subject = "Two Day Remainder Email for the Task " + workflowProperties.Item.Title;
                    Email_Body = "The Task is due kindly act on it";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    updatelist("Remainder2", false);

                }
                if (diff == 45 && Remainder3 == true)
                {

                    Email_Subject = "Same Day Remainder Email for the Task " + workflowProperties.Item.Title;
                    Email_Body = "The Task has been update as completed and you dont have permissions for the same";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    //SPListItem wfitem = workflowProperties.Item;
                    //wfitem["Remainder3"] = false;
                    //wfitem["Status"] = "Completed";
                    //SPRoleAssignmentCollection SPRoleAssColn = wfitem.RoleAssignments;
                    //for (int i = SPRoleAssColn.Count - 1; i >= 0; i--)
                    //{
                    //    SPRoleAssignment roleAssign = SPRoleAssColn[i];
                    //    SPRoleAssColn.Remove(i);
                    //}
                    //wfitem.Update();

                    updatelist("Remainder3", false);

                    SPListItem wfitem = workflowProperties.Item;
                    wfitem["Status"] = "Completed";
                    wfitem.SystemUpdate();
                }
            }
            catch (Exception ex)
            {
               // datechk = false;
                SendEmailToAdmin(ex.Message);

            }

        }
        private void updatelist(string field, Boolean value)
        {
            SPListItem wfitem = workflowProperties.Item;
            wfitem[field] = value;
            wfitem.SystemUpdate();
        }

Below is the scenario which I tried.

Workflow Designer:![Workflow sample][1] [1]: https://i.sstatic.net/tBJnn.png

OnWorkflowActivatedCode:

  private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
        {
            try
            {


                CurrentDate = String.Format("{0:MM/dd/yyyy}", CTDate);
                SPListItem CurrentWorkflowitem = onWorkflowActivated1.WorkflowProperties.Item;
                _ItemListDuedate = DateTime.Parse(Convert.ToString(CurrentWorkflowitem["Due Date"]));
                _ItemSurveySubmittedBy = Convert.ToString(CurrentWorkflowitem["Survey Submitted By"]);
                _ItemStatus = Convert.ToString(workflowProperties.Item["Status"]);
                SPFieldUserValue SubmitteduserValue = new SPFieldUserValue(CurrentWorkflowitem.Web, _ItemSurveySubmittedBy);
                SubmittedUserLastName = SubmitteduserValue.User.Name.Split(',').LastOrDefault();
                SubmittedUserEmail = SubmitteduserValue.User.Email;              
            }

            catch (Exception ex)
            {

                SendEmailToAdmin(ex.Message);
            }

        }

WORKFLOW STATUS LOOP:

private void WorkflowStatus_Loop(object sender, ConditionalEventArgs e)
        {
           bool workflowstatus= CompareCurrentDate_DueDate(_ItemStatus, _ItemListDuedate);
           if (workflowstatus)
           {
               e.Result = true;
           }
 private bool CompareCurrentDate_DueDate(String CurrentStatus, DateTime ListDuedate)
        {
            try
            {
                if (CurrentStatus != "Completed")
                {
                    CTDate = DateTime.Parse(Convert.ToString(DateTime.Now));
                    int Cmin = CTDate.Minute;
                    int Listmin = ListDuedate.Minute;
                    diff = Cmin - Listmin;
                    //TimeSpan age = ListDueDate.Subtract(CTDate);
                    // diff = Convert.ToInt32(age.Days);
                    if (diff > 48)
                    {
                        datechk = false;

                    }
                }
                else
                {
                    datechk = false;
                }
                
            }
            catch (Exception ex)
            {
                datechk = false;
                SendEmailToAdmin(ex.Message);

            }
            return datechk;
        }}
        
Code to check Status 
 private void codeToCheckStatus_Initial(object sender, EventArgs e)
        {
            try
            {


                String Duedate = String.Format("{0:MM/dd/yyyy}", _ItemListDuedate);
                Remainder1 = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["Remainder1"];
                Remainder2 = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["Remainder2"];
                Remainder3 = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["Remainder3"];
                InitialMail = (Boolean)onWorkflowActivated1.WorkflowProperties.Item["InitialMail"];

                if (InitialMail == true)
                {
                    Email_Body = "Please complete the below survey before the Due date has completed. ";
                    Email_Subject = "Survey Task with Title " + onWorkflowActivated1.WorkflowProperties.Item.Title + "has been assigned";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    updatelist("InitialMail", false);
                }
                if (diff == 41 && Remainder1 == true)
                {
                    Email_Subject = "Week Remainder Email for the Task " + workflowProperties.Item.Title;
                    Email_Body = "The Task is due kindly act on it";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    updatelist("Remainder1", false);

                }
                if (diff == 44 && Remainder2 == true)
                {
                    Email_Subject = "Two Day Remainder Email for the Task " + workflowProperties.Item.Title;
                    Email_Body = "The Task is due kindly act on it";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    updatelist("Remainder2", false);

                }
                if (diff == 45 && Remainder3 == true)
                {

                    Email_Subject = "Same Day Remainder Email for the Task " + workflowProperties.Item.Title;
                    Email_Body = "The Task has been update as completed and you dont have permissions for the same";
                    HTMLBODY = PopulateBody(SubmittedUserLastName, Duedate, Email_Body, "TaskList");
                    SendEmail(Email_Subject, SubmittedUserEmail, " ", HTMLBODY);
                    //SPListItem wfitem = workflowProperties.Item;
                    //wfitem["Remainder3"] = false;
                    //wfitem["Status"] = "Completed";
                    //SPRoleAssignmentCollection SPRoleAssColn = wfitem.RoleAssignments;
                    //for (int i = SPRoleAssColn.Count - 1; i >= 0; i--)
                    //{
                    //    SPRoleAssignment roleAssign = SPRoleAssColn[i];
                    //    SPRoleAssColn.Remove(i);
                    //}
                    //wfitem.Update();

                    updatelist("Remainder3", false);

                    SPListItem wfitem = workflowProperties.Item;
                    wfitem["Status"] = "Completed";
                    wfitem.SystemUpdate();
                }
            }
            catch (Exception ex)
            {
               // datechk = false;
                SendEmailToAdmin(ex.Message);

            }

        }
        private void updatelist(string field, Boolean value)
        {
            SPListItem wfitem = workflowProperties.Item;
            wfitem[field] = value;
            wfitem.SystemUpdate();
        }
edited tags
Link
deleted 10 characters in body
Source Link
Arsalan Adam Khatri
  • 14.5k
  • 3
  • 37
  • 59
Loading
Source Link
Loading