با سلام
در حال استفاده از سرویسِ ProcessEngine (iprocessengine.svc) هستم و به یک رفتارِ عجیب برخوردم.
متد Continue رو اینطوری فراخوانی میکنم:
Continue(
username: "...",
password: "...",
stateKey: "<کدِ یک کارتابل، دقیقاً از محیطِ ویرایشِ چرخه کپی شده>",
CrmObjectId: "<Guid یک رکوردِ واقعی>"
)
با یک stateKey واقعی که از محیط کپی کردم، همیشه این پیام رو میگیرم:
"آیتمی با این مشخصه موجود نمی باشد"
نکتهی عجیب: وقتی بهجایِ stateKey واقعی، یک رشتهی کاملاً ساختگی و بیمعنی میفرستم، دقیقاً همین پیام رو میگیرم. یعنی نمیتونم تشخیص بدم stateKeyی که کپی کردم درسته یا نه — چون پیامِ خطا برایِ هر دو حالت یکیه.
متد Next رو هم اینطوری فراخوانی میکنم:
Next(
username: "...",
password: "...",
actionKey: "<کدِ یک اقدام، دقیقاً از محیطِ ویرایشِ چرخه کپی شده>",
CrmObjectId: "<Guid یک رکورد>"
)
با actionKey واقعی که کپی کردم، همیشه این پیام رو میگیرم:
"خطا :Object reference not set to an instance of an object."
(یعنی یک NullReferenceException سمتِ سرور.)
در حالی که وقتی یک actionKey کاملاً ساختگی میفرستم، پیامِ متفاوتی میگیرم:
"بیش از یک اکشن با این کد موجود می باشد"
سوال: ۱. پیامِ اولِ Continue («آیتمی با این مشخصه موجود نمی باشد») دقیقاً یعنی چی؟ آیا یعنی stateKey نامعتبره، یا یعنی چیزِ دیگهای (مثلاً خودِ رکورد یا LifePath) پیدا نشده؟
۲. چرا Next با یک actionKey واقعی به NullReferenceException میخوره، در حالی که با کدِ ساختگی پیامِ منطقیتری میده؟ این یعنی باگه یا اینکه actionKey باید از یک کارتابلِ خاص (که رکورد هنوز بهش نرسیده) فراخوانی بشه؟
ممنون میشم راهنمایی کنید.
@mojniknam
با سلام و احترام
متد continue وظیفه ادامه دادن روند فرآیند با رفتن یا ماندن در یک state را برعهده دارد.stateKey همان کد در ویرایش کارتابل یا فعالیت ها میباشد.
مشکلی در این متد وجود ندارد و در صورت وارد کردن دیتای صحیح بدون خطا انجام خواهد شد.
لطفا کد خود را جهت بررسی بیشتر ارسال نمایید.
با سلام
ممنون از پاسخ. کدی که برای فراخوانیِ Continue استفاده میکنم (SOAP request کامل):
POST {crm-address}/services/iprocessengine.svc
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IProcessEngine/Continue"
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<Continue xmlns="http://tempuri.org/">
<username>USERNAME</username>
<password>PASSWORD</password>
<stateKey>STATE_KEY</stateKey>
<CrmObjectId>GUID</CrmObjectId>
</Continue>
</s:Body>
</s:Envelope>
با این ساختار، وقتی stateKey رو دقیقاً همون کدی میذارم که از محیطِ ویرایشِ کارتابل کپی کردم، این پیام برمیگرده:
"آیتمی با این مشخصه موجود نمی باشد"
کدی که برای Next استفاده میکنم، دقیقاً همین ساختار ولی با actionKey:
POST {crm-address}/services/iprocessengine.svc
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IProcessEngine/Next"
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<Next xmlns="http://tempuri.org/">
<username>USERNAME</username>
<password>PASSWORD</password>
<actionKey>ACTION_KEY</actionKey>
<CrmObjectId>GUID</CrmObjectId>
</Next>
</s:Body>
</s:Envelope>
با actionKey واقعی (کپیشده از محیطِ ویرایشِ اقدام)، این پیام برمیگرده:
"خطا :Object reference not set to an instance of an object."
لطفاً بفرمایید این ساختارِ request درسته یا جایی مشکل داره؟
ممنون
@mojniknam
مشکلی در کد شما وجود ندارد. به جهت اطمینان عرض میکنم اینکه stateKey همان مقداری است که در ویرایش کارتابل و فعالیت ها در نرم افزار پیام گستر در فیلد "کد" خودتان وارد میکنید هم چنین actionKey هم مقداری است در که در ویرایش اقدام در فیلد "کد اقدام" خودتان وارد کرده اید.
لطفا بفرمایید ورژن نرم افزار پیام گسترتان چیه؟
دقیقا همون رو وارد میکنم.
از دیگر امکانات api بدون مشکل دارم استفاده میکنم ولی مشکل فقط از همینه
نسخه سرور: 2.8.5.0
@mojniknam
لطفا ابتدا چک کنید در نرم افزار crm تان در تب تنظیمات/ شخصی سازی crm، فرآیند فعال باشد (تیک سبز رنگ فعال باشد) هم چنین بررسی کنید در داخل نرم افزار آیتم پس از ذخیره فرآیند آن بدون خطا جلو میرود.
در صورتیکه مشکلی در این زمینه وجود نداشت با واحد موفقیت مشتری برای آپدیت نرم افزارتان به ورژن 2.8.8.1 در ارتباط باشید.