Workflow Foundation
Hey Gwener's, What's Up!
Pada artikel ini saya akan menjelaskan bagaimana untuk mempublish workflow yang dibuat dengan Workflow Foundation. Perlu diketahui untuk mempublish workflow sobat memerlukan format metadata dengan extensi (*.xaml). Baik selengkapnya akan saya ulas sebagai berikut
Ada 2 hal yang perlu sobat lakukan yakni mempublish activies yang diperlukan pada workflow yang dibuat. Kemudian mempublish workflow tersebut.

Create Worflow Management Client

Tahap pertama adalah membuat WorkflowManagementClient, ini membutuhkan Url dan cridential untuk mengakses Workflow Manager. selengkapnya seperti script berikut
        WorkflowManagementClient CreateManagementClient(Uri baseUri, string scopeName)
        {
            //use ClientSettings for addtional setting
            WorkflowManagementClient managementClient = new WorkflowManagementClient(baseUri);
            
            managementClient = managementClient.CurrentScope.PublishChildScope(scopeName, new ScopeDescription()
            {
                UserComments = string.Format("For {0} sample only", scopeName)
            });

            return managementClient;
        }

Publish Workflow Activities

Seperti yang telah saya jelaskan sebelumnya custom actifi yang telah dibuat juga perlu dipublish. Hal ini sobat bisa lakukan menggunakan ManagementClient dengan melampirkan Path File Activiti.
        string PublishActivity(WorkflowManagementClient managementClient, Uri baseUri,
            string scopeName, string activityFile, string activityName)
        {
            string activityString = File.ReadAllText(activityFile);
            string translatedFolder = Path.Combine(Path.GetDirectoryName(Path.GetFullPath(activityFile)), @"bin\Debug\TranslatedWorkflows");
            string translatedXamlFile = Directory.GetFiles(translatedFolder, "*.xaml").First();
            string translatedXamlString = File.ReadAllText(translatedXamlFile);

            if (translatedXamlString.StartsWith("Error"))
            {
                return translatedXamlString;
            }

            ActivityDescription activityDesc = new ActivityDescription(XElement.Parse(translatedXamlString));
            activityDesc.Name = activityName; // This has to match the Activity Class name when publish activity.

            try
            {
                managementClient.Activities.Publish(activityDesc);
            }
            catch (Exception e)
            {
                return "Failed to publish activity: " + e.Message;
            }

            return string.Empty;
        }

Publish Workflow

Terakhir adalah mempublish workflow. Caranya adalah mendaftarkan salah satu akviti sebagai workflow melalui script berikut
       string PublishWorkflow(Uri baseUri, string scopeName, string activityFile,
            string activityName, string workflowName, bool startWorkflow, Dictionary filters)
        {
            WorkflowManagementClient managementClient = CreateManagementClient(baseUri, scopeName);
            string errorMessage = PublishActivity(managementClient, baseUri, scopeName, activityFile, activityName);

            if (!string.IsNullOrEmpty(errorMessage))
            {
                return errorMessage;
            }

            WorkflowDescription workflowDescription = new WorkflowDescription()
            {
                Name = workflowName,
                ActivityPath = activityName,

            };

            if (filters != null)
            {
                MatchAllSubscriptionFilter filterActivity = new MatchAllSubscriptionFilter();
                foreach (var filter in filters)
                {
                    filterActivity.Matches.Add(filter);
                }
                workflowDescription.ActivationFilter = filterActivity;
            }
           
            try
            {
                managementClient.Workflows.Publish(workflowDescription);
            }
            catch (Exception e)
            {
                return "Failed to publish workflow: " + e.Message;
            }

            if (startWorkflow)
            {
                try
                {
                    managementClient.Workflows.Start(workflowDescription.Name);// (workflowDescription.Name, startParameters);

                }
                catch (Exception e)
                {
                    return "Failed to start workflow: " + e.Message;
                }
            }
            return string.Empty;
        }
Sampai tahap ini sobat sudah mempublish worfklow dengan akvities yang telah sobat buat. Selanjutnya sobat tinggalkan menjalankan worfklow berdasarkan nama yang sobat buat menggunakan workflowmanagementclient. Nah, demikianlah cara publish workflow ini. Untuk sobat yang belum menginstall workflow manager bisa mengetahui caranya di artikel berikut Cara install Workflow Manager 1.0

1 comments: