ممکن است در مواقعی نیاز به اطلاعات استخراج شده از وب سرویسی داشته باشید که در همان مقطع زمانی به آن دسترسی ندارید . مسلما برای این منظور باید آن اطلاعات را ذخیره کرده تا در صورت نیاز بتوان به آنها رجوع کرد . یکی از راه حلها ذخیره آن در پایگاه داده (در اینجا Sql Server) است که در این پست به کمک امکانات BIDS در پکیجهای SSIS و کوئریهای SQL این مشکل را برطرف میکنیم. برای مشاهده نحوه استخراج اطلاعات از وب سرویس
به اینجا مراجعه کنید .
تنها تفاوتی که در این پست در کار با سرویس با پست اشاره شده در بالا وحود دارد ذخیره اطلاعات استخراج شده است که در آن پست در یک فایل xml ذخیره شدند ولی در اینجا ما نیاز داریم تا اطلاعات را در یک متغیر با حوزه کاری Package ذخیره کنیم (به این معنی که مختص به همان flow نباشد و در تمام پکیج دیده شود)
به دلیل اینکه هدر xml خروجی از سرویس دارای چندین namespace هست هنگام کار با آنها به مشکل خواهیم خورد. (هم هنگام کار با xml taskها و هم هنگام کار با xml در sql)
به همین دلیل باید این قسمت از محتوا را حذف کرد . برای همین پس از گرفتن اطلاعات از سرویس آن را به کمک یک Script task حذف میکنیم
در این مرحله اطلاعات استخراج شده را باید در SQL درج کنیم . برای همین ساختاری که باید اطلاعات را در SQL نگه دارد را در دیتابیس ایجاد میکنیم :
جدول person برای نگهداری اطلاعات سرویس و XmlContainer برای نگهداری xmlهای سرویس .(برای داشتن History)
برای درج هم از SP استفاده میکنیم :
و پیکربندی SQL Task :
نکته اول ایجاد کانکشن به پایگاه داده است که در اینجا از نمایش جزییات آن صرف نظر شده است . نکته دیگری پارامتر SP است که چون یک پارامتر دارد یک علامت سوال قرار میگیرد . اگر چند پارامتر بود به صورت علامتهای سوال با ویرگول از هم جدا میشوند . ?,?,?,?
سپس در بخش parameter mapping به ترتیب مقدار دهی میشوند :
و مقدار خروجی SP که شناسه آیتم درج شده است را در یک متغیر نگهداری میکنیم :
برای قدم بعد میخواهیم اطلاعات موجود در XML استخراج شده در پایگاه داده را در جدول مربوطه ذخیره کنیم . برای این کار این SP را مینویسیم :
نکات مهم موارد زیر هستند :
1 - استفاده از OpenXml برای parse کردن xml
2 - استفاده از sp سیستمی sp_xml_preparedocument و sp_xml_removedocument (
بیشتر )
3- اطلاعات شناسه و نام و نام خانوادگی inner textهای نودهای xml هستند . اگر این موارد به صورت attribute باشند باید قبل از نام آنها علامت @ قرار بگیرند.
پس از ایجاد این Sp باید آن را در package فراخوانی کنیم :
و پیکربندی این SQL Task :
و پارامترهای این SP :
و ذخیره نتیجه تراکنش در متغیری در پکیج :
و اکنون پکیج ما ظاهری شبیه به این مورد خواهد داشت :
در نهایت به عنوان یک facility میتوانیم وضعیت تراکنش را به کاربر نمایش دهیم ( به کمک Script Task ) :
و تمام ...
موفق باشید