Microsoft Dynamics CRM 3.0 ‘dan Veri Sorgulama Yöntemleri -3 (FetchXML Kullanarak Veritabanına Erişim)
Önceki iki makalemde Microsoft CRM Web Servislerini ve Sql kullanarak veri sorgulama yöntemlerini örnekler vererek açıklamıştım. Son yöntemimiz ise FetcXML kullanarak CRM veri katmanına erişmek. Bu yöntem bir ad-hoc query yaratır ve bu query Microsoft CRM sistemi üzerindeki entityler üzerinde servisler vasıtasıyla icra edilir. Bu yöntemi QueryExpression (yani 1. makalede ele aldığım konu)'den farklı kılan taraf ise Fetch yönteminin bize Microsoft CRM BusinessEntity sinifindan bir XML döndürmesidir.
FetchXML'in ayrı bir sorgulama dili olduğu ve kendi yazım kuralları olduğu unutulmamalıdır.
Bu yöntemi kullanarak veri okuyabilme işlemi sırasında sorguyu çağıran kişinin sistem erişim hakları (access rights) üzerinde Read privilege yetkisi olması gerekmektedir.
|
Biçim
|
[Visual Basic]Public Function Fetch( ByVal fetchXml As String) As String
[C#]public string Fetch( string fetchXml);
[JScript]public function Fetch( fetchXml : String) : String;
|
| Parametreler |
fetchXml : İcra edilecek Fetch query. |
| Dönen Değer |
String türünde içerisinde sorgu sonucunu bulunduran XML döner. |
| Sorgu İfadeleri |
|
Koşul
|
Koşul İfadesi |
Değer |
| equals x |
eq |
x |
| does not equal x |
ne |
x |
| is greater than x |
gt |
x |
| is greater than or equal to x |
ge |
x |
| is less than x |
lt |
x |
| is less than or equal to x |
le |
x |
| begins with x |
like |
x% |
| does not begin with x |
not-like |
x% |
| ends with x |
like |
%x |
| does not end with x |
not-like |
%x |
| contains x |
like |
%x% |
| does not contain x |
not-like |
%x% |
| exists |
not-null |
|
| does not exist |
null |
|
| anytime |
not-null |
|
| yesterday |
yesterday |
|
| today |
today |
|
| tomorrow |
tomorrow |
|
| in next 7 days |
next-seven-days |
|
| in last 7 days |
last-seven-days |
|
| next week |
next-week |
|
| last week |
last-week |
|
| this week |
this-week |
|
| this month |
this-month |
|
| last month |
last-month |
|
| next month |
next-month |
|
| this year |
this-year |
|
| next year |
next-year |
|
| last year |
last-year |
|
| on x |
on |
x |
| on or after x |
on-or-after |
x |
| on or before x |
on-or-before |
x |
| in between |
between |
|
| not between |
not-between |
|
| in |
in |
|
| not in |
not-in |
|
| equals user id |
eq-userid |
|
| does not equal user id |
ne-userid |
|
| equals business id |
eq-businessid |
|
| does not equal business id |
ne-businessid |
|
|
Örnek Uygulama :
Yukarıdaki tabloda sorgu ifadeleri kısmında "Koşul İfadesi" kısmında yazan değerler bizim normal sql cümlesinde kullandığımız ifadelere benzemektedir. Tek fark "=","<",">" gibi ifadelerin yerlerine "eq","gt","lt" gibi text bazlı ifadelerin gelmiş olmasıdır. Aşağıdaki örnek kodda ben sql'den bildiğimiz "like" operatörünü kullanacağım.
Herzaman olduğu gibi şimdi de kod üzerinde açıklama yönetimi tercih ediyorum ki kodu uygulamalarınıza kopyalayıp yapıştırdığınızda açıklamalar da beraberinde kodun içinde olsun diye. Unutulmamalıdır ki buradaki uygulamayı çalıştırabilmeniz için Veri Sorgulama Yöntemleri-1 isimli makalemde yer alan CRM Web Servisinin eklenmesi adımının yapılmış olması gerekmektedir.
private void btnQueryWithFetchXML_Click(object sender, EventArgs e)
{
try
{
// CRM Servis'ini cagiriyoruz
CrmService service = new CrmService();
// servise network'te kim oldugumuzu soyluyoruz. (Eger CRM Server'i ile ayni domainde degilseniz
// bunu yapmak zorundasiniz yoksa "The request failed with HTTP status 401: Unauthorized." hatasini alirsiniz)
System.Net.NetworkCredential MyCredential = new System.Net.NetworkCredential();
MyCredential.UserName = ""; // Domain Kullanici Adi
MyCredential.Password = ""; //Domain Kullanicisinin Sifresi
MyCredential.Domain = ""; //Domain Adi
service.Credentials = MyCredential;
// Eger crm server ile ayni domainde iseniz ve sizin crm'de bir rolunuz varsa asagida parantezler icerisinde
// belirttigim komutu yukaridaki 5 satir yerine kullanabilirsiniz
// ( service.Credentials = System.Net.CredentialCache.DefaultCredentials; )
// Geri donecek butun Contact'lardan Contactid ve FullName degerlerini istiyoruz
// Sehir ismi "Istanbul" olanlar cagiriyoruz.
string fetch = "<fetch mapping='logical'>"+
"<entity name='contact'>"+
"<attribute name='contactid'/>"+
"<attribute name='fullname'/>"+
"<filter type='and'>"+
"<condition attribute='address1_city' operator='like' value='İstanbul'/>"+
"</filter>"+
"</entity>"+
"</fetch>";
// Service'e gonderiyoruz
string result = service.Fetch(fetch);
MessageBox.Show(result);
// Gelen result'u XML objeleri ile parse edebiliriz.
}
// Soap yani Web Servisi hatalarini yakalamak icin ilgili Exception sinifimiz ekliyoruz.
catch (System.Web.Services.Protocols.SoapException ex)
{
MessageBox.Show(ex.Message + " " + ex.Detail.InnerText);
}
// Soap disindaki Standart hatalari yakalamak icin Exception'i da kodumuza ekliyoruz.
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Microsoft CRM 3.0'dan veri sorgulama yöntemleri isimli makalemizin sonuna ulaştık. Umarım bu konuları detaylı açıklayabilmişimdir. Bana her türlü sorunda mail adresimden ulaşabilirsiniz. Yeni bir makalede görüşmek üzere.
Barış KANLICA
Yazılım Uzmanı – Software Specialist
brsk@e-kolay.net
www.cub-e.net
Bu yazıyı ilk değerlendiren siz olun
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5