Cengiz ATİLLA

Microsoft Dynamics CRM

Dynamics CRM 365 - Dialog Box

Merhaba Arkadaşlar , 

Dialog Box ( İletişim Kutuları ) kullanıcıları bir süreç boyunca yönlendirmek için adım,adım bilgi giriş ekranları kullanarak kullanıcıdan verileri toplamamıza yarayan süreçtir. Örnek olarak servis taleplerinde hazırlamış olduğumuz bir iletişim kutusu ile kontrollü bir şekilde servis taleplerinin çözüme ulaştırabilir, call center ekibimizin kullanacağı bir iletişim kutusu ile gelen çağrılar için arama kaydı ve arama kaydına bağlı servis talepleri oluşturabiliriz. 

Kullanıcılarımızın yapması gereken tek işlem karşılarına gelen ekranlardaki verileri doldurup ileri tuşuna basmak . 

 

  1. İletişim kutumuza vermiş olduğumuz genel isim ve sayfa oluşturma aşamasında yazmış olduğumuz Sayfa başlık bilgisi verileri bu alanda gösterilir. 
  2. Sayfa içerisinde oluşturduğumuz istem ve yanıt bölümüdür, bu alanda kullanıcıya yöneltmiş olduğumuz sorunun cevabını ileride değineceğimiz bazı seçenekler ile alabiliriz. 
  3. İstem ve yanıt kısmında sormuş olduğumuz sorunun detaylarını barındıran açıklama kısmı 
  4. Örnek resimde var olan ok , oluşturmuş olduğumuz iletişim kutusu sayfasının kaplamış olduğu alanı belirler. 

SAYFA 

İletişim kutusu içerisinde oluşturduğumuz sayfalar kullanıcımızın karşısına yukarıdaki örnekte olduğu gibi çıkar , iletişim kutularında birden fazla sayfalar kullanabilir bir önceki sayfadaki değeri bir sonraki sayfada kullanabilir veya sayfa içerisine girilen değerlere göre koşul işlemleri yaptırabilir kullanıcımızın vermiş olduğu cevaplara göre karşısına istediğimiz sayfamızın çıkartabiliriz. 

İstem ve Yanıt

İstem ve yanıtlar oluşturmuş olduğumuz sayfalar içerisinde kullanıcıya soru sormamıza ve sormuş olduğumuz sorumuzun cevabını almaya yarar. Sormuş olduğumuz sorumuzun cevabını kullanıcıdan aşağıdaki şekillerde alabiliriz. 

  • Yok : Herhangi bir cevap değeri içermez genel olarak bilgilendirme yazılarında kullanılır. 
  • Tek Satır : Kullanıcının karşısına tek satır metin kutusu gelir ve değeri buraya girmesi istenir.
  • Seçenek Kümesi ( Radyo düğmeleri ) : Kullanıcının karşısına radyo buton şeklinde eklemiş olduğumuz değerler gelir . Seçilen değerin sistemsel değerini int türünde biz verebiliriz. 
  • Seçenek Kümesi ( Seçim listesi ) : Kullanıcının karşısına seçim kümesi olarak eklemiş olduğumuz değerler gelir. Global seçim kutuları bu alanda görünmez sistem içerisindeki farklı bir seçim kutusu üzerinde kıyaslama yapmamız gerekiyor ise değerlerini buraya yeniden tanımlamak zorundayız. Seçilen değerin sistemsel değerini int türünde biz verebiliriz. 
  • Birden fazla satır ( Yanlızca metin ) : Kullanıcının karşısınıa bir metin kutusu gelir. Burada birden fazla metin girebileceği şekilde büyük olarak açılır. 
  • Tarih ve Saat : Kullanıcının karşısına tarih ve saat bilgisini girebileceği bir veri giriş kontrolü gelir. 
  • Yanlızca Tarih: Kullanıcının karşısına tarih bilgisini girebileceği bir veri giriş kontrolü gelir. 
  • Arama : Kullanıcının karşısına belirtmiş olduğumuz varlığımızın kayıtları gelir. 

İpucu

istem ve yanıt içerisinde bulunan bir bölümdür, kullanıcıya sormuş olduğumuz soru hakkında daha açıklayıcı bazı bilgileri girdiğimiz kısımdır. 

 Örnek

Servis talebi üzerinde çalışacak bir iletişim kutusu yapalım. Kullanıcılarımız iletişim kutusunu çalıştırdıkları zaman

  • Servis talebini kapatmak istediğinize emin misiniz
    • Evet : Servis talebini problem çözüldü olarak kapatalım
    • Hayır :Servis talebini iptal edildi olarak kapatalım

İstem ve Yanıt ekranının ayarlanması

İstan ve yanıt ekranımız ayarlandıktan sonra kullanıcımızın vermiş olduğu cevap kontrolü için ekranda olduğu gibi koşul denetimi yapabiliriz.

İletişim kutusunu çalıştırdığımız zaman kullanıcı üzerinde bulunduğu servis talebini sorunun cevabına göre başarılı bir şekilde kapatabildiği gibi iptal işlemini de gerçekleştirebilir.

Dynamics CRM - Bakım zamanı

Merhaba Arkadaşlar 

Bildiğiniz gibi kurduğumuz sistemler ilk başlarda çok hızlı çalışırken zamanla kullanıcılar sistemin yavaşladığını eskiden x işlemi hemen yapabiliyor iken şimdi bu işlem için beklemem gerekiyor dediğini çoğu zaman duymuşuzdur. 

Birşeyler zamanla mı değişti , yoksa bazı şeyler yanlış mı kurgulandı.

Sanırım sistemimizi bakım zamanına alma zamanı geldi ...

Başlamadan önce 

İşlerimize başlamadan önce yapmamız ve sistem üzerinde incelememiz gereken bazı noktalardan maddeler halinde bahsedelim.

  • Projemizde kullandığımız iş akışlarımızın ve iletişim kutularımızın listesini proje dosyamızdan çıkartalım, hangisinin geride bıraktığı iz bizim için önemli bunları tespit edelim. 
  • Sistemlerimiz yaşayan bir organizma gibi zaman içerisinde istenen yeni kurgular veya düzenlemeler üzerine birde her zamanki gibi zamansızlık eklenince çok incelemeye fırsat kalmadan benzer iş akışları yapmış veya bir iş akışının altına eklememiz gereken bir işlemi yeni bir iş akışı olarak oluşturmuş olabiliriz. iş akışlarımızı kontrol edelim 
  • Projemiz içerisinde yazmış olduğumuz plug-in lerimizi inceleyelim ilk madde içerisinde belirttiğim gibi plug-in lerimizide inceleyelim.
  • Kullanıcılarımızın zaman içerisinde gelişmiş bul yetenekleri gelişip data boyutuda çoğaldığı zaman sistemde aynı orantıda yavaşlar, bunları tespit edelim kullanıcılarımız hangi zaman aralıklarında ne büyüklükte raporlar çekiyorlar. 
  • Projemiz içerisinde tanımladığımız ve genelde test aşamasında zamanını ayarlamayı atladığımız o windows servisler , mesai saati içerisinde çalışan hangi windows servislerimiz var, bunların mesai saati dışında çalışması sistemimizi ne kadar etkiler veya çalışma aralıklarını ne kadar uzatabiliriz. 
  • Crm uygulamasının kurulu olduğu sunucu içerisindeki hata loglarımızı inceleyelim , son 15 veya 30 gün içerisinde crm bize neler demek istemiş.
    Örnek olarak sunucu bize aşağıdaki şekilde bir event log ile database içerisindeki AsyncOperationBase tablomuz içerisindeki kayıtların arttığını haber vermektedir. 
Event Type: Error
Event Source: MSCRMDeletionService
Event Category: None
Event ID: 16387
Date: 2009/01/26
Time: 11:41:54 AM
User: N/A
Computer: CRMSERVER
Description: Error: Deletion Service failed to clean up table=CleanupInactiveWorkflowAssembliesProcedure For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Kontollerimizi tamamladık, şimdi işlemlere geçelim. 

İşlemlerimize başlamadan önce aşağıdaki iki maddeye dikkat etmemiz gerekmektedir. 

  • Sistem yöneticimizden projenin olduğu makinelerin yedeklerinin alınmasını isteyelim. 
  • İşlerimizi mesai saati dışında yapalım ve kullanıcılarımıza bakımı haber verelim , 
    • Muhasebe veya operasyon gibi bazı bölümler bizim bakım zamanımıza denk gelen bir çalışma aralığında çok önemli işler yapabiliyorlar. 

İş Akışları - İletişim Kutuları

Projemiz içerisinde kullanmış olduğumuz iş akışlarımızı ve iletişim kutularımızın listesini gözden geçirip, hangi iş akışımızın logları önemli hangilerinin logları önemsiz olduğunu bakım işlemlerimize başlamadan önce tespit etmiştik. 

Her bir iş akışı veya iletişim kutusu eğer seçim yapılmadı ise standart davranış olarak yaptıkları işlemler sonrasında arkalarında bir log bırakırlar. Datalarımız büyüdüğü ve iş akışlarımız yüzlerce kez çalıştığı zaman arkada bırakmış oldukları bu loglar sistem için bir yük haline gelir. Projemiz içinde loglarının takibi gerekmeyen işlemlerimizin loglarını aşağıda paylaşmış olduğum ekrandaki seçim kutusunu işaretleyerek kapatabiliriz. 

ikinci madde içerisinde belirttiğimiz gibi iş akışlarımızı veya iletişim kutularımız içerisinden birleştirebildiklerimiz var ise bunları planlı bir şekilde birleştirelim. 

Plug-in

Sistem içerisinde geliştirdiğimiz plug-inlerimizin çalıştıktan sonraki log işlemlerini kapatmak için aşağıda paylaşmış olduğum ekranraki seçim kutusunu işaretleyerek kapatabiliriz. 

Raporlar 

Kullanıcılarımızın mesai saati içerisinde gelişmiş bul ile çekmiş oldukları raporların boyutlarını araştıralım , datalarımız arttıkça raporların süreleride uzamaktadır.

Datalarımızı yaşlandırarak veya ilgili raporları özel olarak yazarak mesai saati içerisinde çekilen dataları kontrol altına alabiliriz. 

Windows Servisler 

Projemiz içerisinde genelde olmaz ise olmazlarımızdan birisi olan windows servislerimizin çalışma sıklıklarını iyi analiz etmeli en uygun zaman aralıkları verilmelidir. 

Günde bir kere çalışacak olan bir windows servisimiz var ise , o zaman aralığı personelin yemek molası , sabah mesai saati başlamadan önce veya mesai sonrasında olarak ayarlanması bize performans olarak fayda verecektir. 

Özel Kod İşlemleri 

Satış veya operasyon gibi bazı departmanlarımızın sistemin içerisine toplu olarak bazı dataları aktarmaları gerektiğinde yazmış olduğumuz aktarım uygulamaları iyi kurgulanmaz ise performans kaybı yaşatabilecek durumları oluşturabilir. 

Bir örnek ile konuyu açıklayalım; 

Satış tarafından bize içerisinde 10.000 tane kayıt olan bir potansiyel müşteri listesi geldi , bizde bunu crm sistemi içerisindeki potansiyel müşteri varlığına aktaracağız. Varlık üzerinde bir iş akışı tanımlı her tanımlanan potansiyel müşteri için call center ekibimize bir telefon aktivitesi oluşturuyor. 

Excel listemizi aldık ve aktar butonuna bastık ... 

İşlem başarılı !

Evet sistemimizde çalışmayı bekleyen 10.000 tane iş akışı ile beraber işlemimiz başarılı.

Aktarım uygulamarı içerisine yazılabiliyor ise bu tür kodları eklemeli ve iş akışlarını aktarım zamanında kapatmalıyız. 

Dynamics 365 içerisindeki custom action mantığını kullanarak işlerimizi custom action mantığına uygun tasarlayıp özel kodumuzda veya iş akışımızda hazırlamış olduğumuz custom action çağırabiliriz. 

Event Log

Projemizin bulunduğu sunucu üzerindeki event log larımız inceleyelim sistem içerisinde hata logu olarak neler var ? 

EventlogId değeri ile sorunların çözümlerini arayalım. 

Özet olarak 

Sistemimiz içerisindeki yavaşlamalar yukarıda belirttiğimiz ayrıntılara dikkat edersek gözle görülür oranda azalacaktır.

https://support.microsoft.com/en-us/help/968520/performance-is-slow-if-the-asyncoperationbase-table-becomes-too-large adresindeki adımlarıda yapmanızı öneririm. 

 

 

 

Dynamics CRM 365 - Business Rules - Error Messages

Merhaba Arkadaşlar , 

Business Rules yapısını kullanarak form üzerindeki alanlarımızda girilen değerin belirttiğimiz kriterler dışında ise kullanıcıya nasıl hata mesajı gönderebiliriz konusunu inceleyeceğiz. 

Bu makaleyi okumadan önce eğer Bussiness Rules yapısı hakkında bilgi sahibi değilseniz Dynamics CRM 365 - Bussiness Rules yazımı okumanız bu konuyu daha net anlamanızı sağlayacaktır. 

İlgili kişi varlığında yeni bir ilgili kişi oluşturulmak istendiği zaman E-posta adresi alanı boş ise bir hata mesajı çıkartalım ve " Kaydı oluşturmak için E-posta adresi bilgisini doldurmanız gerekmektedir. " hatası verelim. 

Form tasarımı üzerinden Bussiness Rules ( İş Kuralları ) butonuna basalım ve sol alt kısımdan yeni iş kuralı butonuna tıklayalım. 

 

Karşımıza gelen iş kuralı oluşturma ekranı üzerinden ; 

Koşul kısmında ; 

Kaynak değerimizin varlık ( ilgili kişi ) - Kontrol etmek istediğimiz  alanın  ( E-posta ) şartımızında Veri içermez  ise olduğunu belirttik . Oluşturmuş olduğumuz bu şart sağlanır ise

Hata iletisi göster kısmında ; 

Alan : Hangi alan üzerinde hata mesajımızı göstereceğimizi belirledik. 

İleti : Seçmiş olduğumuz alan üzerinde hangi metni yayınlayacağımızı belirttik. 

İş kuralımızı kayıt edelim ve yayımlayalım .  

Yeni bir ilgili kişi oluşturmak istediğimiz zaman aşağıdaki gibi eposta alanı boş ise bize uyarı verecektir. 

 

 

Dynamics CRM 365 - Rollup Fields

Merhaba Arkadaşlar 

Dynamics CRM 365 içerisinde bulunan ve yine biz kod geliştiriciler için kolaylık sağlayan bir başka özellik olan  rollup fields konusunu inceleyeceğiz. 

Rollup fields bir önceki makalemdeki Calculated Fields yapısına benzemektedir. Rollup fields yeniliği ile javascript kod yazma ihtiyacı kalmadan otomatik hesaplamalar yaptırabiliriz. 

Desteklediği Veri Tipleri 

  • Tamsayı
  • Ondalıklı sayı
  • Para birimi 
  • Tarih ve saat

Avantajları ve Yetenekleri 

  • Görsel olarak kolay tasarlanabilmesi
  • SUM - COUNT - MIN - MAX - AVG işlevlerini kullanabilme
  • Bir veya birden fazla koşul kullanarak işlem öncesi kontrolün sağlanabilmesi. 
  • Oluşturulan rollup fields değerlerinin görünüm, grafik ve raporlarda kullanılabilmesi
  • Rollup field ile calculated field bir arada kullanılabilir 

Dikkat Edilmesi Gerekenler 

  • Bir organizasyon için toplamda 100 rollup fields tanımı yapılabilir. Varlık başına ise en fazla 10 adet rollup fields tanımı yapabiliriz. 
  • Rollup fields üzerinde oluşan güncellemeler herhangi bir iş akışını tetiklemez. 
  • İş akışları içerisinde rollup fields lar bekleme koşulu olarak atanamaz. 
  • Basit alanlara veya karmaşık olmayan hesaplama alanları için kullanılır. 
  • Rollup fields içerisindeki değer formun açıldığındaki son hesaplama değeri olduğu için referans olarak çağrılan yerlerde son hesaplama değeri üzerinden işlem görür. 

Rollup Field Oluşturmak 

Form tasarımında veya oluşturmuş olduğumuz çözüm üzerinde işlem yapmak istediğimiz varlığımıza  gidelim ve yeni alan oluştur butonunu seçelim. 

Desteklediği veri tiplerden birini seçip alan türü kısmından toplu değer ( Rollup Fields ) seçeneğini seçelim. Seçimi tamamladığımız zaman Alan türü kısmının yanında düzenle butonu belirecektir. 

Düzenle butonuna bastığımız zaman ilk önce ilgili alan kayıt olacağı için * ile işaretlenmiş alanların doldurulması gerekmektedir. 

Düzenle butonuna bastığımız zaman karşımıza gelen ekran üzerinden rollup fields ayarlarımızı gerçekleştirebiliriz. 

Örnek Kullanım 

Firma varlığı içerisine eklediğimiz bir alan ile o firma kartına bağlı bulunan toplam ilgili kişi adedini hesaplatalım. 

Yukarıdaki örnek rollup fields tanımında Firmalar varlığı üzerine Toplam çalışan sayısı adında bir Tamsayı tipinde alan oluşturduk ve rollup field olarak işaretledik. 

İlgili varlık kısmında ise , ilgili kişiler içerisindeki durum açıklaması etkin olan ve durum değeri etkin olan kayıtları işlemimize kriter olarak belirttik. 

Toplama kısmında ise alan üzerinde ne yapacağımızı belirledik. Sayı / ilgili kişi ile o firma üzerinde kaç adet ilgili kişi olduğunu hesaplatmak istedik. 

Oluşturmuş olduğumuz alanımızı firma varlığı üzerindeki formumuza ekleyip Yayımla diyelim test edelim. 

 

 

Firma kartına bağlı olan kayıtların toplamı form üzerindeki toplam çalışan sayısı alanında hesaplanmış olarak durmaktadır. 

İlgili alanımızın yanına geldiğimizde yeniden hesapla isminde bir butonun belirdiğini görebiliriz. Form üzerinde manuel olarak çalıştırabiliriz. 

Rollup field form üzerinde calculated fields da olduğu gibi sadece okunabilir olarak gelmektedir. 

Dynamics CRM 365 - Calculated Fields

Merhaba Arkadaşlar , 

Dynamics CRM 365 içerisinde getirdiği bir çok yenilik ile biz kod geliştiricilere kolaylık sağlamaya devam etmektedir. Bir önceki yazımızda Business Rules yapısında olduğu gibi form içeriside eskiden javascript ile yaptığımız bir çok işlemi şimdi calculated field teknolojisini kullanarak yapabiliyoruz.

Hangi Form Elemanlarında Calculated Field Kullanabilirim

  • Text
  • İkili Seçenek ( Evet / Hayır )
  • Picklist
  • Sayısal Alanlar
  • Currency
  • Tarih ve Saat

 

Calculated field yapısını kullanarak neler yapabiliriz

  • Form üzerinde olan bir alan ile yine form üzerinde olan bir başka alanı birleştirebilir veya üzerinde matematiksel işlemler gerçekleştirip hesaplanmış alanımızda gösterebiliriz. 
  • Form üzerinde olan bir lookup içerisinden değer seçtiğimiz zaman seçmiş olduğumuz değerimiz içerisindeki herhangi bir alana ulaşabilir istersek aynı şekilde kullanabilir istersek bazı işlemlerden ( sayısal veya birleştirme ) geçirebiliriz. 
  • Tarih saat işlemlerinde gün , hafta , yıl ekleme işlemlerini yapabiliriz. 

Not : Business rule yapısında olduğu gibi istersek bu olaylarımızı bir kritere bağlayıp ilgili şart sağlanıyorsa calculated field üzerinde yaptığımız işlemlerin geçerli olmasınıda sağlayabiliriz. 

Makalemizin sonlarına doğru bir örnek ile bunu açıklayacağız. 

Calculated Field Oluşturmak

  • Ayarlar - Özelleştirmeler veya Çözümler
  • Varlıklar - İşlem yapmak istediğimiz entity seçelim.
  • Seçmiş olduğumuz entity içerisinden işlem yapmak istediğimiz ( hesaplanmış alanı yerleştirmek istediğimiz form tasarımını açabilir veya alanlar kısmından işlem yapmaya devam edebiliriz. 
  • Yeni Alan oluşturmak için yeni tuşuna basalım. 
  • Karşımıza gelen yeni alan oluşturma formu üzerinde işlemlerimizi gerçekleştirelim
  • Alan Türü kısmından hesaplanan seçeneğini seçelim ve yan kısmında bulunan düzenle butonuna basalım.

 

  • Karşımıza gelen ekran üzerinden işlemlerimizi gerçekleştirebiliriz. 

Koşul ( İsteğe Bağlı ) 

Bu alanda işlem yapmadan önce oluşmasını istediğimiz bir veya birden fazla şartlarımız var ise onları belirleyebilir sonrasında işlemin oluşmasını isteyebiliriz. 

Eylem

Alan üzerinde yapılmasını istediğimiz işlemleri ayarladığımız kısımdır. Makalemizin sonlarına doğru bir örnek ile işlemlerimizi gerçekleştireceğiz. 

Örnek Kullanım 

Personel varlığımızın içerisindeki isim ve soyisim alanlarından faydalanarak personel kaydımızın otomatik olarak email adresini yazalım. 

  1. isim ve soyisim alanlarından faydalanıp personelin eposta adresini oluşturan alanımızı oluşturacağımız için bizim burada isim ve soyisim alanlarının dolu olmasını şart olarak istememiz gerekli olacağı için koşul kısmında isim ve soyisim veri içerir olmasını istedik.
  2. Eylem kısmında ise Concat methodunu kullanarak string birleştirme yaptık ve isim.soyisim@test.com şablonu ile otomatik olarak eposta adresinin oluşmasını sağlamış olduk.

 

Calculated Field lar form üzerinde kilitli olarak dururlar formumuzu kayıt ettiğimiz zaman ilgili alan eğer içerisinde bir koşul var ise sağlanmasını bekler , eğer şartlar sağlanmış ise eylem kısmındaki işlemlerini yapar ve değeri kendi üzerinde saklar. 

 

Dynamics CRM 365 - Hızlı Arama

Merhaba Arkadaşlar ,

Bugünkü makalemizde Microsoft Dynamics Crm 365 içerisinde bulunan hızlı arama ( global search ) işlemini inceleyeceğiz.

Aramış olduğumuz değerlerimizi CRM içerisinde belirtmiş olduğumuz varlıklarımız içerisinde arar ve sonuçları bize varlık bazında listeler. Hızlı arama işleminde hangi varlıklar içerisinde arama yapılacağını belirtebiliriz.

System - Administrator - System Settings - Set up Quick Find menüsü altında bulunan Select entities for search bölümündeki Select butonuna basalım.

Karşımıza gelen ekran üzerinden hızlı arama işleminde aramanın olmasını istediğimiz varlıklarımızı açılan pencereden seçebiliriz.

Dynamics CRM 365 - Xrm.Page.data.entity

Merhaba Arkadaşlar , 

Dynamics crm içerisinde formları tasarlarken sıklıkla javascript ile forma müdahale etmemiz datalar üzerinde kıyaslama yapmamız veya kullanıcılarımızı yönlendirmemiz gerekir. Bu makalemizde Xrm.Page.data.entity altında bulunan başlıklar ile inceleyeceğiz. 

  • attributes
  • getDataXml
  • getEntityName
  • getId
  • getIsDirty
  • OnSave
  • save

attributes 

Formun kayıt olayında çalısıp kayıt esnasında form üzerinde bulunan alanların değerleri ile birlikte listesini verir.

Örnek Kullanım
Xrm.Page.data.entity.attributes;

getDataXml

Formun kayıt olayında çalışıp kayıt esnasında sunucuya giden bilgileri bize string tipinde xml olarak verir. Sadece değişen veya değer olan kayıtların listesini verir.

Örnek Kullanım
Xrm.Page.data.entity.getDataXml();

getEntityName

Üzerinde çalıştığı entity nin adını string tipinde döndürür.

Örnek Kullanım
Xrm.Page.data.entity.getEntityName();

getId

Üzerinde çalıştığı entity nin ID değerini döndürür.

Örnek Kullanım
Xrm.Page.data.entity.getId();

getIsDirty

Form üzerindeki alanların değişip değişmediğini bize true / false olarak bildirir.

Örnek Kullanım
Xrm.Page.data.entity.getIsDirty();

OnSave

Form kayıt sırasında eklemek istediğimiz başka methodlar var ise addOnSave eklediğimiz ve bir mantıksal sisteme göre kaldırmak istediğimiz kayıtlar var ise removeOnSave methodlarını kullanabiliriz.

Örnek Kullanım

Xrm.Page.data.entity.addOnSave(Eklemek_istedigimiz_function);
Xrm.Page.data.entity.removeOnSave(Eklemek_istedigimiz_function);

save

Form üzerinde kullanıcının belirli bir aşamada formu kaydetmesini istemek yerine bunu aşağıdaki javascript methodları ile yapabiliriz.

Örnek Kullanım
Xrm.Page.data.entity.save( null | "saveandclose" |"saveandnew" )

save()
Herhangi bir parametre vermez isek sadece formu kayıt eder.
save("saveandclose")
Kayıt işlemini gerçekleştirir ve formu kapatır.
save("saveandnew")
Kayıt işlemini gerçekleştirir ve yeni form açar

Dynamics CRM 365 - Xrm.Page.data.entity.attributes

Merhaba Arkadaşlar

Dynamics crm içerisinde formları tasarlarken sıklıkla javascript ile forma müdahale etmemiz datalar üzerinde kıyaslama yapmamız veya kullanıcılarımızı yönlendirmemiz gerekir. Bu makalemizde Xrm.Page.data.entity.attributes ( Xrm.Page.getAttribute  )   altında bulunan başlıklar ile inceleyeceğiz.

  • getInitialValue
  • getOption
  • getOptions
  • getSelectedOption
  • getText
  • controls
  • getAttributeType
  • getFormat
  • getIsDirty
  • getMaxLength
  • getName
  • getUserPrivilege
  • getMax
  • getMin
  • getPrecision
  • OnChange - addOnChange
  • OnChange - remove
  • OnChange OnChange - fireOnChange
  • RequiredLevel - getRequiredLevel
  • RequiredLevel - setRequiredLevel
  • Value - getValue
  • Value - setValue
  • Value - Set Lookup Attribute Value

getInitialValue

Form üzerindeki picklist veya boolean alanlar için geçerli olan bir fonksiyondur. Form açıldığı zaman fonksiyon içerisinde belirtilmiş olan alanın default değerini bize verir. 

Örnek Kullanım 

Xrm.Page.getAttribute(alan_adı).getInitialValue();

getOption

Form üzerinde bulunan picklist alanlar için geçerli bir fonksiyondur. Parametre olarak verilen value değeri ilgili picklist içerisinde bulunursa geriye bir nesne üzerinde text ve value değerini döner , herhangi bir değer ile eşleşemez ise geriye null olarak dönüş yapar.

Örnek Kullanım

Xrm.Page.getAttribute(alan_adı).getOption(deger);

getOptions

Form üzerinde bulunan picklist alanlar için geçerli bir fonksiyondur. Belirtilen picklist içerisindeki tüm değerleri object[] olarak geri verir.

Örnek Kullanım

Xrm.Page.getAttribute(alan_adı).getOptions();

getSelectedOption

Form üzerinde bulunan picklist alanlar için geçerli bir fonksiyondur. Picklist in seçilen değerini bir nesne üzerinde text ve value değerini döner.

Örnek Kullanım

Xrm.Page.getAttribute(alan_adı).getSelectedOption();

getText

Form üzerinde bulunan picklist alanlar için geçerli bir fonksiyondur. Picklist in seçilen değerinin text bilgisini bize geri döner.

Örnek Kullanım

Xrm.Page.getAttribute(alan_adı).getText();

controls

Form üzerinde bulunan alanların listesini control tipinde bize geri döner. Liste içerisinde bulunan alanların üzerinde işlemler yapabilmemizi sağlar . 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).controls

Form üzerinde bulunan tüm alanları gizlemek için    : SDK.Sample.hideAllAttributeControls(varlık_adı);
Form üzerinde bulunan tüm alanları göstermek için : SDK.Sample.showAllAttributeControls(varlık_adı);

getAttributeType

Form üzerinde olan tüm alanlar için geçerlidir. parametre olarak verilen alanın sistemsel tipini bize string tipinde geri döndürür. 
Veri tipleri : boolean - datetime - decimal - double - integer - lookup - memo - money - optionset - string 

Örnek Kullanım

Xrm.Page.getAttribute(varlık_adı).getAttributeType()

getFormat

Form üzerinde bulunan alanın sahip olduğu format bilgisini string olarak geri döner. 
Veri tipleri : date - datetime - duration - email - language - none - phone - text - textarea - tickersymbol - timezone - url 

Örnek Kullanımı 

Xrm.Page.getAttribute(varlık_adı).getFormat()

getIsDirty

Form üzerinde bulunan alanın üzerinde veri girişi yapılıp yapılmadığının bilgisini bize true / false olarak döner . Tüm alanlar için geçerlidir. 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).getIsDirty()

getMaxLength

Form üzerinde bulunan string ve memo alanlar için geçerlidir. Belirtilen alanın maximum alabileceği değeri bize bildirir. 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).getMaxLength()

getName

Form üzerinde bulunan alanın sistemsel adını almak için kullanılır. Tüm alanlar için geçerlidir. 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).getName()

getUserPrivilege

Form üzerinde belirtilen alan için mevcut crm kullanıcısının yetkilerini bize object olarak geri döner. Gelen değer ile alan üzerinde kullanıcının okuma yazma oluşturma işlemleri yapıp yapamadığı bilgisini almış oluruz. 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).getUserPrivilege()

getMax

Form üzerinde belirtilen alanın maximum değerini bize iletir. money - decimal - integer- double tipindeki alanlar için çalışır. 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).getMax()

getMin

Form üzerinde belirtilen alanın minimum değerini bize iletir. money - decimal - integer- double tipindeki alanlar için çalışır. 

Örnek Kullanım 

Xrm.Page.getAttribute(varlık_adı).getMin()

getPrecision

Form üzerindeki Number alanlar için geçerlidir , belirtilen alanın izin verdiği ondalık rakamları ile birlikte verir. 

Örnek Kullanım 

Xrm.Page.getAttribute(arg).getPrecision()

OnChange - addOnChange

Form üzerinde belirtilen alanın onchange olayını ayarlar . addOnChange içerisine hazırlamış olduğumuz function vererek çalışmasını sağlayabiliriz. Genelde runtime da bir alana onchange olayı atamak istersek kullanılır. 

Örnek Kullanım

 Xrm.Page.getAttribute(arg).addOnChange(function)

OnChange - removeOnChange

Form üzerinde belirtilen alanın üzerinde bulunan onchange olayını kaldırmak için kullanılır , removeonChange içerisinde verilen funtion alan üzerinden ( on change olayından ) kaldırılır. 

Örnek Kullanım 

Xrm.Page.getAttribute(arg).removeOnChange(function)

RequiredLevel - getRequiredLevel 

Form üzerinde belirtilen alanın bize gereklilik bilgisini string olarak döner . Geri dönüş değeri string tipindendir. Tüm crm alanları için geçerlidir. 

  • none : Gereklilik düzeyi yok 
  • required : Zorunlu alan 
  • recommended : Önerilen alan 

Örnek Kullanım 

Xrm.Page.getAttribute(arg).getRequiredLevel()

RequiredLevel - setRequiredLevel 

Form üzerinde belirtilen alanın gereklilik düzeyini ayarlamamıza yarar. Tüm crm alanları için geçerlidir. 

setRequiredLevel() alacağı değerler 

  • none : Gereklilik düzeyi yok 
  • required : Zorunlu alan 
  • recommended : Önerilen alan 

Örnek Kullanım 

Xrm.Page.getAttribute(alan_adı).setRequiredLevel(requirementLevel)

Value - getValue

Form üzerinde belirtilen alanın üzerindeki değeri verir. Tüm crm alanlar için geçerlidir 

Örnek Kullanım 

Xrm.Page.getAttribute(alan_adı).getValue()

Value - setValue

Form üzerinde belirtilen alana değer ataması yapmamıza yarar. Lookup nesnesi haricinde olan alanlar için geçerlidir. 

Örnek Kullanım 

Xrm.Page.getAttribute(alan_adı).setValue()

Set Lookup Attribute Value

Form üzerinde bulunan lookup nesnelerine değer atamak için aşağıdaki function kullanılır. 

function setSimpleLookupValue(LookupId, Type, Id, Name) {
var lookupReference = [];
lookupReference[0] = {};
lookupReference[0].id = Id;
lookupReference[0].entityType = Type;
lookupReference[0].name = Name;
Xrm.Page.getAttribute(LookupId).setValue(lookupReference);
}

Dynamics CRM 365 - Business Rules

Merhaba Arkadaşlar , 

Business kurallar kullanıcıların herhangi bir yazılım bilgisi gerektirmeden formlar üzerinde javascript işlemleri yapabilmesine yarayan bir teknolojidir. Business kurallardan önce dynamics crm sistemlerinde form üzerinde bir alanın girilen bir değere göre zorunlu olması veya form üzerinde pasif olması gibi basit işlemler javascript bilgisi gerektiriyordu.

Business kurallar sayesinde bu tip işlemler biz yazılımcılar içinde zamandan tasarruf etmemize yardımcı olmaktadır.

Business Rules Oluşturmak 

  • Form editör kısmında bulunan Business Rules butonuna basıp sol alt kısımdaki " New Business Rule " butonunu kullanabilir 

  • Solutions içerisinden işlem yapmak istediğimiz entity seçip Business Rules kısmını seçebiliriz.

 

Yukarıda bahsettiğimiz iki yoldan birisi ile business rule oluşturma işlemine başlayabiliriz.

Business rule oluşturmak için karşımıza gelen ekran üzerindeki ; 

1 : Oluşturmak istediğimiz business rule için amacına uygun bir isim vermemiz gereklidir.
2 : Scope bölümünde oluşturmak istediğimiz business rules entity içerisindeki hangi formlarda etkin olacağını belirtiriz.

  •  Entity ( server ve client tüm formlarda )
  •  All forms (client tüm formlarında)
  •  Client tarafında oluşturduğumuz özel form üzerinde

Business Rule tanımına geçtiğimiz zaman ilk önce şartımızı sonrasında şartlarımıza uygun bir durum meydana gelirse yapılmasını istediğimiz işlemleri seçeriz.

Condition kısmında işlemin oluşması için gerekli olan şartlarımızı belirler action kısmında ise yukarıdaki şartlarımız sağlandığı zaman neler yapacağımızı ayarlarız. 

Business Rule İle Neler Yapabiliriz 

  •  Hata mesajı gösterebilir
  •  Alan veya Alanlara değer ataması yapabilir
  •  Alan veya Alanların gereksinim düzeyini değiştirebilir
  •  Alan veya Alanların form üzerinde gizleyebilir
  •  Alan veya Alanlara default değerlerini atayabilir
  •  Alan veya Alanları kitleyebilir veya kilitlerini açabiliriz

Business Rule tanımlamamızı yaptıktan sonra ilgili business rule kullanabilmek için active konumuna almamız gerekmektedir. Active konuma alınmayan business rule tanımları form üzerindeki atama alanlarında görünmeyecektir. 

Active olarak işaretlediğimiz business rule içerisinde herhangi bir değişiklik yapamayız. Eğer yayınladığımız business rule içerisinde düzenleme yapmak istiyorsak deactive konuma geri alıp gerekli düzenlemeleri tamamlayıp yeniden active konumuna almamız gerekmektedir. 

Tasarladığımız ve yayına aldığımız business rule tanımlarını geçerli oldukları form üzerindeki istediğimiz alanlarda çağırmamız gerekecektir. Form'un içerisine tanımlanmış ve hiç bir alana bağlanmamış business rule tanımları çalışmayacaktır. 

Bir örnek ile devam edelim 

Personel adında bir entity oluşturduk bu entity içerisinde Telefon I ve Telefon II adında iki tane zorunlu alanım var ,

Bir business rule tanımı yaparak ;

Eğer : Telefon I üzerinde bir data var ve Telefon II üzerinde data yok ise , Telefon II üzerindeki gereksinim düzeyini kaldırmak istiyorum .

Eğer : Telefon II üzerinde bir data var ve Telefon I üzerinde data yok ise , Telefon I üzerindeki gereksinim düzeyini kaldırmak istiyorum.

Yukarıda hazırlamış olduğumuz business  rule tanımını form üzerinde Telefon I ve Telefon II alanlarına vermemiz yeterli olacaktır.