# برنامه نویسی با محصولات مایکروسافت > Sharepoint > برنامه نویسی شیرپوینت (Sharepoint Development) >  پیاده سازی تقویم شمسی در شیرپوینت با استفاده از جاوا اسکریپت ( قسمت سوم )

## rtech

با سلام خدمت دوستان گرامی و عرض پوزش بابت تاخیر در ارسال ادامه این سری از مقالات ،
در قسمت قبلی یاد گرفتیم که چطور Date Picker پیشفرض شیرپوینت رو به شمسی تغییر بدیم اما مشکلی که داشتیم این بود که هنگام ذخیره کردن فرم پیغام خطایی دریافت میکردیم با این عنوان که شما میبایست تاریخی با فرمت میلادی وارد کنید.

اما در این قسمت از سری مقالات تقویم شمسی میخواهیم ببینم چطور میتونیم تاریخ هایی که به صورت شمسی انتخاب شده اند رو به میلادی تغییر دهیم .

اولین کاری که باید انجام بدیم اینه که بتونیم دکمه ذخیره رو در فرم پیدا کرده و اسکریپت مربوط به آن را تغییر دهیم که از طریق کد زیر میتوانید این کار را انجام دهید :


function findSaveButton()

{

          var tags = document.getElementsByTagName('INPUT');

          var SaveButton;

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

          {

                   if(tagsIdea.id.indexOf('diidIOSaveItem') != -1)

                   SaveButton=tagsIdea;

          }

          return SaveButton;

}

 


حالا می بایست قبل از اینکه فرم ارسال بشه به سرور تاریخ ها رو به میلادی تغییر دهیم :




function changeDatesBeforeSave()

                   {

                             changePersianDates();

                             sButton = findSaveButton();

                             if (!PreSaveItem()) {

                                      return false;

                             }

                            

                             WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(sButton.name, "", true, "", "", false, true));

                   }

 

                   function changePersianDates()

                   {

                            

                             $(function() {

                                      var tags = document.getElementsByTagName('IMG');

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

                                      {

                                                 var tempString = tagsIdea.id;

                                                 if (tempString.indexOf('DatePickerImage') != -1)

                                                 {

                                                          var dtcontrolId = tempString.replace('DatePickerImage','');

                                                          var DateValue = document.getElementById(dtcontrolId).value;

                                                           if(DateValue)

                                                           {                                                      

                                                                   var splitter = DateValue.split('/');

                                                                  

                                                                   Year = new Number(splitter[0]);

                                                                   Month = new Number(splitter[1]);

                                                                   Day = new Number(splitter[2]);

                                                                   if(Year<1400)

                                                                   {

                                                                             var j = persian_to_jd(Year,Month,Day);

                                                                             perscal = jd_to_gregorian(j);

                                                                             pyear = perscal[0];

                                                                             pmonth = perscal[1];

                                                                             pday = perscal[2];

                                                                             if(Number(pmonth) < 10)

                                                                             pmonth = "0" + pmonth;

 

                                                                             if(Number(pday) < 10)

                                                                             {

                                                                                      pday = "0" + pday;                                                           

                                                                             }

                                                                            

                                                                             var miladiDate = pmonth + "/" + pday + "/" + pyear;                                                                                                                                               

                                                                             document.getElementById(dtcontrolId).value = miladiDate;

                                                                   }

                                                                  

                                                           }

                                                }

                                      }

                             });               

                  

                   }

                            




این تمام کاری هست که شما میبایست انجام دهید ، من آخرین ورژن از اسکریپت رو براتون آماده کردم که میتونید از اینجا دریافت کنید :

http://www.mediafire.com/download/r1...atePickerV2.js

 و فقط کافیست کدهای درون این فایل رو همانند قسمت های قبلی در فایل masterpage وارد نمایید.

موفق و پیروز باشید

رامین احمدی

----------


## mona11

آقای احمدی،بسیار بسیار عالی بود.سوالی که از حضورتون داشتم اینه که چطور  قبل از اینکه عمل save انجام بشه،این اسکریپت اجرا میشه؟چون من قبلا که  امتحان کرده بودم،اول میومد save کنه و بعد اسکریپت اجرا میشد که این باعث  میشد همون خطای تاریخ رو بده...

----------


## mona11

البته این اسکریپت آخریه فکر کنم ، درست کار نکنه.واسه من یکم مشکل داره.حالا بقیه دوستان بیان امتحان کنن ببینیم چی میشه :(

----------


## rtech

این کدی هست که تابع ذخیره رو تغییر میده :


saveBtn.onclick= function(){changeDatesBeforeSave();};


و این کد پیشفرضی هست که با زدن دکمه ذخیره اجرا میشه :


sButton = findSaveButton();
			if (!PreSaveItem()) {
				return false;
			}
			
			WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(sButton.name, "", true, "", "", false, true));


که اگر به کدها نگاه کنید ما دقیقا قبلا اجرای این کد تاریخ ها رو عوض کردیم .
مشکل شما الان کجاست ؟

----------


## mona11

ممنون از جوابتون.همین خط نمیدونم چکار میکنه.

 WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(sButton.name, "", true, "", "", false, true));

مشکل فقط همون اسکریپت آخر کاره.وقتی که کپی  میکنم تو مسترپیج جواب نمیده...شما همین فایلی که واسه دانلود گذاشتید رو امتحان کنید ببینید کار میکنه قشنگ؟

----------


## rtech

اون خط فرم رو ارسال میکنه به سرور برای تایید و ذخیره شدن . 
بله من کد رو چک کردم و کاملا درست کار میکنه

----------


## mona11

خیلی ممنون.ببخشید من زیاد سوال میکنمو و قتتونو میگیرم.خیلی لطف کردید :لبخند:

----------


## rtech

نه اصلا ، اتفاقا خیلی خوبه که رو چند سیستم مختلف چک بشه تا اگر مشکلی هست برطرف گردد تا بقیه دوستان هم به راحتی استفاده کنند
اگر مشکلتون همچنان پابرجاست بفرمائید تا مجدد کدها رو بررسی کنیم

----------


## mona11

اسکریپت روی 2010 جواب نمیده  :(  ...
تلاشمو میکنم،اگر حل نشد بهتون اطلاع میدم :)

----------


## alamdarehosayn

سلام
کاشکی این تاپیک ادامه پیدا می کرد
من همه کارها رو کردم
ولی آخرش تموم نشد
توی صفحه اصلی تاریخ رو فارسی کردش
پیکر تاریخ هم درست می شه
ولی تاریخ ذخیره نمی شه
و ارور زیر رو می ده

شما باید یک تاریخ معتبر را در مدت 1/1/1900 و 12/31/8900 مشخص نمایید.

----------

