Workflowkurulumadimlariv19kk 170502061459 PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 72

WorkFlow Kurulum Kılavuzu

Dr. Kerem Köseoğlu


Tesuji Consulting
11/6/2009
2 WorkFlow Kurulum Kılavuzu

Contents
WorkFlow’a Genel Bakış ................................................................................................................ 4
WorkFlow Altyapısının Kurulması ................................................................................................... 5
Olayların Etkinleştirilmesi .............................................................................................................. 8
WorkFlow’un Hazırlanması ...........................................................................................................11
WorkFlow’un Açılması ..............................................................................................................11
WorkFlow’u Başlatmak .............................................................................................................11
Batch Input Yöntemi .............................................................................................................11
Event Yöntemi ......................................................................................................................13
WorkFlow Adımlarının Oluşturulması ........................................................................................16
Function Module / Class........................................................................................................16
Business Object / Class ..........................................................................................................16
Task .....................................................................................................................................18
WorkFlow Step .....................................................................................................................21
Task’i General Task Haline Getirmek ......................................................................................21
Attachment ..........................................................................................................................21
İkinci Pencere Açmak ............................................................................................................26
Agent’ların Atanması ................................................................................................................26
Superior Of Workflow Initiator...............................................................................................26
Rule .....................................................................................................................................27
Role .....................................................................................................................................31
Job.......................................................................................................................................31
Organizational Unit...............................................................................................................31
Position................................................................................................................................31
User .....................................................................................................................................31
Expression............................................................................................................................31
Binding İşlemlerinin Yapılması ...................................................................................................32
İşlem Kodunun Bağlanması .......................................................................................................34
WorkFlow’ların İzlenmesi..............................................................................................................35
WorkFlow İletilerinin E-Posta Olarak Gönderilmesi.........................................................................36
Otomatik Bildirim .....................................................................................................................36
Kullanıcı Ayarları ...................................................................................................................36
Diğer Ayarlar ........................................................................................................................38
Manuel Bildirim........................................................................................................................40
3 WorkFlow Kurulum Kılavuzu

Netweaver Çözümü...............................................................................................................40
Java Çözümü.........................................................................................................................42
E-Posta Dönüşü ....................................................................................................................44
Vekalet Durumunda Vekilin Tespiti ............................................................................................46
WorkFlow İletilerinin Silinmesi ......................................................................................................47
Faydalı Workflow Nesneleri ..........................................................................................................48
Tablolar ...................................................................................................................................48
Modüllere Özel İpuçları ................................................................................................................48
DMS ........................................................................................................................................48
Döküman Yaratıldığı Anda WorkFlow Tetiklemek ....................................................................48
MM .........................................................................................................................................54
SAT & SAS İçin User Exit İle Agent Belirleme ...........................................................................54
Onay Durumunun Tespiti.......................................................................................................56
Programdan SAT Redddetmek ...............................................................................................62
Yetkilendirme ..............................................................................................................................64
Vekalet........................................................................................................................................65
Hatalar ve Çözümler.....................................................................................................................70
Genel Hatalar...........................................................................................................................70
WorkFlow Tetiklenmiyor .......................................................................................................70
WorkFlow’u Tekrar Başlatmak ...............................................................................................71
Configure RFC Destination Problemleri...................................................................................71
Anında Beliren Onay Ekranı ...................................................................................................71
Boş OOCU Listesi...................................................................................................................71
Hata İletileri .............................................................................................................................72
‘...’ görevinin işleme tayini yok ...............................................................................................72
Agents of type A cannot be defined .......................................................................................72
Object Type ‘WF’ Is Not Valid.................................................................................................72
SWF_RUN 594 ......................................................................................................................72
Diğer Agent hataları ..............................................................................................................72
Works Cited.................................................................................................................................72
4 WorkFlow Kurulum Kılavuzu

WorkFlow’a Genel Bakış


5 WorkFlow Kurulum Kılavuzu

WorkFlow Altyapısının Kurulması


WorkFlow altyapısının kurulması ve çalışır hale getirilmesi için, SWUD işlem koduna gidilir ve “Verify
Automatic Customizing” adımı çalıştırılır.

Uyarlamada şu adımlar takip edilmelidir:

Maintain Runtime Environment

Configure RFC Destination

WorkFlow işlerini yürütecek olan Background kullanıcı hesabı belirlenir. Varsayılan değerler
korunabilir. Bu adımı aktive edemiyorsanız, Configure RFC Destination Problemleri başlığına
göz atın.

Maintain Workflow System Administrator

Sistem yöneticisi belirlenir. Buraya, teknik mesajları inceleyip anlayabilecek olan sistem
yöneticisi hesabı girilmelidir.

Maintain Active Plan Version

T77S0 tablosundan tek bir satır girilecektir (PLOGI, PLOGI, 01)

Classify Decision Tas As General

Bu adımda listelenecek bütün görevler, “General Task” olarak işaretlenmelidir.

Schedule Background Job For Event Queue

Burada yapılabilecek örnek bir ayar, şu şekilde olabilir:


6 WorkFlow Kurulum Kılavuzu
7 WorkFlow Kurulum Kılavuzu
8 WorkFlow Kurulum Kılavuzu

Schedule Background Job For Clearing Report

Bu adımın bir kez yürütülmesi yeterlidir.

Maintain Definition Environment

Maintain Prefix Number

Bu adım, farklı geliştirme sınıflarında kullanılabilecek bir takım önek numaralarının


ayarlanması için gereklidir. Örnek bir konfigürasyon şu şekilde olabilir:

Classify Tasks As General

Test Workflows

Bu adım altındaki Task’lerin tamamının General Task olarak işaretlenmesi gerekir.

Customizing With Workflow

Bu adım altındaki Task’lerin tamamının General Task olarak işaretlenmesi gerekir.

Olayların Etkinleştirilmesi
Bu adım; DMS, SAT, SAS gibi standart bir WorkFlow sürecindeki olaylarla tetiklenecek bir WorkFlow
hazırlayacaksak gereklidir. Bu uyarlama için OOCU işlem koduna gidiyoruz.

Bu ekranda, SAP’nin çeşitli modüllerine ait aracı tayini ve olay bağlantılarını yapmak mümkündür. Bu
işin nasıl yapılacağını anlamak için, SAS onayı ile ilgili olayları aktive edelim.
9 WorkFlow Kurulum Kılavuzu

OOCU ana menüsünde MM  Satınalma adımına gidelim.

Olay Bağlantısının Etkinleştir

Bu adımda, önce “Olay bağlantısını etkinleştir” adımını takip edeceğiz. Karşımıza, çeşitli görevleri
barındıran bir liste çıkacak. SAS onayı için, bu liste üzerinde “WS20000075 – SAS Onayı” adımına
gidip, menüden Git  Nesneyi Görüntüle bağlantısına tıklayacağız.

Bu ekranda yapılması gereken uyarlama, şöyle olacaktır:

Burada girilen nesne tipi, SAS söz konusu olduğu için BUS2012 olarak seçilmiştir. Eğer SAT, DMS gibi
farklı bir nesne tipi söz konusu olsaydı, farklı bir nesne tipi ve farklı bir olay atanacaktı.

Bu ayardan sonra, bir önceki ekrana girip “Ayrıntılar” düğmesine tıklıyoruz.


10 WorkFlow Kurulum Kılavuzu

Burada tıklanması gereken iki yer vardır:

 Event linkage activated: Söz konusu olayı aktif hale getirir


 Error feedback: İş akışı üzerinde bir hata oluştuğunda, Event’i tamamen durdurmamayı
sağlamak için buraya “3” değerini giriyoruz.

İşimiz bittiğinde, düğmesine tıklayarak ekrandan çıkıyoruz. Herşey yolundaysa, görüntünün şu


hale gelmesi gerekir:

İşleyen Tayini

Bu bölümde, kullanılacak olan WorkFlow adımlarının “Genel görev” olarak belirlenmesi sade bir
kurulum için uygun olacaktır.
11 WorkFlow Kurulum Kılavuzu

WorkFlow’un Hazırlanması
WorkFlow’un Açılması
WorkFlow şemaları, SWDD işlem kodundan oluşturulur. Eğer standart süreçler dahilinde bir
WorkFlow oluşturuyorsak, sistemin getirdiği örnek WorkFlow’u kopyalayıp Z’li bir WorkFlow
oluşturmak uygun olacaktır. Aksi takdirde; sıfırdan Z’li bir WorkFlow oluşturacaksak, şemayı baştan
oluşturmak daha uygun olacaktır.

WorkFlow’u Başlatmak

Batch Input Yöntemi


Bu adım; WorkFlow’umuzu döküman yaratma, SAT güncelleme gibi standart bir olay neticesinde
tetikleyeceksek gereklidir.

Alternatif olarak, WorkFlow’u başlatmasını istediğiniz olay (mesela bir belgenin kaydedilmesi)
sırasında tetiklenen bir User Exit bulup, o User Exit içerisinden aşağıdaki gibi bir toplu girdi koduyla
WorkFlow’u kendi kendinize tetikleyebilirsiniz:

FUNCTION zsdwf_trigger_workflow.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_VBELN) TYPE VBELN_VA
*"----------------------------------------------------------------------

DATA:
lt_bdcdata TYPE bdcdata OCCURS 0 WITH HEADER LINE,
lf_optio TYPE ctu_params.

DEFINE bdc_dynpro.
clear lt_bdcdata.
lt_bdcdata-program = &1.
lt_bdcdata-dynpro = &2.
lt_bdcdata-dynbegin = 'X'.
append lt_bdcdata.
END-OF-DEFINITION.

DEFINE bdc_field.
clear lt_bdcdata.
lt_bdcdata-fnam = &1.
lt_bdcdata-fval = &2.
append lt_bdcdata.
END-OF-DEFINITION.

bdc_dynpro 'SAPLZSDWF_F' '0100'.


bdc_field:
'BDC_OKCODE' '=SAVE',
'GF_100-VBELN' i_vbeln.

lf_optio-dismode = 'A'.
lf_optio-defsize = 'X'.
lf_optio-racommit = 'X'.

CALL TRANSACTION 'ZSDWF06'


USING lt_bdcdata
OPTIONS FROM lf_optio.

ENDFUNCTION.

Yukarıdaki örnekte ZSDWF06 işlem kodu, iş akışının başlamasını sağlayacak olan işlem kodudur. İş
akışı başlatacak işlem kodlarının nasıl oluşturulacağı, İşlem Kodunun Bağlanması başlığında
12 WorkFlow Kurulum Kılavuzu

anlatılmıştır. Bunun çalışması için, iş akışında bir Start Form yaratmış olmanız gerekebilir – parametre
pas etmeniz bu şekilde olacaktır. Aşağıda, konuyla ilgili bir açıklama bulabilirsiniz (Wilson, 2007):

To define a start form go to the workflow builder and choose menu option Goto – Basic Data

Click the start forms tab

Click the new form icon to create a new form. Note that you need a structure defined as a
container element that has import as a property in order to use the wizard to create the form
for you. The wizard will bring all the fields from that structure onto the form. After it is
created you can go and edit the form using the normal screen painter.

Bunu yaptığınızda, WorkFlow penceresinde doğrudan kullanabileceğiniz bir Transaction yaratılmış


olacaktır. Ancak, bu Transaction’u Batch Input içerisinde kullanmaya kalkmayın.

Üstteki durumda; iş akışını özel bir programdan veya kullanıcıya herhangi bir parametre girdirme
ihtiyacı olmadan (dolayısıyla WorkFlow başlangıç ekranını göstermeden) başlatmak istiyorsanız,
aşağıdaki kod size yardımcı olabilir:

REPORT zsp_hrp_ebo_start_wf
NO STANDARD PAGE HEADING LINE-SIZE 255.

INCLUDE bdcrecxy.

DATA:
gf_opt TYPE ctu_params.

START-OF-SELECTION.

PERFORM bdc_dynpro USING 'SAPLSWY_WF_START' '0001'.


PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'GC_TASK'
'WS99900018'.

gf_opt-dismode = 'E'.
gf_opt-racommit = 'X'.
gf_opt-defsize = 'X'.
13 WorkFlow Kurulum Kılavuzu

gf_opt-racommit = 'X'.
gf_opt-nobinpt = 'X'.
gf_opt-nobiend = 'X'.

CALL TRANSACTION 'WF_START' USING bdcdata OPTIONS FROM gf_opt.

END-OF-SELECTION.

Event Yöntemi

Business Object
Business Object Event’i tetiklemek için aşağıdaki kodlardan faydalanabilirsiniz.

(...)

begin of lf_event,
objkey type sweinstcou-objkey,
evtid type swedumevid-evtid,
end of lf_event,

(...)

lf_event-objkey = lf_01-insid.

call function 'SWE_EVENT_CREATE'


exporting
objtype = 'ZMMBO_PB00'
objkey = lf_event -objkey
event = 'CREATED'
* CREATOR = ' '
* TAKE_WORKITEM_REQUESTER = ' '
* START_WITH_DELAY = ' '
* START_RECFB_SYNCHRON = ' '
* NO_COMMIT_FOR_QUEUE = ' '
* DEBUG_FLAG = ' '
* NO_LOGGING = ' '
* IDENT =
importing
event_id = lf_event -evtid
* RECEIVER_COUNT =
* TABLES
* EVENT_CONTAINER =
exceptions
objtype_not_found = 1
others = 2.

if sy-subrc <> 0.
rollback work.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
raising event_error.
endif.

if lf_event-evtid is initial.
rollback work.
message e010(zmmwf) raising wf_not_triggered.
endif.

Bu fonksiyonda ZMMBO_PB00, ilgili Business Object’in adıdır

Class
Class Event’i tetiklemek için aşağıdaki örneği inceleyebilirsiniz.

Tetiklenebilecek örnek bir Event (SE24):


14 WorkFlow Kurulum Kılavuzu

Event tetiklemek için kullanılabilecek parametrik bir örnek kod:

method event_create.

*PFD_I_EVENT TYPE SWO_EVENT Event ismi

*PFD_I_CLSNAME TYPE SEOCLSNAME Sınıf Adı

*PIT_I_PARAMETRE TYPE ZBCTT_PARAMETRE Parametreler - Tablo

*PFD_I_COMMIT TYPE FLAG DEFAULT 'X' Commit work

*CX_SWF_EVT_INVALID_OBJTYPE Error in Class / Object Type

*CX_SWF_EVT_INVALID_EVENT Error in Event

data: l_event_parameters type ref to if_swf_ifs_parameter_container,

l_cls_instance type sibfinstid,

lwa_parametre type zbcs_parametre.

* İlgili eventlar ile boş bir konteyner yarat

call method cl_swf_evt_event=>get_event_container

exporting

im_objcateg = cl_swf_evt_event=>mc_objcateg_cl

im_objtype = pfd_i_clsname

im_event = pfd_i_event

receiving

re_reference = l_event_parameters.

* Değişkenleri set et

loop at pit_i_parametre into lwa_parametre.


15 WorkFlow Kurulum Kılavuzu

call method l_event_parameters->set

exporting

name = lwa_parametre-name "Parametre Adı

value = lwa_parametre-value. " Değeri

endloop.

* l_cls_instance = p_qmnum.

* Eventi tetikle

call method cl_swf_evt_event=>raise

exporting

im_objcateg = cl_swf_evt_event=>mc_objcateg_cl

im_objtype = pfd_i_clsname

im_event = pfd_i_event

im_objkey = l_cls_instance

im_event_container = l_event_parameters.

if pfd_i_commit ne space.

commit work.

endif.

endmethod.

Bu Method’u çağırarak Event tetikleyen örnek kod:

REFRESH lit_parametre.

lwa_parametre-name = 'PFD_I_POSID'.

lwa_parametre-value = pfd_i_posid.

APPEND lwa_parametre TO lit_parametre.

lwa_parametre-name = 'PFD_I_POSNR'.

lwa_parametre-value = pfd_i_posnr.

APPEND lwa_parametre TO lit_parametre.

zbccl_wf=>event_create( pfd_i_event = 'YARATILDI'


16 WorkFlow Kurulum Kılavuzu

pfd_i_clsname = 'ZIMCL_YATIRIM_TALEBI'

pit_i_parametre = lit_parametre

pfd_i_commit = space ).

Bu Event’i dinleyen örnek WorkFlow:

Manuel
İş akışı ilişkili bir Event’i manuel tetiklemek için, SWUE işlem kodunu kullanabilirsiniz.

WorkFlow Adımlarının Oluşturulması

Function Module / Class


WorkFlow’da çalışacak her bir kod için, önce bir fonksiyon / Method yazmamız gerekmektedir. Eğer
ekran üzerinden veri girişi yapılacaksa; söz konusu fonksiyonun ait olduğu grupta bir ekran yaratıp,
söz konusu ekranı fonksiyon içerisinde “Call Screen” komutuyla çağırarak aktive edebiliriz.

Eğer standart bir süreç ile çalışacak bir WorkFlow söz konusuysa, normalde ekstra fonksiyon yazma
işimizin olmaması gerekir.

Object Oriented çalışacaksanız, yazacağınız Method’lar Static olmalıdır.

Business Object / Class


Bu çözümler birbirinin alternatifidir. Daha modern dünyada Class, daha eski dünyada Business Object
kullanılır.

Class
WorkFlow’un arkasına Class yazmaya karar verirseniz (önerilen yöntem), SE24’te yeni bir sınıf yaratıp
şu Interface’leri uyguladığınızdan emin olun:

 BI_OBJECT
 BI_PERSISTENT
17 WorkFlow Kurulum Kılavuzu

 IF_WORKFLOW
 IF_SWF_EVT_EVENT

Business Object
Business Object, bir WorkFlow arkasında çalışacak olan kodların Method ve Property’ler bazında
toparlandığı yerdir. SWO1 ekranından erişilebilirler.

Mesela; SAT onayları için BUS2012 adlı Business Object, döküman yönetimi için DRAW adlı Business
Object vardır. Eğer standart bir süreç ile çalışacak bir WorkFlow söz konusuysa, sistemdeki mevcut
Business Object’i kullanacağız. Aksi takdirde; kendi Z’li yapımıza uygun bir Business Object’i sıfırdan
yaratmamız gerekecek.

Business Object içerisindeki Method’ların her biri, bir fonksiyon referans alınarak yaratılır. Key Fields
ve Attributes ise, WorkFlow’a konu olan tabloların alanları referans alınacak yaratılır.

Bir Business Object’i yaratıp hazır hale getirdikten sonra, Edit  Change Release Status  Object
Type  To Implemented (veya Released) dememiz gerekir.

Aşağıda örnek bir Method kodu görebilirsiniz:

Method içerisinde “SWC_GET_ELEMENT” makrosu ile Container’den değişken alabilir,


“SWC_SET_ELEMENT” makrosu ile Container’e değişken aktarabiliriz. Bu şekilde modifiye edeceğimiz
değerler, methodu barındıran Task’in “Container” bölümünde tanımlanmış olmalıdır.
18 WorkFlow Kurulum Kılavuzu

Task
Bir Class / Business Object methodu ile WorkFlow adımı arasındaki köprüyü Task’ler kurar. Yani; bir
Method’u WorkFlow’da doğrudan doğruya kullanamayız. Doğru bağlantı; Method  Task 
WorkFlow Step şeklinde kurulmalıdır.

Task’ler; aşağıdaki menü adımlarından düzenlenebilir (işlem kodu: PFTC_INS):

Yeni bir Task yaratacak olursak, tipi TS – Standart Görev olacaktır.

Task içerisindeki kritik alanları görelim.

Temel Veriler
Bu bölümde; Object Oriented çalıştıysanız “CL” nesne kategorisini, Business Object bazlı çalıştıysanız
“BO” nesne kategorisini seçin. “Nesne Tipi” olarak ilgili Business Object’in / sınıfın adı, “Method”
olarak ise ilgili Method’un ismi girilecektir.
19 WorkFlow Kurulum Kılavuzu

Eğer yarattığınız Task bir kullanıcının WorkFlow ekranına düşmeden sistem tarafından işlensin
istiyorsanız, aşağıdaki kutucuğu da doldurun. Bunun yanı sıra, WorkFlow içerisinde Task’i “General”
olmaktan çıkarıp hiçbir Agent atamayın.

Tanım
Bu bölümde, iş akışının çeşitli metinleri tanımlanabilir. Bu metinler SAP içi mesajlarda veya E-Posta
iletilerinde kullanılacaktır.
20 WorkFlow Kurulum Kılavuzu

Buradaki metinlerin tercümesi için SE63 Diğer Uzun Metinler menüsünü kullanabilirsiniz. Örneğin,
8267 numaralı Task’in tercümesi için kullanmanız gereken kodlar:

PDTS00008267 0120

PDTS00008267 0121

PDTS00008267 ...

Sondaki 4 haneli rakam, Task ekranındaki metin koduna tekabül etmektedir:

Yaptığınız tercümeleri taşımak için ise Transport Request’iniz altında şöyle bir kayıt olmalıdır:
21 WorkFlow Kurulum Kılavuzu

Konteyner
Bu bölümde, Task’den (yani WorkFlow’dan) Method’a (yani fonksiyona) gönderilecek olan Container
değerleri tanımlanır. Fonksiyondan Container’e dönecek olan değişkenler de burada tanımlanır.

WorkFlow Step

Task’i General Task Haline Getirmek


Bir Task’i WorkFlow’a müdahele etmeden General Task haline getirmek isterseniz, şu adımları izleyin:

 PFTC_CHG işlem koduna girin


 Ek Veriler  Aracı Tayini  Bakımını Yap menüsüne gidin
 Özellikler’e girip Genel Görev’i tıklayın
 OK & Generate

Attachment
Zorunlu olmasa da; WorkFlow’a Attachment bağlamak gerekebilir. Bunun tipik bir örneği; beyaz
ekranlı Decision Task ekranına, ilgili SAP belgesine gidecek .SAP uzantılı bir Attachment eklemektir.

Bunun için, iş akışına yeni bir Task ekliyoruz.


22 WorkFlow Kurulum Kılavuzu

Task’in detayları şöyle olmalı:


23 WorkFlow Kurulum Kılavuzu
24 WorkFlow Kurulum Kılavuzu

Task’in arkasındaki Business Object ile, SWO1’de SOFM’dan kopyalanmıştır. Eklenen “ATTACHDOC”
Method’u ise şöyledir:

begin_method attachdoc changing container.


data: v_xstring type xstring,
v_workitemid type swr_struct-workitemid,
v_att_header type swr_att_header,
v_att_id type swr_att_id,
v_submi type ekko-submi,
v_syuname type syuname.

* get the input values


swc_get_element container 'WorkitemId' v_workitemid.
swc_get_element container 'submi' v_submi.

call function 'ZMMF_TEKLIF_LINK'


exporting
pfd_i_submi = v_submi
importing
pfd_e_xstring = v_xstring.

* document file attributes


* get the extension name

v_att_header-file_type = 'B'.
v_att_header-file_name = v_submi.
concatenate 'TeklifGrpNo_' v_submi '.SAP' into v_att_header -file_name.
v_att_header-file_extension = 'SAP'.
v_att_header-language = sy-langu.

call function 'SAP_WAPI_ATTACHMENT_ADD'


exporting
workitem_id = v_workitemid
att_header = v_att_header
att_bin = v_xstring
importing
att_id = v_att_id.
25 WorkFlow Kurulum Kılavuzu

data: lo_attachment type swc_object.


swc_create_object lo_attachment 'SOFM' v_att_id-doc_id.
if sy-subrc = 0.
swc_set_element container 'SOFM' lo_attachment.
else.
"raise error
endif.

* pass attachment id and internal document number for SOFM


* SWC_SET_ELEMENT CONTAINER 'ATT_ID' V_ATT_ID.
* SWC_SET_ELEMENT CONTAINER 'SOFM' V_ATT_ID-DOC_ID.

end_method.

Buradaki ZMMF_TEKLIF_LINK fonksiyonunun içeriği:

function zmmf_teklif_link .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(PFD_I_SUBMI) TYPE EKKO-SUBMI
*" EXPORTING
*" REFERENCE(PFD_E_XSTRING) TYPE XSTRING
*"----------------------------------------------------------------------

*** Declaration for shortcut content


data : lfd_parameter type text255,
lfd_string type string,
lfd_ekorg type ekko-ekorg.

select single ekorg


from zmmt_tklf_log_b
into lfd_ekorg
where submi eq pfd_i_submi.

clear pfd_e_xstring.
lfd_parameter = 'p_action=EXECUTE;'.
concatenate lfd_parameter 'P_SUBMI-LOW=' pfd_i_submi ';P_EKORG=' lfd_ekorg ';'
into lfd_parameter.
concatenate lfd_parameter 'DYNP_OKCODE=/00' into lfd_parameter .

*** create the shortcut content for the required transaction


call function 'SWN_CREATE_SHORTCUT'
exporting
i_transaction = '*ZMM001'
i_parameter = lfd_parameter
i_sysid = sy-sysid
i_client = sy-mandt
i_user = space
i_language = sy-langu
i_windowsize = 'Normal window' "Maximized
importing
shortcut_string = lfd_string
exceptions
inconsistent_parameters = 1
others = 2.
if sy-subrc eq 0.
call function 'SCMS_STRING_TO_XSTRING'
exporting
text = lfd_string
importing
buffer = pfd_e_xstring.
endif.
26 WorkFlow Kurulum Kılavuzu

endfunction.

İkinci Pencere Açmak


“User Decision” içinde ikinci bir pencere açıp belgeyi görüntülemek istersek;

Opsiyonel adım 1: BOR’un dinamik yaratılması. BOR zaten varsa buna gerek yok:

Adım 2: Task’in içinde “Görüntüle” Method’unun çağırılması:

Agent’ların Atanması
Agent atama bölümünde seçilebilecek birkaç değer vardır, bunları aşağıda bulabilirsiniz. Z’li program
/ raporlarda, atanan bir Agent’ın adını almak için SWD_AGENT_TEXT_GET fonksiyonu kullanılabilri.

Superior Of Workflow Initiator


Bu değer, WorkFlow’u başlatan kişinin yöneticisini temsil etmektedir.
27 WorkFlow Kurulum Kılavuzu

Rule
Dikkat! 4.x sistemlerinde “ROLE” olarak geçen kavram, 5.x itibariyle “RULE” olarak değiştirilmiş ve
“ROLE” diye yepyeni bir kavram getirilmiştir.

Rule’lar sayesinde, WorkFlow’un herhangi bir adımındaki Agent dinamik olarak (ABAP kodu ile)
belirlenebilir. Bu işlem için izlenmesi gereken birkaç adım vardır. Bu adımları bir örnek çerçevesinde
inceleyelim.

Fonksiyonun Yazılması
Söz konusu fonksiyon, EDI_ROLE_FOR_PROC_CHECKDUMMY kopyalanarak yazılabilir1. Bu
fonksiyonun amacı, WorkFlow’daki duruma göre muhatapları belirleyip geri döndürmek olacak.

Fonksiyon grubu içerisinde, Container’den değer almak & Container’e değer atamak için şu tanım
yapılmalıdır:

include <cntain>.

Fonksiyon içerisinde izlenmesi gereken 3 adım vardır:

1. Container’den gerekli bilgileri almak


2. Z’li tablolardan (veya başka bir şekilde) ilgili muhatabı/muhatapları tespit etmek
3. Söz konusu muhatapları ACTOR_TAB içerisinde doldurmak

Yazılmış örnek bir muhatap fonksiyonu kodunu inceleyelim:

function zfakorul1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" ACTOR_TAB STRUCTURE SWHACTOR
*" AC_CONTAINER STRUCTURE SWCONT
*" EXCEPTIONS
*" NOBODY_FOUND
*" NO_ACTIVE_PLVAR
*"----------------------------------------------------------------------

* define variables stored in container


* local data
data:
lf_doc2 type zfakdoc2,

lv_docid like zfakdoc2-docid,


lv_posnr like zfakdoc2-posnr.

swc_get_element ac_container 'DOCID' lv_docid.


swc_get_element ac_container 'POSNR' lv_posnr.

select single * into lf_doc2 from zfakdoc2


where docid eq lv_docid
and posnr eq lv_posnr.

if not lf_doc2-user1 is initial.


actor_tab-otype = 'US'.
actor_tab-objid = lf_doc2-user1.
append actor_tab.
endif.
if not lf_doc2-user2 is initial.
actor_tab-otype = 'US'.

1Sistemde temel alınabilecek birçok fonksiyon vardır. Önemli olan, fonksiyonun ACTOR_TAB ve AC_CONTAINER
parametrelerine sahip olmasıdır.
28 WorkFlow Kurulum Kılavuzu

actor_tab-objid = lf_doc2-user2.
append actor_tab.
endif.
if not lf_doc2-user3 is initial.
actor_tab-otype = 'US'.
actor_tab-objid = lf_doc2-user3.
append actor_tab.
endif.

endfunction.

Buradaki en basit yaklaşım, ACTOR_TAB’e “US” anahtarıyla bir kullanıcı eklemektir.

Rule’un Yaratılması
Fonksiyon yazıldıktan sonra, sıra Rule tanımlamasına gelir. Bunun için PFAC_INS işlem koduna veya
ilgili menüye gidip yeni bir Rule yaratıyoruz.

Rule Definition bölümünde;

 Category kısmında “Function to be Executed” değerini seçiyoruz


 Function Module kısmında, daha önce yaratmış olduğumuz fonksiyonun ismini giriyoruz
29 WorkFlow Kurulum Kılavuzu

Burada “Terminate if Rule Resolution Without Result” tıkının atıldığından emin olun. Aksi takdirde;
koddaki bir hatadan dolayı Agent belirlenemezse ve Task Generic ise, ilgili onay talebi sistemdeki tüm
kullanıcılara gidecektir.

Container bölümünde ise, yazdığımız fonksiyon içerisinde SWC_GET_ELEMENT ile değerini aldığımız
değişkenleri (IMPORTING şeklinde) tanımlıyoruz. Eğer SWC_SET_ELEMENT ile fonksiyondan
Container’e döndüreceğimiz değerler varsa, onları da (EXPORTING şeklinde) tanımlayabiliriz.

WorkFlow’a Uygulanması
Dinamik muhatap ataması yapacağımız adımın Agents bölümünde, AC – Rule değerini seçip karşısına
yarattığımız Rule’un kodunu giriyoruz.
30 WorkFlow Kurulum Kılavuzu

Ardından; “Binding” düğmesine tıklayıp, Container ve Rule arasında gidip gelecek olan değişkenleri
tanımlamamız gerekiyor. Yukarıdaki örnekte, DOCID ve POSNR değerlerini aktarmamız gerekiyor. 2

Agent ataması dinamik yapılacağından, söz konusu Task’in “Generic Task” olarak tanımlanmasında
fayda vardır. Bu işlem için, önce Task Properties bölümündeki Agent Assignment’a tıklıyoruz.

2 Eğer fonksiyondan Container’e değer dönüşü olsaydı, onu da aynı pencerenin alt tarafında tanımlayacaktık
31 WorkFlow Kurulum Kılavuzu

Gittiğimiz ekranda Task’i seçip “Attributes...” düğmesine tıklıyor ve “General Task” seçeneğini
tıklıyoruz.

Role
Bu değer, standart BC yetkilendirmesindeki role karşılık gelmektedir.

Job
Bu değer, HR şemasındaki bir Job’u temsil eder.

Organizational Unit
Bu değer, HR şemasındaki bir organizasyon birimini temsil eder.

Position
Bu değer, HR şemasındaki bir pozisyonu temsil eder.

User
Bu değer, sistemdeki bir kullanıcıyı temsil eder.

Expression
Buraya, Container’de bulunan SWHACTOR tipindeki bir muhatap değişkeni girilebilir.
32 WorkFlow Kurulum Kılavuzu

Binding İşlemlerinin Yapılması


WorkFlow’un her bir adımında, ilgili Task’e gönderilecek ve Task’den alınacak değerler
tanımlanmalıdır. Bu iş, adım detaylarındaki “Binding” düğmesi ile yapılır.

Aşağıda örnek bir Binding görebilirsiniz:

Binding sonucunda, değişkenlerin akış sırası şu şekilde olur:


33 WorkFlow Kurulum Kılavuzu

WorkFlow
Container

Task Task

Method Method

Function
34 WorkFlow Kurulum Kılavuzu

İşlem Kodunun Bağlanması


WorkFlow’u bir işlem kodu ile başlatmak istiyorsanız, SE93 ekranında aşağıdaki özelliklere sahip bir
Parameter Transaction yaratın:

Buradaki GC_TASK değeri, yaratmış olduğunuz WorkFlow’un ID’si olmalıdır.


35 WorkFlow Kurulum Kılavuzu

WorkFlow’ların İzlenmesi
WorkFlow hataları ortaya çıkıyorsa, yapılacak ilk iş SWU_OBUF işlem kodunda bir senkronizasyon
yapılmasıdır. Bunun ötesinde, başlamış WorkFlow’ların izlenmesi için SWI6 / SWI14 işlem kodları
kullanılabilir. Aşağıda, örnek bir rapor görebilirsiniz:

Burada seçilmiş herhangi bir adımın detaylarını görmek için, yukarıdaki “Log” düğmesine tıklanabilir.

Aynı ekran üzerinde, “Graphic” düğmesi ile akışı görsel olarak da izlemek mümkündür.
36 WorkFlow Kurulum Kılavuzu

WorkFlow İletilerinin E-Posta Olarak Gönderilmesi


Otomatik Bildirim
Bu işlem, NetWeaver ve Web Application Server bulunan yerlerde otomatik olarak yapılabilmektedir.

Kullanıcı Ayarları

Eski Sistemler
Öncelikle, E-Posta iletisi almak isteyen kullanıcı ile Login olup SO12 ekranına gidiyoruz.

Bu ekranda, “Otomatik İletim” sekmesinde “Create” düğmesine tıklıyoruz.


37 WorkFlow Kurulum Kılavuzu

Açılacak olan pencerede, E-Posta iletilerinin gönderileceği adresi ve gönderim işleminin yapılacağı
tarih aralığını giriyoruz. Gerçek bir WorkFlow senaryosunda, bitiş tarihi olarak 31.12.9999 girmek
uygun olacaktır. 3

Yeni Sistemler
Yeni sistemlerde, üstteki Forward özelliğini kullanmaya gerek yoktur. Kullanıcı ana verilerindeki
(SU01) E-Posta adresi otomatik olarak kullanılır.

3 Yapmış olduğumuz bu ayar, SO36 ekranında birçok kullanıcı için toplu olarak yapılabilir.
38 WorkFlow Kurulum Kılavuzu

Diğer Ayarlar
Bu andan itibaren, kişinin Inbox’una düşecek olan SAP ve WorkFl ow iletileri, otomatik olarak bu
adrese iletilecektir. İletim işini yapacak programların düzenli Background Job’lar şeklinde kurulmuş
olması gerekmektedir:

RSWUWFML2

İş akışı iletilerini gönderir. İdeal durumda bu program bir varyant ile kurulmalıdır. Varyant
içerisinde, aşağıdaki seçim ekranı kriterleri ayarlanmalıdır:

Bu ekran üzerinde;

 Message Class for Subject & Message Number For Subject: Gönderilen E-Posta iletisinin
konusunu hangi ileti sınıfının (SE91) hangi iletisinden oluşturacağını belirtiyoruz. SE91
mesajı içinde iki parametre belirtebiliyoruz:
o &1 = Sistem tanımı (ARP gibi)
o &2 = Task’in içindeki metin
 Before Work Item Description: Gönderilecek iletinin içeriğine ait standart metni
belirliyoruz. Bu standart metin, SE61 işlem kodunda tanımlanabilir. SE61’de; döküman
sınıfı DT(Diyalogdaki metin) olarak ayarlanmalıdır.

Farklı iş akışları için farklı metinler söz konusu olacaksa; her bir iş akışı için ayrı ayrı varyantlar
oluşturup; her bir varyant için ayrı birer Job kurmak iyi bir fikir olacaktır.
39 WorkFlow Kurulum Kılavuzu

Eğer gönderilen iletilerin içeriğini iş akışı nesnesinden (onay talebi, vs) dinamik olarak değiştirmek
istersek, bu işlemi bu programın Z’li bir kopyasını alarak yapabiliriz. Değiştirilmiş örnek bir
program, ekte bulunmaktadır:

ZRSWUWFML2

Yeni sürümlerde aynı işi Enhancement’larla da yapabiliyoruz. Enhancement’lı bir örnek ektedir:

RSWUWFML2

SWN_SELSEN

Gecikmiş / cevaplanmamış iletileri tekrar gönderir. Bu programı normal şartlarda kurmaya gerek
yoktur.

Bu programların düzgün çalışması için, SCOT işlem kodundaki E-Posta ayarlarının düzgün bir şekilde
yapılmış olması gerekmektedir.

Gönderilmiş olan iş akışı iletileri, kabaca aşağıdaki görüntüye sahip olacaktır:

Kullanıcı işaretli bağlantılara tıklayarak, ekranında açılacak bir SAP Gui penceresi içerisinde gerekli
işlemi yapabilir.

Bu bağlantılara tıklandığında; kullanıcının hangi SAP sistemine Logon olacağı şuna bağlıdır: Gönderilen
link (EXECUTE WORK ITEM.SAP) içerisinde, kaynak sistemin 3 haneli kodu bulunmaktadır:
40 WorkFlow Kurulum Kılavuzu

Kullanıcının SAPGUI’sinde (örneğimizde) OXP girdisi hangi sistemde ise, bağlantıya tıkladığında o
sisteme Login olmaya çalışacaktır.

Birden fazla sistemde OXP tanımı varsa, daha üstte yer alan sisteme Login olunacaktır.

Manuel Bildirim
Netweaver bulunmayan, veya E-Posta’daki bağlantıya tıklayarak bir Web bağlantısı açmak isteyen
yerlerde ise, WorkFlow Inbox’unu periyodik olarak tarayıp, yeni mesajlar için E-Posta iletileri
oluşturup Z’li bir tabloya yazacak bir uygulama geliştirilmesi gerekir.

Netweaver Çözümü
Netweaver var ise, ilgili E-Posta atma fonksiyonu çağırılarak iletiler gönderilebilir. Aşağıda bu işi yapan
örnek bir program görebilirsiniz.

REPORT zwfmail .

DATA:
BEGIN OF gt_uname OCCURS 0,
uname LIKE sy-uname,
line TYPE so_text255,
wi_id TYPE sww_wiid,
END OF gt_uname.

START-OF-SELECTION.

PERFORM detect_msg.
PERFORM sendmail.
41 WorkFlow Kurulum Kılavuzu

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form sendmail
*&---------------------------------------------------------------------*
FORM sendmail.

DATA:
lt_cont TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
lt_rece TYPE STANDARD TABLE OF somlreci1 WITH HEADER LINE,
lf_docdat TYPE sodocchgi1,
lf_sent TYPE zwf_sent.

lf_docdat-obj_name = 'SAPOFFICE'.
lf_docdat-obj_descr = 'Onay Talebi'.

LOOP AT gt_uname.

REFRESH:
lt_cont,
lt_rece.

lt_cont-line = gt_uname-line.
APPEND lt_cont.

SELECT SINGLE smtp_addr INTO lt_rece-receiver


FROM adr6
WHERE addrnumber EQ ( SELECT addrnumber FROM usr21
WHERE bname EQ gt_uname-uname )
AND persnumber EQ ( SELECT persnumber FROM usr21
WHERE bname EQ gt_uname-uname ).
lt_rece-rec_type = 'U'.
APPEND lt_rece.

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'


EXPORTING
document_data = lf_docdat
commit_work = 'X'
TABLES
object_content = lt_cont
receivers = lt_rece
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.

IF sy-subrc EQ 0.
lf_sent-wi_id = gt_uname-wi_id.
INSERT zwf_sent FROM lf_sent.
ENDIF.

ENDLOOP.

SUBMIT rsconn01 AND RETURN.

ENDFORM. " sendmail


*&---------------------------------------------------------------------*
*& Form detect_msg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
42 WorkFlow Kurulum Kılavuzu

* <-- p2 text
*----------------------------------------------------------------------*
FORM detect_msg.

DATA:
lt_agents TYPE swhactor OCCURS 0 WITH HEADER LINE.

SELECT DISTINCT
wi_text AS line
wi_id AS wi_id
FROM sww_outbox
APPENDING CORRESPONDING FIELDS OF TABLE gt_uname
WHERE wi_rh_task EQ 'TS00007986'
AND wi_stat EQ 'READY'
AND NOT wi_id IN ( SELECT wi_id FROM zwf_sent ).

LOOP AT gt_uname.
REFRESH lt_agents.

CALL FUNCTION 'SWW_WI_AGENTS_READ'


EXPORTING
wi_id = gt_uname-wi_id
TABLES
* DEADLINE_AGENTS =
* DESIRED_END_AGENTS =
* LATEST_START_AGENTS =
* EXCLUDED_AGENTS =
* NOTIFICATION_AGENTS =
agents = lt_agents.

READ TABLE lt_agents INDEX 1.


IF sy-subrc EQ 0 AND lt_agents-otype EQ 'US'.
gt_uname-uname = lt_agents-objid.
MODIFY gt_uname.
ENDIF.

ENDLOOP.

ENDFORM. " detect_msg

Java Çözümü
Netweaver yok ise, dışarıda yazılacak bir Java programı belli zaman aralıklarında bu tabloyu okuyarak
birikmiş mesajları E-Posta olarak gönderecektir. E-Posta iletilerinde, Java ile yazılacak bir Web
sayfasına verilmiş bağlantı olacaktır. Aşağıda bu işi (Java’ya yönelik olarak) yapan örnek bir program
görebilirsiniz.

REPORT zwfmail .

DATA:
BEGIN OF gt_uname OCCURS 0,
uname LIKE sy-uname,
line TYPE so_text255,
wi_id TYPE sww_wiid,
END OF gt_uname.

START-OF-SELECTION.

PERFORM detect_msg.
PERFORM sendmail.

END-OF-SELECTION.
43 WorkFlow Kurulum Kılavuzu

*&---------------------------------------------------------------------*
*& Form sendmail
*&---------------------------------------------------------------------*
FORM sendmail.

DATA:
mailname LIKE sood1-objnam,
mailtitlel LIKE sood1-objdes,
soli TYPE soli OCCURS 0 WITH HEADER LINE.

DATA:
lf_sent TYPE zwf_sent.

DATA:
lf_mail TYPE zwfmail.

LOOP AT gt_uname.

* soli-line = gt_uname-line.
* APPEND soli.
*
* CALL FUNCTION 'RS_SEND_MAIL_FOR_SPOOLLIST'
* EXPORTING
** SPOOLNUMBER = SY-SPONO
* mailname = mailname
* mailtitel = mailtitlel
* user = gt_uname-uname
* TABLES
* text = soli
* EXCEPTIONS
* error = 1
* OTHERS = 2.

SELECT SINGLE smtp_addr INTO lf_mail-email


FROM adr6
WHERE addrnumber EQ ( SELECT addrnumber FROM usr21
WHERE bname EQ gt_uname-uname )
AND persnumber EQ ( SELECT persnumber FROM usr21
WHERE bname EQ gt_uname-uname ).

INSERT zwfmail FROM lf_mail.

IF sy-subrc EQ 0.
lf_sent-wi_id = gt_uname-wi_id.
INSERT zwf_sent FROM lf_sent.
ENDIF.

ENDLOOP.

ENDFORM. " sendmail


*&---------------------------------------------------------------------*
*& Form detect_msg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM detect_msg.

DATA:
lt_agents TYPE swhactor OCCURS 0 WITH HEADER LINE.

SELECT DISTINCT
wi_text AS line
wi_id AS wi_id
FROM sww_outbox
APPENDING CORRESPONDING FIELDS OF TABLE gt_uname
44 WorkFlow Kurulum Kılavuzu

WHERE wi_rh_task EQ 'TS00007986'


AND wi_stat EQ 'READY'
AND NOT wi_id IN ( select WI_ID from ZWF_SENT ).

LOOP AT gt_uname.
REFRESH lt_agents.

CALL FUNCTION 'SWW_WI_AGENTS_READ'


EXPORTING
wi_id = gt_uname-wi_id
TABLES
* DEADLINE_AGENTS =
* DESIRED_END_AGENTS =
* LATEST_START_AGENTS =
* EXCLUDED_AGENTS =
* NOTIFICATION_AGENTS =
agents = lt_agents.

READ TABLE lt_agents INDEX 1.


IF sy-subrc EQ 0 AND lt_agents-otype EQ 'US'.
gt_uname-uname = lt_agents-objid.
MODIFY gt_uname.
ENDIF.

ENDLOOP.

ENDFORM. " detect_msg

E-Posta Dönüşü
E-Posta dönüşünde Web tabanlı bir onay vermek söz konusu ise, bu onayın arkasındaki fonksiyon
SWW_WI_ADMIN_EXECUTE fonksiyonunu çağıracak bir rapor yazılıp, bu raporu çağıran bir Batch
Input yürütebilir (SWIA işlem kodunun arkasındaki fonksiyon). “Identification” parametresi olarak,
söz konusu Work Item’in ID’si girilecektir. 4

REPORT zpurap_wi_admin_execute .

PARAMETERS:
p_wi_id TYPE swwwihead-wi_id.

START-OF-SELECTION.

CALL FUNCTION 'SWW_WI_ADMIN_EXECUTE'


EXPORTING
wi_id = p_wi_id
* DO_COMMIT = 'X'
* AUTHORIZATION_CHECKED = ' '
* PRECONDITIONS_CHECKED = ' '
* EXECUTED_BY_USER = SY-UNAME
* EXECUTED_BY_ADDRESS = ' '
* IMPORTING
* NEW_STATUS =
* EXCEPTIONS
* UPDATE_FAILED = 1
* NO_AUTHORIZATION = 2
* INFEASIBLE_STATE_TRANSITION = 3
* INVALID_TYPE = 4
* OTHERS = 5
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

4 Bu ID, Container’dan kolayca bulunabilir


45 WorkFlow Kurulum Kılavuzu

END-OF-SELECTION.

Ancak; SAT/SAS onayı gibi bazı standart süreçler, kendi WorkFlow BAPI’lerine sahiptir. Yerine göre bu
BAPI’ler de çağırılabilir.

Ekran bu şekilde yürütüldüğünde, söz konusu ID’yi içeren Task ekrana gelecektir.

Söz konusu satırı seçip Edit  Work Item  Execute Without Check (veya Execute Work Item)
menüsüne girildiğinde, söz konusu adımın yürütüleceği ekrana erişiyoruz. Aşağıda, SAT onayı ile ilgili
örnek ekranı görebilirsiniz.
46 WorkFlow Kurulum Kılavuzu

Vekalet Durumunda Vekilin Tespiti


Bu ihtiyaç, aşağıdaki örnek kodla karşılanabilir.

function zrn_mm_sat_wf_get_vekil.
*"-------------------------------------------------------------
---------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_BNAME) TYPE XUBNAME
*" EXPORTING
*" REFERENCE(E_VEKIL) TYPE ZRN_MMT_WF_SMTP
*"-------------------------------------------------------------
---------

data:
ls_d2 type hrus_d2,
ls_vekil like line of e_vekil.

refresh e_vekil.

select * from hrus_d2 into ls_d2


where us_name eq i_bname
and active eq 'X'
and begda le sy-datum
and endda ge sy-datum.

clear ls_vekil.
47 WorkFlow Kurulum Kılavuzu

ls_vekil-bname = ls_d2-rep_name.

select single smtp_addr


into ls_vekil-email
from adr6 as a
inner join usr21 as u
on a~persnumber eq u~persnumber
and a~addrnumber eq u~addrnumber
where u~bname eq ls_d2-rep_name .

collect ls_vekil into e_vekil.


endselect.
endfunction.

WorkFlow İletilerinin Silinmesi


Herhangi bir noktada; belge silinmesi, süreç iptali gibi sebeplerden ötürü kullanıcıların Inbox’larında
bekleyen onay taleplerini silmek isteyebilirsiniz. Bu durumda, “ rswwwide” adlı standart programı
çağırabilirsiniz; işlem kodu: SWWL. Aşağıda, bu programı çağırıp onay bekleyen iş kalemlerini silen
örnek bir fonksiyon bulunmaktadır:

function zsdwf_delete_work_items.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_WI_ID) TYPE SWW_WIID
*"----------------------------------------------------------------------

ranges:
lr_wi_id for swwwihead-wi_id,
lr_wi_type for swwwihead-wi_type,
lr_wi_stat for swwwihead-wi_stat,
lr_wi_cd for swwwihead-wi_cd,
lr_wi_ct for swwwihead-wi_ct,
lr_wi_aed for swwwihead-wi_aed,
lr_wi_aagent for swwwihead-wi_aagent.

* Gönderilen Work Item ve


* Bu Work Item'a ait olabilecek diğer iletiler
refresh lr_wi_id.

lr_wi_id-option = 'EQ'.
lr_wi_id-sign = 'I'.
lr_wi_id-low = i_wi_id.
append lr_wi_id.

select wi_id as low


appending corresponding fields of table lr_wi_id
from swwwihead
where wi_chckwi eq i_wi_id.

loop at lr_wi_id where option is initial.


48 WorkFlow Kurulum Kılavuzu

lr_wi_id-option = 'EQ'.
lr_wi_id-sign = 'I'.
modify lr_wi_id.
endloop.

* Gönder
submit rswwwide
with it_aagnt in lr_wi_aagent
with it_aed in lr_wi_aed
with it_cd in lr_wi_cd
with it_ct in lr_wi_ct
with it_id in lr_wi_id
with it_stat in lr_wi_stat
with it_type in lr_wi_type
with i_disply eq 'X'
with i_commit eq 'X'
with i_dellog eq 'X'
and return.

endfunction.

Ancak; bu program (doğal olarak) gönderilmiş E-Posta iletilerini silememektedir. Sadece SAP iş akışı
Inbox’undaki iletileri silmektedir.

Faydalı Workflow Nesneleri


Tablolar
 SWWWIHEAD: Workflow Runtime: Header Table for All Work Item Types
 SWWLOGHIST: Workflow Runtime: History of a Work Item
 SWP_HEADER: Workflow Instances: Header Data of a Workflow Execution
 SWW_CONTOB: Workflow Runtime: Work Item Data Container (Only Objects)
 SWW_CONT: Workflow Runtime: Work Item Data Container
 SWWUSERWI: Kullanıcıya ilişkin yürürlükteki iş kalemleri

Modüllere Özel İpuçları


DMS

Döküman Yaratıldığı Anda WorkFlow Tetiklemek

DMS Uyarlamaları
SPRO  Cross Application Components  Document Management  Document Distribution 
General Settings  SAP Business Workflow menüsü açılır.
49 WorkFlow Kurulum Kılavuzu

Activate Event-Type Linkage


Bu menü adımına bir kez tıklanması yeterlidir. Bu şekilde, döküman yönetimi olay bağlantıları aktive
edilecektir.

Allocate Tasks To Persons Reponsible


Burası, bütün işlemin en kritik yeridir.

Activate Event Linking


Birinci adımda; “Activate event linking” menüsüne tıklıyoruz.
50 WorkFlow Kurulum Kılavuzu

Burada, bizi “Change Document Info Record” ve “Create Object Of Type DRAW” Task’leri
ilgilendiriyor. Bu Task’lerden ilki bir döküman güncellendiğinde, ikincisi ise yaratıldığında çalışacak.

TS00007842’ye tıklayarak, Goto  Display Object menüsüne giriyoruz. Karşımıza gelecek pencerede,
“Triggering events” bölümüne girip aşağıdaki değerleri giriyoruz:

Aynı ekranda, Binding de otomatik olarak üretilebiliyor olmalı. Soldaki butonu yeşil hale getirerek
adımı aktive ediyoruz. Bu şekilde; “Biri döküman güncellediğinde, DRAW adlı Business Object’in
CHANGED olayını tetikle” demiş olduk.

Şimdi aynı işlemi TS00408150 için de yapacağız.


51 WorkFlow Kurulum Kılavuzu

Bu adımları düzgün bir şekilde yapıp geri çıktığımızda, EVENT listesi dolmuş olmalıdır.

Artık buradan geriye çıkabiliriz.

Assign Agents
Bu bağlantıya tıkladığımızda, karşımıza çeşitli DMS görevlerine kimlerin atanacağının belirleneceği
ekran gelecektir.

Bizi burada da “Change document info record” ve “Create object of type DRAW” adımları
ilgilendiriyor. Bu adımlara ilgili kişiler (standart Agent mantığı ile) atanabilir; ama sade bir kurulumda
bu Task’leri “General Task” yapmak iyi bir fikir olacaktır.

Bunun için, her bir Task’i seçip yukarıdaki “Attributes...” düğmesine tıklıyoruz ve “General Task ”
seçeneğini işaretliyoruz.
52 WorkFlow Kurulum Kılavuzu

Verify Workflow Customizing


Eğer gerekiyorsa, bu adımda WorkFlow uyarlamaları test edilebilir. Ancak; sistem üzerinde düzgün
çalışan başka WorkFlow’lar varsa, buraya girmeye gerek yok.

WorkFlow’un Hazırlanması
SWDD ekranına girip yeni bir WorkFlow yaratıyoruz. WorkFlow ekranında Goto  Basic data
ekranına gidiyoruz. Karşımıza gelecek ekranın “Start Events” kısmı, DMS bağlantısı için kritik bölgedir.

Buraya, (daha önce DMS Task’lerini bağlamış olduğumuz) DRAW  CREATED ve DRAW CHANGED
olaylarını gireceğiz. Sol taraftaki Binding düğmesi ile, DRAW’dan gelen nesneler ile WorkFlow
Container nesneleri arasındaki aktarımlar ayarlanabilir. Özellikle _EVT_OBJECT nesnesi,
yaratılan/güncellenen dökümanla ilgili bütün detayları getirdiği için bizim açımızdan kritik olacaktır.
53 WorkFlow Kurulum Kılavuzu

Bu adımı tamamladıktan sonra soldaki gri düğmeleri yeşil hale getirip olayları aktive ediyoruz.
WorkFlow şeması artık şöyle gözüküyor olmalı:

Burada “Document Changed” ve “Document Created” olaylarına dikkat edin. Ben yaptığım örnekte,
aşağıya bir de “Döküman yaratıldı” mesajı gönderecek adım ekledim. Gerçek bir projede, Event’lerin
altına standart WorkFlow akışı eklenmelidir.

Uygulama Örneği
Kullanıcı, CV01N’ye giderek yeni bir
döküman yaratıyor
54 WorkFlow Kurulum Kılavuzu

Döküman yaratıldıktan kısa bir süre


sonra, ilgili kişiye “Yeni döküman
yaratıldı” mesajı iletiliyor

Olayları Kendi Programımızdan Tetiklemek


Eğer iş akışını başlatacak olan onayı kendi yazdığımız bir programdan tetiklemek istiyorsanız,
WorkFlow’u Başlatmak başlığına göz atın.

MM

SAT & SAS İçin User Exit İle Agent Belirleme


Onay kodları içerisine giriyoruz.

Herhangi bir onay kodunun “İş akışı” sütununda F4’e basıp, “9 – Kullanıcı çıkışı yoluyla rol açılımı”
değerini seçiyoruz. O andan itibaren, söz konusu kod için User Exit devreye girecektir.

Ama hangi User Exit? Bu sorunun cevabı için, “Satınalma” altındaki “Satınalma için geliştirmeler”
menüsünün yanındaki yardımı seçiyoruz.
55 WorkFlow Kurulum Kılavuzu

Karşımıza gelecek ekranda, satınalmaya ait çeşit çeşit User Exit’i liste halinde görebiliriz. Bu User
Exit’lerden bir tanesi, SAT döngüsünün muhatap seçimine tekabül ediyor.

M06B0001’e baktığımızda, içinde tek bir Component olduğunu görüyoruz.

Bu fonksiyon, bütün EBAN değerlerini ve onay kodunu getiriyor. Bu Exit içerisinde yapmamız gereken
şey, gelen değerlere göre gerekli değerlendirmeyi yapıp, ACTOR_TAB içerisinde onay verecek kişinin
User’ını (veya personel numarasını, grup numarasını, vs) döndürmek.
56 WorkFlow Kurulum Kılavuzu

Eğer aynı işi SAS için yapmak isteseydik, aşağıdaki User Exit’i aynı mantıkla kullanabilirdik:

Onay Durumunun Tespiti


BAPI_PO_GETRELINFO fonksiyonu, SAS onay durumunu döndürmektedir.
BAPI_REQUISITION_GETRELINFO ise, SAT onay durumunu döndürmektedir.

SAT durumu için, bu örnek fonksiyonu inceleyelim.

Hiç onaylanmamış bir SAT kalemi için; fonksiyon, aşağıdaki şekilde veri döndürecektir:
57 WorkFlow Kurulum Kılavuzu

Dikkat ederseniz, ortada hiç onay olmadığı için RELEASE_ALREADY_POSTED tablosu boştur.
RELEASE_FINAL tablosunda ise, olması gereken onayları görebilirsiniz:
58 WorkFlow Kurulum Kılavuzu

Kısmen onaylanmış bir SAT kalemi için; fonksiyon, aşağıdaki şekilde veri döndürecektir:
59 WorkFlow Kurulum Kılavuzu

Normalde 6 onay verilmiş olması gerekirken; burada henüz 4 tanesinin verildiğini görüyoruz.

Tamamen onaylamış bir SAT’ta ise, tabloda 6 onayın 6’sı birden gözükecektir:

Ne var ki; bu fonksiyonda bir SAT’ın reddedildiğine dair herhangi bir bilgi bulamazsınız.

Sıradaki onay kodunu döndüren örnek bir ABAP kodu aşağıda görülebilir. Bu kod belli bir senaryo için
hazırlanmıştır; modifiye etmek gerekebilir.
60 WorkFlow Kurulum Kılavuzu

METHOD get_next_frgab.

DATA:
lit_final TYPE STANDARD TABLE OF bapirlcorq,
lrd_final TYPE REF TO bapirlcorq,

lit_gen TYPE STANDARD TABLE OF bapirlgnrq,


lrd_gen TYPE REF TO bapirlgnrq,

lit_posted TYPE STANDARD TABLE OF bapirlcorq,


lrd_posted TYPE REF TO bapirlcorq,

lit_return TYPE isi_bapireturn_tt,

lfd_bnfpo1 TYPE bnfpo.

* Onay bilgilerini okuyalım


CALL FUNCTION 'BAPI_REQUISITION_GETRELINFO'
EXPORTING
number = pfd_i_banfn
TABLES
general_release_info = lit_gen
release_already_posted = lit_posted
release_final = lit_final
return = lit_return.

LOOP AT lit_return TRANSPORTING NO FIELDS WHERE type IN zbccl_log=>get_crit_msgty_range(


).
EXIT.
ENDLOOP.

IF sy-subrc EQ 0.
RAISE EXCEPTION TYPE zcx_mm_mobile_pr_approval
EXPORTING
textid = zcx_mm_mobile_pr_approval=>mevcut_onay_durumu_tespit
banfn = pfd_i_banfn
return = lit_return.
ENDIF.

* Tablo okuma; beklenmedik durumlarda hata


READ TABLE lit_final INDEX 1 REFERENCE INTO lrd_final.

IF lrd_final IS INITIAL.
RAISE EXCEPTION TYPE zcx_mm_mobile_pr_approval
EXPORTING
textid = zcx_mm_mobile_pr_approval=>mevcut_onay_durumu_tespit
banfn = pfd_i_banfn.
ENDIF.

lfd_bnfpo1 = lrd_final->preq_item.

LOOP AT lit_final REFERENCE INTO lrd_final WHERE preq_item EQ lfd_bnfpo1.


ENDLOOP.
61 WorkFlow Kurulum Kılavuzu

READ TABLE: lit_posted INDEX 1 REFERENCE INTO lrd_posted,


lit_gen INDEX 1 REFERENCE INTO lrd_gen.

IF lrd_final IS INITIAL.
RAISE EXCEPTION TYPE zcx_mm_mobile_pr_approval
EXPORTING
textid = zcx_mm_mobile_pr_approval=>mevcut_onay_durumu_tespit
banfn = pfd_i_banfn.
ENDIF.

IF lrd_gen IS NOT INITIAL AND lrd_gen->rel_ind NE abap_true.


RAISE EXCEPTION TYPE zcx_mm_mobile_pr_approval
EXPORTING
textid = zcx_mm_mobile_pr_approval=>onay_bloke
banfn = pfd_i_banfn.
ENDIF.

* Sıradaki onay kodunu döndürelim


IF lrd_posted IS INITIAL OR ( lrd_posted->rel_code1 IS INITIAL AND lrd_final->rel_code2
IS NOT INITIAL ).
pfd_r_frgab = lrd_final->rel_code1.
RETURN.
ENDIF.

IF lrd_posted->rel_code2 IS INITIAL AND lrd_final->rel_code2 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code2.
RETURN.
ENDIF.

IF lrd_posted->rel_code3 IS INITIAL AND lrd_final->rel_code3 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code3.
RETURN.
ENDIF.

IF lrd_posted->rel_code4 IS INITIAL AND lrd_final->rel_code4 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code4.
RETURN.
ENDIF.

IF lrd_posted->rel_code5 IS INITIAL AND lrd_final->rel_code5 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code5.
RETURN.
ENDIF.

IF lrd_posted->rel_code6 IS INITIAL AND lrd_final->rel_code6 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code6.
RETURN.
ENDIF.

IF lrd_posted->rel_code7 IS INITIAL AND lrd_final->rel_code7 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code7.
RETURN.
62 WorkFlow Kurulum Kılavuzu

ENDIF.

IF lrd_posted->rel_code8 IS INITIAL AND lrd_final->rel_code8 IS NOT INITIAL.


pfd_r_frgab = lrd_final->rel_code8.
RETURN.
ENDIF.

RAISE EXCEPTION TYPE zcx_mm_mobile_pr_approval


EXPORTING
textid = zcx_mm_mobile_pr_approval=>mevcut_onay_durumu_tespit
banfn = pfd_i_banfn.

ENDMETHOD.

Programdan SAT Redddetmek

method reject_pr.

“PFD_I_BANFN TYPE BANFN Satınalma talebi numarası


“PFD_I_FRGAB TYPE FRGAB Satınalma talebi onay kodu

data:
lit_conta type standard table of swr_cont,
lrd_conta type ref to swr_cont,

lit_msgl type standard table of swr_messag,


lit_msgs type standard table of swr_mstruc,

lit_xeban type standard table of ueban,


lrd_xeban type ref to ueban,

lit_yeban type standard table of ueban,

lit_xebkn type standard table of uebkn,


lit_yebkn type standard table of uebkn,

lfd_okey type swr_struct-object_key.

* Mevcut veriler

select * into corresponding fields of table:


lit_xeban ##too_many_itab_fields
from eban where banfn eq pfd_i_banfn,

lit_xebkn ##too_many_itab_fields
from ebkn where banfn eq pfd_i_banfn.

lit_yeban[] = lit_xeban[].
lit_yebkn[] = lit_xebkn[].

* EBAN durum değişikliği


63 WorkFlow Kurulum Kılavuzu

loop at lit_xeban reference into lrd_xeban.


lrd_xeban->kz = c_cdchngind_update . "U
lrd_xeban->banpr = c_banpr_red . "08
endloop.

call function 'ME_UPDATE_REQUISITION'


tables
xeban = lit_xeban
xebkn = lit_xebkn
yeban = lit_yeban
yebkn = lit_yebkn.

call function 'ME_UPDATE_REQUISITION_CHNGDOC'


tables
xeban = lit_xeban
xebkn = lit_xebkn
yeban = lit_yeban
yebkn = lit_yebkn.

commit work and wait.

* İş akışında red Event'ini tetikleme

append initial line to lit_conta reference into lrd_conta.


lrd_conta->element = 'RELEASECODE'.
lrd_conta->value = pfd_i_frgab.

loop at lit_xeban reference into lrd_xeban.

concatenate lrd_xeban->banfn lrd_xeban->bnfpo into lfd_okey.

call function 'SAP_WAPI_CREATE_EVENT'


exporting
object_type = 'BUS2105'
object_key = lfd_okey
event = 'REJECTED'
commit_work = abap_true
tables
message_lines = lit_msgl
message_struct = lit_msgs.

endloop.

* Mevcut iş akışlarını durdurma (Event işe yaramazsa)

loop at lit_xeban reference into lrd_xeban.


cancel_active_wfs( lrd_xeban->banfn ).
endloop.

endmethod.
64 WorkFlow Kurulum Kılavuzu

method cancel_active_wfs.

“PFD_I_BANFN TYPE BANFN Satınalma talebi numarası

data:
lit_wi type standard table of swr_wihdr,
lrd_wi type ref to swr_wihdr,

lwa_por type sibflporb.

* WF listesi

lwa_por-instid = pfd_i_banfn.
lwa_por-typeid = 'BUS2105'.
lwa_por-catid = 'BO'.

call function 'SAP_WAPI_WORKITEMS_TO_OBJECT'


exporting
object_por = lwa_por
tables
worklist = lit_wi.

check lit_wi[] is not initial.

* Cancel

loop at lit_wi reference into lrd_wi.

call function 'SAP_WAPI_ADM_WORKFLOW_CANCEL'


exporting
workitem_id = lrd_wi->wi_id.

endloop.

endmethod.

Yetkilendirme
İş akışı tetikleyecek olan kişilere, S_RFC ve S_WF_WI yetkilerinin verilmiş olması gerekmektedir.
Bunun yanı sıra; bu kişiler, iş akışına konu olan işlem ile ilgili yetkilere de sahip olmalıdır. Örneğin SAT
ile ilgili bir iş akışı söz konusuysa, SAT açabilecek yetkilere de sahip olmalıdır.

Java Çözümü’nün uygulandığı yerlerde; Web üzerinden onay verecek kişilerin de S_RFC yetkisine
sahip olması gerekmektedir. Bunun yanı sıra, onay verecekleri ekranlara ait yetkilerin de verilmiş
olması gerekmektedir.
65 WorkFlow Kurulum Kılavuzu

Vekalet
İş akışında vekalet vermek için, SBWP işlem kodunda Ayarlar  İş Akışı Ayarları  Vekil Bakımı
menüsü kullanılabilir. Kaydedilen vekiller, HRUS_D2 tablosunda saklanır.

Vekil girişi sırasında, bir vekalet profili seçilmelidir.

Bu vekaletin geçerli olacağı Task’lerde, aynı vekil profilinin bulunması gerekmektedir.


66 WorkFlow Kurulum Kılavuzu

Vekillerde eksik rol olursa, Inbox’larına düşse bile onay veremezler. Eksik rolleri tamamlayan
aşağıdaki Method, bir program / Job olarak kurulabilir.
67 WorkFlow Kurulum Kılavuzu

METHOD set_auth_to_substitudes.

DATA: lt_agr TYPE tt_bapiagr,

lt_bapiret2 TYPE bapiret2_tab,

lt_cust TYPE STANDARD TABLE OF zbct_wf_sub_role,

lt_cust_rng TYPE tt_sub_role,

lt_master_role TYPE tt_agr_users,

lt_sub_role TYPE tt_agr_users,

lt_hrus_d2 TYPE STANDARD TABLE OF hrus_d2,

lt_t77ro TYPE STANDARD TABLE OF t77ro,

lv_after TYPE i,

lv_before TYPE i.

* Verilmiş vekaletleri tespit et

SELECT * INTO TABLE lt_hrus_d2

FROM hrus_d2

WHERE begda LE sy-datum

AND endda GE sy-datum

AND active EQ abap_true.

CHECK sy-subrc EQ 0.

* Vekalet verenlerin ve alanın var olan rollerini tespit et

SELECT agr_name uname from_dat to_dat

INTO CORRESPONDING FIELDS OF TABLE: lt_sub_role FROM agr_users

FOR ALL ENTRIES IN lt_hrus_d2

WHERE uname EQ lt_hrus_d2-rep_name,


68 WorkFlow Kurulum Kılavuzu

lt_master_role FROM agr_users

FOR ALL ENTRIES IN lt_hrus_d2

WHERE uname EQ lt_hrus_d2-us_name

AND from_dat LE lt_hrus_d2-endda

AND to_dat GE lt_hrus_d2-begda.

* Vekil profillerinin tanımlarını al

SELECT * INTO TABLE lt_t77ro

FROM t77ro

WHERE EXISTS ( SELECT tclass FROM zbct_wf_sub_role WHERE tclass EQ t77ro~tclass ).

* Uyarlamayı oku

SELECT * INTO TABLE lt_cust FROM zbct_wf_sub_role.

IF sy-subrc NE 0.

RAISE EXCEPTION TYPE zcx_bc_table_content

EXPORTING

objectid = 'ROLE'

tabname = 'ZBCT_WF_SUB_ROLE'

textid = zcx_bc_table_content=>entry_missing.

ENDIF.

lt_cust_rng = CORRESPONDING #( lt_cust ).

SORT lt_cust_rng BY tclass.

DELETE ADJACENT DUPLICATES FROM lt_cust_rng COMPARING tclass.

LOOP AT lt_cust_rng ASSIGNING FIELD-SYMBOL(<ls_cust_rng>).

LOOP AT lt_cust ASSIGNING FIELD-SYMBOL(<ls_cust>) WHERE tclass EQ <ls_cust_rng> -tclass.

APPEND VALUE #( option = <ls_cust>-ddoption

sign = c_sign_i

low = <ls_cust>-agr_name ) TO <ls_cust_rng>-agr_name_rng.

ENDLOOP.

ENDLOOP.

* Her bir vekalet kaydı için inceleme yapıp BAPI ve rilerini hazırla ve çağır
69 WorkFlow Kurulum Kılavuzu

LOOP AT lt_hrus_d2 ASSIGNING FIELD-SYMBOL(<ls_hrus_d2>).

CLEAR lt_agr[].

LOOP AT lt_cust_rng ASSIGNING <ls_cust_rng>.

CHECK line_exists( lt_t77ro[ KEY primary_key COMPONENTS reppr = <ls_hrus_d2> -reppr

tclass = <ls_cust_rng>-tclass
] ).

LOOP AT lt_master_role ASSIGNING FIELD-SYMBOL(<ls_master_role>) WHERE agr_name IN


<ls_cust_rng>-agr_name_rng

AND uname EQ
<ls_hrus_d2>-us_name.

LOOP AT lt_agr TRANSPORTING NO FIELDS WHERE agr_name EQ <ls_master_role> -agr_name

AND from_dat LE <ls_hrus_d2>-endda

AND to_dat GE <ls_hrus_d2>-begda.

EXIT.

ENDLOOP.

CHECK sy-subrc NE 0.

MESSAGE s107(zbc) WITH <ls_hrus_d2>-us_name <ls_hrus_d2>-rep_name <ls_master_role>-


agr_name.

co_log->add_sy_msg( ).

APPEND VALUE #( agr_name = <ls_master_role> -agr_name

from_dat = <ls_hrus_d2>-begda

to_dat = <ls_hrus_d2>-endda ) TO lt_agr.

ENDLOOP.

ENDLOOP.

CHECK lt_agr[] IS NOT INITIAL.


70 WorkFlow Kurulum Kılavuzu

LOOP AT lt_sub_role ASSIGNING FIELD-SYMBOL(<ls_sub_role>) WHERE uname EQ <ls_hrus_d2>-


rep_name.

APPEND VALUE #( agr_name = <ls_sub_role>-agr_name

from_dat = <ls_sub_role>-from_dat

to_dat = <ls_sub_role>-to_dat ) TO lt_agr.

ENDLOOP.

CLEAR lt_bapiret2[].

CALL FUNCTION 'BAPI_USER_ACTGROUPS_ASSIGN'

EXPORTING

username = <ls_hrus_d2>-rep_name

TABLES

activitygroups = lt_agr

return = lt_bapiret2.

co_log->add_bapiret2( lt_bapiret2 ).

ENDLOOP.

ENDMETHOD.

Hatalar ve Çözümler
Genel Hatalar

WorkFlow Tetiklenmiyor
Öncelikle temel WorkFlow ayarlarının doğru olduğundan emin olun.

Tüm ayarlar doğru olmasına rağmen iş akışı tetiklenmiyorsa, SWUD işlem koduna gidin, yukarıya
tetiklenmeyen WorkFlow’un kodunu girin ve “Problem: Task not started” düğmesine tıklayın.
71 WorkFlow Kurulum Kılavuzu

Yeni ekranda, WorkFlow’u tetikleyemeyen kişinin kullanıcı adını girin ve “Event Queue (tRFC log)”
düğmesine tıklayın. (Bu bölümdeki diğer düğmeler de işinize yarayabilir)

Burada karşınıza gelecek olan liste, söz konusu kullanıcıda ortaya çıkmış WorkFlow hatalarını
listeleyecektir. Bu hataları inceleyerek gerekli düzeltmeleri yapabilirsiniz.

WorkFlow’u Tekrar Başlatmak


Hata almış bir iş akışının tekrar başlatılması, SWPR işlem kodundan yapılır.

Hata almadan sonuçlanmış bir iş akışını, ilgili Event’i tetikleyerek tekrar başlatmak için SWUE işlem
kodu kullanılabilir.

Configure RFC Destination Problemleri


Temel Workflow ayarlarını yaparken, Configure RFC Destination bölümünde RFC bağlantısı veya
kullanıcı ile ilgili hatalar alıyorsanız, veya tetiklenmeyen bir WorkFlow’un Event Queue bölümünde
“Incorrect Logon” tarzı bir ileti alıyorsanız, problemin çözümü için şu adımları takip edin:

 SM59’a giderek ilgili RFC bağlantısını silin


 SU01’de (Ön planda kullanılan bir hesap değilse) söz konusu kullanıcı hesabını silin
 SU01’de WF-BATCH adında yeni bir hesap yaratın. Kullanıcı tipi C olsun (İletişim kullanıcı –
harici RFC)
 SM59’da RFC bağlantısını tekrar yaratın (bağlantı tipi: L, Unicode: aktif), kaydedin, ve
kaydettikten sonra tekrar içine girip yeni yarattğınız WF-BATCH kullanıcısının bilgilerini girin
 SWUD’a giderek RFC Destination ayarlarını tekrar yapın

Anında Beliren Onay Ekranı


Diyelim ki bir MM belgesinin arkasında hemen WorkFlow tetikleniyor. Belgeyi yaratan kişi ile onay
vermesi gereken ilk kişi aynı ise, belge yaratılır yaratılmaz kişinin karşısına onay penceresi gelebilir.

Bunu önlemek için, WorkFlow’un tetiklenme Event’i ile onay ekranı arasına Dummy bir Background
Step koyabilirsiniz.

Boş OOCU Listesi


OOCU işlem koduna girdiğinizde, görevleri ve iş akışlarını listelemeniz gereken ekranda listeye hiçbir
şey gelmediğini görüyorsanız, bu problemin sebebi yetkilendirme olabilir. OOSP / OOSB işlem
kodlarına giderek, kullanıcınızın yeterli yetkiye sahip olduğundan emin olun ve tekrar deneyin.
72 WorkFlow Kurulum Kılavuzu

Hata İletileri

‘...’ görevinin işleme tayini yok


Bu hatayı almanızın sebebi büyük ihtimalle söz konusu Task’in “General Task” olmamasıdır. Task’i
General Task haline getirin ve tekrar deneyin.

Agents of type A cannot be defined


Bu hatanın alınması, iş akışı adımındaki muhatabın belirlenemediğine işaret eder. Hatayı gidermenin
en basit ve genel çözümü, söz konusu Task’i “General Task” haline getirmektir. Daha özel
durumlarda; Task’in gönderildiği kişinin, Task’i işleyebilecek kişilerden biri olduğundan emin olun.

User Exit kullanıyorsanız, Task’i işleyebilecek herhangi birinin bulunamamış olması da bu hataya yol
açabilir.

Object Type ‘WF’ Is Not Valid


Bu hatayı MM satınalma sürecinde alıyorsanız, bunun sebebi onay stratejisi uyarlamasında üretim
yerlerinin girilmemiş olması olabilir.

SWF_RUN 594
SAS WorkFlow’u başladıktan sonra ilgili kişinin Inbox’una hiçbir şey düşmüyorsa ve WorkFlow
yöneticisine bu hata iletiliyorsa, 797775 numaralı OSS notunun uygulanması gerekebilir.

Bunun yanı sıra, SAS iş akışındaki (SWDD) onay verme adımının “General Task” olarak işaretlenmiş
olması da gerekebilir.

Diğer Agent hataları


İki Client’lı bir sistemde çalışıyorsanız, Generic Task haline getirdiğiniz Task’leri SCC1 ile test yaptığınız
Client’a da taşımalısınız. Bunu yapmadıysanız, Test Client’ında hata alabilirsiniz.

Bir Task sistemdeki güm kullanıcılara gidiyorsa; sebebi muhtemelen esas Agent’ın belirlenemiyor
olması ve Task’in Generic Task olarak işaretlenmiş olmasıdır. Agent’u Rule ile belirliyorsanız, Rule’un
Yaratılması başlığı altında “Terminate if Rule Resolution Without Result” açıklamasına dikkat edin.

Works Cited
Wilson, K. (2007, 06 10). Workflow Start transaction in NetWeaver. 12 15, 2009 tarihinde ERP Genie:
http://www.erpgenie.com/abaptips/content/view/460/1/ adresinden alındı

You might also like