BAĞLANTILARIM

Takip Edin:

0

MICROSOFT SHAREPOINT

Cuma, Aralık 28, 2018 / /



Daha önce ismini duyduğum, ne olduğu hakkında yüzeysel bilgiye sahip olduğum SharePoint ile bir süre önce tanışma ve çalışma fırsatı buldum. SharePoint ile ilgilenenlere faydalı olabileceğini düşünerek, bu konuda Türkçe kaynağın az olduğunu da görerek bir miktar SharePoint paylaşımı yapmaya karar verdim.

SHAREPOINT NEDİR?

SharePoint için benim tanımım şudur; Microsoft firması kurumsal veya kurumsal olma yolunda ilerleyen firmalar için hiç kod yazmadan veya gerektiğinde çok az kod yazarak ve bu kodlamanın bir bölümünü de Excel'deki EĞER, İÇERİR gibi anlaşılır komutlarla yaptırarak kurumsal bir içerik yönetim sistemi yapmak istemiş.

Örneğin tekne üreten bir firmamız var. 

Müşterilerimizin olduğu bir sayfamız olsun. Bir sayfa oluşturup logolarını ekledikten sonra, bu sayfayı yalnızca bizim göreceğimiz şekilde ayarladık.

Müşterilerimizden birini tıklayınca ona ait yani onun için ürettiğimiz ya da üretmekte olduğumuz tekne projelerinin adı veya fotoğrafı gelsin.Bu sayfayı hem biz hem de bu firmanın kullanıcıları görsün şeklinde ayarladık.

Projelerden birini tıklayınca ilgili tekneye ait görseller, bilgiler, yapılan işler, hangi personel kaç saat çalışmış, hangi parçaların montajı yapılmış, sipariş verilmiş parçaların durumu gibi birçok bilginin olduğu sayfa olsun. Bu sayfayı biz görelim, müşterimiz görsün. Bazı bölümlerini mesela hangi personel teknenin neresini yapıyor, o gün ne iş yapıyor öğrenmek ve takip etmek için o teknede görevli personelimize de yetki verip bilgilerini girebilecekleri şekilde ayarladık. Böylelikle proje takibi, personelin iş takibi, sipariş takibi gibi süreçleri yönetebileceğimiz bir yapımız oldu. İşte Sharepoint kurumunuza bunu sunuyor.

Elbette daha fazlasını isteyenler için kendi kodlarını yazabilecekleri geliştirme imkanı da vermiş. Biz aslında daha çok bu tarafıyla yani özel geliştirme yapma tarafıyla ilgileneceğiz.

NELER YAPILIYOR?
  • Web siteleri oluşturabilir
  • Alt siteler oluşturabilir
  • Sitelere içerikler oluşturabilir
  • Listeler (Tablolar) oluşturabilir
  • Kodlama ve düzenleme yapmanızı sağlayacak özel sayfalar oluşturabilir
  • Özel butonlar oluşturup sayfalarınız ya da listeleriniz arası parametre taşıyabilir
  • Akış (flow) oluşturabilir
  • Oluşturduğunuz sayfaları, tabloları, akışları template (şablon) olarak belirleyip, aynı şablondan hızlıca başka şeyler türetebilirsiniz
  • Oluşturduğunuz içeriğe kimlerin erişip erişemeyeceğini yönetebilirsiniz.

UYGULAMA GELİŞTİRME

Visual Studio ve daha sonra kullanımı hakkında bahsedeceğim SharePoint Designer gibi programlarla yeni uygulamalar(sayfalar) geliştirebilmektesiniz.

NEREDE ÇALIŞIYOR?

Çalışmalarımı bulut üzerinde çalışan SharePoint Online isimli versiyonu üzerinde yapıyorum. Kendi sunucunuza kurabildiğiniz SharePoint Server isimli bir versiyonunun olduğunu da biliyorum.

0

C# ASP.NET İLE ZİYARETÇİNİN DİLİNİ BULMAK

Salı, Ekim 23, 2018 / / , ,

Çoklu dil desteği bulunan web sitelerinde ziyaretçilerin hangi dilde karşılanacağı aşağıdaki şekilde ayarlanabilir.

System.Globalization.CultureInfo kultur = System.Threading.Thread.CurrentThread.CurrentUICulture;
string kulturDilKod = kultur.TwoLetterISOLanguageName;

Web.config dosyasına aşağıdaki bilgiyi eklemek gerekiyor.

<system.web>   
     <globalization culture="auto" uiCulture="auto"/>
</system.web>

0

WEB SİTENİZE CANLI DESTEK SİSTEMİ EKLEME

Salı, Ekim 16, 2018 / /

Bugün sizlere genel paylaşımlarımın biraz dışında olan ama web sitesi geliştiren hemen hemen herkesin ihtiyacının olduğunu bildiğim bir konudan, online destek sistemlerinden bahsetmek istiyorum.

Bilindiği üzere ziyaretçiler artık etkileşimli siteleri tercih ediyor. Sitede sunulan ürünlerle ilgili aklına takılanları anında sorup, cevaplar alması o kişinin ürünü satın almasında büyük önem taşıyor. Bu nedenle sitenizde canlı destek sisteminin olması son derece önemli. Elbette doğru ürün sunmak, ziyaretçinin sorularına kaliteli ve doğru cevaplar vermek ticaretin olmazsa olmazı.

Google'da yapacağınız basit bir arama ile online destek sistemi hizmeti veren birçok siteye ulaşabilirsiniz. Ben farklı zamanlarda farklı destek sistemleri kullandım. Hangi sistemi kullanacağıma eğer müşterimin özellikle istediği bir canlı yardım sistemi yoksa araştırarak kendim karar verdim. Yani internetten araştırıp müşterime şunları kullanabiliriz bakın bunun arayüzü güzel, bu esnek tasarıma sahip, bunun masaüstü uygulaması da var gibi çeşitli alternatifler arasından müşterimin görüşünü de alarak karar verdim ve kullandım.

Geçtiğimiz günlerde hazırladığımız bir e-ticaret sitesi için yine canlı destek sistemi kullanma ihtiyacımız doğdu. Hal böyle olunca yine başladım araştırmaya...

Eski kullandığım sistemlerin arayüzleri biraz demode olmuştu bu yüzden onları eledim. Araştırmaya devam ederken JivoChat ile karşılaştım ve budur dedim. 😊

Tercihimi JivoChat'ten yana yapmamı sağlayan maddeleri kısaca belirtmem gerekirse;


  • İlk izlenim son derece başarılıydı. 
  • Kesinlikle çok doğru ve kaliteli bir arayüzünün olduğunu söylemeliyim. 
  • Türkçe dil desteğinin olması da çok önemli bir artı. Üstelik gelişigüzel değil profesyonel bir tercüme.
  • Ayarlar bölümünden her şeyi düzenlemeniz mümkün.
  • Web sitenize entegrasyonu son derece kolay.
  • Masaüstü & mobil uygulamaları mevcut ve son derece doğru çalışıyor.
  • Sitede aktif olan kişiler hakkında anlık olarak detaylı ve doğru bilgiler veriyor.
  • Ücretli ve ücretsiz planları mevcut.











Siz de sitenize canlık destek sistemi eklemek isterseniz şu an için JivoChat'i kesinlikle öneririm.

0

C# İLE YANDEX KURUMSAL EPOSTA ÜZERİNDEN MAIL GÖNDERMEK

Perşembe, Ekim 04, 2018 / / , , , , , , , ,

C# İLE YANDEX KURUMSAL EPOSTA ÜZERİNDEN MAIL GÖNDERMEK    


public static string YandexUzerinden(string mailBaslik, string mailIcerik, string aliciPosta, object ekDosya = null)
    {
        string gonderimSonucu = "";
        int mailAdresiSayisi = Regex.Matches(aliciPosta, ";").Count + 1;
        SmtpClient client = new SmtpClient("smtp.yandex.com.tr", 587);
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("Eposta adresiniz", "Yandex Test"); //gönderici olarak görünen mail bilgileri
        mail.Priority = MailPriority.High;
        mail.Subject = mailBaslik;
        if (mailAdresiSayisi > 1)
        {
            string[] aliciPostaAdresleri = aliciPosta.Split(';');
            for (int i = 0; i < mailAdresiSayisi; i++)
            {
                string aliciPostaAdresi = aliciPostaAdresleri[i];
                mail.To.Add(new MailAddress(aliciPostaAdresi, ""));
            }
        }
        else
        {
            mail.To.Add(new MailAddress(aliciPosta, ""));
        }
        mail.Body = mailIcerik;
        mail.IsBodyHtml = true;
        if (ekDosya != null)
        {
            mail.Attachments.Add(new Attachment(ekDosya.ToString()));
        }
        NetworkCredential girisIzni = new NetworkCredential("Eposta adresiniz", "Şifreniz");
        client.UseDefaultCredentials = false;
        client.EnableSsl = true;
        client.Credentials = girisIzni;
        try
        {
            client.Send(mail);
            gonderimSonucu = "OK";
            return gonderimSonucu;
        }
        catch (Exception ex)
        {
            gonderimSonucu = ex.Message;
            return gonderimSonucu;
        }
    }

0

ASP.NET MVC AJAX İLE KİMLİK NO DOĞRULAMA

Pazar, Eylül 02, 2018 / / , , ,

Girilen T.C. Kimlik numarasının doğruluğunun kontrolü aşağıdaki şekilde yapılabilir.

Controller tarafı


[HttpPost]
        public JsonResult KimlikNoKontrol(string no)
        {
            bool sonuc = false;
            if (no.Length == 11)
            {
                Int64 ATCNO, BTCNO, TcNo;
                long C1, C2, C3, C4, C5, C6, C7, C8, C9, Q1, Q2;
                TcNo = Int64.Parse(no);
                ATCNO = TcNo / 100;
                BTCNO = TcNo / 100;
                C1 = ATCNO % 10; ATCNO = ATCNO / 10;
                C2 = ATCNO % 10; ATCNO = ATCNO / 10;
                C3 = ATCNO % 10; ATCNO = ATCNO / 10;
                C4 = ATCNO % 10; ATCNO = ATCNO / 10;
                C5 = ATCNO % 10; ATCNO = ATCNO / 10;
                C6 = ATCNO % 10; ATCNO = ATCNO / 10;
                C7 = ATCNO % 10; ATCNO = ATCNO / 10;
                C8 = ATCNO % 10; ATCNO = ATCNO / 10;
                C9 = ATCNO % 10; ATCNO = ATCNO / 10;
                Q1 = ((10 - ((((C1 + C3 + C5 + C7 + C9) * 3) + (C2 + C4 + C6 + C8)) % 10)) % 10);
                Q2 = ((10 - (((((C2 + C4 + C6 + C8) + Q1) * 3) + (C1 + C3 + C5 + C7 + C9)) % 10)) % 10);
                sonuc = ((BTCNO * 100) + (Q1 * 10) + Q2 == TcNo);
                return Json(new { Durum = sonuc }, JsonRequestBehavior.AllowGet);
            }
            return Json(new { Durum = sonuc });
        }


View tarafı

<script type="text/javascript">
    $(function () {
        var isSuccess = false;
        $("#txtKimlikNo").focusout(function () {
            //alert("kontrol et");
            var kontrolEdilecekBilgi = $("#txtKimlikNo").val();
            if (kontrolEdilecekBilgi == "") {
                //$("#mesajMetin").text("Lütfen tüm alanları doldurunuz!");
                //$("#mesaj").show();
                return;
            }
            var data = { no: kontrolEdilecekBilgi };
            $.ajax({
                type: 'POST',
                url: "/Cari/KimlikNoKontrol",
                data: JSON.stringify(data),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (sonuc) {
                    //alert(sonuc.Durum);
                    if (sonuc.Durum == true) {
                        isSuccess = true;
                    }
                },
                complete: function () {
                    if (isSuccess == true) {
                        //alert("true")
                    } else {
                        //alert("Vergi No Hatalı! Lütfen kontrol ediniz.");
                        swal("Kimlik No Hatalı!", "Lütfen kontrol ediniz..", "error")
                    }
                    isSuccess = false;
                }
            });
        })
    });
</script>

0

ASP.NET MVC VIEWDATA VEYA VIEWBAG İLE TAŞINAN VERİLERİN HTML VE JAVASCRIPT İÇİNDE TÜRKÇE KARAKTER SORUNU

Perşembe, Ağustos 23, 2018 / / , , , , ,

Asp.net Mvc ile View tarafına ViewData veya ViewBag ile veri taşırken Türkçe karakterler doğru görüntülenmiyor. Bu sorunu gidermek için veriyi Html.Raw ile kullanmak gerekiyor.

Aşağıda ViewData ile gelen veriyi Javascript içinde kullandık.


var varsayilanSemtMahSecenekAd = "@Html.Raw(@ViewData["KayitliOrtakSemtMahAd"])";

0

TCMB DÖVİZ KURLARI ÇEKME C# XML OKUMA

Cuma, Temmuz 13, 2018 / / , , ,

T.C. Merkez Bankası Döviz Kurlarını Çekme XML Okuma

        /// <summary>
        /// Merkez Bankası İstenen Tarih Döviz Kurları
        /// </summary>
        public static void DovizKurBilgi(DateTime tarih)
        {
            for (int i = 0; i < 15; i++)
            {
                string gun = tarih.Day.ToString();
                string ay = tarih.Month.ToString();
                string yil = tarih.Year.ToString();
                if (gun.Length < 2)
                {
                    gun = "0" + gun;
                }
                if (ay.Length < 2)
                {
                    ay = "0" + ay;
                }
                try
                {
                    string kurUrl = "http://www.tcmb.gov.tr/kurlar/" + yil + ay + "/" + gun + ay + yil + ".xml";
                    XmlDocument xmlVerisi = new XmlDocument();
                    xmlVerisi.Load(kurUrl);
                    //xmlVerisi.Load("http://www.tcmb.gov.tr/kurlar/201807/13072018.xml");
                    decimal dolar = Convert.ToDecimal(xmlVerisi.SelectSingleNode(string.Format("Tarih_Date/Currency[@Kod='{0}']/ForexBuying", "USD")).InnerText.Replace('.', ','));
                    decimal euro = Convert.ToDecimal(xmlVerisi.SelectSingleNode(string.Format("Tarih_Date/Currency[@Kod='{0}']/ForexBuying", "EUR")).InnerText.Replace('.', ','));
                    System.Web.HttpContext.Current.Session["KUR_DOLAR"] = dolar.ToString();
                    System.Web.HttpContext.Current.Session["KUR_EURO"] = euro.ToString();
                    break;
                }
                catch (Exception ex)
                {
                    //ilgili güne ait xml verisi bulunamazsa 1 gün geri git ve tekrar dene
                    tarih = tarih.AddDays(-1);
                }
            }
        }

0

ASP.NET MVC ITEXTSHARP KULLANARAK PDF SAYFALARI DİNAMİK OLARAK DÜZENLEME

Pazar, Haziran 17, 2018 / / , , ,

Pdf dosyasına yazılacak verilerin koordinatlarını bir tabloda tutarak aşağıdaki şekilde ItextSharp kullanarak gerçekleştirdik.

  public string PdfFormIslem(int id, int formId)
        {
            //form bilgilerini getir         
            //formda kullanılacak alan bilgilerini getir
            //personel bilgilerini getir
            string olusanDosyaYolVeAd = String.Empty;
            //form bilgilerini getir
            var veriForm = Islem.Form.Bilgi(formId);
            //form bilgisi varsa
            if (veriForm != null)
            {
                try
                {
                    string kullanilacakFormAd = veriForm.FormAd;
                    string kullanilacakDosyaAd = veriForm.DosyaAd;
                    string kullanilacakYol = Server.MapPath("/Upload/Form/");
                    string[] diziDosyaAd = veriForm.DosyaAd.Split('.');
                    string kullanilacakYeniKayitAd = diziDosyaAd[0];
                    //personel bilgilerini getir
                    var veriPersonel = Islem.Personel.Bilgi(id);
                    string personelAdSoyad = veriPersonel.Ad + " " + veriPersonel.Soyad; // "TAMER YİĞİT";
                    string personelAdSoyadKadin = veriPersonel.Ad + " " + veriPersonel.Soyad + " " + veriPersonel.IlkSoyad; // "TAMER YİĞİT";
                    string duzenlemisPersonelAdSoyad = Helpers.Araclar.TurkceKarakterDuzenle(personelAdSoyad);
                    kullanilacakYeniKayitAd += "_" + duzenlemisPersonelAdSoyad + ".pdf";
                    olusanDosyaYolVeAd = kullanilacakYol + kullanilacakYeniKayitAd;
                    // oku
                    PdfReader reader = new PdfReader(kullanilacakYol + kullanilacakDosyaAd);
                    int pdfSayfaSayisi = reader.NumberOfPages; //pdf toplam kaç sayfadan oluşuyor
                    Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
                    // yaz
                    FileStream fs = new FileStream(kullanilacakYol + kullanilacakYeniKayitAd, FileMode.Create, FileAccess.Write);
                    PdfWriter writer = PdfWriter.GetInstance(document, fs);
                    document.Open();
                    //sayfa sayısı kadar dön
                    for (int s = 1; s <= pdfSayfaSayisi; s++)
                    {
                        document.NewPage(); //yeni sayfa oluşmasını sağladık
                        Rectangle size = reader.GetPageSizeWithRotation(s);
                        // pdf content
                        PdfContentByte cb = writer.DirectContent;
                        // font ayarları
                        string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "Arial.ttf");
                        BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                        cb.SetColorFill(BaseColor.BLACK);
                        cb.SetFontAndSize(bf, 9);
                        // verileri yaz
                        int baslangicKoordinatX = 0;
                        int baslangicKoordinatY = 792;
                        var veriFormData = Islem.FormData.Listele(formId, s);
                        //form dataları varsa
                        if (veriFormData != null)
                        {
                            //formda kullanılacak data sayısı kadar dön
                            for (int i = 0; i < veriFormData.Count; i++)
                            {
                                var formDataAd = veriFormData[i].DataAd;
                                float formDataKoordinatX = Convert.ToUInt32(veriFormData[i].KoordinatX);
                                float formDataKoordinatY = Convert.ToInt32(veriFormData[i].KoordinatY);
                                var cekilecekData = veriPersonel.GetType().GetProperties().Single(p => p.Name == formDataAd);
                                var yazilacakData = cekilecekData.GetValue(veriPersonel);
                                if (yazilacakData != null)
                                {
                                    cb.BeginText();
                                    cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, yazilacakData.ToString(), baslangicKoordinatX + formDataKoordinatX, baslangicKoordinatY - formDataKoordinatY, 0);
                                    cb.EndText();
                                }
                            }
                        }
                        // pdf oluştur
                        PdfImportedPage page = writer.GetImportedPage(reader, s);
                        cb.AddTemplate(page, 0, 0);
                    }
                    // kapat
                    document.Close();
                    //fs.Flush();
                    fs.Close();
                    writer.Close();
                    reader.Close();
                    return olusanDosyaYolVeAd;
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
            return olusanDosyaYolVeAd;
        }

0

ASP.NET MVC AJAX İLE VERGİ NO DOĞRULAMA

Cumartesi, Mayıs 05, 2018 / / , , , ,

Girilen vergi numarasının doğru olup olmadığı aşağıdaki şekilde kullanılabilir.

Contoller tarafı

        [HttpPost]
        public JsonResult VergiNoKontrol(string no)
        {
            if (ModelState.IsValid)
            {
                if (no.Length == 10)
                {
                    var x = new int[9];
                    var y = new int[9];
                    for (int i = 0; i < 9; i++)
                    {
                        x[i] = (int.Parse(no[i].ToString()) + 9 - i) % 10;
                        y[i] = (x[i] * (int)Math.Pow(2, 9 - i)) % 9;
                        if (x[i] != 0 && y[i] == 0)
                        {
                            y[i] = 9;
                        }
                    }
                    int hesap = ((10 - (y.Sum() % 10)) % 10);
                    string sonKarakter = no.Substring(9, 1);
                    if (hesap == Convert.ToInt32(sonKarakter))
                    {
                        return Json(new { Durum = true }, JsonRequestBehavior.AllowGet);
                    }
                    //return ((10 - (y.Sum() % 10)) % 10) == int.Parse(vkn[9].ToString());
                }
                else
                {
                    return Json(new { Durum = false }, JsonRequestBehavior.AllowGet);
                }
            }
            return Json(new { Durum = false });
        }



View tarafı

<script type="text/javascript">
    $(function () {
        var isSuccess = false;
        $("#txtVergiNo").focusout(function () {
            //alert("kontrol et");
            var kontrolEdilecekBilgi = $("#txtVergiNo").val();
            if (kontrolEdilecekBilgi == "") {
                //$("#mesajMetin").text("Lütfen tüm alanları doldurunuz!");
                //$("#mesaj").show();
                return;
            }
            var data = { no: kontrolEdilecekBilgi };
            $.ajax({
                type: 'POST',
                url: "/Cari/VergiNoKontrol",
                data: JSON.stringify(data),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                success: function (sonuc) {
                    //alert(sonuc.Durum);
                    if (sonuc.Durum == true) {
                        isSuccess = true;
                    }
                },
                complete: function () {
                    if (isSuccess == true) {
                        //alert("true")                     
                    } else {
                        //alert("Vergi No Hatalı! Lütfen kontrol ediniz.");
                        swal("Vergi No Hatalı!", "Lütfen kontrol ediniz..", "error")
                    }
                    isSuccess = false;
                }
            });
            })
    });
</script>

0

ASP.NET MVC RAZOR @ KAÇIŞ YÖNTEMLERİ

Çarşamba, Mart 07, 2018 / / , , , ,

Örneğin eposta adresinin girileceği bir textbox kontrolünün placeholder özelliğine @ işareti yazdığınızda bunu Razor kodu gibi algılayıp hata verecektir. Bu ve benzeri durumlarda aşağıdaki yöntem kullanılabilir. 


@Html.Raw("@")

0

ENTITY İLE LIST TİPİNDE GELEN VERİLERİ DATATABLE'A AKTARMA

Cumartesi, Şubat 10, 2018 / / , , ,

Entity ile List<> türünde gelen kayıtları DataTable içine aktaran fonksiyon..



        public static DataTable DataTableYap<T>(List<T> items)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);
            PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (PropertyInfo prop in Props)
            {
                var type = (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) ? Nullable.GetUnderlyingType(prop.PropertyType) : prop.PropertyType);
                dataTable.Columns.Add(prop.Name, type);
            }
            foreach (T item in items)
            {
                var values = new object[Props.Length];
                for (int i = 0; i < Props.Length; i++)
                {
                    values[i] = Props[i].GetValue(item, null);
                }
                dataTable.Rows.Add(values);
            }
            return dataTable;
        }


Çağır..

            var tekrarsizKayitlar = Islem.Finans.ListeleRapor(cariTip:0, sehirId: secilenSehirId, ilceId: secilenIlceId, durum: 1);
            //gelen kayıtları datatable içine at
            DataTable dtRapor = new DataTable();
            dtRapor = DataTableYap(tekrarsizKayitlar);

SON YORUMLAR