/// <summary>
        /// List all workflow associations for the specified workflow.
        /// </summary>
        public static void ListAllAssociations(ref ClientContext clientConext,
                                               ref WorkflowServicesManager wfServicesManager)
        {
            WorkflowSubscriptionService subService = wfServicesManager.GetWorkflowSubscriptionService();

            Console.WriteLine();
            Console.WriteLine("Listing all workflow associations: ");

            // get all associations
            WorkflowSubscriptionCollection wfSubscriptions = subService.EnumerateSubscriptions();

            //WorkflowSubscriptionCollection wfSubscriptions = subService.EnumerateSubscriptionsByDefinition(definitionId);
            //WorkflowSubscriptionCollection wfSubscriptions = subService.EnumerateSubscriptionsByList(listId);
            //WorkflowSubscriptionCollection wfSubscriptions = subService.EnumerateSubscriptionsByEventSource(eventSourceId);

            clientConext.Load(wfSubscriptions);
            clientConext.ExecuteQuery();

            // write all associations out
            foreach (var wfSubscription in wfSubscriptions)
            {
                Console.WriteLine("{0} - {1}",
                                  wfSubscription.Id,
                                  wfSubscription.Name
                                  );
            }
        }
        /// <summary>
        /// Retrieves a single workflow subscription.
        /// </summary>
        public static WorkflowSubscription GetOneSubscription(ref ClientContext clientContext,
                                                              ref WorkflowServicesManager wfServicesManager)
        {
            WorkflowSubscriptionService subService = wfServicesManager.GetWorkflowSubscriptionService();

            WorkflowSubscriptionCollection wfSubscriptions = subService.EnumerateSubscriptions();

            clientContext.Load(wfSubscriptions);
            clientContext.ExecuteQuery();

            return(wfSubscriptions.FirstOrDefault());
        }
        /// <summary>
        /// Start a SharePoint List Workflow
        /// </summary>
        /// <param name="siteUrl">URL of the SharePoitn Site</param>
        /// <param name="workflowName">Name of the SharePoint2013 Workflow</param>
        /// <param name="itemID">ID of the Item on which to start the workflow List, if item ID is equal to 0 the worlflow to start is considered as site workflow</param>
        /// <param name="initiationData">Any custom parameters you want to send to the workflow</param>
        public bool Execute(worflowParameters param)
        {
            try
            {
                using (ClientContext clientContext = new ClientContext(param.siteUrl))
                {
                    string user     = ConfigurationManager.AppSettings["USER"];
                    string domain   = ConfigurationManager.AppSettings["DOMAIN"];
                    string password = ConfigurationManager.AppSettings["PASSWORD"];

                    System.Net.NetworkCredential cred = new System.Net.NetworkCredential(user, password, domain);
                    clientContext.Credentials = cred;

                    Web web = clientContext.Web;

                    //Workflow Services Manager which will handle all the workflow interaction.
                    WorkflowServicesManager wfServicesManager = new WorkflowServicesManager(clientContext, web);

                    //The Subscription service is used to get all the Associations currently on the SPSite
                    WorkflowSubscriptionService wfSubscriptionService = wfServicesManager.GetWorkflowSubscriptionService();

                    //All the subscriptions (associations)
                    WorkflowSubscriptionCollection wfSubscriptions = wfSubscriptionService.EnumerateSubscriptions();

                    //Load only the subscription (association) which we want. You can also get a subscription by definition id.
                    clientContext.Load(wfSubscriptions, wfSubs => wfSubs.Where(wfSub => wfSub.Name == param.workflowName));

                    clientContext.ExecuteQuery();

                    //Get the subscription.
                    WorkflowSubscription wfSubscription = wfSubscriptions.First();

                    //The Instance Service is used to start workflows and create instances.
                    WorkflowInstanceService wfInstanceService = wfServicesManager.GetWorkflowInstanceService();

                    if (param.initiationData == null)
                    {
                        param.initiationData = new Dictionary <string, object>();
                    }

                    //validate item id
                    if (param.itemID > 0)
                    {
                        wfInstanceService.StartWorkflowOnListItem(wfSubscription, param.itemID, param.initiationData);
                    }
                    else
                    {
                        wfInstanceService.StartWorkflow(wfSubscription, param.initiationData);
                    }

                    clientContext.ExecuteQuery();

                    return(true);
                }
            }



            catch (Exception err)
            {
                responseMsg = err.Message;
                return(false);
            }
        }