اسکریپتهای پاورفرم powerform – قسمت اول – پرکابردهای

قصد داریم تا در این مقاله به اسکریپتهای پاورفرم بپردازیم، اسکریپتهایی که پر کاربرد است و کمی در منابع اینترنتی سختتر یافت میشود. امید است با استفاده از این مقاله در  ارائه راهکارهای مبتنی بر پاورفرم موفق تر از سابق عمل نمایید.

  • شاید هنگام ذخیره فرم بخواهیم کنترل(هایی) را مقدار دهی نمائبم یا تحت شرایط خاص بخواهیم قبل از ذخیره فرم، الزامی بودن یک یا چند کنترل را بررسی نمائیم. در این صورت بهتر است به جای استفاده از دکمه ذخیره فرم، خودمان دکمه ذخیره بسازیم.

کافیست یک کنترل از نوع button به دیزاین فرم اضافه نموده و یکی از اسکریپت های زیر را در قسمت Extra در Action ی از نوع Script تایپ نمائید:

form.SaveAndExit();
form.SaveRecord();

اسکریپت خط 1 با ذخیره رکورد، فرم را می بندد و اسکریپت خط 2 رکورد را ذخیره کرده و در فرم باقی می ماند.

  • در صورتی که بخواهید دکمه انصراف را نیز خودتان بسازید از اسکریپت زیر استفاده نمائید:
form.CancelRecord();
  • برای بررسی الزامی بودن یک فیلد دکمه ذخیره را به کمک if به صورت زیر بسازید:
If(form.GetControl("c_Name").GetValue()!="")

{

form.SaveAndExit();

}

Else

{

Alert("لطفا نام خود را وارد نمائید");

}

اسکریپت بالا در صورت پر بودن کنترل نام، فرم را ذخیره می کند و در صورت خالی بودن، پیغام نمایش می دهد.

  • هنگامی که از DataEntryGrid در فرم خود استفاده می کنید ممکن است بخواهید ستون هایی از گرید را پنهان نمائید. برای این منظور اسکریپت زیر را در LoadCompletedScript گرید وارد نمائید:
ctrl =  form.GetControl("DataEntryGrid name");
 $(ctrl.InputControl.CTRL_GRID).data("kendoGrid").hideColumn("Column name");
  • هر گاه نیاز داشتید یکی از فیلدهای داخل DataEntryGrid را بخوانید قبل از اسم فیلد از استفاده نمائید. مثال زیر بررسی میکند در صورت تغییر در فیلد Number، مقدار این فیلد در یک متغیر قرار داده شده و مقدار آن به صورت alert نمایش داده می شود. (این اسکریپت ها صرفا برای آموزش می باشد)
if(args == "Number")

{

Number1 = item.Number;

alert(Number1);

}
  • هنگام استفاده از گرید، برای پیاده سازی یک دیتا انتری گرید حرفه ای لازم است اسکریپتی نوشته شود تا شماره ردیف به صورت اتومات در گرید پر شود. برای این کار می توانید از اسکریپت زیر استفاده نمائید.
  index = 0 ;

  gridPhase = form.GetControl('DataEntryGrid Name') ;

  gridItems = gridPhase.InputControl.GetAllItems();

  for (var i=0; i < gridItems.length; i++)

  {

   index += 1 ;

   debugger;

   itemEach = gridItems[i] ;

   itemEach.SetValue('Row Number Field Name' , index);

کد بالا را در قسمت scripts در تنظیمات گرید و همچنین در تب extra در قسمت SelectionChangedScript قرار دهید.

تکه کد پایین را نیز در تب extra در قسمت DataLoadedScript وارد نمائید.

  index = 0 ;

 for (var i=0; i < items.length; i++)

 {

  index += 1 ;

  itemEach = items[i] ;

  itemEach.Row Number Field Name =  index ;
  • در صورتی که قابلیت درج شماره ردیف به صورت اتومات در گرید شما وجود ندارد، ممکن است نیاز باشد تعداد ردیف ها را به دست آورید. برای این منظور کافیست دستور for را که در اسکریپت زیر از آن استفاده، در گرید خود به کار ببرید.
Var thecvDset = form.GetControl("Grid Name").InputControl.GetAllItems();

for (var i = 0; i < thecvDset.length; i++) {

 var theId = i;

}

form.GetControl("c_Control1").SetValue(i)

دستور for در مثال بالا، به هر ردیف از گرید که می رسد، 1 عدد به i اضافه می کند. تعداد i همان تعداد ردیف می باشد.

  • در این مثال نحوه دریافت کاربر لاگین آورده شده است. فرمول های زیر را در کنترلی از نوع TextBox در تب Value در قسمت Default Value وارد نمائید. این فرمول ها فقط در کنترل TextBox کار می کند
=form.UserFullName();
=form.UserLoginName();
  • در صورتی که بخواهید کنترلی از نوع PeoplePicker را نام کاربر جاری پر کنید، از فرمول زیر استفاده نمائید.
= form.UserID() +";#" + form.GetControl("c_FullName").GetValue();
  • در پاورفرم به کمک کد زیر این قابلیت فراهم است که بتوان موجود بودن یک یوزر در گروه خاصی را بررسی کرد. این کار برای دسترسی به قسمت های مختلف فرم کاربرد دارد.
if (form.UserInGroup("Group Name"))

    {

      form.ShowSection("Section Key");

    }

else

{

      form.HideSection("Section Key ");

}
  • برای مقداردهی کنترل DatePicker از فرمول زیر
= new Date().format("yyyy-MM-dd");
  • و برای مقداردهی کنترل DateTimePicker از فرمول زیر
= new Date().format("yyyy-MM-dd HH:mm:ss");

استفاده نمائید.

  • استفاده از وب سرویس ها در پاورفرم به دو صورت امکان پذیر است. یا باید در تنظیمات کنترلی که میخواهیم نتیجه وب سرویس در آن نمایش داده شود، نام وب سرویس و attribute مورد نظر را تعریف کنیم یا از اسکریپت برای اجرای وب سرویس استفاده کنیم. روش اول به صورت اتومات حین لود فرم وب سرویس را اجرا و نتیجه را نمایش میدهد. ولی مزیت روش دوم این است که شما میتوانید هر زمان که بخواهید توسط یک Button یا تغییر در یکی از کنترل ها وب سرویس خود را اجرا نمائید.

کارکرد این اسکریپت به این صورت است که ابتدا مقدار کنترلی که قرار است نتیجه وب سرویس در آن نمایش داده شود، در  متغیر d و attribute مورد نظر که همان نتیجه وب سرویس است نیز در متغیر دیگری به نام s ذخیره می شود. در صورتی که خطایی در وب سرویس وجود نداشته باشد، متغیر s یعنی نتیجه وب سرویس در متغیر d نمایش داده می شود. D همان کنترلی است که نتیجه را نمایش می دهد. فراموش نکنید حتی برای زمانی که بخواهید از اسکریپت استفاده کنید هم در کنترل نمایش دهنده نتیجه وب سرویس، نام وب سرویس و Attribute مورد نظر را تعریف نمائید.

function callback(e) {

var d = form.GetControl("نام کنترلی که نتیجه وب سرویس در آن نمایش داده میشود");

   var s = e.ListItems[0].web service attribute(result);

   if (pf.IsEmpty(e.ErrorMessage)) {

      d.SetValue(s);

   }

   else {

      d.SetValue("error");

   }

   form.GetControl("Button Control Name").SetEnable(true);

}

form.CallWebService("WebService1", callback);
  • اجرای لیست کوئری با استفاده از اسکریپت
if (form.GetControl("c_ID").GetValue()== "") {

function callback(e) {

 var s = "";

  if (pf.IsEmpty(e.ErrorMessage)) {

      for (var i=0;i<e.ListItems.length;i++) {

          if (i>0) s+=", ";

          s += e.ListItems[i].Title;

         }

      }

      else {

       s = e.ErrorMessage;

}

var cp=form.GetControl("c_CodePersonli");

cp.SetValue(s);

}

form.LoadListQuery("کد پرسنلی", callback)}

یک دیدگاه در “اسکریپتهای پاورفرم powerform – قسمت اول – پرکابردهای

  • سلام
    ممنون بابت اطلاعت خوبتون
    اگه بخایم یک button در فرم a با کلیک روی ان فرم b باز بشه چی کار باید کرد؟
    ممنون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *