• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Eclipse Uzerinden Java ile TFS Client Object Model Konusuyor

Kim demiş Java geliştirme IDE' leri ile TFS anlaşamaz diye. Bu makalemizde Eclipse IDE' si üzerinden JAVA kodları yardımıyla TFS Client Object Model' i nasıl kullanabileceğimizi incelemeye çalışıyoruz.

13.05.2013

Yazar: Burak Selim Şenyurt (Google+)

Kategori: TFS

3837

Çok degil daha bir kaç sene öncesine kadar(Özellikle .Net’ in duyuruldugu yillarda ve izleyen bir kaç senede) yazilim dünyasinda neredeyse yandaki resimdekine benzer bir kavga vardi(Benzetmeyi biraz abartmis olabilirim) 

Java’ cilar, C#’ çilari pek sevmez iken tam tersi durum da pekala geçerliydi. Ben hiç bir zaman birisinin fanatigi olmadim. Hatta Java ile ufak çapli bir kaç deneyimim bile oldu.

Peki gerçek dünya böyle mi? Özellikle kalabalik yazilim ekiplerinin oldugu, çok fazla sayida ürünün kostugu dünyalarda, sadece Java’ cilari, C#’ çilari degil, daha pek çok programlama dili gelistiricilerini bir arada görmekteyiz. Önegin ben bulundugum konum itibariyle C’ cilerin, Assembler’ cilarin, PowerBuilder’ cilarin, .Net’ çilerin, Java’ cilarin ve hatta Cobol’ cularin arasinda yasamaktayim.

Hepsi kendi dünyalarini kullanarak ürünler gelistiriyor olsalar da, zaman içerisinde birbirleriyle konusmasi gereken uygulamalar bütününün de bir parçasi olmaktan kaçamiyorlar. Özellikle isin içerisine bir ALM(Application LifeCycle Management) araci girdiginde. Iste bu günkü konumuzda buna itaf edilecek wink Haydi gelin baslayalim.

Bildiginiz üzere bir süredir Team Foundation Server’ in çevre dünya ile olan etkilesimini incelemeye çalisiyorum. Açikçasi TFS’ in gerek servis yapisi gerek Client Object Model gibi kütüphaneleri sayesinde, dis dünya ile olan entegrasyonu son derece kolay. Bu gün buna bir kere daha inandim. Çünkü bir Java uygulamasi içerisinde TFS Client Object Model’ i kullanarak, bir Team Project’ in Work Item listesini sorguladim wink Nasil yaptigimi merak ediyorsaniz okumaya devam edin. Tabi bu iste de çok önemli bir yardimcim vardi. O da Microsoft tarafindan gelistirilen ve ücretsiz olarak sunulan Client Object Model SDK’si. Ama Java için olan sürümü.

Microsoft Team Foundation Server 2012 Software Development Kit for Java içerigini bu adresten indirebilirsiniz(Makaleyi hazirladigim tarih itibariyle 15 Åžubat 2013’ te yayinlanmis güncel bir sürümü bulunmaktaydi)

Senaryo

Senaryomuz esas itibariyle yine bir Hello World uygulamasi olacak. blush Console ekranina belirli bir Team Project içerisinde yer alan Work Item bilgilerini(Product Backlog Item, Bug, Task gibi) yazdirmaya çalisacagiz. Örnegin Work Item’ in basligini(Title), tipini(WorkItem Type), numarasini(ID) düzgün bir sirada çekmeyi deneyebiliriz. Java kodlamasi yapacagimiz için Eclipse gibi bir IDE tercih edilebilir ki ben öyle yaptim wink

Bebek Adimlari

Adim 0

Ilk olarak Eclipse üzerinde yeni bir Java Projesi olusturarak ise baslayalim(File->New->Java Project). Ben UsingClientObjectModel olarak adlandirdigim projeyi, sistemimde kurulu olan Workspace içerisinde olusturdum. Runtime olarak 1.6 sürümünü kullanmayi tercih ediyorum. Bu nedenle daha önceki projelerden varsayilan olarak kalan Use an execution environment JRE degerini oldugu gibi biraktim.

Bu üretim islemi sonrasinda Eclipse IDE’ sinde asagidakine benzer bir içerik olustugunu görmeliyiz. (Elbette sisteminizde Java Runtime Environement’ in yüklü oldugu fiziki adresler daha farkli olabilir.)

Adim 1

Ikinci adim ise main metodunu içerecek olan ve asil kodlarimizi yazacagimiz sinifi eklemek olacaktir. Visual Studio tarafindan kalma bir aliskanlik nedeniyle Program olarak isimlendirdigim sinif, tfs.clientobjectmodel.application isimli paket içerisinde konuslandirilacak(Siz kendi istediginiz paket tanimlamasini yapabilirsiniz) Krtik noktalardan birisi de, public static void main(String[] args) seçeneginin isaretli olmasidir. Bu, tahmin edeceginiz üzere programin giris noktasi olan main metodudur.

C# tarafindan da bildiginiz üzere static Main metodu, exe tipindeki uygulamalarin giris noktasidir. Ayni durum Java uygulamalari için de geçerlidir. Tek fark Java tarafinda isimlendirme standarti geregi küçük m harfi ile baslanmasidir. Dikkat edilecegi üzere her iki dilde metoda parametre olarak string tipinden bir dizi alir. Programa dis ortamdan parametre aktarabilmek amaciyla wink

Bu islemin sonucunda Eclipse IDE’ si bizim için asagidaki ekran görüntüsünde yer alan içerigi üretmelidir.

Adim 2

Üçüncü adimda, bilgisayarimiza indirip açtigimiz TFS SDK’ sini referans ediyor olacagiz. Bunun için ilgili JAR dosyasinin uygulamaya bildirilmesi(bir baska deyisle referans edilmesi) gerekmektedir. Söz konusu bildirim için proje özelliklerinden Java Build Path kismina gelmeli ve Add External JARs dügmesini kullanarak com.microsoft.tfs.sdk-11.0.0 isimli JAR dosyasini seçmeliyiz.

Konu ile iliskili olarak yaptigim arastirmalarda söyle bir kullanima da rastladim. Hazirlanan Java uygulamasinin dagitilabilecegi de düsünülürse SDK’ nin Redistributable olan parçalarinin proje klasörü altina kopyalanmasi ve ilgili path bildirimlerinin bu fiziki adresleri gösterecek sekilde yapilmasi yolu da tercih edilebilir. Böyle bir durumda Add JARs dügmesinden hareket edilir.

Sonuç olarak Java Build Path kisminin asagidaki ekran görüntüsündeki gibi olusmasi gerekmektedir.

Ne varki bu yeterli degildir. Bir de eklenen JAR dosyasi için Native Libary Location degerinin set edilmesi gerekmektedir. Bunun için asagidaki ekran görüntüsünde görüldügü üzere, SDK’ nin açilmasi sonucu olusan redist\native klasörüne kadar inilmeli ve platforma uygun olan klasör seçilmelidir. Ben x86 islemcili win32 tabanli bir sistem de çalistigimdan buna uygun olan klasörü seçtim(Native klasörü altinda Linux, MacOSX, Solaris gibi pek çok sistem için gerekli kütüphaneler bulunmaktadir)

Buraya kadar ki islemlerimiz sonrasinda Eclipse IDE’ sinde projemize ait olan son görünüm de asagidaki gibi olacaktir. Dikkat edilecegi üzere TFS SDK’ si, Referenced Libraries kisminda görülmektedir.

Örnek kodlar

Åžimdi kod tarafini gelistirmeye baslayabiliriz. Aslinda .Net tarafinda Client Object Model’ in kullanimindan çok da farkli bir islem yapmamiza gerek yoktur. TFS Client Object Model’ in nesne yapisinin hemen hemen aynisi burada da insa edilmistir. Åžimdi Program sinifina ait kodlarimizi asagidaki gibi gelistirelim.

package tfs.clientobjectmodel.application;

import java.net.URI;
import java.net.URISyntaxException;

import com.microsoft.tfs.core.TFSTeamProjectCollection;
import com.microsoft.tfs.core.clients.workitem.WorkItem;
import com.microsoft.tfs.core.clients.workitem.WorkItemClient;
import com.microsoft.tfs.core.clients.workitem.query.WorkItemCollection;
import com.microsoft.tfs.core.httpclient.Credentials;
import com.microsoft.tfs.core.httpclient.HttpException;

public class Program {

    public static void main(String[] args)
            throws HttpException, URISyntaxException {
       
        System.setProperty("com.microsoft.tfs.jni.native.base-directory"
               , "C:\\Program Files\\TFS-SDK-11.0.0.1302\\TFS-SDK-11.0.0\\redist\\native");
       
        URI uri=new URI("http://tfsserver:8080/tfs/defaultcollection");
        Credentials user=new com.microsoft.tfs.core.httpclient.DefaultNTCredentials();
       
        TFSTeamProjectCollection collection=new TFSTeamProjectCollection(uri,user);
           
        WorkItemClient wiClient=collection.getWorkItemClient();
               
        WorkItemCollection workItems=wiClient
                .query("Select ID,Title from WorkItems " +
                        "where ([Team Project]='ARGE') order by [Work Item Type]");
        System.out.println("Active statusunde olan toplam "+
                workItems.size()+" work item bulunmustur");       
       
        for(int i=0;i<workItems.size();i++)
        {
            WorkItem workItem=workItems.getWorkItem(i);
            System.out.println(workItem.getTitle()
                    +" "+workItem.getType().getName()
                    +" "+workItem.getID()
                    +" "+workItem.getProject().getName()
                    );
        }
    }
}

Ilk dikkat edilmesi gereken nokta System özelliklerine bir key-value eklenmis olmasidir. com.microsoft.tfs.jni.native.base-directory isimli key için C:\\Program Files\\TFS-SDK-11.0.0.1302\\TFS-SDK-11.0.0\\redist\\native adresi value olarak verilmistir. Normal sartlarda bu bildirim komut satirindan java.exe uygulamasi kullanilarak da yapilabilir. Söz konusu sistem özelliginin bir kere set edilmesi yeterlidir. Bu bildirim ile aslinda native loader’ in sisteme tanitilmasi islemi gerçeklestirilir. Eger ilgili bildirim yapilmazsa, çalisma zamaninda asagidaki hata mesaji ile karsilasilmasi muhtemeldir.

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable(Ljava/lang/String;)Ljava/lang/String;
    at com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable(Native Method)
    at com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.getEnvironmentVariable(NativePlatformMisc.java:134)
    at com.microsoft.tfs.jni.PlatformMiscUtils.getEnvironmentVariable(PlatformMiscUtils.java:52)
    at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.shouldAcceptUntrustedCertificates(DefaultHTTPClientFactory.java:288)
    at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.configureClientParams(DefaultHTTPClientFactory.java:324)
    at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.newHTTPClient(DefaultHTTPClientFactory.java:137)
    at com.microsoft.tfs.core.TFSConnection.getHTTPClient(TFSConnection.java:1041)
    at com.microsoft.tfs.core.TFSConnection.getWebService(TFSConnection.java:874)
    at com.microsoft.tfs.core.config.client.DefaultClientFactory$9.newClient(DefaultClientFactory.java:265)
    at com.microsoft.tfs.core.config.client.DefaultClientFactory.newClient(DefaultClientFactory.java:90)
    at com.microsoft.tfs.core.TFSConnection.getClient(TFSConnection.java:1470)
    at com.microsoft.tfs.core.TFSTeamProjectCollection.getWorkItemClient(TFSTeamProjectCollection.java:370)
    at tfs.clientobjectmodel.application.Program.main(Program.java:26)

Bundan sonraki kisimda ilk olarak TFSTeamProjectCollection tipinden bir nesne örneklendigi görülmektedir. Örnekleme sirasinda ilk parametre olarak DefaultCollection’ a ait url adresi verilmistir(Programda TFS sunucusunun kurulu oldugu makinedeki varsayilan Team Project Collection kullanilmaktadir). URI sinifindan yapilan bu bildirimi Credentials tipinden bir parametre takip etmektedir. Makineyi açan kullanicinin Credential bilgisi ile TFS’ e baglanilmak istendiginden DefaultNTCredentials tipinden bir nesne örnegi ele alinmistir. Ancak bir kullanici adi ve sifre ile gidilmek istenirse, UsernamePasswordCredentials sinifindan da yararlanilabilir(Elbette ilgili kullanicilarin söz konusu TFS sunucusuna ve koleksiyona erisebildigini, bir baska deyisle gerekli yetkilere sahip oldugunu var sayiyoruz)

Kod parçasinda ARGE isimli projeye ait Work Item’ lar çekilmeye çalisilmaktadir. Bu sebepten WorkItemStore servisine erisilmesi gerekmektedir. Ilgili servisi kullanabilmek için getWorkItemClient fonksiyonu çagirilmaktadir. Bu metod geriye WorkItemClient tipinden bir referans döndürmektedir. Bu referans üzerinden çagirilan query fonksiyonuna girilen WIQL(WorkItem Query Language) sorgusu ile de WorkItemCollection elde edilir. Bu koleksiyon sorguya uygun bir Work Item içerigini tasiyacaktir.

Pek tabi Java tarafinda, .Net’ te oldugu gibi Property isimli bir tip üyesi(Type Member) bulunmamaktadir. Ancak .Net’ ten asina oldugumuz WorkItem özelliklerine get ön ekli metodlar yardimiyla ulasabiliriz. Örnekte Work Item’ in Title degeri için getTitle(), Work Item tipinin adi için getType().getName(), sistem de kayitli olan ID bilgisi için de getID() metodu kullanilmistir.

Sonuç olarak ARGE isimli projedeki Work Item’ larin ID,Title degerlerinin, Work Item tipine göre siralanarak elde edilmesi islemi icra edilmektedir. Uygulamanin çalisma zamani sonuçlari asagida görüldügü gibidir(Farkli WIQL sorgulari ile örnegi zenginlestirmeyi denemenizi öneririm wink )

Senaryoyu islettigim sistemde test amaçli olarak kullandigim ARGE isimli Team Project, Scrum 2.0 sablonunu kullanmaktaydi. Bu nedenle Product Backlog Item, Task ve Bug gibi Work Item ögelerini barindirmaktadir.

Biraz Daha

Dilerseniz örnek kod parçasini biraz daha gelistirmeye çalisalim. Örnegin yeni bir Work Item nasil eklenir ona bakalim. .Net tarafindan biraz farkli olarak yeni bir WorkItem nesnesinin örneklenmesi için Project sinifi üzerinden WorkItemClient referansina ulasismasi ve newWorkItem metodunun çagirilmasi gerekmektedir(Yani WorkItem sinifini dogrudan bir yapici metod-Constructor ile örnekleyemiyoruz) Aynen asagidaki kod parçasinda oldugu gibi.

package tfs.clientobjectmodel.application;

import java.net.URI;
import java.net.URISyntaxException;

import com.microsoft.tfs.core.TFSTeamProjectCollection;
import com.microsoft.tfs.core.clients.workitem.WorkItem;
import com.microsoft.tfs.core.clients.workitem.WorkItemClient;
import com.microsoft.tfs.core.clients.workitem.project.Project;
import com.microsoft.tfs.core.clients.workitem.wittype.WorkItemType;

import com.microsoft.tfs.core.httpclient.Credentials;
import com.microsoft.tfs.core.httpclient.HttpException;

public class Program {

    public static void main(String[] args)
            throws HttpException, URISyntaxException {
        
        URI uri=new URI("http://tfsserver:8080/tfs/defaultcollection");
        Credentials user=new com.microsoft.tfs.core.httpclient.DefaultNTCredentials();
       
        TFSTeamProjectCollection collection=new TFSTeamProjectCollection(uri,user);
           
        WorkItemClient wiClient=collection.getWorkItemClient();
        
        Project argeProject=wiClient.getProjects().get("ARGE");
        WorkItemType pbi=argeProject.getWorkItemTypes().get("Product Backlog Item");
       
        WorkItem newWorkItem=argeProject.getWorkItemClient().newWorkItem(pbi);
        newWorkItem.setTitle("Backoffice ekranlarin icin wire frame tasarim calismalari");
        newWorkItem.save();
        System.out.println(newWorkItem.getID()+" numarasi ile bir Product Backlog Item olusturuldu");
    }
}

Dikkat edilmesi gereken noktalardan birisi de newWorkItem metoduna parametre olarak üretilmek istenen work item tipinin verilmesidir. Bu bildirim için WorkItemType sinifina ait bir nesne örnegi kullanilmaktadir. WorkItemType üretimi için projeye ait nesne örnegi üzerinden önce var olan WorkItem tiplerinin elde edilmesi islemi gerçeklestirilmis, ardindan ise Product Backlog Item tipi çekilmistir. Bu son derece mantiklidir, nitekim ilgili projenin sablonu(ki örnegimizde Scrum 2.0 söz konusudur) tarafindan kullanilan Work Item tipleri ne ise, onlara ait Work Item nesneleri örneklenebilir. Üretilen Product Backclog Item için bir Title degeri verilmis ve sonrasinda Save metodu kullanilarak kayit islemi gerçeklestirilmistir. Uygulama çalistirildiginda hem Console penceresinden hem de ilgili projeye ait Backlog’ da bir ögenin olusturuldugu gözlemlenecektir.

Görüldügü üzere Team Foundation Server Client Object Model’ in, Java tarafinda kullanilmasi da son derece kolaydir. Örnek, tahmin edeceginiz üzere Hello World formatindadir. Ancak daha önceki yazilarimizi baz alarak, .Net tarafindaki Client Object Model kodlarini, Java tarafina tasimayi deneyebilirsiniz. Kim demis Java, Microsoft’ u, Microsoft’ ta Java’ yi umursamiyor diye wink Böylece geldik bir yazimizin daha sonuna. Tekrardan görüsünceye dek hepinize mutlu günler dilerim.

Yazar Hakkında

Burak Selim Şenyurt

Burak Selim Şenyurt

buraksenyurt.com

Yıldız Teknik Üniversitesi Matematik Mühendisliği mezunu olan Şenyurt, 1999 yılında profesyonel olarak adım attığı yazılım dünyasında, 2003 yılından beri Microsoft .Net teknolojileri ile ilgilenmektedir. Yazılım hayatına Assist Line isimli Call Center firmasında Delphi programcısı olarak başlayan Şenyurt sonrasında, sırasıyla Bizitek(Junior Developer), Netron(Master Trainer), Citibank(Outsource Senior Software Developer), Innova(Application Development Consultant), ve TCM(Software Architect) firmalarında görev almıştır. Su anda ING Bank bünyesinde Kıdemli Yazılım Danışmanı olarak görev yapmaktadir. 2006, 2007 yıllarında C#, 2008,2009,2010 yıllarında ise Connected System Developer kategorisinde Microsoft MVP seçilen Şenyurt, evli ve 1 çocuk babasıdır. C# diline olan düşkünlüğü, oğluna S(h)arp adının verilmesinde önemli bir etken olmustur.

Sosyal Medya

ORANLAR

  • 3837izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120005
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65060
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48255
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ