software, software.net

ASP.NET Menu MouseOver Problem Solution for IE8 and Safari

If you are using ASP.NET menus which open when you drag the mouse over them, you may experience difficulties in Internet Explorer 8 or Safari. They simply won’t respond to your mouseover action.

The workaround for Internet Explorer 8 is simple: Use the compability mode. However; the “solution” has been explained in http://www.daniweb.com/forums/thread244363.html . Here is the excerpt:

Setting the z-index property (HTML) using CSS can address this problem. The CSS class would look something like this:

  1. .adjustedZIndex {
  2. z-index: 1;
  3. }

And the Menu should look like as below

    1. asp:Menu ID="Menu1" runat="server"
    2. DynamicMenuStyle CssClass="adjustedZIndex" /
    3. /asp:Menu

The z-index has to be something higher.

I have set the z-index property as 99, and it worked like a charm.

The solution for Safari has been explained in http://forums.asp.net/t/941229.aspx?PageIndex=2 . Here is the excerpt:

What I did to enable the asp:menu for Safari was to add a file called safari.browser to the App_Browsers folder. The contents of safari.browser are as follows:

<browsers>
<browser refID="safari1plus">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.Menu" adapterType="" />
controlAdapters>
browser>
browsers>

Basically the refID matches a browser id in the original browser configuration files for the .Net framework. In our custom .browser file we override the control adapter settings for the asp:menu control for this specific browser.

I have tested this on Mac OS Snow Leopard, and it worked like a charm.

Both of these solutions can be implemented together.

Standard
software, software.net

Convert DataReader to DataTable in C#

SqlDataReader sdr = comm.ExecuteReader();

 
 

DataTable ret = new DataTable();

 
 

DataTable schema = sdr.GetSchemaTable();

for (int n = 0; n < schema.Rows.Count; n++) ret.Columns.Add(new DataColumn((String) schema.Rows[n][“ColumnName”], (Type) schema.Rows[n][“DataType”]));

 
 

while (sdr.Read())

{

DataRow dr = ret.NewRow();

for (int n = 0; n < sdr.FieldCount; n++) dr[n] = sdr.GetValue(n);

ret.Rows.Add(dr);

}

Standard
software, software.java, software.net

Teknoloji Seçimi – Java vs .NET


Bir tanıdıktan daha duymuştum ama emin değildim yine de. “Türkiye’de java ile iş yapan çok fazla kurum olmadığından aranan kişiler genelde akademik eğitimi olan kişiler, bu yüzden .net öğren” demişti. Ne kadar doğru bilemem ama her ikisininde birbirine olan benzerliğini düşünürsem ( kitabınızda ki örneklerde fark ettim aslında bu benzerliği ) dediğinizi gibi ikisine de aşikar olabilirim.

Peki son bir rica, bende araştıracağım ama sizin tavsiye edebileceğiniz .net kitabı var mı? Yani giriş seviyesi için şu iyi olur diyebileceğiniz…

Türkiye’de Java ile iş yapan kurum olmadığı görüşüne pek katılmıyorum. Microsoft haricindeki birçok büyük firma (örnek: SAP, Oracle, IBM) ürünlerinin çok önemli bir kısmında Java altyapısı kullanmakta veya doğrudan Java desteği vermektedir. Daha net bir örnek vereyim: SAP’nin Netweaver çatısı altındaki ürün yelpazesinin tamamı Java tabanlıdır. Aynı şekilde Oracle veya IBM ürünleri üzerinde geliştirme yapmak istediğinde bulacağın API’ler yine muhtemelen Java tabanlı olacaktır. Bankacılık, finans, telekom gibi sektörlerde de Java kullanımı oldukça yaygındır.

Ne var ki; .NET daha popüler, Java daha başarılı, .NET daha hızlı, Java ile falanca projeyi yapmışlar gibi söylemlere dayanarak teknoloji seçimi yapmayı doğru bulmuyorum. Geçmiş bir yıla baktığımda, kendi yaptığımız projelerde .NET kullandığımız da oldu Java da. Kullanım oranımız ise neredeyse aynı diyebilirim. Burada önemli olan şey; bir teknolojiyi seçip fanatik bir şekilde ona odaklanmak yerine farklı teknolojilerin artısı ve eksisi olduğunu kabul edip doğru yerde doğru teknolojiyi kullanabilmektir. Bıçak ile çorba içemeyeceğin gibi, kaşık ile de elma soyamazsın 😉

Buna karşılık; Türkiye’de istihdam anlamında .NET ile Java programcısı arayışındaki iş ilanı sayılarını karşılaştıran bir araştırma yapılmış ise, bundan haberdar değilim. Böyle bir araştırma ilginç olabilirdi.

Programcılığı ciddi bir kariyer konusu olarak düşünüyorsan, ikisine birden aşina olmanda fayda var diye düşünüyorum. Muhtemelen birinde uzman seviyesinde, diğerinde ise orta seviyede olmayı hedeflemelisin. Zaman geçtikçe özel çalışmalarınla ikincisinde de uzman seviyesine gelebilirsin.

Burada dikkat etmen gereken konu şu: Karşına OOP Design, Threading, Event gibi kavramlar çıktıkça bunların .NET veya Java’da Syntax anlamında nasıl yapıldığını ezberlemek yerine kavramsal olarak anlamaya çalış. Nerede, niçin kullanılır, ne işe yarar, arkasındaki mekanizma nedir, bunları anlamaya çalış. Mantık olarak anladığında; .NET veya Java (veya Phyton, her neyse) kullanıyor olman sadece Syntax farkı yaratan basit bir detay olacaktır.

Kitap konusuna gelince… .NET konusunda piyasada pek çok kitap var ama benim şahsen alıp okuduğum bir kitap olmadı, o yüzden özel bir tavsiyem yok. Ama forumlarda yapılan yorumlara bakarak çok tavsiye edilen kitaplardan birini seçebilirsin diye düşünüyorum. Java konusunda ise Deitel’in yayınlamış olduğu Java kitabını şahsen kullanmış olduğum için tavsiye edebilirim. Kitap İngilizce’dir, ve ben Yeditepe Üniversitesi’nin kitapçısından almıştım.

İyi çalışmalar…

Standard
software, software.net

Login and Download File Programmatically in .NET

Recently, I was working in a .NET project when I needed to login to a website and download a file programmatically. I was able to call the login page & set the cookies without any problems. However, when I tried to download the file, I got weird messages like “Object moved to…” or “Unable to read data from the transport connection: The connection was closed”. The messages varied depending on the AllowAutoRedirect property and a few others.

I have spent hours to solve the problem, searched MSDN and dozens of forums without any success. Then, it turned out to be something really stupid. The thing is; when you are accessing the page to download the data, you have to pass some HttpWebRequest parameters; such as the user agent, protocol version and accept.

You will find the working code below. The critical area is marked bold.

public string readData()
{
CookieContainer cc = new CookieContainer();
HttpWebRequest request;
HttpWebResponse response;
CookieContainer cookies;
WebProxy proxy;
string ret = “”;

// Prepare proxy
proxy = new WebProxy(“192.168.0.10:8080”, true);

// Login & get cookies
request = (HttpWebRequest)WebRequest.Create(@”https://www.dummy.com/login.aspx?userid=myuser&password=mypass&#8221;);
request.AllowAutoRedirect = false;
request.CookieContainer = new CookieContainer();
request.Proxy = proxy;
response = (HttpWebResponse)request.GetResponse();
cookies = request.CookieContainer;
response.Close();

// Get XML file
request = (HttpWebRequest)WebRequest.Create(@”https://www.dummy.com/download.aspx?CMD=XML&#8221;);
request.AllowAutoRedirect = true;
request.CookieContainer = cookies;
request.Proxy = proxy;
request.AllowAutoRedirect = true;

request.Method = “GET”;
request.ProtocolVersion = new Version(1, 0);
request.UserAgent = “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)”;
request.Accept = “*.*”;

response = (HttpWebResponse)request.GetResponse();
ret += new StreamReader(response.GetResponseStream()).ReadToEnd();
response.Close();

// Logout
HttpWebRequest req3 = (HttpWebRequest)WebRequest.Create(@”https://www.dummy.com/logout.aspx&#8221;);
req3.CookieContainer = cc;
req3.Proxy = proxy;
HttpWebResponse res3 = (HttpWebResponse)req3.GetResponse();
res3.Close();

// Return values
return ret;
}

Standard
software, software.net, software.sap

Visual Studio 2005 & SAP Bağlantısı

Bir süredir SAP entegrasyon projelerinde SAP Java Connector kullanıyordum. Bunun sebebi, SAP .NET Connector ‘un Visual Studio 2005 ile çalışmaması ve Vista’da desteklenmemesi; yani SAP tarafından bir kenara bırakılmış bir proje diyebiliriz.

Java + SAP Java Connector ile geliştirme yapmak, Visual Studio + SAP .NET Connector ile geliştirme yapmaktan çok daha uzun sürüyor ve daha zahmetli. Ayrıca, Native Windows Call’ler yapmak da büyük problem; mesela Windows ortamında VC++ ile hazırlanmış bir API’yi Java’da çağırmak neredeyse imkansız denecek derecede zor. Ama başka Tool olmadığı için mecburen katlanıyorduk.

Bugün, bir süredir denemek istediğim yeni bir Tool’un deneme sürümünü bilgisayarıma kurup deneme şansım oldu. Softwise .NET Connector, Visual Studio 2005 ile SAP arasında bağlantı kurup BAPI, RFC, vs çağırmaya izin veriyor. Vista, XP, vs dinlemeden mükemmelen çalışıyor, Türkçe karakter problemi de yok. Aşağıda, bu proje ile sadece 10 dakika içerisinde yaptığım bir geliştirmenin örnek kodları ve ScreenShot’ları var:

Console.WriteLine(“Program başladı”);

// Bağlantı
SAP.Connector.Connection conn = SAP.Connector.Connection.GetNewConnection(“ASHOST=10.0.0.5 SYSNR=00 CLIENT=050 USER=KEREMK PASSWD=PICASSO”);

// 1. Fonksiyon: ++
BAPIZKKTEST.BAPIZKKTEST z1 = new BAPIZKKTEST.BAPIZKKTEST();
z1.Connection = conn;
string res = “”;
string tur = “”;
z1.Zkktest(“12”, out res, out tur);
Console.WriteLine(“Fonksiyon Sonucu: ” + res);
Console.WriteLine(“Türkçe Karakterler: ” + tur);

// 2. Fonksiyon: Türkçe karakter parametre alma
BAPIZKKTEST2.BAPIZKKTEST2 z2 = new BAPIZKKTEST2.BAPIZKKTEST2();
z2.Connection = conn;
string hello = “”;
z2.Zkktest2(“üğıişçöÜĞIİŞÇÖ”, out hello);
Console.WriteLine(“2. Fonksiyon Sonucu: ” + hello);

// 3. Fonksiyon: Internal Table yollamak ve geri almak
BAPIZKKTEST3.BAPIZKKTEST3 z3 = new BAPIZKKTEST3.BAPIZKKTEST3();
z3.Connection = conn;
BAPIZKKTEST3.T001Table ti = new BAPIZKKTEST3.T001Table();
BAPIZKKTEST3.T001 tl = new BAPIZKKTEST3.T001(); tl.Bukrs = “1000”; ti.Add(tl);
tl = new BAPIZKKTEST3.T001(); tl.Bukrs = “1100”; ti.Add(tl);
tl = new BAPIZKKTEST3.T001(); tl.Bukrs = “1200”; ti.Add(tl);
BAPIZKKTEST3.T001Table te = new BAPIZKKTEST3.T001Table();
z3.Zkktest3(ref te, ref ti);

Console.WriteLine(“Şirket Kodları:”);
for (int n = 0; n < te.Count; n++) Console.WriteLine(te[n].Bukrs + ": " + te[n].Butxt);

// Bağlantıyı kapatalım
conn.Close();

// Press any key
Console.ReadKey();

Bu ürünü .NET platformunun nimetleriyle de birleştirip, siyah konsol ekranlarından daha ilginç uygulamalar da geliştirebilirsiniz:

Visual Studio 2005 ile SAP arasında bağlantı kurmak isteyenlere tavsiye ederim. Ancak şunu da unutmayın: Softwise, bu ürünü alanlara sadece bir yıllık lisans veriyor. Lisans, her sene ücretsiz olarak yenileniyor. Bu ilk bakışta kötü bir durum gibi gözükmese de; Softwise kapanacak olursa bir sene sonra lisanssız kalabilirsiniz. Bu durum Deploy edilmiş projeleri etkilemese de, geliştirme yaptığınız makinada Connector’u tekrar çalıştıramazsınız. Ya da 30 günde bir formatlayıp tekrar kurulum yapmanız gerekebilir. Softwise’ın kapanıp kapanmayacağı konusunda birşey söyleyemem, ama bu riski göz ardı etmeyin lütfen. Yaptığınız projeleri ileride modifiye etmek / geliştirmek gerektiğinde, Connector’u tekrar kullanıp kullanamayacağınız Softwise’ın varlığına bağlı olacak – ya da 30 günde bir format atma konusundaki sabrınıza…

Kalıcı bir çözüm arayanlar için Java Connector hala tek alternatif sanırım.

Standard
software, software.java, software.net

Java Mı .NET Mi

Java ile .NET’in avantaj ve dezavantajlarını Programcılık Mantığı adlı kitabımda karşılaştırmıştım. Bu karşılaştırmanın küçük bir özetini ifade etmek gerekirse;

.NET Avantajları:

  • Microsoft işletim sistemlerinde hızlı çalışır
  • Standart tek bir geliştirme aracı vardır ve kullanımı çok rahattır (Visual Studio)
  • Birden fazla dil kullanılabilir (Visual Basic, C#, J#, vs).
  • Microsoft tarafından çoook uzun bir süre desteklenecektir

    .NET Dezavantajları

  • Sadece Microsoft platformlarında çalışır

    Java Avantajları

  • Kodu bir kere yazarsın, VM’i olan her işletim sisteminde çalışır (Windows, Linux, Mac Os, vs)
  • IBM, SAP, Sun, Oracle gibi firmalar (Microsoft dışındaki bütün yazılım firmaları diyelim) ürünlerinin önemli bir kısmını Java ile geliştirir

    Java Dezavantajları

  • Yavaş çalışır
  • Tek bir dil kullanılabilir (Java)
  • Piyasada çok çeşitli ve birbirinden çok farklı geliştirme araçları vardır. Mesela Borland Jbuilder’ı tanıman, IBM Websphere’in başına oturur oturmaz Java yazmaya başlayabileceğin anlamına gelmez.
  • Şimdi; “.NET mi Java mı”, net bir cevabı olmayan bir soru. Aslında programcılığı kariyer olarak düşünüyorsan, her ikisine de aşina olman gerekir diye düşünüyorum. Bugünlerde piyasadaki iş ilanlarına bakarsan; .NET’e olan talebin Java’dan daha popüler olduğunu görürsün; yukarıda saydığım avantajları, piyasada sadece Windows’u hedefleyen orta (ve belki bazı büyük) ölçekteki işlerde .NET’in tercih edilmesine yol açıyor kanımca. Ama bu seni aldatmasın – Microsoft harici kurumsal bir yazılım söz konusu olduğunda, eğer çalıştığın platformun standartları Java çerçevesinde yazıldıysa, ek geliştirmelerin de Java’da yapılmasının sayısız avantajı olacakır. Birden fazla platformda çalışması istenen bir yazılım söz konusu olduğunda ise Java neredeyse kaçınılmazdır.

    Ama bu konuda çok da kaygılanmana gerek yok bence. .NET & Java platformları ve C# & Java dilleri birbirine o kadar çok benzer ki, birini öğrendiğinde diğerini de öğrenmiş olursun neredeyse. 1-2 yıllık C# programcılığının ardından; Java ile SAP’den veri çekip form üzerinde gösteren bir program yazmam sadece 1-2 saatimi almıştı.

    Benim sana tavsiyem, .NET üzerine kaynak & yardım bulmanın kolaylığını da düşündüğümüzde, ilk etapta .NET üzerine yoğunlaşman. C# ile Windows uygulamaları, Web siteleri ve Web servisleri yazar hale gelip veritabanı erişimi konusunda da tecrübe sahibi olduktan sonra, aynı şeyleri Java’da da yapmaya başla. Çok kısa sürede çok hızlı ilerlediğini göreceksin. Programcılık Mantığı adlı kitabımdaki örneklerde, aynı çıktıyı üreten birçok programı hem C#, hem de Java’da yazmıştım; onları da kıyaslayabilirsin.

    Umarım yardımcı olabilmişimdir.

    Standard
    software, software.net

    ASP Unspecified Error

    Since ASP.NET is out and ASP.NET 2.0 is on it`s way, ASP is not the top platform
    choice of Windows developers, but many of us still have to work on ASP because there are lots of older websites which use ASP technology. So I think my tip is still useful. An ASP developer who is using Access database might experience a problem after uploading the database back to the web server where (s)he sees an `
    Unspecified Error` message whenever (s)he tries to access an ASP page. This error
    will disappear after some while, but we don`t have to wait actually.

    I suppose that you are using such a code to open the database connection:

    dbConn.Mode = 2
    dbConn.Open `DSN=blabla;UID=;PWD=;`

    When you get the `Unspecified Error` error, all you have to do is to change the
    Mode value above. In our example; after we change the code as below and upload
    our .ASP page(s) back to the server, the error message will disappear and our
    pages will start working again:

    dbConn.Mode = 3
    dbConn.Open `DSN=blabla;UID=;PWD=;`

    If we would get the error message when the Mode value was 3, we would need to
    change it to 2.

    Standard