
گردشهای کاری برای سادهسازی فرآیندهای تجاری طراحی شدهاند، در حالی که دستورالعملهای واضحی در مورد جریان اسناد و کاربرانی که باید آن را تأیید کنند، ارائه میدهند. از آنجایی که هیچ جریان کاری موجود برای قراردادهای خدماتی موجود نیست، ایجاد یک گردش کار سفارشی برای پروژه مالی و عملیاتی D365 بهترین گزینه در اینجا است.
این راهنما هر مرحله لازم برای ایجاد گردش کار سفارشی خود را در Dynamics 365 توضیح می دهد.
Enum را ایجاد کنید
شمارش اصلی برای تعریف وضعیت گردش کار استفاده می شود. در اینجا مراحل لازم برای تعریف آن وجود دارد:
– یک Enum جدید برای وضعیت گردش کار ایجاد کنید

یک فیلد جدید در جدول ایجاد کنید
– در اینجا از جدول SMAAgreementTable به عنوان مثال استفاده می کنیم. پسوند جدول ایجاد کنید و Enum را به جدول بکشید.

روش هایی را روی میز ایجاد کنید
سپس باید با استفاده از مراحل زیر متدهایی را در جدول ایجاد کنید:
- یک کلاس جدید ایجاد کنید و نام آن را “devSMAAgreementTable_Extension” بگذارید
- جدول SMAAgreementTable را گسترش دهید.
- روش هایی را با نام های زیر ایجاد کنید
- canSubmitToWorkflow
- UpdateCustWorkflowState
- روش canSubmitToWorkflow از زنجیره ای از دستورات برای کلمه کلیدی بعدی استفاده می کند.
public boolean canSubmitToWorkflow(str _workflowType) { boolean ret = next canSubmitToWorkflow(_workflowType); ret = this.RecId != 0 && this.workflowStatus == workflowstatus::Draft; return ret; }
یک پرس و جو جدید ایجاد کنید
ایجاد یک پرس و جو جدید آسان است:
- در اینجا از کوئری SMAAgreementTableListPage استفاده می کنیم
یک دسته گردش کار ایجاد کنید
- روی Add> New Item> Business Process and Workflow> Workflow Category کلیک کنید
- لطفا یک نام معتبر وارد کنید

- خواص را مطابق شکل زیر تنظیم کنید
- برچسب = “دسته گردش کار قرارداد خدمات”
- Module = Salesorder (از این به بعد یک گردش کار به AR اضافه می کنیم. بنابراین گردش کار در زیر ماژول AR لیست می شود)

یک نوع گردش کار ایجاد کنید
- یک نوع گردش کار جدید با مراحل زیر ایجاد کنید:
- روی Add> New Item> Business Process and Workflow> Workflow Type کلیک کنید



– کلاس devServiceAgreementWFTypeEventHandler را مطابق شکل زیر ویرایش کنید
public void started(WorkflowEventArgs _workflowEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowEventArgs.parmWorkflowContext().parmRecId(), workflowstatus::Pending); } public void canceled(WorkflowEventArgs _workflowEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowEventArgs.parmWorkflowContext().parmRecId(), workflowstatus::Cancel); } public void completed(WorkflowEventArgs _workflowEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowEventArgs.parmWorkflowContext().parmRecId(), workflowstatus::Completed); }
– کد زیر را در کلاس مدیر ارسال بنویسید
public static void main(Args _args) { SMAAgreementTable ObjSMAAgreementTable; devServiceAgreementWFTypeSubmitManager submitManger = new devServiceAgreementWFTypeSubmitManager(); recId _recId = _args.record().RecId; WorkflowCorrelationId _workflowCorrelationId; workflowTypeName _workflowTypeName = workFlowTypeStr("devServiceAgreementWFType"); WorkflowComment note = ""; WorkflowSubmitDialog workflowSubmitDialog; //Opens the submit to workflow dialog. workflowSubmitDialog = WorkflowSubmitDialog::construct(_args.caller().getActiveWorkflowConfiguration()); workflowSubmitDialog.run(); if (workflowSubmitDialog.parmIsClosedOK()) { ObjSMAAgreementTable = _args.record(); // Get comments from the submit to workflow dialog. note = workflowSubmitDialog.parmWorkflowComment(); try { ttsbegin; // Activate the workflow. _workflowCorrelationId = Workflow::activateFromWorkflowType(_workflowTypeName, ObjSMAAgreementTable.RecId, note, NoYes::No); ObjSMAAgreementTable.workflowstatus = workflowstatus::Submitted; ObjSMAAgreementTable.update(); ttscommit; // Send an Infolog message. info("Submitted to workflow."); } catch (Exception::Error) { error("Error on workflow activation."); } } _args.caller().updateWorkFlowControls(); }
ایجاد تایید گردش کار
– برای ایجاد تأیید گردش کار، کافی است روی Add> New Item> Business Process and Workflow> Workflow Approval کلیک کنید.



– کلاس مدیریت رویداد devServiceAgreementWFApprovalEventHandler را به روز کنید
public void started(WorkflowElementEventArgs _workflowElementEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowElementEventArgs.parmWorkflowContext().parmRecId(),workflowstatus::Submitted); } public void canceled(WorkflowElementEventArgs _workflowElementEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowElementEventArgs.parmWorkflowContext().parmRecId(),workflowstatus::Cancel); } public void completed(WorkflowElementEventArgs _workflowElementEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowElementEventArgs.parmWorkflowContext().parmRecId(),workflowstatus::Approved); } public void denied(WorkflowElementEventArgs _workflowElementEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowElementEventArgs.parmWorkflowContext().parmRecId(),workflowstatus::Rejected); } public void changeRequested(WorkflowElementEventArgs _workflowElementEventArgs) { SMAAgreementTable::UpdateCustWorkflowState(_workflowElementEventArgs.parmWorkflowContext().parmRecId(),workflowstatus::ChangeRequest); }
تأیید گردش کار را به نوع گردش کار اضافه کنید
– یک مورد برای تأیید نوع گردش کار در devServiceAgreementWFType> موارد پشتیبانی شده ایجاد کنید

– گردش کار در فرم را فعال کنید

– یک گردش کار ایجاد کنید

خلاصه کردن
امیدواریم این درس ادامه داشته باشد ایجاد دینامیک فعالیت گردش کار سفارشی 365 مفید و آسان برای پیگیری بود. اگر هنوز چند سؤال در مورد فرآیند یا هر سؤال دیگری در رابطه با پروژه D365 خود دارید، همین امروز با تیم کارشناسان DEV IT ما تماس بگیرید. آنها به شما کمک خواهند کرد که بیشترین استفاده را از خود ببرید فرآیند توسعه در D365.
انتشار نحوه ایجاد یک گردش کار سفارشی در پروژه مالی و عملیات D365 برای اولین بار در مجله DEV IT ظاهر شد.