C#-GridView Filtreleme


Aslında işlem gridview e datasource olarak verilen datatable ın degısmesıdir.
Ilk bas daha onceden gridview e atanan source u Session da saklamıstık.Şimdi butona tıklamakla Session daki datatable ı yeni bir datatable a atarız.Daha sonra bu datatable ı Clone larız.Foreach dongusu ıcınde filtrelenecek sutuna göre arama yaparız.Eger filtrelenecek text le row daki kolonun degerı aynıysa o degeri yeni datatable ımıza eklerız.ve o datatable ı gridview immize datasource olarak veirriz.Boylece filtrelemis oluruz.Eger eski gridview i tekrar geri getirmek istiyorsak ilk bas Session da bulunan datatable gridview imize datasource olarak vermemiz yetecektir.

btn_Filter adlı butonun tıklanmasıyla calsacak kod blogu.
protected void btn_Filter_Click(object sender, EventArgs e)
        {
            if (grid_Product != null && grid_Product.Rows.Count != 0)
            {
                DataTable dtable = new DataTable();
                DataTable currentDTable = (DataTable)Session["GridProducts"];

                if (txt_FiltrelenecekText.Text != string.Empty)
                {
                    if (currentDTable != null && currentDTable.Rows.Count != 0)
                    {
                        dtable = currentDTable.Clone();
                        Boolean urunVarMi = false;
                        var index = 1;
                        foreach (DataRow row in currentDTable.Rows)
                        {
                            if (row["Product_Name"].ToString() == txt_FiltrelenecekText.Text)
                            {
                                row["Index"] = index.ToString();
                                dtable.ImportRow(row);
                                urunVarMi = true;
                                index++;
                            }
                        }
                        if (urunVarMi == true)
                        {
                            grid_Product.DataSource = dtable;
                            grid_Product.DataBind();
                        }
                        else
                        {
                            EkranaMesajYaz("Product is not found in list.");
                        }
                    }
                }
                else
                {
                    EkranaMesajYaz("Filter text is empty");
                }
            }
            else
            {
                EkranaMesajYaz("Product List is null");
            }

        }
Sorularınızı gkhnmnts@gmail adresine atabilrsiniz.

CRM 2011-Quote Detail Olusturma (Teklife Ürün Ekleme)


QuoteDetail detail = new QuoteDetail();

 detail.ProductId = urun.ToEntityReference();
 detail.UoMId = priceListItem.UoMId;
 detail.Quantity = miktar;
 detail.QuoteId = teklif.ToEntityReference();
 detail.ManualDiscountAmount = new Microsoft.Xrm.Sdk.Money(100,43);
 detail.IsPriceOverridden = true;
 detail.PricePerUnit = new Microsoft.Xrm.Sdk.Money(fiyat);

  //detail.ExtendedAmount = new Microsoft.Xrm.Sdk.Money(30);

  Guid _teklifurunId = service.Create(detail);

Burada dikkat edilmesi gerekenler;
UoMId=Teklifin fiyat listesindeki ürün kaleminin uomId sidir.
IsPriceOverridden=true =>FiyatListesiKalemindeki ürün degerını kullanmayıp yanı atanan fiyatı kullanır.

Yukarıdaki kodda urun degiskeni Product tipinde,teklif değiskeni de Quote tipindedir.

C#- DATATABLE KULLANIMI

   DataTable dt = new DataTable("UrunTablosu");
/*UrunTablosu adında DataTable tanımlandı.*/

/*Şimdi datatable ın kolonlarını ve kolon tiplerini olusturalım*/

    dt.Columns.Add(new DataColumn("Product_ID", typeof(int)));
    dt.Columns.Add(new DataColumn("Product_Price", typeof(decimal)));
    dt.Columns.Add(new DataColumn("Index", typeof(int)));
    dt.Columns.Add(new DataColumn("Product_Type", typeof(string)));
    dt.Columns.Add(new DataColumn("Product_Name", typeof(string)));

   DataRow row = dt.NewRow();/*DataTable ın ilk satırını olusturalım.*/

  row[0] = 12345; /*1.satırdakı ilk kolona verilecek deger.*/
  row[1] = 32.50;/*1.satırdakı ikinci kolona verilecek deger.*/
  row[2] = 1;/*1.satırdakı üçüncü kolona verilecek deger.*/
  row[3] = Marketing;/*1.satırdakı dördüncü kolona verilecek deger.*/
  row[4] =urunAdi;/*1.satırdakı son kolona verilecek deger.*/
  
dt.Rows.Add(row);/*Olusturdugumuz satırı Datatable a ekliyoruz.*/

C#-Web Application Response.Redirect()


Response redirect kullanılarak herhangi bir sayfanın acılması saglanır.Yapacagınız tek sey Response.Redirect e acılacak sayfanın url sini vermektir.

Örnek:
string url="http://gkhnmnts.blogspot.com"
Response.Redirect(url);

C#- Web Application Kod Kısmında Ekrana Karakter Basma




           /* Page.ClientScript.RegisterClientScriptBlock(typeof(string), "ScreenMessage", "<script language='javascript'>alert('" + HosGeldiniz+ "');</script>");*/


mesaj değişkenindeki degerler sayfanın kod kısmında kullanılarak ekrana mesaj verilmesi saglanır.

CRM 2011-IFrame Link Verme


Asagısaı javascript fonksıyonu sayfanın onLoad , onSave ya da fieldların onChange ine yazılabilir.
function IFrameLinkSet() {

    var entityid = Xrm.Page.data.entity.getId();
    var pricelistValue = new Array(); /*Guid deger alınıyor.*/
    pricelistValue = Xrm.Page.getAttribute("pricelevelid").getValue();
    var pricelistid = pricelistValue != null ? pricelistValue[0].id : null;

    var formType = Xrm.Page.ui.getFormType();
    if (formType == 2) {
        if (entityid != null && pricelistid != null) {

     /*IFrame de acılacak sayfanın adresi veriliyor.Ve adresle birlikte sayfaya veri gönderiliyor.*/
            var url = "http://localhost:8989/SalesAddProduct/SalesOrderProductView.aspx?entityid=" + entityid + "&pricelistid=" + pricelistid;

/*Link IFrame e setSrc() kullanılarak verildi.*/
            Xrm.Page.getControl("IFRAME_SalesOrderDetailsView").setSrc(url);
        }
    }
}

C# da Geriye Birden Fazla Parametre Döndürme


Normal değişken türleri kullanılarak geriye string , integer , double vs. türler geriye döndürülür.Biz şimdi hem integer hem de string değerin aynı anda bir metot tarafından geriye döndürülmesini göreceğiz.
(Kac parametre gönderilecegi bizim elimizdedir.)
Şimdi bu işi nasıl yapacagımıza gelelim.Bu olayı gerceklestırmek için bir class olusturacagımız.ve parametrelerımızı içine yazacagız.Bu classı kullanarak geriye verilerımızı gonderecegız.

Örnek Class
 public class Result
    {
        private int kisiYas;
        private string kisiAdi;/*field ismi üzerinde Ctrl +R+E tuslarına basılarak Property ler olusturulur.*/

        public string KisiAdi  
        {
            get { return kisiAdi; }
            set { kisiAdi= value; }
        }

        public int KisiYas
        {
            get { return kisiYas; }
            set { kisiYas= value; }
        }
    }
Class ın Kullanılması
Öncelikle Classımızın adında geriye donus yapan bir metot yazılır.
public class Kisi{
public static Result BirdenFazlaParametreDondur()
{
    Result rs=new Result();
    rs.KisiYas=5;
    rs.KisiAdi="Gökhan Mentese";

   return rs;
}
}
Kod anında metotun kullanımı
Result kisiBilgileri=Kisi.BirdenFazlaParametredondur();
string ad=kisiBilgileri.KisiAdi;
int yas=kisiBilgileri.KisiYas;

Sorularınızı gkhnmntsqgmail adresine atabilirsiniz.

Crm 2011-ProductPriceLevel (Fiyat Listesi Kalemi) Bulma


Fiyatlistesi id ve ürün id ye göre fiyatlistesi kalemi bulma


Metot geriye productpricelevel döndürür.
public static ProductPriceLevel FindProductPriceLevel(Guid pricelevelid, Guid productId, IOrganizationService ser)
        {
            try
            {
                QueryExpression sorgu = new QueryExpression()
                {
                    EntityName = "productpricelevel",
                    ColumnSet = new ColumnSet() { AllColumns = true },
                };

                FilterExpression anaFilter = new FilterExpression(LogicalOperator.And);

                ConditionExpression sart1 = new ConditionExpression("pricelevelid", ConditionOperator.Equal, pricelevelid);
                ConditionExpression sart2 = new ConditionExpression("productid", ConditionOperator.Equal, productId);

                anaFilter.AddCondition(sart1);
                anaFilter.AddCondition(sart2);

                sorgu.Criteria.AddFilter(anaFilter);

                EntityCollection ec = null;

                ec = ser.RetrieveMultiple(sorgu);

                if (ec != null)
                {
                    if (ec.Entities.Count == 1)
                    {
                        return (ProductPriceLevel)ec.Entities[0];
                    }
                    else
                    {
                        return new ProductPriceLevel();
                       /*Eger fiyat listesinde ilgili üründen bir tane varsa geriye döndürür.Ürün yoksa ve birden fazlaysa geriye bos productpricelevel döndürür.*/
                    }
                }
                else
                {
                    return new ProductPriceLevel();
                }
            }

            catch (Exception)
            {
                return new ProductPriceLevel();
            }
        }
Sorularınızı gkhnmnts@gmail adresine atabilirsiniz.

Crm de Guid Bir Değere Göre Entity nin Bulunması


Aşagıdaki metoda veriyi çekeceğimiz entity nın adını,hangi field a göre sorgunun cekilecegi ve neye göre çekilecegi degerleriyle birlikte IOrganization nesnesini göndererek verimizi cekebiliriz.

public class Metotlar{
   public static Entity GetLookUp(string entityname, Guid id, string conditionField, IOrganizationService service)
        {
            try
            {
                QueryExpression sorgu = new QueryExpression()
                {
                    EntityName = entityname,
                    ColumnSet = new ColumnSet() { AllColumns = true },/*Tum kolonlar cekilir.*/
                };

                FilterExpression anaFilter = new FilterExpression(LogicalOperator.And);

                ConditionExpression sart1 = new ConditionExpression(conditionField, ConditionOperator.Equal, id);
                anaFilter.AddCondition(sart1);

                sorgu.Criteria.AddFilter(anaFilter);

                EntityCollection ec = null;

                ec = service.RetrieveMultiple(sorgu);

                if (ec != null)
                {
                    if (ec.Entities.Count > 0)
                    {
                        return ec.Entities[0];
                    }
                    else
                    {
                        return new Entity();
                    }
                }
                else
                {
                    return new Entity();
                }
            }

            catch (Exception)
            {
                return new Entity();
            }
        }
}
Örnek:
IOrganizationService crmService=DynamicCrmBaglanma.GetCrmService();
/*Crm e baglanılır.DynamicCrmBaglanma classı blog da bulunmaktadır.*/
if(crmService !=null){
Guid _productId=guid.NewGuid();
/*Ben yeni bir guid deger olusturarak parametre olarak gönderdim.*/
Entity product=Metotlar.GetLookUp(Product.EntityLogicalName,_productId,"productid",crmService);
if(product !=null && product.Id !=Guid.Empty){
Product urun=(Product)product;/*Entity Product a cast edildi.*/
}
}

GridView de Bir Sutundaki Veriye Göre Satırı Disable Etme


Aşağıdaki metota gridview imizi gondererek satırımızı disable edebiliriz. 
public void GridViewRowDisabled(GridView gridView)
        {
            try
            {
                if (gridView != null && gridView.Rows.Count != 0)
                {//GridView de deger varmı kontrol ediliyor.
                    for (int i = 0; i < gridView.Rows.Count; i++)
                    {//GridView satır satır dolasılarak veriye gore disable ediliyor.
                        HiddenField hidden_ProductType = gridView.Rows[i].FindControl("hidden_ProductType") as HiddenField;
//GridView satırında ekranda görülmeyen ama arka tarafta saklanan deger okunuyor.
                        if (hidden_ProductType.Value.ToUpper().Trim() == "SPACE")
                        {//Okunan deger harfleri upper yapılarak SPACE mi kontrol ediliyor.Burada 
                            gridView.Rows[i].Enabled = false;
/*ProductType=SPACE se o satır disable edildi.*/
                        }
                    }
                }
            }
            catch (Exception )
            {
                throw;
            }
        }
Anektot:
HiddenField
HiddenField lar ekranda görülmezler.Sayfa üzerinde veri saklamada kullanılabilir.Value özelliginde veri saklanabilir.
ToUpper().Trim()
string bir deger hem büyük harfli haline donusur ve daha sonra başında ve sonundaki bosluk karakterleri atılır.String eşlemede kullanılması yararlıdır.

CRM 2011 - INVOICE CANCELED


Şimdi sizlere formun ribbonundan bir butona tıklanarak invoice un nasıl canceled edilecegini anlatacağım.
İlk olarak formun ribbonuna bir buton ekleyelim ve javascript yazarak bu butona tıklanınca bir aspx sayfasına yönlendirilmesini sağlayalım.(ribbona buton ekleme ve bunun calıstırılacagı javascript dosyasının nasıl verildiğini bir başka yazımda anlatmıştım. )

namespace TestCRM.InvoiceInterface
{
    public partial class InvoiceCanceled : System.Web.UI.Page
    {
        IOrganizationService crmService;
//İlk olarak bir web sayfasından aspx sayfasına veri göndermeyi ve veri alıs verişini saglamak için Render metodunu kullandık.Gonderdıgımız veriyi queryString ile okuyoruz.
Verinin javascriptle nasıl yollandıgı sayfanın en alt kısmında bulabilirsiniz.
        protected override void Render(HtmlTextWriter writer)
        {
            Response.Clear();
            Response.ContentType = "text/xml";
            string entityID = Request.QueryString["entityid"];
            Session["entityid"] = entityID;// entity id yi postback olsa da kullanabiliyoruz.Sayfa kapanana kadar session da saklayıp ,istediğimiz zaman kullanabiliriz.
            if (!string.IsNullOrEmpty(entityID))
            {
                CanceledInvoice();
            }
            else
            {
                Response.Redirect("../ErrorPage.aspx");
//entity id javascript ile gönderilemezse hata sayfasına yonlendırıyoruz.
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
            }
        }
        private void CanceledInvoice()
        {
            string invoiceId = (string)Session["entityid"];
            Guid _invoiceId = Guid.Empty;

            if (!string.IsNullOrEmpty(invoiceId))
                _invoiceId = Guid.Parse(invoiceId);
            if (_invoiceId != Guid.Empty)
            {
//Crm e baglanıyoruz.
                crmService = DynamicCrmConnection.GetCrmService();
                if (crmService != null)
                {
                    Invoice invoice = (Invoice)crmService.Retrieve("invoice", invoice.Id, new ColumnSet() { AllColumns=true});
                    if (invoice != null && invoice.Id != Guid.Empty)
                    {
                        if (invoice.StateCode ==InvoiceState.Active)
                        {//invoice active se cancel edilebilir.
                            try
                            {
//SetStateRequest ile invoice un id si ve logical name ini vererek cancel edebiliyoruz.
//Statecode=3 invoice formunun canceled oldugunu gosterir.
//Status  =100003 de canceled formunun bir durumudur.
                                SetStateRequest setStateRequest = new SetStateRequest()
                                {
                                    EntityMoniker = new EntityReference
                                    {
                                        Id = invoice.Id,
                                        LogicalName = "invoice"
                                    },
                                    State = new OptionSetValue(3),// inactive
                                    Status = new OptionSetValue(100003)// qualified
                                };
                                crmService.Execute(setStateRequest); 
                            }
                            catch (Exception)
                            {
//Hata alınmazsa invoice canceled olmus demektir.  
                            }
                        }
                    }
                }
            }
        }
    }
}

Javascript

function CanceledInvoice() {

    var entityid = Xrm.Page.data.entity.getId();
/*invoice  formunun id si alınır ve XML.Dom kullanılarak aspx sayfasına veri gönderilir ve geriye veri okunur.*/
    var xmldoc_sendApp = new ActiveXObject("Microsoft.XMLDOM");
    xmldoc_sendApp.async = false;
    xmldoc_sendApp.load("http://denemehost:8989/InvoiceInterface/InvoiceCanceled.aspx?entityid=" + entityid);
/*yukarıdakı url sayfanızı host ettiğiniz sayfanın adresidir.Ben IIS teki yolunu verdim.8989 ise sayfanın bulundugu hostdakı port numarasıdır.*/
    var logMessage = xmldoc_sendApp.selectSingleNode("logmessage");
/*logmessage tagları arasında geriye veri gönderilir.*/
    if (logMessage != null) {
        if (logMessage.text != "") {
            alert(logMessage.text);
            window.location.reload();//Sayfa refresh olur.
        }
    }
}
Sorularınızı gkhnmnts@gmail adresine atabilirsiniz.