PDA

View Full Version : گرفتن آیتم جاری در یک Event receiver از نوع WorkflowCompleted



feri10
یک شنبه 19 خرداد 1392, 08:06 صبح
سلام خدمت دوستان عزیز.
همونطور که می دونید Event receiver از نوع WorkflowCompleted فقط یک پارامتر به اسم Properties داره و الان من میخواهم بعد از تمام شدن ورک فلو یک سری محاسبات انجام بدم. ولی مشکلی که دارم این هست که نمی تونم آیتمی را که ورک فلو روی آن اجرا میشه را بدست بیارم و مقادیر اون رکورد را بگیرم چون میخوام چند ستون از رکورد جاری را به عنوان پارامتر بفرستم به تابع دیگه.
در ضمن بگم که Properties یک سری خصوصیت داره خودش ولی همشون null هستند در حین اجرا.
خیلی ضروریه اگر کمک کنید ممنون میشم.

mona11
یک شنبه 19 خرداد 1392, 09:40 صبح
اصلا همون Properties به آیتم جاری اشاره میکنه.شما اگر ورک فلو رو روی رکورد اول فعال کنی،بعد از تمام شدنش،Event receiver روی آیتم اول اجرا میشه.اگر ورک فلو رو رو ی رکورد دوم فعال کنی،بعد از تمام شدنش Event receiver روی آیتم دوم فعال میشه...

وقتی میگه WorkflowCompleted یعنی چی؟

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

بعدشم یه پیشنهاد:شما که داری ایونت ریسیور مینویسی،بیا ورک فلو رو هم با ایونت ریسیور بنویسش دیگه.چه کاریه که بری با ورک فلو یه کاری رو انجام بدی،با ایونت ریسور بنویسید.

feri10
یک شنبه 19 خرداد 1392, 10:15 صبح
اصلا همون Properties به آیتم جاری اشاره میکنه.شما اگر ورک فلو رو روی رکورد اول فعال کنی،بعد از تمام شدنش،Event receiver روی آیتم اول اجرا میشه.اگر ورک فلو رو رو ی رکورد دوم فعال کنی،بعد از تمام شدنش Event receiver روی آیتم دوم فعال میشه...
.
منم دقیقا همین فکر را می کردم و از همین روش استفاده کردم ولی وقتی تست کردم همون رکورد اول را بر می گردونه.


بعدشم یه پیشنهاد:شما که داری ایونت ریسیور مینویسی،بیا ورک فلو رو هم با ایونت ریسیور بنویسش دیگه.چه کاریه که بری با ورک فلو یه کاری رو انجام بدی،با ایونت ریسور بنویسید.
.
درست میگید ولی کاری را که می خواستم انجام بدم اول قرار نبود با ایونت رسیور بنویسم این شد که اول ورک فلو رو تو شیر پوینت ایجاد کردم.

mona11
یک شنبه 19 خرداد 1392, 10:58 صبح
به نظر من که بیاید ورک فلو رو داخل ایونت ریسیور بنویسید.تنها فرقی که میکنه اینه که دیگه در رویداد WorkflowCompleted نباید کد بنویسید و همه ی کدهارو باید در رویداد ItemAdded بنویسید.اینجوری هم برنامتون یکپارچه میشه.هم پشتیبانی برنامه راحت تره.تازه قابلیت مانور ایونت ریسیور روی لیستتون خیلی بیشتره.

feri10
یک شنبه 19 خرداد 1392, 14:16 عصر
ممنون از mona11 که پاسخ دادن.
راه حل را پیدا کردم میزارم شاید به درد کسی خورد.

private static SPListItem getListItem(SPWorkflowEventProperties properties, SPWeb spWeb, SPList spList)
{

SPListItem spListItem = null;
SPWorkflowCollection workflowCollection = new SPWorkflowCollection(spList);
foreach (SPWorkflow workflow in workflowCollection)
{

if (workflow.InstanceId == properties.InstanceId)
{
spListItem = spList.GetItemById(workflow.ItemId);
}
}

return spListItem;

}

و حالا آیتم برگردانده شده Current Item می باشد و می توانید از آن استفاده کنید.