20 Ocak 2013 Pazar

RTTI ile sadece o sınıfa ait methodları listelemek

RTTI ile bir sınıfa ait methodları listeliyebilmemin mümkünatı aşikardır.Lakin şöyle bir durum var.
Eğer methodlarını listelemek istediğiniz sınıf , birden çok sınıftan kalıtıla gelinerek yazılmış bir sınıfsa;

Alt sınıfın miras alınabilen tüm methodları,üst sınıfında methoduymuş gibi oluyor.
GetMethods ile o sınıfa ait methodları, listelemek istediğinizde taban sınıftaki methodlarda listeleniyor.
Haliyle bu methodlar ne ayak diyorsunuz.

Eğer kendi eklediğiniz methodları listelemek istiyorsanız....
var
  cntx: TRttiContext;
  typ: TRttiType;
  method: TRttiMethod;
begin
  cntx := TRttiContext.Create;
  typ := cntx.GetType(TServerMethods1);
  lBoxMethods.Items.Clear;
  for method in typ.GetMethods do
  begin
    if method.Parent.Name = typ.Name then
      lBoxMethods.Items.Add(method.Name);
  end;
end;

Nerden icab ettiğine gelince...
procedure TForm1.lBoxMethodsDblClick(Sender: TObject);
var
  methodName, url: string;
begin
  methodName := TListBox(Sender).Items[TListBox(Sender).ItemIndex];

  StartServer;
  url := Format('http://localhost:%s/datasnap/rest/TServerMethods1/' +
    methodName, [EditPort.Text]);
  ShellExecute(0, nil, PChar(url), nil, nil, SW_SHOWNOACTIVATE);
end;

İyi çalışmalar...

9 Kasım 2012 Cuma

Web Servisten Class Döndürmek

.net xml web servislerinden class döndürmek için,döndüreceğimiz o class'ı Serializable attribute ile işaretlemeliyiz.

 Product.cs

    [Serializable]
    public class Product
    {
        public int RID { get; set; }
        public String BARCODENO { get; set; }
        public String PRODUCTNAME { get; set; }
        public decimal UNITPRICE { get; set; }
        public int AMOUNT { get; set; }
    }
     [WebMethod(Description = "Barkod Numarasından Ürün Bilgisi Sorgulama")]
     public Product FindProductByBarcode(String BarCodeNo)
     {
        /*Burada herhangi bir verikaynağından çekildiğini varsayalım...*/
        Product product = new Product();
        product.RID = 1;
        product.BARCODENO ="6285865292005";
        product.PRODUCTNAME = "Ürün 1";
        product.UNITPRICE = 50;
        product.AMOUNT = 50;
        return product;
     }

Sorgudan dönen xml sonuç :


  
    
    
      1
        86919937
        L&M
        5.0000
        50
       
    
  


Kolay gelsin.

6 Kasım 2012 Salı

Android .Net XML Web Service Client Uygulama (CRUD) Demo

.Net xml web servislerine andorid ortamından erişim ile ilgili geliştirdiğim bir prototip.
tbperson(rid,firstname,lastname) alanlarına sahip bir sql server veritabanı tablosu üzerinde,web service kullanarak ekleme,silme,güncelleme,listemele yapan bir uygulama.

Web Service Methodlarımız :


Burada GetPersonList methodu geriye aşağıdaki xml veriyi döndürüyor.

  
  	
  		
  			
		  		
		  			
		  				
		  						
		  							
		  								
		  									
		  									
		  									
		  								
		  							
		  						
		  					
		  				
		  			
		  		
		  		
		  			
		  				1ismailkocacan
2kemalbayat
3ferhatpekdemir

Demo :



Gelişmeleri aktarmaya devam edeceğiz.

4 Kasım 2012 Pazar

.Net WebMethoda Açıklama Bilgisi Eklemek

.net web servis methodlarının WebMethod attribute'nun Description özelliğine methodunuz ile ilgili açıklamaları aşağıdaki gibi yazabilirsiniz.
    public class DBWebService : System.Web.Services.WebService
    {
        [WebMethod(Description="Personel Listesini Dataset olarak geriye döndürür.",EnableSession=false)]
        public DataSet GetPersonList()
        {
            DataSet dataset = new DataSet();
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["str"].ConnectionString))
            {
                connection.Open();
                using (SqlDataAdapter adapter = new SqlDataAdapter("select * from tbperson", connection))
                {
                    adapter.Fill(dataset);
                }
                connection.Close();
            }
            return dataset;
        }
    }