2009-06-26 19 views
7

Bir iş akışı içinde, görev atamak istediğim bir kullanıcı adını arayamama gibi işlemek ve hata yapmak istiyorum. Bu yüzden kullanıcı adı mevcut değil, bir yöneticiyi e-postayla bilgilendireceğim, iş akışı geçmişine kaydedip iş akışını sonlandıracağım.Programsal Olarak Bir SharePoint İş Akışı İptal Etme

Soru, iş akışını, iş akışının içinden, SharePoint web sayfasında 'iş akışını sonlandır' düğmesini tıklıyormuşum gibi nasıl sonlandırırım.

[Güncelleştirme] Gerçekten iş akışını iptal eden ancak hemen değil SPWorkflowManager.CancelWorkflow() yöntemini denedim. Ne olur, kodları iptal etme işlemidir, ancak sonra iş akışım bir sonraki görevi oluşturmak için devam eder ve bir sonraki görevlerTaskChanged etkinliğinin vurulduğunda uyur. Sadece bir kez uykuya geçtiğinde, CancelWorkflow çağrıldığında değil, iş akışı sonlandırılır.

Bu, bir sonraki görevin oluşturulmasını istemediğim açık soruna neden oluyor. CancelWorkflow'u arıyorum çünkü o zaman ve orayı iptal etmek istiyorum. Bu MSDN Konu oldukça birkaç öneri vardır

+0

Bu sorunun cevabını hiç buldunuz mu? –

+0

Afriad değil. Orta iş akışını iptal etmek için işaretleyebilir ancak oradan ve sonra durdurmayabilirsiniz. –

cevap

9

: Burada

Terminating a SharePoint Workflow Programatically

succintly tam aynı bilgileri içeren bir blog-post var: Cancelling a SharePoint Workflow

Son ve en özel olarak Statik yöntemi kullanmanız gerekir: SPWorkflowManager.CancelWorkflow(SPWorkflow workflowInstanceToBeCancelled)

EDIT

CancelWorkflow statik bir sınıftır, bu yüzden aramayı değiştirdim.

+0

Bunu denedim ama sorunumu çözmedi. Bunu yansıtmak için ana gönderiyi güncelledim. –

+0

Başka biri SPWorkflowManager.CancelWorkflow() yöntemini denerse, ilk defa bunu kaçırırsınız. Yöntem statiktir, bu yüzden denemek istediğim SPSite'den alınabilecek iş akışı yöneticisi nesnesini değil, kendisini sınıfın kendisinde aramak istersiniz. –

+2

Ama doğru aradığınızda doğru çalışıyor, değil mi? Yani, sınıfın kendisi SPWorkflowManager olarak adlandırdığınızda.CancelWorkflow (SPWorkflow iş akışıInstance); o zaman yapması gereken şeyi yapar. – DevinB

0

Bunun en iyi yol olup olmadığından emin değilim, ama sadece hatayı yakaladım, giriş yaptıktan sonra yeniden atıyorum. Bu, listede "Hata Oluşan" durumuyla sonuçlanır ve iş akışını hemen durdurur.

protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider) 
{ 
    try 
    { 
     // do work 
     // ... 
    } 
    catch (Exception e) 
    { 
     // log the error to the history list 
     // ... 
     throw; 
    } 

    return ActivityExecutionStatus.Closed; 
} 
0

Bu oldukça eski bir soru ama hemen kendisinden iş akışını iptal etmek kod parçası kullanarak kolaydır: Bu örnekteki

SPWorkflowManager.CancelWorkflow(workflowProperties.Workflow); 
throw new Exception(); 

workflowProperties

public SPWorkflowActivationProperties workflowProperties = 
      new SPWorkflowActivationProperties(); 

CancelWorkflow yöntemi olduğu iş akışını "iptal etme" olarak işaretler, ancak duraklatılıncaya (duraklatılmamış olayın beklenmesi gibi) veya iş akışındaki istisnaya kadar durdurmaz. Bir sonraki yeni Exception() ifadesi iş akışını durduracak ve "İptal edildi" durumunu ayarlayacaktır.

İlgili konular