در این مقاله قصد داریم در خصوص فراخوانی SQL Query در پاورفرم (SQL Queries in Power Forms) صحبت کنیم.
HTML پاورفرم به طور مستقیم از SQL Queries پشتیبانی می کند و می تواند برای داده هایی از جنس Lookup و کنترل هایی از همین جنس (مانند Combo boxes) استفاده شود.
به دلایل امنیتی، sql query در داخل Power Forms تعریف نشده است، اما مدل دیگری ارائه شده است:
1. یک لیست سفارشی باید توسط سرور ایجاد شود.
2. تعریف باید در فرمت XML ذخیره شود (از جمله ConnectionString، SQL Command و پارامترها)
3. در Designer PowerFormsکاربر برای sql-query به ورودی آن لیست اشاره می کند و مقادیر پارامتر را با استفاده از داده های ثابت یا مقادیر کنترل داخل فرم تکمیل میکند.
قدم اول : یک لیست دلخواه برای ذخیره کوئری ها ایجاد کنید.
1.یک لیست سفارشی جدید در site collection ایجاد کنید (برای مثال : لیست PowerForms SQL Queries)
2. یک ستون جدید به نام “QueryXML” : (از نوع چند خط متنی – PlainText) اضافه کنید.
3. تنظیمات منظور به دسترسی ها را رعایت کنید، زیرا ممکن است قصد محدود کردن کاربران از مشاهده جزئیات query باشید.(دقت داشته باشیدquery با استفاده از مجوزهای بالا اجرا می شود)
قدم دوم : یک کوئری ایجاد کنید.
یک آیتم جدید در داخل لیست اضافه کنید. عنوان آیتم را وارد کنید.
در داخل فیلد QueryXML، شما باید از schema xml زیر برای تعریف query استفاده کنید.
Code:
<Query Elevated=”true”>
<ConnectionString>Provider=SQLOLEDB;Data Source=.;Initial Catalog=WSS_Content;Integrated Security=SSPI;</ConnectionString>
<SQL>select ID, Title, Priority, Type, StartDate from Customers where ID=?</SQL>
<Parameters>
<Parameter Name=”ID” Type=”Number” />
</Parameters>
</Query>
پارامتر Elevated=”true” موجب می شود، اجرای کوئری را تحت حساب pool application اجرا شود،. اگر برای دسترسی به پایگاه داده خود نیاز به احراز هویت ویندوز هستید، از این پارامتر استفاده کنید. درصورت استفاده از احراز هویت پایگاه داده SQL/native ، این کار لازم نیست.
توجه داشته باشید که این طرح دارای 3 ویژگی اصلی است:
ConnectionString
این ویژگی شامل اتصال OLEDB به پایگاه داده است.
SQL
شامل فرمان SQL پرس و جوی شما است. اگر یک روش ذخیره شده باید فراخوانی شود، باید ویژگی
Type = “SP” را به عنصر Query اضافه کنید. به عنوان مثال:
Parameters
شما می توانید به تعداد نامحدود پارامترها را در کوئری تعیین کنید. مقادیر این پارامترها در طول اجرای جستجو توسط فرم ارائه می شوند.
پارامترهای پشتیبانی شده: “متن”، “شماره”، “تاریخ زمان”.
قدم سوم : راه اندازی کوئری در طراح پاورفرم
یک Section جدید در داخل Designer فرم اضافه کنید تا پیکربندی SQL Queries انجام شود.
در اینجا شما باید URL لیست کوئری و نام لیست را وارد کنید. ، نام Query (که در اینجا مربوط به ستون “عنوان” است) را وارد کنید و پارامترها را مشخص کنید (که باید قبل از آن در query xml تعریف شود)
در این مثال، ما می خواهیم پارامتری با مقدار ({value: c_Customer}) در یک کنترل فرم را تعیین کنیم.
قدم چهارم : اتصال کوئری به کنترل
یک کنترل Combobox را در فرم خود اضافه کنید.
در تب Looup Details ، نوع فراخوانی مقادیر را SQL Query انتخاب کنید، و سپس Query که در مرحله قبل تعریف کردید، انتخاب کنید و فیلدهای Display و Value را طبق تصویر وارد کنید.
اگر یک فیلد تنها مورد نیاز است (به عنوان مثال “عنوان”) از این فیلد برای هر دو ویژگی (Display and Value) استفاده کنید.
مثال : فراخوانی یک روش ذخیره شده
فرض کنید ما یک جدول (به نام محصولات) حاوی لیست محصولات داریم.
ستون ها: ID (int)، NAME (nvarchar)، DESCRIPTION (nvarchar)
ما یک روش ذخیره شده برای بازیابی محصولات ایجاد می کنیم:
همانطور که متوجه شدید، ما یک پارامتر اختیاری برای بازیابی یک رکورد در صورت لزوم ارائه کردیم.
CREATE PROCEDURE P_GetProducts
@ID int = null
AS
BEGIN
SET NOCOUNT ON;
SELECT ID, NAME, DESCRIPTION FROM Products
WHERE (@ID IS NULL OR @ID=ID)
END
حال برای تعریف query xml ما باید کدی شبیه به کد زیر بنویسیم:
<Query Type=”SP”>
<ConnectionString>Provider=SQLOLEDB;Data Source=.;Initial Catalog=TestDB;Integrated Security=SSPI;</ConnectionString>
<SQL>P_GetProducts</SQL>
<Parameters>
<Parameter Name=”ID” Type=”Number” />
</Parameters>
</Query>
توجه داشته باشید مشخصه ی Type = “SP” عنصر کوئری xml است. نکته مهم این است که از این ویژگی برای فراخوانی یک روش ذخیره شده استفاده شود.
اکنون پرس و جو درون طراح PowerForms را راه اندازی می کنیم و نتایج را آزمایش می کنیم:
یک پارامتر اختیاری به صورت “ID؛ 1” در داخل پارامترها تست کنید.
حالا می توانید query را به یک کنترل ComboBox متصل کنید تا لیست محصولات را مشاهده کنید.
به جای کنترل ComboBox، RadioButtons می تواند برای نشان دادن نتایج Query SQL استفاده شود.