24 Ağustos 2012 Cuma

CRM de Teklif Olusturma ve Teklife Ürün Ekleme


//Quote teklif = new Quote();

                //teklif.Name = "gokhan";

                //Guid contacid = Guid.Parse("5C5A235B-E88D-E111-9E2F-00505695000B");
                //teklif.CustomerId = new EntityReference("account", contacid);

                //Guid industryid=Guid.Parse("3AE1C0D9-E78D-E111-9E2F-00505695000B");

                //teklif.ite_industryid = new EntityReference("ite_industry",industryid);

                //teklif.PriceLevelId = new EntityReference("pricelevel", Guid.Parse("89E45F23-45C9-4AC0-A0B6-0DE6DB612453"));

                //quoteid =Guid.NewGuid();
                //quoteid=service.Create(teklif);

//Şimdi de olusan teklife urun ekleyelim.

      QuoteDetail teklifurunu=new QuoteDetail();

     teklifurunu.Pricelevelid=  ;// fiyat listesini belirtiyoruz.
     teklifurunu.Quantity=23;  // miktarı belirliyoruz.
     teklifurunu.Uomid=;    // ürünün birimini veriyoruz.

    teklifurunu.QuoteId=quoteid;//hangı teklif altında olusacagını belirtir.

    Guid quotedetailID=service.Create(teklifurunu);// teklif urunu yaratıldı.

7 Ağustos 2012 Salı

CRM JAVASCRİPT-2



Daha önceki makalede sizlere crm formlarına nasıl javascript yazılacağını göstermiştim. Bu yazımda ise iş hayatında kullanacağımız javascript kod örneklerini vereceğim. Ayrıca
yazdığımız kodları nasıl derlendiğine beraber bakacağız. Bu kodları
yazdıkdan sonra bir hata varsa onu nasıl bulabilirim diyenler vardır.
Bu sorunun cevabı çok basit.Yazdığımız kodun içine debugger; diye bir
kod yerleştiriyoruz , bu kod bize javascript kodlarımızı derlememiz
için yardımcı oluyor böylelikle yazdığımız scriptlerin çalışıp
çalışmadığını visual stadio yardımıyla öğrenebiliyoruz (tabiki tek yol
bu değil derlemeye yadımcı olan başka yolar da var daha sonraki
makalelerde bunlara da değineceğim).


Bu arada unutmamız gereken bir konuda internet explorer sayfamızın debugging özelliğini enable etmemizdir. Aksi takdirde kodlarımız debugging olmayacakdır.

Debugging özelliğini enable ettikden sonra aşağıda gösterdiğim şekildeki gibi otomotikmen debug olacakdır.

İsterseniz birazda Ms crm deki mevcut bulunan alanları script içinde nasıl kullanacağımıza birlikde bakalım ve daha sonra örneklere geçelim.
Genel Değişkenler (Global Variabler of ms crm 4.0)
SERVER_URL: Organizasyon Url sini(http,https) verir örneğin http://myserver/myorg
USER_LANGUAGE_CODE: Kullanıcını dil kodunu verir (örnek : 1033)
ORG_LANGUAGE_CODE: Organizasyonun dil kodunu ve aynı zamanda kurulumda seçtiğimiz default dili verir.
ORG_UNIQUE_NAME: Organizasyonun adını döndürür.
Genel Değişkenlerle ilgili bir code örneği aşağıda verilmiştir.
İf(ORG_LANGUAGE_CODE!=USER_LAGUAGE_CODE)
{
Alert(‘Bu kullanıcının seçtiği dil kodu ’+ USER_LAGUAGE_CODE);
}
Genel Metotlar
IsOnline: Kullanıcı online olarak sistemi kullanıyorsa bize dönen değer true olacaktır.
IsOutlookClient: Kullanıcı Microsoft Dynamics CRM for Outlook ile sistemi kullanıyorsa bize dönen değer true olacakdır.
IsOutlookLaptopClientMicrosoft Dynamics CRM Outlook için çevrimdışı olup olmadığını denetler.
if (IsOutlookLaptopClient())
{
alert("You are using Microsoft Dynamics CRM for Outlook with Offline Access");
}
else
{
alert("You are not using Microsoft Dynamics CRM for Outlook with Offline Access");
}

Genel Olaylar
OnLoad: Form Browser'a yüklendiğinde gerçekleşen olaydır.
OnSave: Save ya da Save and Close düğmelerine tıkladığında çalışan olaydır. onSave olayı kullanıcının giridiği alanlar sunucuya gönderilmeden
çalışır ve eğer istemediğiniz bir değer varsa form üzerinde, servera
gidişi iptal edebilirsiniz. Eğer kaydetme işlemini iptal etmek
istiyorsanız.
onChange : Formda istediğimiz alanlar (Field) üzerinde işlem yapıldığında çalışacak olan olaydır yani değişme olayıdır.

crmForm Özellikler:
*Form özelliklerine crmForm.propertyname(özellik Adı) ile erişilebilir.
All: Form nesneleri kolleksiyonu
IsDirty: Formda değişiklik yapılıp yapılmadığını kontrol etmenizi sağlar.
FormType :Formun açılış biçimini gösterir.

ObjectTypeName: Görüntülenen nesnenin adı döner.
ObjectId: Değiştirdiğimiz alanın id ‘si anlamına gelmektedir. Yani nesne anahtarı demektir.Bize kaydın Guid’ ini verir. Bu özellik çok kullanacağımız bir
özellik olacaktır. İlerde yapacağımız örneklerde daha detaylı olarak
kullanacağız bu özellik başka bir sayfaya yada bir button aracılığıyla
bazı işlemler yapmamıza yardımcı olacaktır.
ObjectTypeCode : Özelliği görüntülenen varlık türü kodu içerir.
//Bu örneğimizde ise varlık türü kodunun Account(firma) veya Contact(ilgili kişi) olduğunu öğreniyoruz.



var CRM_ENTITY_ACCOUNT = 1;
var CRM_ENTITY_CONTACT = 2;

switch (crmForm.ObjectTypeCode)
{
case CRM_ENTITY_ACCOUNT:
alert("This is an Account form.");
break;

case CRM_ENTITY_CONTACT:
alert("This is a Contact form.");
break;
}

EntityTypeCode : Varlık türünün ne olduğunu bize verir(EntityTypeCode).Aşağıdaki tablolarda bazı varlık kodları(EntityTypeCode) verilmiştir.

Yukarıda anlatmış olduğum özellikler için genel bir örnek yapalım.Daha sonraki dersimizde işinize çok yarayacak kod örneklerini vereceğim.

var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;

// Bu örnek de formun formtype nı öğreniyoruz eğer form update olmuşsa formun objectId’sini buluyoruz veya formtype değeri create ise bir
alert verecekdir.
switch (crmForm.FormType)
{
case CRM_FORM_TYPE_CREATE:
alert("This is a create form.");
break;

case CRM_FORM_TYPE_UPDATE:
alert("This is an update form, the ID is " + crmForm.ObjectId + ".");
break;
}

CRM JAVASCRİPT


Javascript Kodlarıyla crm form larında küçük özelleştirmeler
yapacağımızı daha önceki yazımda kısaca bahsetmiştim. Bu yazımda ise
form içerisine nasıl JavaScript yazabiliriz, basit örneklerle
anlatacağım. Öncelikle Ms crm 4.0 ayarlar (settings) kısmına tıklayarak
özelleştirmek istediğim varlığı seçiyorum 
( daha önceki makalemde bu konulardan bahsetmiştim bu yüzden kısaca geçiyorum.) 
Daha sonra özelleştir(customization) linkine tıklıyorum ve özelleştirmek
istediğimi varlığı(entity) seçiyorum . son olarak altaki resimde
gördüğünüz gibi form özelliğine tıklıyorum ve özelleştirmek istediğim
formu getiriyorum.






Şimdi ise normal özelleştirme standartların biraz dışına çıkarak
normalde desteklenmeyen fakat developerların ve kullanıcıların
ihtiyaçları doğrultusunda kullanıcılar için esnek özellikleri ve
ekranları hazırlayabiliriz. Özellikle bu ekranları hazırlarken komplike
kod blokları yazmaya gerek kalmadan işimizi javascript kodlarıyla
halledebileceğimizi göreceğiz.
Form üzerinde üç farklı olay(event) için JavaScript yazabiliriz bu olaylar
onLoad(yüklendiğinde),onSave(kaydedildiğinde),onChange(değiştiğinde).
Öncelikle bu olayları birlikte inceleyelim ve daha sonra form içinde
nerelere kod yazacağımızı göreceğiz.

onLoad: Form açıldığında çalışacak olan JavaScript Kodunu bu olaya yazarız.
onSave: Form kaydedildiğinde çalışacak olan JavaScript Kodunu bu olaya yazarız. 
onLoad ve onSave için Form Properties butonuna tıklanarak açılan ekrandan seçili event için Edit denir. 






Önce onLoad için penceremizi açalım ve ilk örneğimize başlayalım. İlk
örneğimiz sayfa ilk yüklendiğinde crm formunda ok/cansel şeklinde
Message Box’lar oluşturmak olsun.

var cevap = window.confirm("işleme devam etmek için tamam(OK) basın,işlemi iptal etmek için iptale(Cansel) basın.");
if (cevap) {
//kullanıcı tamama basarsa kodu burada işleyecektir.
}
else {
//kullanıcı iptale basarsa kodu burada işleyecektir.
}



Bu ekranda olay etkindir seçeneğini işaretlemediğimiz zaman yazdığımız
scriptleri çalıştırmayacaktır bu yüzden bu seçeneği unutmamalıyız.

Daha sonra Form Properties penceresini de kapatalım. Üst menüden
Preview>Create Form seçeneği ile form test penceresini açarak test
edelim.



Bu örneği formun onSave olayı içinde uygulaya biliriz.
onChange: alanlar (Field) üzerinde işlem yapıldığında çalışacak olan JavaScript Kodunu bu olaya yazarız.
onChange için alan (Field) üzerine çift tıklanır. 


Açılan pencerede Events tabında Edit ‘e tıklarız.

onChange için ilk örneğimize başlayalım bu örneğimiz telefon(mask)
formatı olsun. Yeni başlayanlar için biraz uzun bir örnek olabilir
fakat bazı projelerde kullandığım için sizlerle paylaşmak istedim.
Ayrıca mevcut alanlar ve sonradan eklenen (custom) alanlarıda nasıl
kullanacağımızı gelecek dersde göreceğiz.

var objField = crmForm.all.telephone1;//telefon alanımızın alan ismini objfield değişkenine atıyorum
var sText=objField;
try {
if (objField.DataValue == null)//telefon alanımın text’i yani içindeki değer boş ise geri dönüyorum
return true;

var str = objField.DataValue;

// bosluklari kaldir
str = str.replace(/ /g, "");

// eger ilk karakter + ise geri kalanlar için numerik kontrolü yap
if (str.charAt(0) == '+') {
if (!IsNumeric(str.substr(1)))
{
// Hata
alert("Please use only numeric charecters at this field.");
objField.DataValue ="";
return false;
}
str = str.substr(0, 1) +' ' + str.substr(1, 2) + '( ' + str.substr(3,
3) + ') ' + str.substr(6, 3) + ' ' + str.substr(9, 2) + ' ' +
str.substr(11, 2); 
}
else {
// bosluklar silindikten sonra numerik kontrolü yap
if (!IsNumeric(str.substr(1))) {
// Hata
//alert("Please use only numeric charecters at this field.");
objField.DataValue ="";
return false;
}
else {
// 10 veya 11 karakterse uygun formata sok
if (str.length == 10 || (str.length == 11 && str.charAt(0) == '0')) {
// Formata sok
if (str.length == 10) {
str = "0" + str;
}
str = str.substr(0, 1) + '( ' + str.substr(1, 3) + ') ' + str.substr(4,
3) + ' ' + str.substr(7, 2) + ' ' + str.substr(9, 2);
}
else // 10 veya 11 karakter degilse hata mesaji ver
{
// Hata
alert("Please for domestic phone numbers use only '0 212 444 05 35' or
'212 444 05 35' format at this field. for Overseas phone numbers put a
'+' sign at the beginnig of Number."); 
objField.DataValue ="";
return false; 
}
}
}
objField.DataValue = str;
}
catch (err) {
txt = "(initialize) There was an error on this function.\n\n"; 
txt += "Click OK to continue.\n\n";
alert(txt);
}
function IsNumeric(sText) 
{
var ValidChars = "0123456789";
var Char;
for (i = 0; i < sText.length; i++) {
Char = sText.charAt(i);
if (ValidChars.indexOf(Char) == -1) {
txt = " Please enter only numeric charecters at this field. \n\n";
txt += "Click OK to continue.\n\n";
objField.DataValue ="";
alert(txt);
return false;
}
}
return true;
}


Üst menüden Preview>Create Form seçeneği ile form test penceresini açarak test edelim.



Son olarak save and close tuşuna basıp kaydedip kapatıktan sonra form’un
üst tarafında bulunan publish buttonuna basarak özelleştirmiş olduğumuz
özellikleri yayımlarız. Crm form larında javascript le ilgili örnek
kodlar yazmaya diğer makalelerimde devam edeceğim görüşmek dileğiyle....

CRM de IFRAME


Merhaba, CRM 2011’in beta sürümünün release olmasıyla birlikte makale yoğunluğumuz yeni sürümün özelliklerine kaymıştı normal olarak. Bu yeni özellikleri en azından önemli kısımlarından bahsettikten sonra, odağımızı developer kısmına getirme zamanı geldi. Bir CRM danışmanı olarak sık sık ihtiyaç olan konuları bir seri halinde sunmak istiyoruz. Tips and Tricks olark isimlendireceğimiz seride, plugin kodlamaktan javascript düzenlemelerine kadar CRM projelerinde ihtiyaç duyulan geliştirme özelliklerden bahsedeceğiz. Karşılaştığınız sorunların en azından bir kısmına derman olabilir belki.. 

Bu serinin ilk konusu ise Iframe’ler hakkında olacaktır. CRM formları içinde bambaşka Internet uygulamlarını
çağırabileceğiniz bir yapı. Herhangi bir formun customization ekranındaki Insert tabında bulunan Iframe düğmesine
tıklayarak ekleyebilirsiniz.


Daha sonra buradkai bilgileri istediğiniz gibi doldurabilirsiniz.

Burada yazdığınız URL alanı içinde yazdığınız site gösterilecektir. “Pass record object type code and unique identifier as parameters” kutusu önemlidir. Bu kutuya tıkladığınızda, verdiğiniz adresin sonuna formun objecttypecode değeri (yani hangi entity olduğu bilgisi) ve formdaki kaydın id’si Querystring parametresi olarak gönderilir. Dolayısıyla
bu iki veriden yola çıkarak hangi entity’nin hangi kaydında bulunduğunuzu anlayabilirsiniz.

Bu şekilde bir Iframe oluşturuduğunuzda içeride gösterilecek URL aşağıdaki gibi bir adres olacaktır.



gördüğünüz gibi temel verilerin hepsi Iframe olarak gelmiştir. Eğer Iframe olarak bir asp.net uygulaması yazdıysanız ASP.net içinde Request.Url.AbsoluteUri yolunu kullanarak siteye gönderilen url’yi alabilirsiniz.

Iframe’ler hakkında bahsetmek istediğim öenmli bir teknik daha, Iframe’in adresini formun javascript’inde değiştirmenizdir. Mesela form ilk yüklenirken, adresi dinamik olarak set edebilirsiniz veya mesela bir picklist’den bir değer seçildiğinde farklı bir adresin ayarlanmasını sağlayabilirsiniz. Örnekleri çoğaltmak mümkün. Bu durumda Iframe’i tanımlarken URL kısmına about:blank yazmalısınız.



Javascript kodu olarak ise aşağıdaki gibi bir kod işinizi görecektir. crmForm.all.IFRAME_mscrm.src = ‘www.xrmplatform.net’;

Bu yazım CRM 4.0 için geçerlidir. 2011 için kullanımı aşağıdaki gibi olmalıdır

Xrm.Page.getControl("IFRAME_mscrm").setSrc("www.xrmplatform.net");

Ayrıca acılan sayfadaki aracların tetiklenmesi (butona tıklanması,drop downun secilmesi vs.) için "Select whether to restrict cross-frame scripting" bolumundeki seçili işaretini kaldırınız.