29 Temmuz 2011 Cuma

Delay Activity Timeout Duration

İş akışı geliştirirken akışın belli bir yerinde bekletilmesi gerektiğinde "Delay Activity" kullanırız.
Akış belli bir süre bekletildikten sonra devam eder. Bekleme süresini aşağıdaki kod parçası ile belirtebiliriz.
public TimeSpan delayActivity1_TimeoutDuration = default(System.TimeSpan);
private void delayActivity1_InitializeTimeoutDuration(object sender, EventArgs e)
{
    DateTime before = DateTime.Now;
    DateTime after = DateTime.Now.AddDays(1);
    TimeSpan delta = after.Subtract(before);
    delayActivity1_TimeoutDuration = delta;
    delayActivity1.TimeoutDuration = delayActivity1_TimeoutDuration;
}

Sharepoint 2010 Delay Activity

Uzun aradan sonra tekrar merhaba,

Sharepoint 2010 ile iş akışları geliştirirken delay activity kullanma ihtiyacı duymuştum.
Herşey gayet düzgün çalışıyor ve hiçbir sıkıntı yoktu ancak bir türlü delay activity tetiklenmiyor ve çalışmıyordu.
Bunun üzerine biraz "etrafa" bakınmadan sonra MSDN'de "Job-workflow: Stsadm property" başlığına denk geldim.
Hemen getproperty komutunu kendi portalımda çalıştırıp aşağıdaki sonucu aldım.
<Property Exist="No" />
sonucu aldıktan sonra
stsadm -o setproperty -pn job-workflow -pv "Every 5 minutes between 0 and 59" -url http://mavi
Komutunu çalıştırıp iisreset ve Sharepoint 2010 Timer servisini yeniden başlattıktan sonra delay activity tetiklenmeye başladı.

Siz de bu şekilde böyle bir sürpriz yaşarsanız stsadm yardımınızda :) Diğer job çalışma aralıkları ise;

  • "Every 5 minutes between 0 and 59"
  • "Hourly between 0 and 59"
  • "Daily at 15:00:00"
  • "Weekly between Fri 22:00:00 and Sun 06:00:00"
  • "Monthly at 15 15:00:00"
  • "Yearly at Jan 1 15:00:00"

22 Eylül 2010 Çarşamba

Debugging Linq

Linq sorguları yazarken yaşadığmız en büyük sıkıntı debug işlemi yaparken breakpointin sorgu içerisine girmemesi ve bu nedenle  düzgün testini yapamayışımız olmuştur.

Ancak sorgudaki kısmı yeni bir method içerine alarak sorgu içerisindeki verilerin kontrolü yapabilmekteyiz.

var customers = from customerList in dataContext.Customers
                where customerList.Title.StartsWith("M") == true
                select customerList;

Yukarıdaki sorguyu debug ederken kontrol edemiyorken

var customers from customerList in dataContext.Customers
                where IsStartingWith(customerList,"M")
                select customerList;

private bool IsStartingWith(CustomerItem customerListstring value)
{
    return customerList.Title.StartsWith(value) == true;
}

Yeni bir method ile kontrol edebiliyoruz artık.

HTTPContext in EventHandler

Listemizde item eklerken, ekledikten sonra vs. yapmak istediğimiz işlemler için veya filedlerdeki dataların kontrolü için EventReceiver geliştirebilir ve eklenen dataya göre işlemler yapabiliriz.

Sharepoint 2010 yeniliği olan validationlarla kolonlardaki kontrolleri sağlayabilir ve EventReceiver geliştirmeye gerek olmayabilir veya "Sharepoint 2010 Event Handler ve Hata Sayfası" başlıklı yazımda da belirttiğim üzere başka bir sayfaya yönlendirmek için

properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
properties.RedirectUrl = "/_layouts/MyCustomPage.aspx";

EventReceiver'ın statüsünü "CancelWithRedirectUrl" yaptıktan sonra yönelenicek sayfayı yazarak sayfa yönlendirmesi yapabiliriz.

Ancak sayfa yönlendirme yapmak istediğimizde SPUtility.Redirect methodunun çağırmak istediğimizde HttpContext tipinden bir parametre istemekte veya Response.Redirect methodunu bulamamaktayız bu sıkıntı yukarıdaki şekilde bir bakıma Sharepoint 2010 ile çözülebilirken MOSS 2007 de daha çok karşımıza çıkmaktadır.

EventReceiver'a HttpContext eklemeyi aşağıda bulabileceksiniz ancak onun öncesinde SPUtility.Redirect methodunun yönlendirme yapmadığını bundan dolayı Response.Redirect methodunu kullanmamız gerektiğini belirtmek isterim.

EventReceiverımızı oluşturduğumuz isimle aynı olacak şekilde base() den türetilecek bir method ve global oluşturacağımız HttpContext tipinden değişken ile bu işi çözebileceğiz :)

Bununla ilgili örnek kodu aşağıda bulabilirsiniz.
/// 
/// List Item Events
/// 
public class TestHttpContext : SPItemEventReceiver
{
    private HttpContext _currentContext = null;
 
    public TestHttpContext() : base()
    {
        if (null != HttpContext.Current)
        {
            _currentContext = HttpContext.Current;
        }
    }
 
    /// 
    /// An item is being added.
    /// 
    public override void ItemAdding(SPItemEventProperties properties)
    {
        base.ItemAdding(properties);
        string url = "http://www.yahoo.com/?n=" + _currentContext.User.Identity.Name;
        _currentContext.Response.Redirect(url);
    }        
}

14 Eylül 2010 Salı

Sharepoint 2010 Feature Activation in Visual Studio 2010

Bundan önceki yazılarımda ve 2010 yeniliklerinde en dikkat çeken husus visual studio 2010 ile sharepoint 2010'un birlikte çok güzel işler çıkartması olmuştur.
Bu yazımda Sharepoint 2010 projemizi deploy ederken featurların aktivasyonları ile ilgili visual studio içerisinde neler yapabileceğimiz olacaktır.

Yeni bir sharepoint projesi veya visual webpart oluşturduğumuzda projemize "Features" klasörü eklenmektedir.
Feature içerisinde nelerin olacağını proje yapınıza göre oluşturabilirsiniz.
Geliştirme ve deployment kolaylığı açısından Lists, ContentTypes, WebParts veya Modül bazlı olarak her birine yeni bir feature oluşturmak sizlere yönetim açısından rahatlık sağlayabilir.

Feature1 üzerindeyken F4 derseniz yalnızca Featureın adının yer aldığı properties ekranı gözükmektedir.
Ancak Feature1 e tıkladığımız da gelen ekran üzerinden F4 dediğinizde properties pencerisini açtığımızda Feature ile ilgili özellikleri görebilmekteyiz.
Bu ekranda "Activation on Default" seçeneği Web veya Site Scope bazında bir işlem yapmamakta yalnızca FarmScope seçili olduğunda ve yeni bir web oluşturulduğunda devreye girmektedir.

Bunun dışında feature aktifleştirme ile ilgili yapabileceğimiz diğer değişikliği projemizin özellikler ekranından görebilmekteyiz.
Burada default olarak gelen ekranda
Yükleme adımlarında "Activate Features" da seçili olduğundan featurelar aktif olarak yüklenecek.
Ancak
Default olarak gelen seçenekler içerisinden "No Activation" seçip yüklediğimizde Featurelar aktifleştirilmeyecektir.
İsterseniz proje özelliklerinin bulunduğu ekranda default gelenlerin dışında siz kendi yükleme adımlarınızı oluşturabilirsiniz.
Bu noktada proje yapısına göre hangi feature elle aktifleştirilmeli, hangisi deployment ile otomatik aktifleştirilmeli veya aktifleştirilmemeli önemli bir noktadır.
Bir bakmışsınız aktifleştirme yaparken proje ile daha önce yüklenen Sharepoint Listenizin uçtuğuna şahit olabilirsiniz!