کاربرد پلاگین در Microsoft Dynamics CRM (بخش دوم)
در بخش قبل راجع به اینکه پلاگین چیست صحبت کردیم. در این بخش میخواهیم یک پلاگین بسازیم که هر زمان یک account در سیستم ثبت شد، یک task برای 7 روز بعد ثبت کند که به کاربر یادآوری کند وضعیت account ثبت شده را پیگیری کند.
تجربه ی استفاده از بهینه ترین نرم افزار crm را با سامانه های مدیریت تجربه کنید.
ابتدا برای اینکه بتوانیم پلاگین بنویسیم باید ابزارهای موردنیاز را آماده کنیم. برای نوشتن پلاگین باید SDK نرم افزار را دانلود و نصب میکنیم. ما میخواهیم در این آموزش برای نگارش 2013 پلاگین بنویسیم. روند برای نگارشهای مختلف تفاوتی نمیکند (2013SdkDownload).
بعد از نصب SDK، در گزینههای قالبهای ویژوال استودیو، موارد جدید افزوده میشود.
از گزینههای موجود "New Visual Studio Solution Template for Dynamics CRM 2013" را انتخاب میکنیم.
بعد از نوشتن نام پروژه و زدن دکمه OK، کادر Connect to Dynamics CRM Serve باز میشود.
در این کادر مسیر CRM و دسترسیها و نام Organization و نام Solution را انتخاب میکنیم.
این اطلاعات برای اتصال استفاده خواهد شد و به افزایش کارایی در هنگام توسعه پلاگین کمک میکند.
در تصویر بالا مشاهده میکنید که لیست موجودیت و سایر اطلاعات موجود در Solution دریافت شده است.
اکنون به پنجره Solution Explorer نگاهی میاندازیم.
به طور پیش فرض سه پروژه اضافه میشود. در پروژه CrmPackage یک فایل مهم به نام RegisterFile.crmregister هست که شامل اطلاعات مورد نیاز برای رجیستر و سایر اطلاعات Pluginها و Workflowها است.
در این آموزش ما کاری با WorkFlowها نداریم. بنابراین میتوانیم بهراحتی پروژه WorkFlow را پاک کنیم. (توصیه میشود این کار را انجام دهید، چون در پروسه میتواند اختلال ایجاد کند)
بعد از اینکه پروژه Workflow را پاک کردید، باید قسمت WorkFlow را دستی از فایل RegisterFile.crmregister پاک کنید.
سپس پلاگین ساخته شده اولیه را مطابق شکل زیر پاک کنید.
ایجاد پلاگین برای عملیات Create
برای توسعه پلاگین باید روی Entity که مدنظر داریم، راست کلیک کرده و Create Plugin را مطابق شکل زیر انتخاب میکنیم.
بعد از انتخاب Create Plugin، پنجره Create Plug-in باز میشود.
مطابق تصویر در کادر بالا، گزینه Message روی Create باید تنظیم شده باشد و گزینه PipeLine Stage روی Post-Operation انتخاب شده باشد.
حالا اگر دکمه OK را بزنیم، یک کلاس با نام PostAccountCreate که از کلاس Plugin ارثبری کرده است، ساخته میشود.
متد Execute در داخل کلاس، کدی هست که با هر بار ساخت یک account فراخوانی میشود.
میخواهیم هنگام ساخته شدن یک Account، یک Task مرتبط ساخته شود و تاریخ یادآور آن 7 روز بعد باشد.
برای درج یک رکورد Task به شکل زیر عمل میکنیم.
Entity followup = new Entity("task");
followup["subject"] = "Send e-mail to the new customer.";
followup["scheduledstart"] = DateTime.Now.AddDays(7);service.Create(followup);
کد نهایی کلاس به صورت زیر میباشد.
publicclass PostAccountCreate: IPlugin { ///<summary> /// A plugin that creates a follow-up task activity when a new account is created. ///</summary> ///<remarks>Register this plug-in on the Create message, account entity, /// and asynchronous mode. ///</remarks> publicvoid Execute(IServiceProvider serviceProvider) { //Extract the tracing service for use in debugging sandboxed plug-ins. ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); // Obtain the execution context from the service provider. IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); // The InputParameters collection contains all the data passed in the message request. if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { // Obtain the target entity from the input parameters. Entity entity = (Entity)context.InputParameters["Target"]; // Verify that the target entity represents an account. // If not, this plug-in was not registered correctly. if (entity.LogicalName != "account") return; try { // Create a task activity to follow up with the account customer in 7 days. Entity followup = new Entity("task"); followup["subject"] = "Send e-mail to the new customer."; followup["description"] = "Follow up with the customer. Check if there are any new issues that need resolution."; followup["scheduledstart"] = DateTime.Now.AddDays(7); followup["scheduledend"] = DateTime.Now.AddDays(7); followup["category"] = context.PrimaryEntityName; // Refer to the account in the task activity. if (context.OutputParameters.Contains("id")) { Guid regardingobjectid = new Guid(context.OutputParameters["id"].ToString()); string regardingobjectidType = "account"; followup["regardingobjectid"] = new EntityReference(regardingobjectidType, regardingobjectid); } // Obtain the organization service reference. IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); // Create the task in Microsoft Dynamics CRM. tracingService.Trace("FollowupPlugin: Creating the task activity."); service.Create(followup); } catch (FaultException<OrganizationServiceFault> ex) { thrownew InvalidPluginExecutionException("An error occurred in the FollupupPlugin plug-in.", ex); } catch (Exception ex) { tracingService.Trace("FollowupPlugin: {0}", ex.ToString()); throw; } } }
بعد از نوشتن پلاگین، باید آن را Publish کنیم. پلاگین برای انتشار باید Sign شده باشد. امضا گذاشتن روی اسمبلی و نحوه انجام دادن این کار را میتوانید در این لینک بیشتر مطالعه کنید.
در حالت ساده باید از قسمت Properties پروژهی Plugin و بعد از تب Signing تیک Sign Assembly را بزنید. سپس در قسمت Choose a strong named key file گزینه New را بزنید. سپس یک نام و پسورد برای کلید رمز خود انتخاب کنید.
بعد از اینکه Assembly را Sign کردید، روی پروژه CmPackage کلیک راست کرده و گزینه Deploy را بزنید.
پلاگین ابتدا build می شود و سپس روی Dynamics CRM توزیع میشود.
اکنون اگر account بسازید، یک Task مرتبط با آن ساخته می شود.
پلاگینها میتوانند حالتهای مختلف و شرایط متفاوت داشته باشند. ما در این آموزش یک پلاگین ساده بدون شرایط خاص ایجاد کردیم.
کاربرد پلاگین در Microsoft Dynamics CRM (بخش اول)
ترجمه و تدوین: ابوالفضل رجبپور
منبع: مجموعه مقالات شرکت سامانههای مدیریت