معرفی
این مقاله نحوه ایجاد یک فعالیت گردش کار سفارشی برای فعال یا غیرفعال کردن کاربر سیستم Dynamics CRM را نشان میدهد. ما می توانیم از فعالیت سفارشی زیر در گردش کار یا اقدام استفاده کنیم. ما باید حساب کاربری (که باید فعال/غیرفعال شود) و پرچم فعال یا غیرفعال را ارائه کنیم.
مراحل ایجاد یک پروژه ویژوال استودیو برای فعالیت گردش کار سفارشی
پروژه ویژوال استودیو: EnableOrDisableUser
مطمئن شوید که تمام مراجع ذکر شده در اسکرین شات به پروژه ویژوال استودیو اضافه شده است.
![](http://pezhvak24.ir/dl/10kcor/cscd/article/custom-workflow-activity-to-enable-or-disable-system-user-account/Images/VisualStudioProject.png)
ActivityToEnableOrDisableUser.cs
- using System;
- using System.Activities;
- using Microsoft.Xrm.Sdk;
- using Microsoft.Xrm.Sdk.Workflow;
- using System.ServiceModel;
- using Microsoft.Crm.Sdk.Messages;
- namespace EnableOrDisableUser {
- public class ActivityToEnableOrDisableUser: CodeActivity {
- [Input("UserAccount")]
- [ArgumentDescription("User Account that has to be Enabled or Disabled.")]
- public InArgument < string > UserAccount {
- get;
- set;
- }
- [Input("IsEnabled")]
- public InArgument < bool > IsEnabled {
- get;
- set;
- }
- protected override void Execute(CodeActivityContext executionContext) {
- ITracingService tracer = executionContext.GetExtension < ITracingService > ();
- IWorkflowContext context = executionContext.GetExtension < IWorkflowContext > ();
- IOrganizationServiceFactory serviceFactory = executionContext.GetExtension < IOrganizationServiceFactory > ();
- IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
- tracer.Trace("Starting Activity to Enable/Disable User - Workflow");
- try {
- tracer.Trace("Set the Impersonation service account.");
- //To get the pre-configured Impersonation user in Site Settings
- string impersonationAccount = "DomainName\ImpersonationServiceAccount";
- tracer.Trace("To get the impersonation account to perform the enable or disable User Account");
- // To get the impersonation account to perform the enable or disable User Account
- Guid impersonationID = AppEnableOrDisableUser.GetUserId(service, impersonationAccount);
- IOrganizationService impersonationService = serviceFactory.CreateOrganizationService(impersonationID);
- tracer.Trace("To get the User Account inorder to Enable or Disable");
- // To get the User Account Guid inorder to Enable or Disable
- string usr = UserAccount.Get < string > (executionContext);
- tracer.Trace(" User name got from the input param:{0}", usr);
- Entity user = AppEnableOrDisableUser.GetUser(service, usr);
- if (user != null) {
- tracer.Trace("Got User Account inorder to Enable or Disable.");
- SetStateRequest request = new SetStateRequest();
- if (IsEnabled.Get < bool > (executionContext)) {
- request.EntityMoniker = user.ToEntityReference();
- request.State = new OptionSetValue(0); // Enabled
- request.Status = new OptionSetValue(-1);
- tracer.Trace("Setting User as Enabled.");
- } else {
- request.EntityMoniker = user.ToEntityReference();
- request.State = new OptionSetValue(1); // Disabled
- request.Status = new OptionSetValue(-1);
- tracer.Trace("Setting User as Disabled.");
- }
- impersonationService.Execute(request);
- tracer.Trace("Ran the script to set the User status.");
- }
- } catch (FaultException < Microsoft.Xrm.Sdk.OrganizationServiceFault > ex) {
- tracer.Trace("Error: Activity to Enable/Disable User - Workflow:{0}", ex.Message);
- } catch (Exception e) {
- tracer.Trace("Error: Activity to Enable/Disable User - Workflow:{0}", e.Message);
- throw new InvalidPluginExecutionException(e.Message);
- }
- }
- }
- }
AppEnableOrDisableUser.cs
- using System;
- using System.ServiceModel;
- using Microsoft.Xrm.Sdk;
- using Microsoft.Xrm.Sdk.Query;
- using Microsoft.Xrm.Sdk.Messages;
- namespace EnableOrDisableUser {
- public class AppEnableOrDisableUser {
- public static Guid GetUserId(IOrganizationService service, string userName) {
- Guid systemUserId = Guid.Empty;
- try {
- QueryByAttribute queryByAttribute = new QueryByAttribute("systemuser");
- ColumnSet columns = new ColumnSet("systemuserid");
- queryByAttribute.AddAttributeValue("domainname", userName);
- EntityCollection retrieveUser = service.RetrieveMultiple(queryByAttribute);
- systemUserId = ((Entity) retrieveUser.Entities[0]).Id;
- } catch (FaultException < OrganizationServiceFault > e) {
- throw new Exception("Error: >>" + e.Message);
- }
- return systemUserId;
- }
- public static Entity GetUser(IOrganizationService service, string userName) {
- Entity systemUser = new Entity();
- try {
- QueryByAttribute queryByAttribute = new QueryByAttribute("systemuser");
- ColumnSet columns = new ColumnSet(new String[] {
- "systemuserid",
- "firstname",
- "lastname"
- });
- queryByAttribute.AddAttributeValue("domainname", userName);
- EntityCollection retrieveUser = service.RetrieveMultiple(queryByAttribute);
- systemUser = (Entity) retrieveUser.Entities[0];
- } catch (FaultException < OrganizationServiceFault > e) {
- throw new Exception("Error: >>" + e.Message);
- }
- return systemUser;
- }
- }
- }
برای پیکربندی فعالیت گردش کار سفارشی در گردش کار خارج از جعبه با پارامترها
برای افزودن فعالیت سفارشی EnableOrDisableUser در گردش کار.