Asp#net --FileUpload Kullanımı



Link Özellikleri--Html



Bağlantı (Link) Özellikleri

Bağlantılar için HTML'de öğrendiğimiz BODY belirtecinde olduğu gibi
linklerin durumlarına göre farklı özellikler belirleyebiliriz.

a:link : linklerin özellikleri
a:active : aktif linklerin özellikleri
a:hover : mouse link'in üzerine gelince alacağı özellik
a:visited : ziyaretçinin daha önceden ziyaret ettiği linklerin özellikleri

MultiView Kullanımı





Web Sayfası Tema Kullanımı


Web Kontrolü Seviyesinde Tema Kullanımı:
Tema özelliğini sunucu kontrolleri üzerinde de ayarlayabilirsiniz.
 Eğer daha yüksek seviyede bir theme ayarı yaptıysanız , web kontrolünün 
EnableTheming özelliğini false yaparak bu özelliği sunucu kontrolü seviyesinde disable edebilirsiniz.
<asp:RadioButtonList ID="RadioButtonList1" Runat="server" EnableTheming="False" >

Sayfanın başında Theme özelliğini RedTheme olarak ayarladıktan sonra 
RadiButtonList kontrolünün EnableTheming özelliğini false yaptım.
 Böylece bu sunucu kontrolünün sayfa bazında uygulanan tema özelliğini iptal etmiş oldum.
 Daha önce dediğim gibi düşük seviyedeki ayarlar yüksek seviyede yapılan ayarların yerine geçer.

Asp#net -Skin (Dış Görünüm) Dosyası Oluşturmak


Tema klasörünün altında oluşturulacak Skin (Dış Görünüm) dosyası web sunucu kontrolleri
 için görsel özellikler belirtir. Bir tema klasörünün altında çok fazla sayıda Skin dosyası olabilir.
 ASP.NET onları tek dosyaymış gibi okur. 
Skin dosyasını oluşturmak için tema klasörünün üzerinde farenin sağ tuşuna tıklanır 
ve açılan menüden Add New Item seçilir. Skin File şablonu seçilir ve Add butonu tıklanır

Skin dosyası 2 örnek etiket ile gösterilecektir. Bu sayfa istenirse tamamen silinebilir.
 Hangi web sunucu kontrolünün görünümü değiştirilecekse, onlar için etiket oluşturulur.
 Örneğin Button ve Label’lar için

<asp:Button  runat=”server” />
<asp:Label  runat=”server” />

yazılabilir. İstenilen özellikler buraya eklenir. Daha sonra dosya Save komutuyla kaydedilir.
Aynı web sunucu kontrolleri için farklı dış görünüm tanımlayabilmek için SkinId etiketinden faydalanılır.
 İlgili kontrolün özelliklerine SkinId=”renkli” gibi bir etiket eklenirse, bu özellikler
 web sunucu kontrolünün özelliklerinde SkinId özelliği renkli olan kontroller uygulanır. 
SkinId özelliği renkli olmayanlara bu yansıtılmaz.

Sayfa ve Sitelere Tema Ekleme---Asp # net



Tema eklenecek web sayfası Design (tasarım) modunda açılır.
Properties peneceresinden DOCUMENT seçilir ve oradan da Temaözelliği seçilir.
Üç nokta düğmesi tıklanır ve ilişkilendirilecek tema dosyası seçilir.
Tüm web sitesine bir tema uygulamak için, web.config dosyasından yararlanılır.

  <system.web>   </system.web> etiketleri arasına


<system.web>
<pages theme=”tema1” />
</system.web>

yazılarak, örneğin tema1’in tüm sitedeki web sayfalarında geçerli olması sağlanır.
Ayrıca CSS dosyaları tema klasöründe saklanabilir.
Bu sayede temayı kullanan her sayfa, css sayfalarındaki özellikleri de kullanacaktır.

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ı.

GridView İçerisindeki Butona Tıklama--Asp# net



GridView izin onrowcommand olayını ve butonumuzun da CommandName olaylarını kullanıyoruz.Örnek kod asagıdadır.

<asp:GridView ID="gvOdenmemisSatislar" runat="server" DataKeyNames="SatisId"
         onrowcommand="gvOdenmemisSatislar_RowCommand">
        <Columns>
     
            <asp:ButtonField ButtonType="Button" CommandName="Odendi" Text="Ödendi Olarak Kaydet" />
            <asp:BoundField />
        </Columns>
    </asp:GridView>



  protected void gvOdenmemisSatislar_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Odendi")
        {
            try
            { // butona tıklayınca olacaklar
                int index = Convert.ToInt32(e.CommandArgument);

                int satisId = Convert.ToInt32(gvOdenmemisSatislar.DataKeys[index].Value);

                OdendiOnayla(satisId);

            }
            catch (Exception ex)
            {

                throw ex;
}

GridView içerisindeki TextBox ve Label İşlemleri(Javascript)



<script language="javascript" type="text/javascript">
      function NetFiyatHesapla(txtBox) {

          var miktar = null;
          var iskonto = null;
          var fiyat = null;
          var rowid = parseFloat(txtBox.title);         

          var grid = document.getElementById('<%=this.grid_Product.ClientID %>');

          if (grid.rows.length > 0) {
          //Label dan deger alınıp sfiyat a atanıyor.
              var sfiyat = grid.rows[rowid].cells[2].children[0].childNodes[0].nodeValue;
         //TextBox dan deger alınıp siskonto ve smiktar a atanıyor.
              var siskonto = grid.rows[rowid].cells[3].children[0].value;
              var smiktar = grid.rows[rowid].cells[4].children[0].value;

              if (sfiyat != "" && siskonto != "" && smiktar != "") {
                  var fiyat = parseFloat(sfiyat);
                  var iskonto = parseFloat(siskonto);
                  var miktar = parseFloat(smiktar);
              }
         
          }
          
          if (fiyat != null && iskonto != null && miktar != null && miktar != NaN) {
              var netFiyat = (fiyat * (100 - iskonto) / 100) * miktar;
          
              grid.rows[rowid].cells[5].children[0].value = netFiyat.toString();
              
          }
      }
  </script>

Javascripti textbox ın onchange olayında cagırıyoruz ve fonksiyona textbox ın kendisini yolluyoruz.

<asp:TextBox id="txtBox" runat="server" onchange="NetFiyatHesapla(this)
">
  
</asp:TextBox>

Asp#NET de TextBox a Sadece Rakam ve Nokta Girebilme(Javascript)


Javascript :
     <script language='javascript' type='text/javascript'>
        
        function onlyNumbers(evt) {
            var e = event || evt; // for trans-browser compatibility
            var txt = e.srcElement;
            var val = txt.value;
            if (val.indexOf('.')!=-1 && e.keyCode == 46)
                return false;
            var charCode = e.which || e.keyCode;

            if (charCode == 46 || (charCode >= 48 && charCode <= 57))
                return true;

            return false;
    
    </script>

Not :Charcode==46 Nokta dır. 48 ile 57 arası da 0 dan 9 a kadar olan rakamlardır.

Asp tarafındaki sayfamızda javascripti aşağıdaki gibi çağırıyoruz.

  <asp:TextBox ID="txt_ProductPrice" runat="server" Width="120px" Height="20px" 
                 AutoPostBack ="true" onkeypress="return onlyNumbers();" ></asp:TextBox>

GridView ile çalışmak ve püf noktaları



Uzun bir aradan sonra kontrollerimizi tanımaya kaldığımız yerden devam ediyoruz. Ana hatlarıyla anlatmaya
 çalışacağım kontrol namı diğer GridView1 :) Çok fazla detaya girmeden en sık kullanılan özelliklerini ve
 jQuery ile birlikte neler yapabileceğimize vakit kaybetmeden bir göz atalım.

GridView, bir veri kaynağından gelen veriyi ekrana liste şeklinde basan kontrolümüz. Bir çok yerde kullandığımız 
bu kontrolde, sayfalama ve sıralama işlemlerini rahatlıkla yapabiliyoruz.
Kontrolümüzü <asp:GridView runat=”server” ID=”GridView1″></asp:GridView> şeklinde ekliyoruz.
Gridimizi şekillendirmek için ana hatlara sitil tanımlaması yapabiliyoruz. Nedir bu ana hatlar, headerrow,footer ve
 pagerstyle. Bunları elle manuel stil tanımlaması yapabildiğimiz gibi style classı da atayabiliyoruz.
 Eğer elle stil yazarsak gridimizi oluşturan html çıktısında fazlasıyla kod tekrarı olur, bu ve yönetilebilirlikten 
dolayı class atamak en performanslı çözüm olacaktır.

<asp:GridView runat="server" ID="GridView1">
    <HeaderStyle/>
    <RowStyle/>
    <AlternatingRowStyle/>
    <FooterStyle/>
    <PagerStyle/>
</asp:GridView>

Şeklinde gridimizi oluşturuyoruz, sonrasında herbir kalıp için css mizi yazıyoruz.

<style type="text/css">
    body{font-size:12px;font-family:Arial}
    /* GridView */
    .grid caption, tbody, tfoot, thead, tr, th, td,form {
        margin: 0;
        padding: 2px;
        border: 0;
        outline: 0;
        color:#333;
        font-size:12px;
    }
    .grid a:hover{color:#008aeb}
    .grid{border:none;width:100%;}
    .grid .header{background-color:#e5e5e5;height:30px;cursor:pointer;text-align:left}
    .grid .pager table{background-color:#333333;margin:5px auto}
    .grid .pager table td{font-size:15px;background-color:#3e3e3e}
    .grid .pager table td span{display:block;width:25px;height:20px;text-align:center;
            color:#868686;background-color:#333333}
    .grid .pager table td a{display:block;width:25px;height:20px;text-align:center;color:White}
    .grid .pager table td a:hover{background-color:#333333}
    .grid .row{}
    .grid .alternate{background-color:#f6f6f6;}
    .grid .alternate:hover,.grid .row:hover{background-color:#a8a8a8;cursor:pointer;}
    .grid .footer{background-color:#e3f1f8;font-weight:bold;}
</style>

Son olarak gridimize class ları veriyoruz ve sitil olayını sonlandırıyoruz.

<asp:GridView runat="server" ID="GridView1" CssClass="grid">
    <HeaderStyle CssClass="header" />
    <RowStyle CssClass="row" />
    <AlternatingRowStyle CssClass="alternate" />
    <FooterStyle CssClass="footer" />
    <PagerStyle CssClass="pager" />
</asp:GridView>

?
Gördüğünüz gibi çok kolay bir şekilde gridimizi şekillendirdik. Hız kesmeden birde sayfalama işleminin 
nasıl yapıldığınabir bakalım. Bunun için ilk önce gridimizin sayfalama özelliğini 
AllowPaging=”true” diyerek aktif ediyoruz.
 Sonrasında olaylar (events) kısmından onpageindexchanging olayına çift tıklıyor ve ilgili olayı 
gerçekleştirecek methodu oluşturuyoruz. Kodumuz şu şekilde..

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex; // yeni sayfa indexini gridimizin 
                                                 PageIndex değerine setliyoruz.
    GridViewDoldur(); //gridimizi tekrar dolduruyoruz.
}

?
Kodlarımızın tamamı şu şekilde.

<asp:GridView runat="server" ID="GridView1" CssClass="grid" AllowPaging="true" 
onpageindexchanging="GridView1_PageIndexChanging">
    <HeaderStyle CssClass="header" />
    <RowStyle CssClass="row" />
    <AlternatingRowStyle CssClass="alternate" />
    <FooterStyle CssClass="footer" />
    <PagerStyle CssClass="pager" />
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GridViewDoldur();
    }
}

protected void GridViewDoldur() {
    GridView1.DataSource = db.DTGetir("Select top 100 * from EKOTEKNOBAYILOG
order by id desc");
    GridView1.DataBind();
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    GridViewDoldur();
}
?
?
2 satırda sayfalama işlemimizide yapmış olduk. Bu şekilde ki bir sayfalama işlemi küçük projelerde 
rahatlıkla kullanılabilir fakat kayıt sayısı arttıkça performansda düşer. Neden düşer ? Çünkü ilk anda
 veri kaynağındaki tüm veriyi önce gridimize yüklüyoruz ve sayfalamayı grid içerisinde yapıyoruz.
 Bu durumun tersi olması durumunda performans artacaktır.
 Şimdide footer yani gridin en alt kısmının kullanıma bir bakalım. Neden footer kullanmamız lazım 
onuda hemen söyleyeyim. İlk sebep, hizalama problemlerinin çıkmaması ve haliyle çok daha 
derli toplu bir görüntü elde etmemiz. İkinci ve bence en önemlisi sebep ise gridview içerisindeki 
veriyi word, excel yada farklı bir formatta dışarı aktarmak istediğimizde hiç bir tasarımsal 
sıkıntının doğmaması. Footerı göstermek için ilk önce ShowFooter=”true” yapıyoruz.
 Artık footerimizi kullanabiliriz. Mantığını anlamak adına bir örnek yapalım.

?


protected void GridViewDoldur() {
    GridView1.DataSource = db.DTGetir("Select top 10 * from EKOTEKNOBAYILOG order by id desc");
    GridView1.DataBind();
    decimal toplamSayi = 0; //burada basit bir toplama işlemi yapıyoruz. 6. sutundaki verileri alt alta topluyoruz.
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
        toplamSayi += Convert.ToDecimal(GridView1.Rows[i].Cells[6].Text);
    }
    GridView1.FooterRow.Cells[3].Text = "Toplam: " + GridView1.Rows.Count + " kayıt."; // kaçtane kayıt 
olduğunu footerımızın 3. sutununa yazıyoruz.
    GridView1.FooterRow.Cells[6].Text = toplamSayi.ToString(); // topladığımız değerleri footerdaki
 6. sutuna yazıyoruz.
}
Görüldüğü üzere footer kullanımıda oldukça basit. Herşey gayet derli toplu ve kontrolümüz altında. 
Şuana kadar ki örneklerimizi gridviewımızı otomatik doldurarak yaptık, şimdide veri kaynağından gelen 
veriyi nasıl özelleştirebiliriz buna bir bakalım. İlk önce sutunlarımızı kişiselleştirip istediğimiz sutunları alalım.
 Bu işlem için önce AutoGenerateColumns=”false” yapmamız gerekiyor, bunun nedenide bu işlemi 
biz manuel olarak elle yapacak olmamız. Örnekte kendi verikaynağımdaki isimleri kullanacağım.
<asp:GridView runat="server" ID="GridView1" CssClass="grid" ShowFooter="true"
AutoGenerateColumns="false">
    <HeaderStyle CssClass="header" />
    <RowStyle CssClass="row" />
    <AlternatingRowStyle CssClass="alternate" />
    <FooterStyle CssClass="footer" />
    <PagerStyle CssClass="pager" />

    <Columns>
        <asp:BoundField DataField="id" HeaderText="Id" />
        <asp:BoundField DataField="tarih" HeaderText="Tarih" />
        <asp:BoundField DataField="sessionid" HeaderText="Oturum Kimliği" />
    </Columns>

</asp:GridView>
?










Gördüğünüz üzere Columns adında bir bölüm oluşturup altına istediğimiz sutunları tanımladık.
 Şimdi verimizi biçimlendirelim (format). Ne demek bu ? Tarih, sayı vb.. verileri kendi ihtiyacımız doğrultusunda 
düzenleyebilmemize olanak sağlayan yapılardır. Örneğin; veritabanından gün/ay/yıl şeklinde gelen
 bir tarihi ay.gün.yıl şekline çevirmek gibi..
 Burada şöyle bir püf noktası bulunuyor, verikaynağında ki veri tipinin tarih yada sayı olması gerekiyor. 
Yani veri kaynağında string şeklindeki bir tarihe yada sayıya direk biçimlendirme yapamıyoruz.
 Kendi oluşturduğumuz sutunlarda DataFormatString özelliğini kullanarak çok kolay bir şekilde istediğimiz
 biçimlendirmeyi rahatlıkla yapabiliyoruz. 
DataFormatString=” 0:n}”, DataFormatString=”{0:MM.dd.yyyy}” gibi.. Biçimlendirme işlemleri ve
 parametleri hakkında burayı ziyaret edebilirsiniz.
Herşey iyi güzel ama verikaynağında olmayan bir alanı gridimize nasıl ekleyeceğiz diye sorabilirsiniz.
 Bu noktada imdadımıza TemplateField koşuyor. Hemen örneğimize bakalım.

?



<asp:GridView runat="server" ID="GridView1" CssClass="grid" AutoGenerateColumns="false">
            <HeaderStyle CssClass="header" />
            <RowStyle CssClass="row" />
            <AlternatingRowStyle CssClass="alternate" />
            <FooterStyle CssClass="footer" />
            <PagerStyle CssClass="pager" />
            <Columns>
                <asp:BoundField DataField="id" HeaderText="Id" />
                <asp:BoundField DataField="tarih" HeaderText="Tarih" />
                <asp:BoundField DataField="sessionid" HeaderText="Oturum Kimliği" 
                  DataFormatString="{0:n}" />
                <asp:TemplateField HeaderText="Bu bir textbox">
                    <ItemTemplate>
                        <asp:TextBox runat="server" ID="TextBox1" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Bu bir literal">
                    <ItemTemplate>
                        <asp:Literal runat="server" ID="Literal1" Text='<%#Eval("id") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <ItemTemplate>
                        <a href="">Detay</a>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
Yukarıda da gördüğünüz gibi TemplateField içine ItemTemplate ile istediğimiz kontrolü yada herhangi birşeyi rahatlıkla girdik. Burada dikkat ederseniz Eval(“id”) şeklinde bir kullanım gerçekleştirdik. Eval veri kaynağımızdan manuel bir şekilde 
veriyi gridimizin içine çekmemize olanak sağlayan bir fonksiyon. Şöyle bir soru gelebilir buraya textbox ları ekledik 
fakat içerisindeki veriyi nasıl alabiliriz ? Bu sorunun cevabını bir sonraki yazımda yazacağım.
Gridview in çok fazla özelliği bulunuyor. Bu özelliklere verileri güncelleme ve silme gibi olaylarda 
dahil fakat ben bu özelliğin kullanılmasını çok sağlıklı bulmuyorum. Neden bulmuyorum, çünkü 
sayfa yeniden yükleniyor, haliyle griddeki verilerde yeniden yükleniyor, bu son son derece 
gereksiz ve verimsiz. Bu düzenleme işlemi için hem grid tarafında hemde kod tarafına bir sürü 
kod yazmamızın gerekmeside ayrı bir handikap. Düzenleme işlemi için jQuery ile veriyi olduğu yerde
 düzenleme (inline edit) yöntemini hem daha kolay kullanılabilir hemde maliyetinin daha az 
olduğunu düşünüyorum. Bu konuyu ilerleyen günlerde ele alacağım. 
Dipnot olarak burada dursun istedim.
Footer ile ilgili aklıma bir şey daha geldi. Gridimize footer ekledik fakat patronumuz yada iş verenimiz
 bize footerin aynısının headerında üstünde olmasını istedi. Böyle bir istek neden gelir ?
 Gridimizde çok fazla satır olduğunu düşünürsek, 
alt toplamlar yada diğer bilgilere erişmek için kullanıcı sayfayı dibe kadar çekmek zorunda kalacaktır.
 Bu işi yapmanın bir çok yolu bulunuyor. Tabiri caizse bir gumul kodun yazılacağı çok can sıkıcı
 bir durumdur bu. 
Bu noktada imdadımıza jQuery yetişiyor. Hemde ne yetişme, bir satırda olayı çözüyoruz. 
Footerımıza bir class atamıştık, ilk önce footerımızı seçiyoruz sonrasında klonluyoruz (clone)
 ve headerımızın önüne ekliyoruz. 
Bu sayede footerda değişiklikler olduğunda aynen headerada uygulanmış oluyor.
 Sürekli footera ayrı kod headerdakine 
ayrı kod yazmaktan kurtulmuş oluyoruz.


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
        type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $(".grid .header").before("<tr class='footer'>" + $(".grid .footer").clone().html() + "</tr>");
    })
</script>
?
Gridview ile ilgili yazacaklarım şimdilik bu kadar, umarım anlaşılır bir yazı olmuştur. Yukarıda da belirttiğim gibi gridview
 ile ilgili yazacak çok fazla şey bulunuyor. Ben en ana hatlarıyla ve en sık kullanılan özelliklerini anlatmaya çalıştım.
 İlerleyen günlerde daha farklı özelliklerini ele almaya çalışacağım, herkese kolay gelsin.

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;
}