Outlook mail nesnesi içerisine özel alanlar ekleme ve yeni görünüm oluşturma

28. June 2006
Daha önceki yazılarımda outlook'ta nasıl yeni bir dizin oluşturulacağını ve yine bu oluşturduğunuz dizine nasıl yeni bir mail nesnesi ekleyeceğinizi anlatmıştım. Oluşturduğunuz bu maildeki mesaj, konu, gönderen v.b. alanların dışında aşağıda örneğini bulacağınız kod ile kendi özel alanlarınızı da ekleyebilirsiniz :
Outlook.MailItem mailNesnesi = (Outlook.MailItem)olusturdugumDizin.Items.Add(Outlook.OlItemType.olMailItem);
mailNesnesi.Subject = "Mailin Konusu";
mailNesnesi.To = "gonderilecek@adres.com";

 mailNesnesi.Body = "Mailimin içeriği";
Outlook.UserProperty musteriKodu = mailNesnesi.UserProperties.Add("MüsteriKodu", Outlook.OlUserPropertyType.olText, true, System.Reflection.Missing.Value);

musteriKodu.Value = "";
mailNesnesi.Save();
Burada vermiş olduğum "müşteri kodu" alanı mail nesneniz içerisindeki normal alanlar dışında sizin yeni bilgileyeceğiniz alanlara bir örnek. Bu bilgiyi, örneğin, müşterinizi takip edebilmek için kullanabilirsiniz. Bu bilginin ardında şöyle bir soru aklınıza gelebilir : "Peki ben bu bilgiyi outlook içerisinde görsel olarak nasıl kullanıcıya yansıtabiliriz?". Bunun için yapmanız gereken oluşturduğunuz dizine yeni bir görünüm (view) eklemek. Aşağıdaki kod parçacığında yeni bir görünüm nasıl ekleyeceğinizi göreceksiniz :
Outlook.View ozellestirilmisGorunum= dizinim.Views["Ozellesirilmis Gorunumum"];

if (ozellestirilmisGorunum== null) {
  ozellestirilmisGorunum= dizinim.Views.Add(
     Resources.WorkItemsViewName,
     Outlook.OlViewType.olTableView,
     Outlook.OlViewSaveOption.olViewSaveOptionThisFolderEveryone);
}
  ozellestirilmisGorunum.XML = "Görünümün bulunduğun xml içeriği";

  ozellestirilmisGorunum.Save();
  ozellestirilmisGorunum.Apply();
Bu kodda önemli olan nokta görünümünüzü tanımlayacağınız xml içeriğidir. Bu xml dosyasının içeriğine bir örneği aşağıda bulabilirsiniz :
<?xml version="1.0"?>
<view type="table">
  <viewname>Messages</viewname>
  <viewstyle>table-layout:fixed;width:100%;font-family:Tahoma;font-style:normal;font-weight:normal;font-size:8pt;color:Black;font-charset:0</viewstyle>
  <viewtime>0</viewtime>
  <linecolor>8421504</linecolor>
  <linestyle>3</linestyle>
  <usequickflags>1</usequickflags>
  <collapsestate></collapsestate>
  <rowstyle>background-color:#FFFFFF</rowstyle>
  <headerstyle>background-color:#D3D3D3</headerstyle>
  <previewstyle>color:Blue</previewstyle>
  <arrangement>
    <autogroup>1</autogroup>
    <collapseclient>01000000</collapseclient>
  </arrangement>
  <column>
    <heading>Müşteri Kodu</heading>
    <prop>http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/MüsteriKodu</prop>
    <type>string</type>
    <width>137</width>
    <style>padding-left:3px;text-align:left</style>
  </column>
  .
  .
  .
  <orderby>
    <order>
      <heading>Müşteri Kodu</heading>
      <prop>http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/MüsteriKodu</prop>
      <type>string</type>
      <sort>desc</sort>
    </order>
  </orderby>
  <groupbydefault>1</groupbydefault>
  <previewpane>
    <visible>1</visible>
    <markasread>0</markasread>
  </previewpane>
</view>

Burada Müşteri kodu alanını column xml tag'lerinin arasında tanımlıyoruz. heading tag'i içerisine yazacağınız string türünden ifade bu alan için gösterilecek olan başlıkta kullanılacaktır. type tag'i bu alanın türünü belirtir; width alan genişliğini, style ise alanın gösterilme biçimi belirtir. Bu alana gelecek olan bilgiyi belirtmek için ise prop tag'i kullanılmaktadır. Bu alan içerisinde "http://schemas.microsoft.com/mapi/" ifadesinden hemen sonra gelen "string" alanın türünü, takip eden "{00020329-0000-0000-C000-000000000046}" ifadesi ise bu alanın UserProperties içerisinde olduğunu, son olarakta MusteriKodu ise UserProperties içerisinde hangi anahtarın altındaki veriyi kullacağımızı belirtir.

orderby tag'leri içerisindeki ifade ise hangi alana göre sıralacağını, groupbydefault ifadesi hangi alana göre gruplayacağını (ilgili alanın indisi); previewpane tag'i içerisindeki visible tag'i ise önizleme penceresinin görünür olup olmadığını belirtir. Biz visible alanına 1 değerini vererek önizlemek penceresinin açık hale gitrmiş olduk.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Türkçe, Outlook

Outlook'ta bir dizinde mail nesnesi oluşturma

20. June 2006

Outlook'a yazdığım bir eklentide yeni bir klasör oluşturup içine mailler koymak istiyordum. Klasörleri oluşturma kısmı kolay, sorunsuz şekilde yaptım; ama iş mailleri bu klasöre koymaya geldiğinde sorun yaşadım. Teorik olarak baktığınızda yapılacak işlem basit aslında klasör nesnesi üzerinden yeni bir mail oluşturacak ve ilgili verileri ayarladıktan sonra saklanacak. Tıpkı aşağıda olduğu gibi :

Outlook.MailItem mailNesnesi = (Outlook.MailItem)olusturdugumDizin.Items.Add(Outlook.OlItemType.olMailItem);
mailNesnesi.Subject = "Mailin Konusu";
mailNesnesi.To = "gonderilecek@adres.com";
mailNesnesi.Body = "Mailimin içeriği";
mailNesnesi.Save();

Teoride sorunsuz çalışması gereken bu kod, malesef ki derleyip çalıştırdığımda hiçte umduğum gibi çalışmadı. Mail nesnem oluşturuluyor; fakat benim istediğim dizin içerisinde değil Drafts dizini altında. Biraz araştırma yapınca, problemime yanıtı microsoft'un haber gruplarında buldum. Bu outlook işleri bizim adımıza kolaylaştırmasından (!?) dolayı olan bir durummuş. Oluşturulan her mail nesnesi otomatik olarak drafts dizini altına yerleştirilirmiş; işin ilginç yanı bu durum not veya diğer türlerde değil, sadece mail nesneleri için oluyormuş. Bu durumda yapılması gereken ise maili ilgili dizin altına kopyalamak. Bu durumda yukarıdaki kod'a bir satır ekleyerek problemim çözülmüş oluyor :

Outlook.MailItem mailNesnesi = (Outlook.MailItem)olusturdugumDizin.Items.Add(Outlook.OlItemType.olMailItem);
mailNesnesi.Subject = "Mailin Konusu";
mailNesnesi.To = "gonderilecek@adres.com";
mailNesnesi.Body = "Mailimin içeriği";
mailNesnesi.Save();

mailNesnesi.Move(olusturdugumDizin);
Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Türkçe, Outlook