1-)Crm 4 de Formlara javascript yazıyoruz.Javascripte ise bilindiği gibi o anki saati Date() fonksiyonu ile çekiyoruz.Ancak bilindiği gibi javascript client bazlı çalışır ve yüzden zamandan kontrol etmemiz gereken noktalarda serverın sistem saat,ne ihtiyaç duyarız
2-)Bunun için CRM formumuzda ActiveXObject den yararlanıyoruz ve
Oluşturduğumuz ActiveX nesnesini open metodu ile gideceği aspx sayfasını belirtiyoruz
Not:aspx sayfamızı inetpub da crmimiz altında bi yere publish ettikten sonra IIS den bu uygulamayı convert to application diyerek kullanıma hazır hale getirmemiz gerekiyor
Open Metodunda QueryString mantığıda kullanarak sayfamıza parametre gönderebiliyoruz
Yapmamız gereken tek şey formda adresten ?ParametreAdı=ParametreDeğeri şeklinde tanımlama yaparak kod tarafında ise Requst.QueryString[“Parametre”] adı ile yollanan değeri okutmaktır
var objHTTP = new ActiveXObject(“Msxml2.XMLHTTP”);
objHTTP.Open(“GET”, ‘/ISV/Bilgehan /ServerTimeControl/ServerTimeCheck.aspx’,false);
objHTTP.Send(null);
var response = objHTTP.ResponseText;
var currentdate =response.split(‘@’);
3-)Daha sonra sayfadan dönen kodu activeX objemize ResponseText diyerek alıyoruz.Tabi aspx formumuzda Response.Write ile istediğimiz değeride yazdırmamız gerekiyor
4-)Bizim senaryomuz gereği bir aspx sayfası oluturalım ve içine aşağıdaki gibi kodumuzu yazalım
namespace CRMTimeControllerAjax
{
public partial class ServerTimeCheck : System.Web.UI.Page
{
private string entity = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(“en-US”);
string currentdate = DateTime.Now.ToString(“ddd MMM d HH:mm:ss UTCzzzzz yyyy”);
int UTCPointIndex= currentdate.LastIndexOf(‘+’)+3;//Benim istediğim formatta utcden sonra gelen + dan sonraki nokta yok
currentdate = currentdate.Remove(UTCPointIndex, 1);
Response.Write(currentdate+”@”);
}
}
}
5-) Burada response.writedan sonra direkt datetime.now diyerek bırakmadım nedeni ise CRMin tarih formatının biraz daha farklı olması
Crmde Date() fonksiyonu ile tarihi yazdırdığımız zaman verilen format benim serverım için UTC formatında ve bu tarih formatını kullanabilmek için kendi asp.net kodumda birkaç tane string işlemi yaptım ve en son olarak da bu formatta tarihi elde ederek en son response write @ işareti koyarak çıktımı yazdırdım.bunun nedeni ise
objHTTP.ResponseText; ile gelen değeri yazdırdığımızda çıktısını aşağıdaki formatta vermesi @ işareti koyarak split metodu ile ilk gelen tarih değerimizi alarak bir değişkene atıyoruz ve bu şekilde tarihimizi kullanıyoruz
var response = objHTTP.ResponseText;
var currentdate =response.split(‘@’);
6-)Son Haliyle Serverdan sistem saatini kullanmak için aspx sayfamızda aşağıdaki kodlar(tabi siz kendi server formatınıza göre bu kodu düzenlemeniz lazım)
Thread.CurrentThread.CurrentCulture = new CultureInfo(“en-US”);
string currentdate = DateTime.Now.ToString(“ddd MMM d HH:mm:ss UTCzzzzz yyyy”);
int UTCPointIndex= currentdate.LastIndexOf(‘+’)+3;//Benim istediğim formatta utcden sonra gelen + dan sonraki nokta yok
currentdate = currentdate.Remove(UTCPointIndex, 1);
Response.Write(currentdate+”@”);
CRM Formdaki kodumuz ise aşağıdaki gibi olacaktır.
var objHTTP = new ActiveXObject(“Msxml2.XMLHTTP”);
objHTTP.Open(“GET”, ‘/ISV/Bilgehan/ServerTimeControl/ServerTimeCheck.aspx’,false);
objHTTP.Send(null);
var response = objHTTP.ResponseText;
var currentdate =response.split(‘@’);
var now =new Date(currentdate[0]);