##### 1. دریافت اطلاعات UserTask در فرم از طریق absoluteMethodHelper برای فرآیند های اجرایی
با استفاده از قطعه کد زیر می توان به یک سری اطلاعات، مربوط به فرآیند دسترسی پیدا کرد.
```js
absoluteMethodHelper.getProcessInfo()
```
**ProcessCreationID :**
شناسه ایجاد فرآیند
```js
// ProcessCreationID
absoluteMethodHelper.getProcessInfo().data.ProcessCreationID
```
**ProcessID :**
شناسه فرآیند.
```js
// ProcessID
absoluteMethodHelper.getProcessInfo().data.ProcessID
```
**ReferencesID :**
شناسه مرجع فرآیند
```js
// ReferencesID
absoluteMethodHelper.getProcessInfo().data.ReferencesID
```
**TaskID :**
شناسه سرویس تسک یا یوزر تسک
```js
// TaskID
absoluteMethodHelper.getProcessInfo().data.TaskID
```
**ElementConfigID :**
شناسه المان یوزر تسک در فرآیند
```js
// ElementConfigID
absoluteMethodHelper.getProcessInfo().data.ElementConfigID
```
**Entity ConfigID:**
این خصوصیات شناسه رکورد درج شده در جدول ProcessEntityConfig را بر میگرداند.
```js
// EntityConfigID
absoluteMethodHelper.getProcessInfo().data.EntityConfigID
```
**EntityID :**
شناسه فرم
```js
// EntityID
absoluteMethodHelper.getProcessInfo().data.EntityID
```
**EntityMode :**
نوع نمایش فرم (جدید ، ویرایش ، نمایش)
```js
// EntityMode
absoluteMethodHelper.getProcessInfo().data.EntityMode
```
**EntityTypeID :**
نوع المان فرآیند
```js
// EntityTypeID
absoluteMethodHelper.getProcessInfo().data.EntityTypeID
```
**FormsRecordID :**
شناسه رکورد فرم
```js
// FormsRecordID
absoluteMethodHelper.getProcessInfo().data.FormsRecordID
```
----
#### 2. شروع فرآیند
##### 2.1 شروع فرآیند به صورت معمولی
###### 2.1.1 شروع فرآیند (روش جدید) :
**processGroupID :** شناسه گروه فرایند
**variables :** متغییری که به فرایند ارسال می شود
**customTitle :** عنوان فرآیند اجرای که در کارتابل ورودی در قسمت عنوان اختیاری نمایش داده می شود
**runType :** نوع المان شروع فرآیند
**anonymous :** شروع فرایند بدون احراز هویت
**formId :** شناسه فرم
**verboseLevel**: هدف استفاده از این پارامتر تغییر فرمت خروجی شروع و اجرای فرآیند است که با مقادیر مختلف 0 تا 6 که در زیر توضیح داده شده است میتوان به فرمت دلخواه دست یافت.
**راهنما و نمونه های اجرایی کاربرد پارامتر verboseLevel جهت شروع و اجرای فرآیند**
**شماره 6 (Full):**
این مقدار که به صورت پیشفرض(در صورت ارسال مقدار null) هم درنظر گرفته میشود، کامل ترین نوع خروجی در نتیجه اجرای یک فرآیند را می دهد، به این صورت که از جزییات خوده فرآیند، نمونه فرآیند و نود گرفته تا نتایج آخرین وضعیت اجرا که شامل متغییر های انتهایی فرآیند هست را به صورت زیر خروجی می دهد.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"ProcessCreationID": 53341,
"TaskElementResult": null,
"EventElementResult": {
"ProcessFlowModel": {
"ProcessEnd": true,
"Message": "فرآیند به پایان رسید",
"EventType": 15,
"Variables": [
{
"Name": "Users",
"Value": "1"
}
],
"ProcessID": 5617,
"TaskID": 13048
},
"ElementBaseType": 3,
"ElementType": 15,
"IsUserTask": false,
"ReferenceID": 182678,
"RecordID": 0,
"IsEndEvent": true,
"IsTimerIntermediateEvent": false,
"IsSignalIntermediateCatchEvent": false,
"InSameLane": false,
"IsGateway": false,
"CustomReferenceExplain": "",
"CustomReferenceExplainType": null,
"IsReceiveTask": false,
"IsGraphMobileTask": false,
"ViewState": null,
"IsCallActivityTask": false,
"AssignedTo": null
}
}
}
}
```
**شماره 5 (Detailed):**
این مقدار به همانند مقدار 6 (Full) دارای جزئیات نسبتا کاملی از اجرای یک فرآیند است، البته این خروجی بدون وجود متغییر های انتهایی فرآیند می باشد که به شکل زیر قابل مشاهده است.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"ProcessCreationID": 53342,
"EventElementResult": {
"ElementBaseType": 3,
"ElementType": 15,
"IsUserTask": false,
"ReferenceID": 182681,
"RecordID": 0,
"IsEndEvent": true,
"IsTimerIntermediateEvent": false,
"IsSignalIntermediateCatchEvent": false,
"InSameLane": false,
"IsGateway": false,
"CustomReferenceExplain": "",
"IsReceiveTask": false,
"IsGraphMobileTask": false,
"IsCallActivityTask": false
}
}
}
}
```
**شماره 4 (Basic):**
این نوع خروجی جزئیات کمی که یکی از موارد آن شامل شناسه نمونه فرایند است را خروجی می دهد و اکثرا در مواقعی استفاده می شود که تنها نیاز به شناسه نمونه فرآیند و آخرین وضعیت کلی اجرای فرآیند داریم که آیا فرایند ادامه پیدا کرده است، تمام شده است یا اجرای آن با خطا مواجه شده است.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"ProcessCreationID": 53343
}
}
}
```
**شماره 3 (Minimum):**
این نوع خروجی دارای حداقل جزئیات ممکن در رابطه با آخرین وضعیت اجرای فرآیند است آیا فرایند ادامه پیدا کرده است، تمام شده است یا اجرای آن با خطا مواجه شده است.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": null
}
}
```
**شماره 2 (PlainLite):**
در این نوع خروجی، حداقل جزئیات ممکن در رابطه با آخرین وضعیت اجرای فرآیند به همراه متغییر های انتهایی فرآیند خروجی داده می شوند.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": [
{
"Name": "Users",
"Value": "1"
}
]
}
}
```
**شماره 1 (Lite):**
در این نوع خروجی، خروجی عینا با مقدار 2 (PlainLite) برابر است با این تفاوت که در صورتی که مقدار هر یک از متغییر های انتهایی فرآیند از فرمت آرایه ای یا ابجکتی رشته ای باشد، این مقادیر از حالت رشته ای خارج شده و عینا با همان فرمت اصلی خودشان که آرایه یا آبکجت است خروجی داده می شوند.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": [
{
"Name": "Users",
"Value": "1"
}
]
}
}
```
**شماره 0 (BoostLite):**
این نوع خروجی دقیقا برابر است با مقدار 1 (Lite) با این تفاوت که لیست متغییر های انتهایی فرآیند نه به صورت آرایه ای از ابجکت های name,value بلکه به صورت یک دیکشنری name:value خروجی داده می شوند.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"Users": "1"
}
}
}
```
**مثال :**
```js
absoluteMethodHelper.runProcessWithVerbosityLevel({
processGroupID : 4110,
variables:[{Name:"variableNumber1",Value:"someValue"}],
customTitle:'a title for process creation',
runType:RunProcessType.MessageStartEvent,
anonymous:false,
formId:null,
verboseLevel:6
}).then(res =>
{
console.log(res);
// جهت باز کردن فرم پس شروع فرآیند می توانید از کد های زیر استفاده کنید
// const userTaskData = res.content?.Content?.TaskElementResult?.ProcessFlowModel;
// const { RecordID } = res.content?.Content?.TaskElementResult;
// const { ReferenceID, ProcessCreationID } = userTaskData;
// _self: باز شدن فرم در پنجره فعلی (پیشفرض)
// _blank: باز شدن فرم در پنجره / تب جدید
// _top: باز شدن فرم در صفحه فعلی بصورت تمام صفحه
// userTaskData.target = "_self";
// افزودن رکورد آی دی فرم
// userTaskData.FormsRecordID = RecordID;
// if (!userTaskData) {
// toast.show('error', 'فرآیند اجرا شده دارای فرم نمی باشد.');
// return;
// };
// new serviceManager().formView(userTaskData, ReferenceID, ProcessCreationID, "i");
})
.catch(ex =>
{
toast.show('error', translate('OperationFailed'), ex.message);
});
```
###### 2.1.2 شروع فرآیند (روش قدیمی) :
این روش برای سامانه هایی با ورژن 2.1.5.131 و پایین تر می باشد
**پارامتر های شروع فرایند :**
**processGroupID :** شناسه گروه فرایند
**processID :** شناسه فرایند
**roleID :** کاربر شروع کننده فرایند
**userID :** نقش شروع کننده فرایند
**fromOut :** true; //شروع فرایند همراه با فرم است
**variables :** مغییری که به فرایند ارسال می شود که به صورت آرایه ای آبجکت ها می باشد
**customTitle :** عنوان فرایند ایجاد شده
**runType :** نوع المان شروع فرآیند
**anonymous :** شروع فرایند بدون احراز هویت
**formId :** شناسه فرم در صورت باز شدن فرم پس از شروع فرآیند
```js
let processGroupID = 4110;
let processID = 4531;
let roleID = curentRoleId;
let userID = curentUserId;
let fromOut = true;
let variables = [{Name: "variableNumber1",Value: "someValue"}];
let customTitle = 'a title for process creation';
let runType = 500002;
let anonymous = false;
let formId = null;
absoluteMethodHelper.runProcess(processGroupID,processID,roleID,userID,fromOut,variables,customTitle,runType,anonymous,formId).then(res =>
{
console.log(res);
// const userTaskData = res.content?.Content?.TaskElementResult?.ProcessFlowModel;
// const { RecordID } = res.content?.Content?.TaskElementResult;
// const { ReferenceID, ProcessCreationID } = userTaskData;
// _self: باز شدن فرم در پنجره فعلی (پیشفرض)
// _blank: باز شدن فرم در پنجره / تب جدید
// _top: باز شدن فرم در صفحه فعلی بصورت تمام صفحه
// userTaskData.target = "_self";
// افزودن رکورد آی دی فرم
// userTaskData.FormsRecordID = RecordID;
// if (!userTaskData) {
// toast.show('error', 'فرآیند اجرا شده دارای فرم نمی باشد.');
// return;
// };
// new serviceManager().formView(userTaskData, ReferenceID, ProcessCreationID, "i");
})
.catch(ex =>
{
toast.show('error', translate('OperationFailed'), ex.message);
});
```
##### 2.2 شروع فرآیند به صورت سرویس
در این نوع فرآیند از ابتدا تا پایان هیچ نود بازدارنده ای وجود ندارد و فرآیند بدون وفقه به پایان میرسد
**لیست نودهای (المان) بازدارنده :**
1.UserTask
2.GraphMobileTask
3.ReceiveTask
4.TimerIntermediateCatchEvent
5.SignalIntermediateCatchEvent
6.CallActivityTask
**مثال :**
```js
absoluteMethodHelper.runProcessWithVerbosityLevel({
processGroupID : 4110,
variables:[{Name:"variableNumber1",Value:"someValue"}],
customTitle:'a title for process creation',
runType:RunProcessType.MessageStartEvent,
anonymous:false,
formId:null,
verboseLevel:0
}).then(res =>
{
console.log(res);
})
.catch(ex =>
{
toast.show('error', translate('OperationFailed'), ex.message);
});
```
---
#### 3 ادامه فرآیند
##### 3.1 ادامه فرآیند (روش جدید) :
در صورتی که در فرآیند نود(المان) Message Boundery داشته باشیم می توانیم از طریق absoluteMethodHelper فرآیند را ادامه دهیم
**processCreationID :** شناسه ایجاد فرآیند
**stepID :** گام فرایند که در آن Message Event قرار دارد
**variables :** متغییری که به فرآید ارسال می شود که به صورت آرایه ای از آبجکت ها می باشد
**verboseLevel :** هدف استفاده از این پارامتر تغییر فرمت خروجی شروع و ادامه فرآیند است که با مقادیر مختلف 0 تا 6 که در زیر توضیح داده شده است میتوان به فرمت دلخواه دست یافت.
**راهنما و نمونه های اجرایی کاربرد پارامتر verboseLevel جهت شروع و اجرای فرآیند**
**شماره 6 (Full):**
این مقدار که به صورت پیشفرض(در صورت ارسال مقدار null) هم درنظر گرفته میشود، کامل ترین نوع خروجی در نتیجه اجرای یک فرآیند را می دهد، به این صورت که از جزییات خوده فرآیند، نمونه فرآیند و نود گرفته تا نتایج آخرین وضعیت اجرا که شامل متغییر های انتهایی فرآیند هست را به صورت زیر خروجی می دهد.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"ProcessCreationID": 53341,
"TaskElementResult": null,
"EventElementResult": {
"ProcessFlowModel": {
"ProcessEnd": true,
"Message": "فرآیند به پایان رسید",
"EventType": 15,
"Variables": [
{
"Name": "Users",
"Value": "1"
}
],
"ProcessID": 5617,
"TaskID": 13048
},
"ElementBaseType": 3,
"ElementType": 15,
"IsUserTask": false,
"ReferenceID": 182678,
"RecordID": 0,
"IsEndEvent": true,
"IsTimerIntermediateEvent": false,
"IsSignalIntermediateCatchEvent": false,
"InSameLane": false,
"IsGateway": false,
"CustomReferenceExplain": "",
"CustomReferenceExplainType": null,
"IsReceiveTask": false,
"IsGraphMobileTask": false,
"ViewState": null,
"IsCallActivityTask": false,
"AssignedTo": null
}
}
}
}
```
**شماره 5 (Detailed):**
این مقدار به همانند مقدار 6 (Full) دارای جزئیات نسبتا کاملی از اجرای یک فرآیند است، البته این خروجی بدون وجود متغییر های انتهایی فرآیند می باشد که به شکل زیر قابل مشاهده است.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"ProcessCreationID": 53342,
"EventElementResult": {
"ElementBaseType": 3,
"ElementType": 15,
"IsUserTask": false,
"ReferenceID": 182681,
"RecordID": 0,
"IsEndEvent": true,
"IsTimerIntermediateEvent": false,
"IsSignalIntermediateCatchEvent": false,
"InSameLane": false,
"IsGateway": false,
"CustomReferenceExplain": "",
"IsReceiveTask": false,
"IsGraphMobileTask": false,
"IsCallActivityTask": false
}
}
}
}
```
**شماره 4 (Basic):**
این نوع خروجی جزئیات کمی که یکی از موارد آن شامل شناسه نمونه فرایند است را خروجی می دهد و اکثرا در مواقعی استفاده می شود که تنها نیاز به شناسه نمونه فرآیند و آخرین وضعیت کلی اجرای فرآیند داریم که آیا فرایند ادامه پیدا کرده است، تمام شده است یا اجرای آن با خطا مواجه شده است.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"ProcessCreationID": 53343
}
}
}
```
**شماره 3 (Minimum):**
این نوع خروجی دارای حداقل جزئیات ممکن در رابطه با آخرین وضعیت اجرای فرآیند است آیا فرایند ادامه پیدا کرده است، تمام شده است یا اجرای آن با خطا مواجه شده است.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": null
}
}
```
**شماره 2 (PlainLite):**
در این نوع خروجی، حداقل جزئیات ممکن در رابطه با آخرین وضعیت اجرای فرآیند به همراه متغییر های انتهایی فرآیند خروجی داده می شوند.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": [
{
"Name": "Users",
"Value": "1"
}
]
}
}
```
**شماره 1 (Lite):**
در این نوع خروجی، خروجی عینا با مقدار 2 (PlainLite) برابر است با این تفاوت که در صورتی که مقدار هر یک از متغییر های انتهایی فرآیند از فرمت آرایه ای یا ابجکتی رشته ای باشد، این مقادیر از حالت رشته ای خارج شده و عینا با همان فرمت اصلی خودشان که آرایه یا آبکجت است خروجی داده می شوند.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": [
{
"Name": "Users",
"Value": "1"
}
]
}
}
```
**شماره 0 (BoostLite):**
این نوع خروجی دقیقا برابر است با مقدار 1 (Lite) با این تفاوت که لیست متغییر های انتهایی فرآیند نه به صورت آرایه ای از ابجکت های name,value بلکه به صورت یک دیکشنری name:value خروجی داده می شوند.
```js
{
"state": "done",
"content": {
"HasError": false,
"ErrorCode": -1,
"Message": "فرآیند به پایان رسید",
"MessageException": "",
"Content": {
"Users": "1"
}
}
}
```
**مثال :**
```js
let processCreationID = 52160;
let stepID = 11234;
let variables = [{Name:"variableNumber1",Value:"someValue"}];
let verboseLevel = 6;
absoluteMethodHelper
.continueProcessByMessageWithVerbosityLevel(processCreationID,stepID,variables,verboseLevel)
.then(res =>
{
console.log(res);
// جهت باز کردن فرم پس ادامه فرآیند می توانید از کد های زیر استفاده کنید
// const userTaskData = res.content?.Content?.TaskElementResult?.ProcessFlowModel;
// const { RecordID } = res.content?.Content?.TaskElementResult;
// const { ReferenceID, ProcessCreationID } = userTaskData;
// _self: باز شدن فرم در پنجره فعلی (پیشفرض)
// _blank: باز شدن فرم در پنجره / تب جدید
// _top: باز شدن فرم در صفحه فعلی بصورت تمام صفحه
// userTaskData.target = "_self";
// افزودن رکورد آی دی فرم
// userTaskData.FormsRecordID = RecordID;
// if (!userTaskData) {
// toast.show('error', 'فرآیند اجرا شده دارای فرم نمی باشد.');
// return;
// };
// new serviceManager().formView(userTaskData, ReferenceID, ProcessCreationID, "i");
})
.catch(ex =>
{
toast.show('error', translate('OperationFailed'), ex.message);
});
```
##### 3.2 ادامه فرآیند (روش قدیمی) :
این روش برای سامانه هایی با ورژن 2.1.5.131 و پایین تر می باشد
**processCreationID :** شناسه ایجاد فرآیند
**stepID :** گام فرایند که در آن Message Event قرار دارد
**variables :** متغییری که به فرآید ارسال می شود که به صورت آرایه ای از آبجکت ها می باشد
**مثال :**
```js
let processCreationID = 52160;
let stepID = 11234;
let variables = [{Name:"RoleId",Value:curentRoleId}];
absoluteMethodHelper
.continueProcessWithMessage(processCreationID,stepID,variables)
.then(res =>
{
console.log(res);
// جهت باز کردن فرم پس ادامه فرآیند می توانید از کد های زیر استفاده کنید
// const userTaskData = res.content?.Content?.TaskElementResult?.ProcessFlowModel;
// const { RecordID } = res.content?.Content?.TaskElementResult;
// const { ReferenceID, ProcessCreationID } = userTaskData;
// _self: باز شدن فرم در پنجره فعلی (پیشفرض)
// _blank: باز شدن فرم در پنجره / تب جدید
// _top: باز شدن فرم در صفحه فعلی بصورت تمام صفحه
// userTaskData.target = "_self";
// افزودن رکورد آی دی فرم
// userTaskData.FormsRecordID = RecordID;
// if (!userTaskData) {
// toast.show('error', 'فرآیند اجرا شده دارای فرم نمی باشد.');
// return;
// };
// new serviceManager().formView(userTaskData, ReferenceID, ProcessCreationID, "i");
})
.catch(ex =>
{
toast.show('error', translate('OperationFailed'), ex.message);
});
```
---
### 4. Throw و Cash کردن المان های سیگنال فرآیند :
در صورتی که نیاز دارید سیگنال مد نظر خود را فراخوانی کنید تا با توجه به کلید آن تمامی سیگنال های catch در شروع فرآیند، نمونه سازی و شروع شوند و سیگنال های catch در انتظار میانی ادامه پیدا کنند، می توانید از این سرویس استفاده کنید.
**signalKey :** عنوان یا نامی که مشخص کننده سیگنال مقصد می باشد، کلید سیگنال در زمان تعریف سیگنال مشخص شده است و مشخص کننده و تعریف کننده آن سیگنال می باشد.
**variables :** متغییرهایی که به فرآیند ارسال می شود که به صورت آرایه ای از آبجکت ها می باشد
**مثال :**
```js
let signalKey = 'SignalNumber7';
let variables = [{Name:"variableNumber1",Value:"someValue"}]; // متغییری که به فرآیند ارسال می شود
absoluteMethodHelper
.throwProcessSignal(signalKey,variables)
.then(res =>
{
console.log(res);
})
.catch(ex =>
{
toast.show('error', translate('OperationFailed'), ex.message);
});
```