آموزش توابع پرکاربرد بیزاجی (Bizagi)

eBPM | مرجع تخصصی آموزش های مدیریت فرایند کسب و کار | 100+ مقاله آموزشی رایگان

فهرست مطالب :

آموزش توابع پرکاربرد بیزاجی (Bizagi) 

آموزش توابع پرکاربرد بیزاجی (Bizagi) با مثال‌های واقعی در گمرک، بورس و لجستیک را در این مقاله به طور کاربردی در وبسایت eBPM توضیح خواهیم داد.

جریمه انبارداری خودکار در گمرک یا اخطار فوری کاهش سرمایه در بورس را بدون یک خط کد پیچیده در بیزاجی پیاده کنید. در این مقاله چندین تابع کاربردی Me و CHelper  را با مثال عملی یاد بگیریدپیشنهاد میشود تا در مورد نرم افزار بیزاجی بیشتر بخوانید

فرض کنید مشتری شما ۱۵ روز است کالایش در گمرک معطل مانده و هر روز جریمه انبارداری به او تعلق می‌گیرد. یا در یک کارگزاری بورس، ناگهان ارزش پرتفوی مشتری پایین می‌آید و باید ظرف چند ثانیه اخطار مارجین کال صادر شود، وگرنه ضرر می‌کند.

این سناریوها با جمع و میانگین ساده در بیزاجی حل نمی‌شوند. راه حل، توابع (Functions) هستند. همان ابزاری که به شما اجازه می‌دهند منطق شرطی، محاسبات بین‌مرحله‌ای و واکنش بلادرنگ را در فرآیندهای خود پیاده کنید.

در این مقاله، ۱۵ تابع پرکاربرد بیزاجی را مرور می‌کنیم – با مثال عملی و کدنویسی واقعی. تفاوت حیاتی بین Me  و CHelper را یاد می‌گیرید و می‌بینید چطور بدون صدها خط کد، فرآیندهای هوشمند و بدون خطا بسازید.

اگر مدل‌ساز فرآیند هستید یا قصد دارید فرآیندهای مالی، لجستیک و تجاری خود را در بیزاجی حرفه‌ای کنید، این مقاله برای شماست.

چرا بدون توابع، مدل‌سازی فرآیند در بیزاجی ناقص است؟

توابع پرکاربرد بیزاجی Bizagi

بیزاجی بدون توابع فقط جمع و میانگین بلد است. اما دنیای واقعی پر از «اگر… آنگاه…»، محاسبات بین‌مرحله‌ای و واکنش‌های چندثانیه‌ای است.

در ادامه ۵ مشکل واقعی که در پروژه‌های بیزاجی بارها دیده شده را مرور می‌کنیم – و دقیقاً نشان می‌دهیم کدام تابع، کدام مشکل را حل می‌کند.

  • مشکل: اخطار جریمه دیرکرد در گمرک

سناریو: شرکت بازرگانی محموله‌ای وارد کرده است. تاریخ ورود کالا به گمرک ۲۰ روز پس از تاریخ صدور بارنامه (BL) است، اما سیستم هیچ هشداری نمی‌دهد.

راه‌حل با تابع: مقایسه دو تاریخ از دو مرحله متفاوت

تابع مورد نیاز: CHelper (چون داده از دو مرحله می‌آید)

کد نمونه:

if(WarehouseEntryDate > BlDate.AddDays(15))

{

CHelper.ThrowValidationAlert(“جریمه انبارداری تعلق گرفته است”);

}

توابع پرکاربرد بیزاجی

2-مشکل: تأخیر در اخطار کاهش ارزش سهام

سناریو: قیمت سهام در بورس ناگهان ۱۰٪ افت می‌کند. ارزش پرتفوی مشتری به زیر حد مجاز می‌رسد. سیستم باید ظرف چند ثانیه اخطار «مارجین کال» صادر کند، اما الان نیم ساعت تأخیر دارد.

راه‌حل با تابع: واکنش بلادرنگ بدون دخالت انسان

تابع مورد نیاز: توابع زیل CHelper  که مستقل از مرحله جاری اجرا می‌شوند.

نکته کلیدی : Me فقط در همان مرحله کار می‌کند، اما CHelper  همیشه بیدار است.

3-مشکل: تغییر یک فرمول، ده جا خطا می‌دهد

سناریو: فرمول محاسبه حقوق گمرکی تغییر کرده است. شما این فرمول را در ۱۰ جای مدل کپی کرده‌اید. حالا باید همه را دستی پیدا کنید و اصلاح کنید – حتماً یکی را فراموش خواهید کرد.

راه‌حل با تابع: یک بار بنویس، صد بار استفاده کن

تابع مورد نیاز: توابع سفارشی (Custom Functions)

کد نمونه:

csharp

// فقط یک بار بنویسید:

public double CalculateCustomDuty(double goodsValue)

{

return goodsValue * 0.32; // ۳۲ درصد حقوق گمرکی

}

// بعد در ۱۰ جای مدل صدا بزنید:

Me.TotalDuty = CalculateCustomDuty(Me.GoodsValue);

دانلود توابع پرکاربرد بیزاجی

4-مشکل: مدیر نمی‌داند چرا اخطار صادر شده

سناریو: مشتری شکایت کرده که اخطار اشتباه دریافت کرده است. مدیر اجرایی می‌پرسد «سیستم بر چه مبنایی این اخطار را داده؟» – شما هیچ مدرک یا لاگی ندارید.

راه‌حل با تابع: شفافیت کامل و قابلیت ردیابی

تابع مورد نیاز: CHelper.trace() برای ثبت لاگ

کد نمونه:

CHelper.trace(“ViolationCheck”, “شرکت ” + companyName + ” دارای پرونده تخلف است”);

// بعداً می‌توانید در گزارش‌ها ببینید دقیقاً چه کسی، چه زمانی و چرا اخطار گرفته است

سیستمی که منطقش شفاف نباشد، در بحران فرو می‌ریزد.

5-مشکل: از صفر نوشتن تقویم کاری زمان‌بر و پرخطاست

سناریو: می‌خواهید اختلاف روز بین تاریخ ثبت سفارش و تاریخ تحویل را فقط با احتساب روزهای کاری (به جز جمعه‌ها و تعطیلات رسمی) محاسبه کنید. نوشتن این منطق از صفر حداقل ۵۰ خط کد می‌برد.

راه‌حل با تابع: استفاده از توابع آماده و تست‌شده

تابع مورد نیاز: CHelper.getEffectiveDuration()

کد نمونه:

var workingDays = CHelper.getEffectiveDuration(Me, orderDate, deliveryDate);

// بیزاجی خودش تعطیلات و آخر هفته را از تقویم سازمان کم می‌کند

کد های توابع پرکاربرد بیزاجی

 

توابع بیزاجی هزاران ساعت تست پشت سر دارند. از صفر ننویسید، استفاده کنید.

مزیت های توابع پرکاربرد بیزاجی

دو موتور محرک بیزاجی: Me و CHelper

قبل از اینکه سراغ توابع عملی برویم، باید با دو مفهوم بنیادین آشنا شوید. فرق Me  و CHelper  را با یک تشبیه ساده به خاطر بسپارید:

 Me  مانند کارمند همان میز است – فقط از وضعیت کاری خودش خبر دارد و فقط به همان مرحله دسترسی دارد.

 CHelper  مانند مدیر دفتر است – به همه پرونده‌ها، همه مراحل و کل سازمان دسترسی دارد و می‌تواند بین آنها ارتباط برقرار کند.

جدول مقایسه سریع دو موتور محرک بیزاجی در توابع

ویژگی Me CHelper
محدوده دسترسی فقط همان مرحله جاری کل فرآیند و تمام مراحل
نوع محاسبات ساده و لحظه‌ای پیچیده، بین‌مرحله‌ای، تاریخی
کی به کار می‌آید؟ وقتی نیاز به تاریخ شروع تسک، مدت زمان، یا وضعیت فعلی دارید وقتی می‌خواهید دو مرحله را مقایسه کنید یا به داده‌های کیس دیگر دسترسی داشته باشید
مثال واقعی Me.EntryDate

تاریخ ورود به این مرحله

CHelper.getEstimatedDate()

محاسبه ضرب الاجل با تقویم کاری

سرعت اجرا بسیار سریع سریع (با تأخیر محاسباتی قابل‌قبول)

 

مثال واقعی: چرا اینجا باید از تابع CHelper در بیزاجی استفاده کنیم؟

سناریو: در مثال گمرک که گفتیم – «اگر تاریخ ورود به گمرک بیش از ۱۵ روز از تاریخ بارنامه گذشته باشد»

چالش: این دو تاریخ WarehouseEntryDate و BlDate  به دو مرحله متفاوت از فرآیند تعلق دارند. مرحله اول «صدور بارنامه» است، مرحله دوم «ورود به گمرک».

چرا Me جواب نمی‌دهد؟

Me  فقط به داده‌های همین مرحله جاری دسترسی دارد. وقتی قانون در مرحله «ورود به گمرک» اجرا می‌شود، Me  به تاریخ بارنامه (که در مرحله قبل ثبت شده) دسترسی ندارد.

راه‌حل با CHelper:

csharp

// این درست است – CHelper به هر دو مرحله دسترسی دارد

var blDate = CHelper.getAttrib(“Shipment”, Me.ShipmentId, “BLDate”);

var entryDate = Me.EntryDate; // یا CHelper.getAttrib مشابه

if(entryDate > blDate.AddDays(15))

{

CHelper.ThrowValidationAlert(“جریمه انبارداری تعلق گرفت”);

}

کد های پرکاربرد توابع پرکاربرد بیزاجی

 

توابع پرکاربرد Me در bizagi (دسترسی به داده‌های مرحله جاری)

تمام توابع زیر فقط به همین مرحله (تسک یا رویداد) دسترسی دارند. اگر به داده‌های مراحل دیگر نیاز دارید، باید سراغ CHelper بروید. ( پیشنهاد میشود تا آموزش بیزاجی را در eBPM مشاهده کنید )

دسته اول: اطلاعات کیس (Case)

تابع خروجی کد نمونه
Me.Case.Id شناسه یکتای فنی کیس در دیتابیس var caseId = Me.Case.Id;
Me.Case.CaseNumber شماره مورد قابل مشاهده برای کاربر (شماره پرونده) ShowMessage(“پرونده شماره ” + Me.Case.CaseNumber);
Me.Case.Creator نام کاربری (User ID) کسی که کیس را شروع کرده var startedBy = Me.Case.Creator;

نکته مهم فرق Case.Id و CaseNumber:

اگر در زیرفرآیند هستید، Me.Case.Id  به زیرفرآیند اشاره دارد ولی Me.Case.CaseNumber  همچنان شماره فرآیند والد را نشان می‌دهد.

دسته دوم: اطلاعات تسک (Task)

تابع خروجی کد نمونه
Me.Task.Name نام فنی تسک (همان نامی که در دیتابیس ذخیره شده) var techName = Me.Task.Name;
Me.Task.DisplayName نام نمایشی تسک (همان چیزی که کاربر روی صفحه می‌بیند) ShowMessage(“مرحله جاری:” + Me.Task.DisplayName);
Me.Task.EstimatedDurationDate مدت زمان پیش‌بینی شده تسک (دقیقه) if(Me.Task.EstimatedDurationDate > 60) Alert(“تسک طولانی”);

 

دسته سوم: زمان و ضرب‌الاجل (Duration & Deadline)

 

تابع کاربرد کد نمونه
Me.Duration تنظیم مدت زمان پویا برای تسک یا تایمر Me.Duration = 120; // ۲ ساعت
Me.EntryDate خواندن تاریخ ورود به این مرحله var start = Me.EntryDate;
Me.EstimatedSolutionDate تنظیم تاریخ سررسید ثابت Me.EstimatedSolutionDate = DateTime.Now.AddDays(3);

 

دسته چهارم: وضعیت تسک (Task Status)

 

تابع خروجی کد نمونه
Me.CanRelease آیا تسک قابل انتشار و ارسال به مرحله بعد است؟ (true/false) if(!Me.CanRelease) CHelper.ThrowValidationError(“اطلاعات کامل نیست”);

 

مثال واقعی: مدت زمان پویا بر اساس نوع سفر

سناریو: شرکت مسافرتی فرآیند «رزرو بلیط» را طراحی کرده است. اگر مسافر به مقصد بین‌المللی سفر کند، فرآیند رزرو ۳ روز زمان می‌برد. اگر داخلی باشد، ۱ روز کافی است.

چالش: مدت زمان تسک نباید ثابت باشد. باید بر اساس نوع سفر، پویا تنظیم شود.

راه‌حل با Me.Duration  و Me.EstimatedSolutionDate :

csharp

// این قانون را در رویداد On Enter تسک بنویسید

if(<TravelRequest.Destination.Type> == “International”)

{

Me.Duration = 3; // ۳ روز

Me.EstimatedSolutionDate = DateTime.Now.AddDays(5); // سررسید ۵ روز بعد

}

else

{

Me.Duration = 1; // ۱ روز

Me.EstimatedSolutionDate = DateTime.Now.AddDays(2);

}

توابع ME در توابع پرکاربرد بیزاجی

 

// ثبت لاگ برای شفافیت

CHelper.trace(“DurationSet”, “مدت زمان تسک تنظیم شد: ” + Me.Duration + ” روز”);

نکته مهم: تنظیم Me.Duration  و Me.EstimatedSolutionDate  حتماً باید در رویداد On Enter  انجام شود. اگر در جای دیگر بنویسید، تأثیر ندارد.

جدول خلاصه توابع Me (برای مرور سریع)

دسته توابع کاربرد اصلی
کیس (Case) Id, CaseNumber, Creator شناسایی پرونده و شروع‌کننده
تسک (Task) Name, DisplayName, EstimatedDurationDate خواندن اطلاعات مرحله جاری
زمان (Time) Duration, EntryDate, EstimatedSolutionDate تنظیم و خواندن زمان و ضرب‌الجل
وضعیت (Status) CanRelease بررسی امکان ارسال به مرحله بعد

 

توابع پرکاربرد CHelper (دسترسی به کل فرآیند و فراتر)

برخلاف Me، توابع CHelper  به کل فرآیند، کیس‌های دیگر، دیتابیس سازمان و حتی تقویم کاری دسترسی دارند.

در اینجا چندین تابع کاربردی را بر اساس سناریوی واقعی دسته‌بندی کرده‌ایم:

 

دسته اول: ارتباط بین کیس‌ها (مدیریت پرونده‌های دیگر)

 

وقتی در یک فرآیند هستید، اما نیاز دارید به اطلاعات کیس دیگر دسترسی پیدا کنید.

تابع کاربرد کد نمونه
CHelper.getCaseById(id) دریافت اطلاعات یک کیس دیگر با شناسه آن var otherCase = CHelper.getCaseById(12345);
CHelper.NewCase() ایجاد یک کیس جدید از داخل فرآیند جاری CHelper.NewCase(“ProcessName”, startData);
CHelper.abortProcess() خاتمه دادن به کیس جاری یا کیس دیگر CHelper.abortProcess(Me.Case.Id, “تأیید نشد”);

 

مثال واقعی: بررسی سابقه تخلف ارزی قبل از تخصیص ارز

سناریو:
یک شرکت واردکننده (مثلاً واردکننده پلی‌اتیلن از آلمان) از بانک خود درخواست خرید ارز (یورو) برای پرداخت به صادرکننده خارجی می‌کند.

اما طبق قانون بانک مرکزی: «شرکت واردکننده فقط در صورتی می‌تواند ارز دریافت کند که هیچ پرونده باز تخلف ارزی در سوابق نداشته باشد.»

چالش:
بانک قبلاً چندین پرونده ارزی برای این شرکت ثبت کرده است. سیستم باید قبل از تخصیص ارز جدید، تمام پرونده‌های قبلی را بررسی کند و ببیند آیا هیچ‌کدام در وضعیت «تخلف» (Violation) هستند یا خیر.

راه‌حل با (CHelper.getCaseById):

csharp

// مرحله 1: دریافت لیست شناسه پرونده‌های قبلی این شرکت

var caseIds = getCompanyActiveCases(Me.CompanyID);

var hasViolation = false;

var violatingCaseNumber = “”;

// مرحله 2: بررسی هر پرونده به صورت جداگانه

for(var i = 0; i < caseIds.Count; i++)

{

// دسترسی به اطلاعات پرونده دیگر با استفاده از getCaseById

var targetCase = CHelper.getCaseById(caseIds[i]);

// مرحله 3: بررسی وضعیت تخلف

if(targetCase.ProcessState == “Violation”)

{

hasViolation = true;

violatingCaseNumber = targetCase.CaseNumber;

CHelper.trace(“ViolationCheck”, “شرکت ” + Me.CompanyName +

” دارای پرونده تخلف به شماره ” + violatingCaseNumber);

break; // نیازی به بررسی بقیه نیست، همین یکی کافی است

}

}

// مرحله 4: تصمیم‌گیری نهایی

if(hasViolation)

{

Me.AllocationStatus = “Rejected”;

Me.RejectionReason = “وجود پرونده تخلف ارزی باز به شماره ” + violatingCaseNumber;

CHelper.ThrowValidationError(Me.RejectionReason);

}

else

{

Me.AllocationStatus = “Approved”;

CHelper.trace(“Allocation”, “تخصیص ارز برای شرکت ” + Me.CompanyName + ” تأیید شد”);

}

تصاویر توابع پرکاربرد بیزاجی bizagi

نکته کلیدی مثال:

تابع (CHelper.getCaseById) به شما اجازه می‌دهد از داخل یک فرآیند جاری، به اطلاعات کیس‌های دیگر (حتی کیس‌های قدیمی) دسترسی پیدا کنید. این کار با Me  غیرممکن است، چون Me  فقط به کیس جاری دسترسی دارد.

 

دسته دوم: خواندن و نوشتن در دیتابیس (Entity Management)

دسترسی مستقیم به جدول‌های دیتابیس بیزاجی بدون نیاز به رابط کاربری.

 

تابع کاربرد کد نمونه
CHelper.getAttrib(entity, id, column) خواندن مقدار یک فیلد از یک رکورد var price = CHelper.getAttrib(“Product”, 101, “UnitPrice”);
CHelper.setAttrib(entity, id, column, value) نوشتن مقدار در یک فیلد CHelper.setAttrib(“Order”, 500, “Status”, “Approved”);

 

دسته سوم: دریافت کاربران سازمانی

 

یافتن کاربران بر اساس نقش، موقعیت یا مهارت – بدون نیاز به کدنویسی دستی.

تابع کاربرد کد نمونه
CHelper.getUsersForRole(roleName) تمام کاربران دارای یک نقش خاص var managers = CHelper.getUsersForRole(“Manager”);
CHelper.getUsersForPosition(positionName) کاربران با یک موقعیت سازمانی خاص var financeTeam = CHelper.getUsersForPosition(“Finance Officer”);
CHelper.getUsersForSkill(skillName) کاربران دارای یک مهارت خاص var germanSpeakers = CHelper.getUsersForSkill(“German Language”);

دسته چهارم: محاسبات زمان کاری (تقویم سازمان)

محاسبه ضرب‌الاجل با در نظر گرفتن تعطیلات و آخر هفته.

تابع کاربرد کد نمونه
CHelper.getEstimatedDate(startDate, minutes, calendar) تاریخ پایان با احتساب تقویم کاری var deadline = CHelper.getEstimatedDate(DateTime.Now, 480, “StandardCalendar”);
CHelper.getEffectiveDuration(startDate, endDate, calendar) مدت زمان واقعی (ساعت کاری) بین دو تاریخ var workingDays = CHelper.getEffectiveDuration(start, end, “IRCalendar”);
CHelper.IsWorkingDay(date, calendar) آیا این روز کاری است؟ if(!CHelper.IsWorkingDay(today, “Standard”)) Alert(“تعطیل است”);

 

مثال واقعی: محاسبه ضرب‌الاجل تحویل با احتساب تعطیلات

سناریو:
شرکت لجستیک متعهد می‌شود سفارش را ظرف ۵ روز کاری (بدون احتساب جمعه‌ها و تعطیلات رسمی) تحویل دهد. امروز چهارشنبه است و فردا تعطیل رسمی دارد.

چالش:
اگر ساده جمع بزنید، ۵ روز بعد = دوشنبه. اما با احتساب تعطیلی فردا و جمعه، تاریخ واقعی تحویل کی می‌شود؟

راه‌حل با (CHelper.getEstimatedDate):

csharp

// تاریخ شروع: امروز

var startDate = DateTime.Now;

// مدت زمان: ۵ روز کاری × ۸ ساعت = ۴۰ ساعت کاری

var processingMinutes = 2400; // 40 * 60

// محاسبه تاریخ پایان با تقویم سازمان (که تعطیلات در آن ثبت شده)

var deadline = CHelper.getEstimatedDate(Me, startDate, processingMinutes);

// تنظیم در سیستم

Me.EstimatedSolutionDate = deadline;

// نمایش به کاربر

ShowMessage(“تاریخ تحویل: ” + deadline.ToShortDateString());

محاسبات زمان کاری (تقویم سازمان) در توابع bizagi

// اگر چهارشنبه باشد و فردا تعطیل، تاریخ تحویل می‌شود سه‌شنبه هفته بعد

دسته پنجم: تولید شماره‌های دنباله‌دار (Sequence)

برای فاکتور، شماره پرونده، کد پیگیری و …

تابع کاربرد کد نمونه
CHelper.GetNextSeqValueStr(sequenceName) دریافت مقدار بعدی یک دنباله به صورت متن var invoiceNo = CHelper.GetNextSeqValueStr(“InvoiceSeq”);
CHelper.ResetSequenceValue(sequenceName, value) بازنشانی دنباله به مقدار مشخص CHelper.ResetSequenceValue(“InvoiceSeq”, 1000);

مثال واقعی: تولید خودکار شماره فاکتور

سناریو:
سیستم باید به هر فاکتور یک شماره یکتا اختصاص دهد. این شماره باید ترتیبی باشد و از ۱۰۰۰ شروع شود.

چالش:
اگر دو کاربر همزمان فاکتور ثبت کنند، شماره‌ها تداخل پیدا نکند و تکراری نباشد.

راه‌حل با (CHelper.GetNextSeqValueStr):

csharp

// دریافت شماره بعدی (بیزاجی خودش قفل گذاری می‌کند)

var newInvoiceNumber = CHelper.GetNextSeqValueStr(“InvoiceSequence”);

// اختصاص به فاکتور جاری

Me.InvoiceNumber = “INV-” + newInvoiceNumber;

// مثال خروجی: INV-1001, INV-1002, …

شماره‌های دنباله‌دار (Sequence) در توابع پرکاربرد بیزاجی

دسته ششم: اعتبارسنجی و اخطار (Validation & Alerts)

جلوگیری از ادامه فرآیند در صورت خطا یا نمایش هشدار به کاربر.

تابع کاربرد کد نمونه
CHelper.ThrowValidationError(message) خطای قرمز – ادامه فرآیند متوقف می‌شود CHelper.ThrowValidationError(“کد ملی نامعتبر است”);
CHelper.ThrowValidationAlert(message) هشدار زرد – کاربر می‌تواند ادامه دهد CHelper.ThrowValidationAlert(“تاریخ انقضا نزدیک است”);
CHelper.IsEmpty(value) و CHelper.IsNull(value) بررسی خالی یا نال بودن مقدار if(CHelper.IsEmpty(Me.Description)) Alert(“توضیح الزامی است”);

 

دسته هفتم: مدیریت تسک‌های کاربران (User Work Items)

برای دریافت لیست تسک‌هایی که به یک کاربر خاص ارجاع داده شده است – مناسب برای داشبوردهای مدیریتی، گزارش‌گیری و بررسی بار کاری.

تابع کاربرد توضیحات پارامترها
CHelper.GetAssignedWorkItems(workItem, caseId, userId, includeSubProcesses) دریافت تمام تسک‌های ارجاع داده شده به کاربر پارامتر اول:Me  (ثابت)
پارامتر دوم: شناسه کیس مورد نظر
پارامتر سوم: شناسه کاربر
پارامتر چهارم: آیا زیرفرآیندها هم شامل شوند؟ (true/false)

کد نمونه:

csharp

// دریافت تمام تسک‌های کاربر جاری در کیس فعلی و زیرفرآیندهای آنvar userTasks = CHelper.GetAssignedWorkItems(Me, Me.Case.Id, Me.CurrentUserId, true); // نمایش تعداد تسک‌های در انتظار کاربرShowMessage(“شما ” + userTasks.Count + ” تسک در انتظار دارید”); // بررسی آیا کاربر تسک خاصی را انجام داده است؟foreach(var task in userTasks){    if(task.Status == “Completed”)    {        CHelper.trace(“UserActivity”, “کاربر تسک ” + task.Name + ” را انجام داده است”);    }}

مدیریت تسک‌های کاربران (User Work Items) در توابع bizagi

مثال واقعی: بررسی تسک‌های انجام‌شده توسط کاربر قبل از تأیید نهایی

سناریو:
در یک فرآیند تأیید مدارک بانکی، قبل از اینکه مدیر شعبه تأیید نهایی را انجام دهد، باید مطمئن شود که کاربر «کارشناس اعتبارسنجی» حداقل ۳ تسک در این پرونده انجام داده است.

چالش:
نیاز به دسترسی به تاریخچه تسک‌های انجام‌شده توسط یک کاربر خاص در همان کیس داریم.

راه‌حل با CHelper.GetAssignedWorkItems():

csharp

// مرحله 1: دریافت تمام تسک‌های کاربر “کارشناس اعتبارسنجی” در این کیسvar expertTasks = CHelper.GetAssignedWorkItems(    Me,                           // شیء ICAPIWorkItem جاری    Me.Case.Id,                   // کیس جاری    expertUserId,                 // شناسه کاربر کارشناس    false                         // فقط همین کیس، نه زیرفرآیندها); // مرحله 2: شمارش تسک‌های تکمیل شدهvar completedCount = 0;foreach(var task in expertTasks){    if(task.Status == “Completed”)    {        completedCount++;    }} // مرحله 3: تصمیم‌گیری برای تأیید نهاییif(completedCount < 3){    CHelper.ThrowValidationError(“کارشناس اعتبارسنجی حداقل ۳ تسک را تکمیل نکرده است”);}else{    Me.FinalApproval = “Approved”;    CHelper.trace(“FinalApproval”, “شرط تسک‌های کارشناس تأیید شد”);}

CHelper.GetAssignedWorkItems در توابع نرم افزار بیزاجی

جدول خلاصه توابع CHelper در بیزاجی (۱۰ تابع پرکاربرد)

دسته تابع یک خط کاربرد
ارتباط بین کیس‌ها getCaseById دسترسی به پرونده دیگر
دیتابیس getAttrib / setAttrib خواندن/نوشتن مستقیم در جدول‌ها
کاربران getUsersForRole یافتن کاربران با نقش خاص
زمان کاری getEstimatedDate محاسبه ضرب‌الاجل با تقویم کاری
دنباله GetNextSeqValueStr تولید شماره فاکتور خودکار
اخطار ThrowValidationError توقف فرآیند با خطا
اعتبارسنجی IsEmpty / IsNull چک کردن خالی بودن فیلدها
مدیریت تسک های کاربران GetAssignedWorkItems دریافت لیست تسک‌های ارجاع شده به کاربر

 

خلاصه نهایی یک نگاه به کل مقاله توابع پرکاربرد در بیزاجی

در این مقاله، با توابع پرکاربرد بیزاجی آشنا شدید. دیدید که چطور توابع، بیزاجی را از یک موتور ساده جمع‌و‌میانگین به یک پلتفرم هوشمند برای اتوماسیون فرآیندهای پیچیده تبدیل می‌کنند.

قانون های اصلی را می توانید به شکل زیر به یاد داشته باشید:

  • داده از یک مرحله ← از Me استفاده کنید
  • داده از چند مرحله یا کیس دیگر ← از CHelper  استفاده کنید
  • ترکیب هر دو ← در یک قانون، هم Me و هم CHelper را صدا بزنید

جدول نهایی مقایسه Me و CHelper (نسخه کامل)

جنبه مقایسه شیء Me شیء CHelper
محدوده دسترسی فقط همان تسک/مرحله جاری کل فرآیند، کیس‌های دیگر، Entityها، سازمان
نوع محاسبات ساده و لحظه‌ای پیچیده، بین‌مرحله‌ای، تاریخی
آگاهی از بستر (Context) آگاه از بستر (Context-Aware) مستقل از بستر (Context-Free)
مناسب برای خواندن تاریخ/وضعیت تسک جاری، تنظیم مدت زمان محاسبه اختلاف دو مرحله، دسترسی به کیس دیگر، تولید شماره دنباله‌دار
مثال تابع Me.EntryDate, Me.Duration, Me.Case.CaseNumber CHelper.getCaseById(), CHelper.getEstimatedDate(), CHelper.GetNextSeqValueStr()
امکان ایجاد کیس جدید خیر بله (CHelper.NewCase())
امکان دسترسی به Entityها خیر بله (CHelper.getAttrib())
امکان اعتبارسنجی داده محدود کامل (CHelper.ThrowValidationError())
سرعت اجرا بسیار سریع سریع (با تأخیر محاسباتی قابل‌قبول)

 

تجربه پیشگامان در استفاده از توابع بیزاجی

شرکت پیشگامان با بهره‌گیری حرفه‌ای از توابع Me  و CHelper  در بیزاجی، فرآیندهای پویا و هوشمندی نظیر محاسبه خودکار ضرب‌الاجل‌ها، تولید شماره‌های دنباله‌دار و مدیریت دسترسی مبتنی بر نقش را در پروژه‌های متعدد پیاده‌سازی کرده است. تجربه عملی پیشگامان در این حوزه، مرجعی ارزشمند برای توسعه‌دهندگان بیزاجی در ایران محسوب می‌شود.

برای آشنایی با نمونه پروژه‌های پیاده‌سازی شده و دریافت مشاوره رایگان، با ما تماس بگیرید.

آیا در پروژه بیزاجی خود به مشکل خورده‌اید؟

پیاده‌سازی توابع پیچیده در بیزاجی نیاز به تجربه و دانش فنی دارد. تیم فنی پیشگامان با سال‌ها تجربه عملی در پروژه‌های مالی، لجستیک و بورسی، آماده ارائه مشاوره و پیاده‌سازی است.

تصویر نرم افزار بیزاجی

درخواست دمو نرم افزار بیزاجی

نام(ضروری)
برای دریافت دمو نرم افزار بیزاجی شماره خود را وارد کنید.