سلام وقت بخیر
جهت ایجاد یک شخص حقیقی از متد SavePerson از وب سرویس IPerson استفاده می کنیم. جهت ویرایش یک هویت که قبلا ایجاد کرده ایم، چه پارامتری را باید مقداردهی کنیم تا وب سرویس به جای ایجاد یک کاربر جدید، کاربر مورد نظر را ویرایش کند؟
با تشکر
اگر میخواهید شماره تلفنهای قبلی حذف شود، کافیست مقدار پراپرتی IsDeleted شماره قبلی را برابر True قرار دهید. اینگونه شماره قبلی حذف میشود در غیراینصورت شمارهای وارد نکنید، با این عمل شماره قبلی باقی میماند و فقط با IsDeleted است که موجب حذف شماره میشود.
مقدار پراپرتی CrmId قرار بدید با مقدار شناسه هویت.
با تشکر. آیا تمام فیلدها از جمله فیلدهای الزامی هم باید مقداردهی شوند یا فقط فیلدهایی که می خواهیم به روز شوند را باید مقداردهی کنیم؟ مثلا اگر بخواهیم فقط نام و نام خانوادگی هویت را با مقادیر جدید به روز رسانی کنیم، آیا باید فیلدهای ایمیل، آدرس ها، مخاطبین، دسته بندی و غیره هم مقداردهی شوند؟
بله، فیلدهای الزامی حتماً نیاز به مقدار خواهند داشت و سایر فیلدها اگر وارد نشود مقدار قبلی با مقدار کنونی تغییر میکند.
با سلام.
لطفا در این زمینه بیشتر توضیح دهید و یا نمونه کد ارائه کنید.
تلاش های ما همه به در بسته خورده.
ما ابتدا با استفاده از متد FindPersonById از وب سرویس IPerson، هویت مورد نظر را می گیریم.
$result = $soapClient->FindPersonById(['personId' => $USER_CRM_ID]);
سپس تغییرات لازم را اعمال می کنیم. برای مثال:
$result->PersonInfo->FirstName = $NEW_FIRST_NAME;
$result->PersonInfo->LastName = $NEW_LAST_NAME;
و سپس آبجکت $result->PersonInfo را به صورت آرایه به متد SavePerson می فرستیم.
$result = $soapClient->SavePerson((array)$result->PersonInfo);
اما نتیجه ای که می گیریم همیشه خطا در بردارد
stdClass Object ( [Message] => System.NullReferenceException: Object reference not set to an instance of an object. at Septa.PayamGostar.ServiceLayer.ServiceType.PGServiceTypes.Modules.CrmObjectConverters.IdentityConverter`3.Initialize(TInfo crmObjectInfo) at Septa.PayamGostar.ServiceLayer.ServiceType.PGServiceTypes.Modules.CrmObjectConverters.IdentityConverter`3.Create(TInfo crmObjectInfo, Guid userId) at Septa.PayamGostar.ServiceLayer.ServiceType.PGServiceTypes.Modules.CrmObjectService`3.Save(String userName, String password, TInfo crmObjectInfo) [Success] => [CrmId] => 00000000-0000-0000-0000-000000000000 )
لطفا خطای کار ما را تصحیح کنید.
با تشکر
ارسال خود آبجکت Person به صورت آرایه به تابع SavePerson اشتباه است. پیشنهاد میکنم مطلب نمونه کدهای آماده اتصال به سی آر ام مطالعه کنید.
طبق نمونه کد آماده آرایه زیر را ساختم
$params = array(
'person' => array(
'CrmId' => $USER_ID,
'CrmObjectTypeCode' => $USER_KEY,
'CrmObjectTypeIndex' => 24,
'Categories' => array(
array(
'Key' => $CATEGORY_KEY
)
),
'FirstName' => $FIRST_NAME,
'LastName' => $LAST_NAME,
'NationalCode' => $NATIONAL_CODE,
'Emails' => [
],
'PhoneContacts' => [
[
'PhoneNumber' => $MOBILE
]
],
)
);
مشخصات هویت مورد نظر ویرایش شد اما کد اقتصادی آن هویت حذف شد. آیا بهتر نیست پارامترهایی که از طریق api ارسال نمی شوند دست نخورده باقی بمانند؟ آیا همه پارامترها را باید به صورت آرایه مقداردهی و به وب سرویس ارسال کنیم؟
به دلایلی نمیتوان فقط پارامترهای که وارد میشوند را تشخیص و ویرایش کرد. لطفاً از تابع جستجو استفاده کنید و همان موجودیت را ویرایش سپس برای تابع ذخیره ارسال کنید.
با تشکر از راهنمایی های شما
ویرایش هویت از طریق وب سرویس انجام شد. فقط اینکه هر با هویت ویرایش می شود یک شماره تلفن جدید به لیست PhoneContact های هویت افزوده می شود در صورتیکه ما فقط یک یا دو شماره تلفن برای هویت ارسال می کنیم و انتظار داریم شماره تلفن های قبلی حذف و شماره هایی که از طریق وب سرویس اضافه می کنیم جایگزین شود.
این مسئله راه حلی دارد؟