PDA

View Full Version : پیاده سازی تقویم شمسی در شیرپوینت با استفاده از جاوا اسکریپت ( قسمت سوم )



rtech
جمعه 21 تیر 1392, 11:46 صبح
با سلام خدمت دوستان گرامی و عرض پوزش بابت تاخیر در ارسال ادامه این سری از مقالات ،
در قسمت قبلی یاد گرفتیم که چطور 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/r1wubhsxus3a1wm/PersianDatePickerV2.js

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

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

رامین احمدی

mona11
شنبه 22 تیر 1392, 12:39 عصر
آقای احمدی،بسیار بسیار عالی بود.سوالی که از حضورتون داشتم اینه که چطور قبل از اینکه عمل save انجام بشه،این اسکریپت اجرا میشه؟چون من قبلا که امتحان کرده بودم،اول میومد save کنه و بعد اسکریپت اجرا میشد که این باعث میشد همون خطای تاریخ رو بده...

mona11
شنبه 22 تیر 1392, 12:45 عصر
البته این اسکریپت آخریه فکر کنم ، درست کار نکنه.واسه من یکم مشکل داره.حالا بقیه دوستان بیان امتحان کنن ببینیم چی میشه :(

rtech
یک شنبه 23 تیر 1392, 10:38 صبح
این کدی هست که تابع ذخیره رو تغییر میده :



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


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



sButton = findSaveButton();
if (!PreSaveItem()) {
return false;
}

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


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

mona11
یک شنبه 23 تیر 1392, 16:07 عصر
ممنون از جوابتون.همین خط نمیدونم چکار میکنه.

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

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

rtech
سه شنبه 25 تیر 1392, 12:53 عصر
اون خط فرم رو ارسال میکنه به سرور برای تایید و ذخیره شدن .
بله من کد رو چک کردم و کاملا درست کار میکنه

mona11
چهارشنبه 26 تیر 1392, 11:09 صبح
خیلی ممنون.ببخشید من زیاد سوال میکنمو و قتتونو میگیرم.خیلی لطف کردید:لبخندساده:

rtech
چهارشنبه 26 تیر 1392, 13:08 عصر
نه اصلا ، اتفاقا خیلی خوبه که رو چند سیستم مختلف چک بشه تا اگر مشکلی هست برطرف گردد تا بقیه دوستان هم به راحتی استفاده کنند
اگر مشکلتون همچنان پابرجاست بفرمائید تا مجدد کدها رو بررسی کنیم

mona11
شنبه 29 تیر 1392, 11:35 صبح
اسکریپت روی 2010 جواب نمیده :( ...
تلاشمو میکنم،اگر حل نشد بهتون اطلاع میدم :)

alamdarehosayn
دوشنبه 02 مرداد 1396, 18:34 عصر
سلام
کاشکی این تاپیک ادامه پیدا می کرد
من همه کارها رو کردم
ولی آخرش تموم نشد
توی صفحه اصلی تاریخ رو فارسی کردش
پیکر تاریخ هم درست می شه
ولی تاریخ ذخیره نمی شه
و ارور زیر رو می ده



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