Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SAP Workflow kılavuzu

546 views

Published on

SAP Workflow hakkındaki çalışma notlarım

Published in: Software
  • Be the first to comment

SAP Workflow kılavuzu

  1. 1. Dr. KeremKöseoğlu Tesuji Consulting 11/6/2009 WorkFlow Kurulum Kılavuzu
  2. 2. 2 WorkFlowKurulumKı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. 3. 3 WorkFlowKurulumKılavuzu Netweaver Çözümü...............................................................................................................40 Java Çözümü.........................................................................................................................42 E-Posta Dönüşü ....................................................................................................................44 Vekalet DurumundaVekilin 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örevininişleme tayini yok...............................................................................................72 Agents of type A cannot be defined .......................................................................................72 Object Type ‘WF’ IsNot Valid.................................................................................................72 SWF_RUN 594 ......................................................................................................................72 Diğer Agent hataları..............................................................................................................72 Works Cited.................................................................................................................................72
  4. 4. 4 WorkFlowKurulumKılavuzu WorkFlow’aGenel Bakış
  5. 5. 5 WorkFlowKurulumKılavuzu WorkFlow Altyapısının Kurulması WorkFlowaltyapısınınkurulmasıve çalışır hale getirilmesi için,SWUDişlemkodunagidilirve “Verify AutomaticCustomizing”adımıçalıştırılır. Uyarlamadaşu adımlar takipedilmelidir: MaintainRuntimeEnvironment ConfigureRFCDestination WorkFlowişlerini yürütecekolanBackgroundkullanıcıhesabıbelirlenir.Varsayılandeğerler korunabilir. Buadımıaktive edemiyorsanız, Configure RFCDestinationProblemleri başlığına göz atın. MaintainWorkflowSystemAdministrator Sistemyöneticisi belirlenir.Buraya,teknikmesajlarıinceleyipanlayabilecekolansistem yöneticisi hesabıgirilmelidir. MaintainActivePlan Version T77S0 tablosundantekbirsatırgirilecektir(PLOGI,PLOGI,01) ClassifyDecisionTasAs General Bu adımda listelenecekbütüngörevler,“General Task”olarakişaretlenmelidir. ScheduleBackground JobFor Event Queue Burada yapılabilecek örnekbirayar,şuşekilde olabilir:
  6. 6. 6 WorkFlowKurulumKılavuzu
  7. 7. 7 WorkFlowKurulumKılavuzu
  8. 8. 8 WorkFlowKurulumKılavuzu ScheduleBackground JobFor ClearingReport Bu adımın bir kezyürütülmesiyeterlidir. MaintainDefinitionEnvironment MaintainPrefixNumber Bu adım, farklıgeliştirme sınıflarındakullanılabilecekbirtakımöneknumaralarının ayarlanmasıiçingereklidir.Örnekbirkonfigürasyonşuşekilde olabilir: ClassifyTasksAs General Test Workflows Bu adım altındaki Task’lerintamamınınGeneral Taskolarakişaretlenmesi gerekir. CustomizingWithWorkflow Bu adım altındaki Task’lerintamamınınGeneral Taskolarakişaretlenmesi gerekir. OlaylarınEtkinleştirilmesi Bu adım; DMS, SAT, SASgibi standartbir WorkFlow sürecindekiolaylarlatetiklenecekbirWorkFlow hazırlayacaksakgereklidir.BuuyarlamaiçinOOCUişlemkodunagidiyoruz. Bu ekranda,SAP’ninçeşitli modüllerineaitaracı tayini ve olaybağlantılarınıyapmakmümkündür.Bu işinnasıl yapılacağını anlamakiçin,SASonayı ile ilgili olaylarıaktive edelim.
  9. 9. 9 WorkFlowKurulumKılavuzu OOCU ana menüsünde MM Satınalmaadımına gidelim. OlayBağlantısınınEtkinleştir Bu adımda, önce “Olaybağlantısını etkinleştir”adımınıtakipedeceğiz.Karşımıza,çeşitli görevleri barındıran bir liste çıkacak.SASonayı için,buliste üzerinde “WS20000075 – SASOnayı” adımına gidip,menüdenGit Nesneyi Görüntüle bağlantısınatıklayacağız. Bu ekrandayapılmasıgerekenuyarlama,şöyle olacaktır: Burada girilennesnetipi,SASsözkonusuolduğuiçinBUS2012 olarakseçilmiştir.EğerSAT,DMS gibi farklıbir nesne tipi sözkonusuolsaydı,farklıbirnesne tipi ve farklıbirolayatanacaktı. Bu ayardan sonra,birönceki ekranagirip“Ayrıntılar”düğmesine tıklıyoruz.
  10. 10. 10 WorkFlowKurulumKılavuzu Burada tıklanmasıgerekeniki yervardır:  Event linkage activated: Sözkonusuolayıaktif hale getirir  Error feedback:İş akışı üzerinde birhataoluştuğunda,Event’itamamendurdurmamayı sağlamakiçinburaya“3” değerini giriyoruz. İşimizbittiğinde, düğmesinetıklayarakekrandançıkıyoruz.Herşeyyolundaysa,görüntününşu hale gelmesi gerekir: İşleyen Tayini Bu bölümde,kullanılacak olanWorkFlowadımlarının“Genel görev”olarakbelirlenmesi sade bir kurulumiçinuygunolacaktır.
  11. 11. 11 WorkFlowKurulumKılavuzu WorkFlow’un Hazırlanması WorkFlow’un Açılması WorkFlowşemaları,SWDDişlemkodundanoluşturulur.Eğerstandartsüreçlerdahilindebir WorkFlowoluşturuyorsak,sistemingetirdiği örnekWorkFlow’ukopyalayıpZ’li birWorkFlow oluşturmakuygunolacaktır.Aksi takdirde;sıfırdanZ’li birWorkFlow oluşturacaksak,şemayıbaştan oluşturmakdahauygunolacaktır. WorkFlow’u Başlatmak Batch Input Yöntemi Bu adım; WorkFlow’umuzudökümanyaratma,SATgüncelleme gibistandartbirolayneticesinde tetikleyeceksekgereklidir. Alternatif olarak,WorkFlow’ubaşlatmasınıistediğinizolay(meselabirbelgeninkaydedilmesi) sırasında tetiklenenbirUserExitbulup, oUser Exitiçerisindenaşağıdaki gibi birtoplugirdi koduyla WorkFlow’ukendi 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şlemkodu,işakışınınbaşlamasınısağlayacakolanişlemkodudur.İş akışı başlatacak işlemkodlarınınnasıl oluşturulacağı, İşlemKodununBağlanmasıbaşlığında
  12. 12. 12 WorkFlowKurulumKılavuzu anlatılmıştır. Bununçalışması için,işakışında bir Start Formyaratmış olmanızgerekebilir –parametre pas etmenizbuşekilde olacaktır.Aşağıda,konuylailgili biraçıklamabulabilirsiniz (Wilson, 2007): To define astart formgo to the workflow builderandchoose menuoptionGoto – BasicData Clickthe start formstab Clickthe newformicon tocreate a new form.Note that youneeda structure definedasa containerelementthathasimportas a propertyinorder to use the wizardto create the form for you.The wizardwill bringall the fieldsfromthatstructure ontothe form.Afteritis createdyoucan go andeditthe form usingthe normal screenpainter. Bunuyaptığınızda, WorkFlowpenceresinde doğrudankullanabileceğinizbirTransactionyaratılmış olacaktır. Ancak, buTransaction’uBatch Inputiçerisindekullanmayakalkmayın. Üstteki durumda;işakışını özel birprogramdanveya kullanıcıyaherhangi birparametre girdirme ihtiyacıolmadan(dolayısıylaWorkFlow başlangıçekranınıgöstermeden) başlatmakistiyorsanı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. 13. 13 WorkFlowKurulumKı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. EventYöntemi Business Object BusinessObjectEvent’itetiklemekiçinaşağıdaki kodlardanfaydalanabilirsiniz. (...) 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 fonksiyondaZMMBO_PB00, ilgili BusinessObject’inadıdır Class ClassEvent’i tetiklemekiçinaşağıdaki örneği inceleyebilirsiniz. TetiklenebilecekörnekbirEvent(SE24):
  14. 14. 14 WorkFlowKurulumKılavuzu Eventtetiklemekiçin kullanılabilecekparametrikbirörnekkod: method event_create. *PFD_I_EVENT TYPE SWO_EVENTEvent 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. 15. 15 WorkFlowKurulumKı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 Eventtetikleyenörnekkod: 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. 16. 16 WorkFlowKurulumKılavuzu pfd_i_clsname = 'ZIMCL_YATIRIM_TALEBI' pit_i_parametre = lit_parametre pfd_i_commit = space ). Bu Event’i dinleyenörnekWorkFlow: Manuel İş akışı ilişkili birEvent’i manuel tetiklemekiçin,SWUEişlemkodunukullanabilirsiniz. WorkFlow Adımlarının Oluşturulması FunctionModule / Class WorkFlow’daçalışacakherbir kodiçin, önce birfonksiyon /Method yazmamızgerekmektedir. Eğer ekranüzerindenveri girişi yapılacaksa;sözkonusufonksiyonunaitolduğugruptabirekranyaratıp, söz konusuekranıfonksiyoniçerisinde“Call Screen”komutuylaçağırarakaktive edebiliriz. Eğer standartbir süreçile çalışacakbir WorkFlow sözkonusuysa,normalde ekstrafonksiyonyazma işimizinolmamasıgerekir. ObjectOrientedçalışacaksanız,yazacağınızMethod’larStaticolmalıdır. BusinessObject/ Class Bu çözümlerbirbirininalternatifidir.DahamoderndünyadaClass,dahaeski dünyadaBusinessObject kullanılır. Class WorkFlow’unarkasınaClassyazmayakarar verirseniz(önerilenyöntem),SE24’te yeni birsınıf yaratıp şu Interface’leri uyguladığınızdaneminolun:  BI_OBJECT  BI_PERSISTENT
  17. 17. 17 WorkFlowKurulumKılavuzu  IF_WORKFLOW  IF_SWF_EVT_EVENT Business Object BusinessObject, birWorkFlow arkasındaçalışacakolankodlarınMethodve Property’lerbazında toparlandığıyerdir. SWO1 ekranındanerişilebilirler. Mesela;SATonayları içinBUS2012 adlı BusinessObject,dökümanyönetimi içinDRAWadlıBusiness Objectvardır. Eğerstandart birsüreç ile çalışacakbir WorkFlow sözkonusuysa,sistemdekimevcut BusinessObject’ikullanacağız.Aksi takdirde;kendiZ’li yapımızauygunbirBusinessObject’i sıfırdan yaratmamız gerekecek. BusinessObjectiçerisindeki Method’larınherbiri,birfonksiyonreferansalınarakyaratılır.KeyFields ve Attributesise,WorkFlow’akonuolantablolarınalanlarıreferansalınacakyaratılır. Bir BusinessObject’i yaratıphazır hale getirdiktensonra,Edit Change ReleaseStatus  Object Type  To Implemented(veyaReleased) dememizgerekir. Aşağıda örnekbirMethodkodugörebilirsiniz: Methodiçerisinde “SWC_GET_ELEMENT” makrosuile Container’dendeğişkenalabilir, “SWC_SET_ELEMENT” makrosuile Container’e değişkenaktarabiliriz.Buşekilde modifiyeedeceğimiz değerler,methodubarındıran Task’in“Container”bölümündetanımlanmışolmalıdır.
  18. 18. 18 WorkFlowKurulumKılavuzu Task Bir Class/ Business Objectmethoduile WorkFlow adımıarasındaki köprüyüTask’lerkurar.Yani;bir Method’uWorkFlow’dadoğrudandoğruyakullanamayız.Doğrubağlantı;Method  Task  WorkFlowStepşeklinde kurulmalıdır. Task’ler;aşağıdaki menüadımlarındandüzenlenebilir(işlemkodu: PFTC_INS): Yeni birTask yaratacak olursak,tipi TS – Standart Görevolacaktır. Task içerisindekikritikalanlarıgörelim. Temel Veriler Bu bölümde;ObjectOrientedçalıştıysanız“CL”nesne kategorisini,BusinessObjectbazlıçalıştıysanız “BO” nesne kategorisini seçin. “NesneTipi”olarakilgili BusinessObject’in /sınıfın adı, “Method” olarakise ilgili Method’unismi girilecektir.
  19. 19. 19 WorkFlowKurulumKılavuzu Eğer yarattığınız Task bir kullanıcınınWorkFlow ekranınadüşmedensistemtarafındanişlensin istiyorsanız, aşağıdaki kutucuğudadoldurun.Bununyanısıra, WorkFlow içerisinde Task’i“General” olmaktançıkarıp hiçbirAgentatamayın. Tanım Bu bölümde,işakışınınçeşitli metinleri tanımlanabilir.BumetinlerSAPiçi mesajlardaveyaE-Posta iletilerinde kullanılacaktır.
  20. 20. 20 WorkFlowKurulumKılavuzu Buradaki metinlerintercümesi içinSE63 DiğerUzunMetinlermenüsünükullanabilirsiniz.Örneğin, 8267 numaralıTask’intercümesi içinkullanmanızgerekenkodlar: PDTS00008267 0120 PDTS00008267 0121 PDTS00008267 ... Sondaki 4 haneli rakam,Taskekranındaki metinkodunatekabül etmektedir: Yaptığınız tercümeleritaşımakiçinise TransportRequest’inizaltındaşöyle birkayıtolmalıdır:
  21. 21. 21 WorkFlowKurulumKılavuzu Konteyner Bu bölümde,Task’den(yani WorkFlow’dan) Method’a(yani fonksiyona) gönderilecekolanContainer değerleri tanımlanır. FonksiyondanContainer’e dönecekolandeğişkenlerde buradatanımlanır. WorkFlowStep Task’i General TaskHalineGetirmek Bir Task’i WorkFlow’amüdahele etmedenGeneralTaskhaline getirmekisterseniz,şuadımlarıizleyin:  PFTC_CHG işlemkodunagirin  Ek Veriler Aracı Tayini  Bakımını Yap menüsüne gidin  Özellikler’e giripGenel Görev’i tıklayın  OK & Generate Attachment Zorunluolmasada;WorkFlow’aAttachmentbağlamakgerekebilir.Bununtipikbirörneği;beyaz ekranlıDecisionTaskekranına,ilgili SAPbelgesine gidecek.SAPuzantılıbirAttachmenteklemektir. Bununiçin,işakışına yeni birTask ekliyoruz.
  22. 22. 22 WorkFlowKurulumKılavuzu Task’indetaylarışöyle olmalı:
  23. 23. 23 WorkFlowKurulumKılavuzu
  24. 24. 24 WorkFlowKurulumKılavuzu Task’inarkasındaki BusinessObjectile,SWO1’de SOFM’dankopyalanmıştır.Eklenen“ATTACHDOC” Method’uise şöyledir: begin_methodattachdocchangingcontainer. 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. 25. 25 WorkFlowKurulumKı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 fonksiyonununiç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. 26. 26 WorkFlowKurulumKılavuzu endfunction. İkinciPencereAçmak “User Decision”içinde ikinci birpencereaçıpbelgeyi görüntülemekistersek; Opsiyonel adım1:BOR’un dinamikyaratılması.BOR zatenvarsa bunagerekyok: Adım 2: Task’iniçinde “Görüntüle”Method’ununçağırılması: Agent’ların Atanması Agentatama bölümünde seçilebilecekbirkaçdeğervardır,bunlarıaşağıda bulabilirsiniz.Z’li program / raporlarda,atanan birAgent’ınadını almakiçin SWD_AGENT_TEXT_GET fonksiyonukullanılabilri. SuperiorOfWorkflowInitiator Bu değer,WorkFlow’ubaşlatankişininyöneticisini temsiletmektedir.
  27. 27. 27 WorkFlowKurulumKılavuzu Rule Dikkat!4.x sistemlerinde “ROLE”olarakgeçenkavram, 5.x itibariyle “RULE”olarakdeğiştirilmişve “ROLE” diye yepyeni birkavramgetirilmiştir. Rule’larsayesinde,WorkFlow’unherhangi biradımındaki Agentdinamikolarak(ABAPkoduile) belirlenebilir.Buişlemiçinizlenmesigerekenbirkaçadımvardır.Bu adımları bir örnekçerçevesinde inceleyelim. FonksiyonunYazılması Söz konusufonksiyon, EDI_ROLE_FOR_PROC_CHECKDUMMY kopyalanarakyazılabilir1 .Bu fonksiyonunamacı,WorkFlow’daki durumagöre muhataplarıbelirleyipgeri döndürmekolacak. Fonksiyongrubuiçerisinde,Container’dendeğeralmak&Container’e değeratamakiçinşutanım yapılmalıdır: include <cntain>. Fonksiyoniçerisinde izlenmesi gereken3adım vardır: 1. Container’dengerekli bilgileri almak 2. Z’li tablolardan(veyabaşkabirşekilde) ilgilimuhatabı/muhataplarıtespitetmek 3. Söz konusumuhataplarıACTOR_TABiçerisinde doldurmak Yazılmış örnekbirmuhatapfonksiyonukodunuinceleyelim: 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'. 1 Sistemde temel alınabilecek birçok fonksiyon vardır.Önemli olan,fonksiyonun ACTOR_TAB ve AC_CONTAINER parametrelerine sahip olmasıdır.
  28. 28. 28 WorkFlowKurulumKı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 enbasityaklaşım,ACTOR_TAB’e “US” anahtarıylabir kullanıcıeklemektir. Rule’un Yaratılması Fonksiyonyazıldıktansonra,sıraRule tanımlamasınagelir.Bununiçin PFAC_INS işlemkodunaveya ilgili menüye gidipyenibirRule yaratıyoruz. Rule Definitionbölümünde;  Categorykısmında“Functionto be Executed”değeriniseçiyoruz  FunctionModule kısmında,dahaönce yaratmış olduğumuzfonksiyonunismini giriyoruz
  29. 29. 29 WorkFlowKurulumKılavuzu Burada “Terminate if Rule ResolutionWithoutResult”tıkınınatıldığından eminolun.Aksi takdirde; koddaki birhatadandolayıAgentbelirlenemezse ve TaskGenericise,ilgili onaytalebisistemdekitüm kullanıcılaragidecektir. Containerbölümünde ise,yazdığımızfonksiyoniçerisinde SWC_GET_ELEMENT ile değerinialdığımız değişkenleri (IMPORTINGşeklinde) tanımlıyoruz.EğerSWC_SET_ELEMENT ile fonksiyondan Container’e döndüreceğimizdeğerlervarsa,onlarıda (EXPORTINGşeklinde) tanımlayabiliriz. WorkFlow’a Uygulanması Dinamikmuhatapatamasıyapacağımız adımın Agentsbölümünde,AC –Rule değerini seçipkarşısına yarattığımız Rule’unkodunugiriyoruz.
  30. 30. 30 WorkFlowKurulumKılavuzu Ardından;“Binding”düğmesinetıklayıp,Containerve Rule arasındagidipgelecekolandeğişkenleri tanımlamamızgerekiyor.Yukarıdaki örnekte,DOCIDve POSNRdeğerlerini aktarmamızgerekiyor. 2 Agentataması dinamikyapılacağından,sözkonusuTask’in“GenericTask”olaraktanımlanmasında faydavardır. Bu işlemiçin,önce TaskPropertiesbölümündeki AgentAssignment’atıklıyoruz. 2 Eğer fonksiyondan Container’edeğer dönüşü olsaydı,onu da aynı pencerenin alttarafında tanımlayacaktık
  31. 31. 31 WorkFlowKurulumKılavuzu GittiğimizekrandaTask’i seçip“Attributes...”düğmesinetıklıyorve “General Task”seçeneğini tıklıyoruz. Role Bu değer,standartBC yetkilendirmesindeki rolekarşılıkgelmektedir. Job Bu değer,HR şemasındaki birJob’utemsil eder. Organizational Unit Bu değer,HR şemasındaki birorganizasyonbirimini temsil eder. Position Bu değer,HR şemasındaki birpozisyonutemsil eder. User Bu değer,sistemdekibirkullanıcıyıtemsil eder. Expression Buraya,Container’de bulunanSWHACTORtipindekibirmuhatapdeğişkenigirilebilir.
  32. 32. 32 WorkFlowKurulumKılavuzu Binding İşlemlerinin Yapılması WorkFlow’un herbiradımında,ilgili Task’e gönderilecekve Task’denalınacakdeğerler tanımlanmalıdır.Bu iş,adım detaylarındaki “Binding”düğmesiile yapılır. Aşağıda örnekbirBindinggörebilirsiniz: Bindingsonucunda,değişkenlerinakışsırası şu şekilde olur:
  33. 33. 33 WorkFlowKurulumKılavuzu WorkFlow Container Task Method Function Method Task
  34. 34. 34 WorkFlowKurulumKılavuzu İşlem Kodunun Bağlanması WorkFlow’ubirişlemkoduilebaşlatmakistiyorsanız,SE93 ekranındaaşağıdaki özelliklere sahipbir ParameterTransactionyaratın: Buradaki GC_TASK değeri,yaratmışolduğunuzWorkFlow’unID’si olmalıdır.
  35. 35. 35 WorkFlowKurulumKılavuzu WorkFlow’larınİzlenmesi WorkFlowhatalarıortaya çıkıyorsa, yapılacakilkiş SWU_OBUF işlemkodundabirsenkronizasyon yapılmasıdır. Bununötesinde, başlamışWorkFlow’larınizlenmesi için SWI6/SWI14 işlemkodları kullanılabilir. Aşağıda,örnekbirraporgörebilirsiniz: Burada seçilmişherhangi biradımındetaylarınıgörmekiçin,yukarıdaki “Log”düğmesine tıklanabilir. Aynı ekranüzerinde,“Graphic”düğmesiile akışıgörsel olarakdaizlemekmümkündür.
  36. 36. 36 WorkFlowKurulumKılavuzu WorkFlow İletilerininE-PostaOlarakGönderilmesi Otomatik Bildirim Bu işlem,NetWeaverve WebApplicationServerbulunanyerlerdeotomatikolarakyapılabilmektedir. KullanıcıAyarları Eski Sistemler Öncelikle,E-Postailetisi almakisteyenkullanıcıile LoginolupSO12ekranına gidiyoruz. Bu ekranda,“Otomatik İletim”sekmesinde “Create”düğmesine tıklıyoruz.
  37. 37. 37 WorkFlowKurulumKılavuzu Açılacak olanpencerede,E-Postailetileriningönderileceği adresive gönderimişlemininyapılacağı tariharalığını giriyoruz.GerçekbirWorkFlow senaryosunda,bitiştarihi olarak31.12.9999 girmek uygunolacaktır. 3 Yeni Sistemler Yeni sistemlerde,üsttekiForwardözelliğinikullanmayagerekyoktur.Kullanıcıanaverilerindeki (SU01) E-Postaadresi otomatikolarakkullanılır. 3 Yapmış olduğumuz bu ayar,SO36 ekranında birçok kullanıcı için toplu olarak yapılabilir.
  38. 38. 38 WorkFlowKurulumKılavuzu DiğerAyarlar Bu andan itibaren,kişininInbox’unadüşecekolanSAPve WorkFlow iletileri,otomatikolarakbu adrese iletilecektir.İletimişini yapacakprogramlarındüzenli BackgroundJob’larşeklinde kurulmuş olmasıgerekmektedir: RSWUWFML2 İş akışı iletilerini gönderir.İdeal durumdabuprogrambirvaryant ile kurulmalıdır.Varyant içerisinde,aşağıdaki seçimekranıkriterleriayarlanmalıdır: Bu ekranüzerinde;  Message Classfor Subject&Message NumberForSubject:GönderilenE-Postailetisinin konusunuhangi ileti sınıfının(SE91) hangi iletisindenoluşturacağınıbelirtiyoruz. SE91 mesajıiçinde iki parametre belirtebiliyoruz: o &1 = Sistemtanımı (ARPgibi) o &2 = Task’iniçindeki metin  Before WorkItemDescription:Gönderilecekiletininiçeriğineaitstandartmetni belirliyoruz.Bustandartmetin,SE61işlemkodunda tanımlanabilir.SE61’de;döküman sınıfı DT(Diyalogdaki metin) olarakayarlanmalıdır. Farklı işakışları içinfarklımetinlersözkonusuolacaksa;herbirişakışı içinayrı ayrı varyantlar oluşturup;herbirvaryantiçinayrı birerJobkurmakiyi bir fikir olacaktır.
  39. 39. 39 WorkFlowKurulumKılavuzu Eğer gönderileniletilerin içeriğini işakışınesnesinden(onaytalebi,vs) dinamikolarak değiştirmek istersek, buişlemi buprogramınZ’li birkopyasınıalarakyapabiliriz. Değiştirilmişörnekbir program,ekte bulunmaktadır: ZRSWUWFML2 Yeni sürümlerde aynıişi Enhancement’larladayapabiliyoruz.Enhancement’lıbirörnekektedir: RSWUWFML2 SWN_SELSEN Gecikmiş/cevaplanmamışiletileri tekrargönderir.Buprogramınormal şartlardakurmaya gerek yoktur. Bu programlarındüzgünçalışması için,SCOTişlemkodundaki E-Postaayarlarınındüzgünbirşekilde yapılmışolması gerekmektedir. Gönderilmişolanişakışıiletileri,kabacaaşağıdaki görüntüye sahipolacaktır: Kullanıcıişaretli bağlantılaratıklayarak,ekranındaaçılacakbirSAPGui penceresi içerisindegerekli işlemi yapabilir. Bu bağlantılaratıklandığında;kullanıcınınhangi SAPsistemine Logonolacağışunabağlıdır:Gönderilen link(EXECUTE WORKITEM.SAP) içerisinde,kaynaksistemin3haneli kodubulunmaktadır:
  40. 40. 40 WorkFlowKurulumKılavuzu KullanıcınınSAPGUI’sinde (örneğimizde) OXPgirdisihangi sistemdeise,bağlantıyatıkladığındao sisteme Loginolmayaçalışacaktır. Birdenfazlasistemde OXPtanımıvarsa,daha üstte yeralansisteme Loginolunacaktır. Manuel Bildirim Netweaverbulunmayan,veyaE-Posta’daki bağlantıyatıklayarakbirWebbağlantısıaçmak isteyen yerlerde ise,WorkFlow Inbox’unuperiyodikolaraktarayıp,yeni mesajlariçinE-Postailetileri oluşturupZ’li birtabloyayazacakbiruygulamageliştirilmesi gerekir. NetweaverÇözümü Netweavervarise,ilgiliE-Postaatmafonksiyonuçağırılarakiletilergönderilebilir.Aşağıdabuişi yapan örnekbirprogram 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. 41. 41 WorkFlowKurulumKı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. 42. 42 WorkFlowKurulumKı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ü Netweaveryokise,dışarıdayazılacakbir Java programı belli zamanaralıklarındabutabloyuokuyarak birikmiş mesajlarıE-Postaolarakgönderecektir. E-Postailetilerinde,Javaile yazılacakbirWeb sayfasınaverilmişbağlantıolacaktır. Aşağıdabuişi (Java’yayönelikolarak) yapanörnekbirprogram 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. 43. 43 WorkFlowKurulumKı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. 44. 44 WorkFlowKurulumKı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-PostaDönüşü E-Postadönüşünde Webtabanlıbironayvermeksözkonusuise,buonayınarkasındaki fonksiyon SWW_WI_ADMIN_EXECUTE fonksiyonunuçağıracakbirrapor yazılıp,bu raporu çağıran bir Batch Inputyürütebilir(SWIA işlemkodununarkasındakifonksiyon). “Identification”parametresiolarak, söz konusuWorkItem’inID’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. 45. 45 WorkFlowKurulumKılavuzu END-OF-SELECTION. Ancak;SAT/SASonayıgibi bazı standart süreçler,kendi WorkFlow BAPI’lerine sahiptir.Yerinegöre bu BAPI’lerde çağırılabilir. Ekran bu şekilde yürütüldüğünde,sözkonusuID’yi içerenTaskekranagelecektir. Söz konususatırı seçipEdit  Work Item Execute WithoutCheck (veyaExecute WorkItem) menüsüne girildiğinde,sözkonusuadımınyürütüleceğiekranaerişiyoruz.Aşağıda,SATonayıile ilgili örnekekranıgörebilirsiniz.
  46. 46. 46 WorkFlowKurulumKılavuzu Vekalet Durumunda Vekilin Tespiti Bu ihtiyaç,aşağıdaki örnekkodlakarşı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. 47. 47 WorkFlowKurulumKı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 İletilerininSilinmesi Herhangi birnoktada;belge silinmesi,süreç iptali gibi sebeplerdenötürükullanıcılarınInbox’larında bekleyenonaytaleplerini silmekisteyebilirsiniz.Budurumda,“rswwwide” adlı standart programı çağırabilirsiniz;işlemkodu:SWWL.Aşağıda,bu programı çağırıp onaybekleyenişkalemlerini silen örnekbirfonksiyonbulunmaktadı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. 48. 48 WorkFlowKurulumKı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-Postailetilerini silememektedir.Sadece SAPişakışı Inbox’undakiiletileri silmektedir. Faydalı Workflow Nesneleri Tablolar  SWWWIHEAD: WorkflowRuntime:HeaderTable forAll WorkItemTypes  SWWLOGHIST: WorkflowRuntime:Historyof aWork Item  SWP_HEADER: WorkflowInstances:HeaderDataof a Workflow Execution  SWW_CONTOB:WorkflowRuntime:WorkItemDataContainer(OnlyObjects)  SWW_CONT: WorkflowRuntime:WorkItemData Container  SWWUSERWI: Kullanıcıyailişkinyürürlüktekiişkalemleri Modüllere Özel İpuçları DMS DökümanYaratıldığı AndaWorkFlowTetiklemek DMS Uyarlamaları SPRO CrossApplicationComponents  DocumentManagement  DocumentDistribution  General Settings  SAPBusinessWorkflow menüsüaçılır.
  49. 49. 49 WorkFlowKurulumKılavuzu Activate Event-TypeLinkage Bu menüadımına bir keztıklanmasıyeterlidir.Buşekilde,döküman yönetimiolaybağlantılarıaktive edilecektir. Allocate Tasks To Persons Reponsible Burası, bütünişleminenkritikyeridir. Activate EventLinking Birinci adımda;“Activate eventlinking”menüsünetıklıyoruz.
  50. 50. 50 WorkFlowKurulumKılavuzu Burada, bizi “Change DocumentInfoRecord” ve “Create ObjectOf Type DRAW” Task’leri ilgilendiriyor.BuTask’lerdenilki birdökümangüncellendiğinde,ikincisiise yaratıldığındaçalışacak. TS00007842’ye tıklayarak,Goto  DisplayObjectmenüsüne giriyoruz.Karşımızagelecekpencerede, “Triggeringevents”bölümüne giripaşağıdaki değerlerigiriyoruz: Aynı ekranda,Bindingde otomatikolaraküretilebiliyorolmalı.Soldakibutonuyeşil hale getirerek adımı aktive ediyoruz. Buşekilde;“Biri dökümangüncellediğinde,DRAWadlıBusinessObject’in CHANGED olayınıtetikle”demişolduk. Şimdi aynıişlemi TS00408150 içinde yapacağız.
  51. 51. 51 WorkFlowKurulumKılavuzu Bu adımları düzgünbirşekilde yapıpgeri çıktığımızda,EVENT listesi dolmuşolmalıdır. Artık buradangeriye çıkabiliriz. AssignAgents Bu bağlantıyatıkladığımızda,karşımıza çeşitli DMS görevlerine kimlerinatanacağınınbelirleneceği ekrangelecektir. Bizi buradada “Change documentinforecord”ve “Create objectof type DRAW”adımları ilgilendiriyor.Buadımlarailgili kişiler(standartAgentmantığıile) atanabilir;amasade birkurulumda bu Task’leri “General Task”yapmakiyi birfikirolacaktır. Bununiçin,herbir Task’i seçipyukarıdaki “Attributes...”düğmesine tıklıyoruzve “General Task” seçeneğiniişaretliyoruz.
  52. 52. 52 WorkFlowKurulumKılavuzu Verify Workflow Customizing Eğer gerekiyorsa,buadımdaWorkFlowuyarlamalarıtestedilebilir.Ancak;sistemüzerindedüzgün çalışan başkaWorkFlow’larvarsa,burayagirmeye gerekyok. WorkFlow’unHazırlanması SWDD ekranınagiripyeni birWorkFlowyaratıyoruz.WorkFlow ekranındaGoto  Basic data ekranınagidiyoruz.Karşımızagelecekekranın“StartEvents”kısmı,DMS bağlantısıiçinkritikbölgedir. Buraya,(daha önce DMS Task’lerinibağlamışolduğumuz) DRAW  CREATEDve DRAW CHANGED olaylarınıgireceğiz.Sol taraftaki Bindingdüğmesiile,DRAW’dangelennesnelerileWorkFlow Containernesneleri arasındaki aktarımlarayarlanabilir.Özellikle_EVT_OBJECTnesnesi, yaratılan/güncellenendökümanlailgili bütündetaylarıgetirdiği içinbizimaçımızdankritikolacaktır.
  53. 53. 53 WorkFlowKurulumKılavuzu Bu adımı tamamladıktansonrasoldaki gri düğmeleri yeşil hale getiripolaylarıaktive ediyoruz. WorkFlowşemasıartık şöyle gözüküyorolmalı: Burada “DocumentChanged”ve “DocumentCreated”olaylarınadikkatedin.Benyaptığımörnekte, aşağıya bir de “Dökümanyaratıldı” mesajıgönderecekadımekledim.Gerçekbirprojede,Event’lerin altına standartWorkFlowakışı eklenmelidir. Uygulama Örneği Kullanıcı,CV01N’ye giderekyeni bir dökümanyaratıyor
  54. 54. 54 WorkFlowKurulumKılavuzu Dökümanyaratıldıktankısa bir süre sonra,ilgili kişiye “Yeni döküman yaratıldı” mesajıiletiliyor Olayları Kendi ProgramımızdanTetiklemek Eğer işakışını başlatacakolanonayı kendi yazdığımızbirprogramdan tetiklemek istiyorsanız, WorkFlow’uBaşlatmak başlığınagözatın. MM SAT & SAS İçinUser Exitİle AgentBelirleme Onaykodları içerisine giriyoruz. Herhangi bironay kodunun“İşakışı” sütunundaF4’e basıp, “9 – Kullanıcıçıkışı yoluylarol açılımı” değerini seçiyoruz.Oandanitibaren,sözkonusukodiçinUserExitdevreye girecektir. Ama hangi UserExit?Bu sorununcevabı için,“Satınalma”altındaki “Satınalmaiçingeliştirmeler” menüsününyanındaki yardımıseçiyoruz.
  55. 55. 55 WorkFlowKurulumKılavuzu Karşımıza gelecekekranda,satınalmayaaitçeşitçeşitUserExit’i listehalinde görebiliriz.BuUser Exit’lerdenbirtanesi,SATdöngüsününmuhatapseçiminetekabülediyor. M06B0001’e baktığımızda, içinde tekbirComponentolduğunugörüyoruz. Bu fonksiyon,bütünEBAN değerlerini ve onay kodunugetiriyor.BuExitiçerisinde yapmamızgereken şey,gelendeğerleregöre gerekli değerlendirmeyiyapıp,ACTOR_TABiçerisinde onayverecekkişinin User’ını (veyapersonel numarasını,grupnumarasını,vs) döndürmek.
  56. 56. 56 WorkFlowKurulumKılavuzu Eğer aynı işi SASiçinyapmakisteseydik,aşağıdaki UserExit’i aynımantıklakullanabilirdik: Onay DurumununTespiti BAPI_PO_GETRELINFO fonksiyonu,SASonaydurumunudöndürmektedir. BAPI_REQUISITION_GETRELINFO ise,SATonaydurumunudöndürmektedir. SAT durumuiçin,buörnekfonksiyonu inceleyelim. Hiç onaylanmamışbirSATkalemi için;fonksiyon,aşağıdaki şekilde veridöndürecektir:
  57. 57. 57 WorkFlowKurulumKılavuzu Dikkatederseniz,ortadahiçonayolmadığı içinRELEASE_ALREADY_POSTEDtablosuboştur. RELEASE_FINALtablosundaise,olmasıgerekenonaylarıgörebilirsiniz:
  58. 58. 58 WorkFlowKurulumKılavuzu KısmenonaylanmışbirSATkalemi için;fonksiyon,aşağıdaki şekilde veridöndürecektir:
  59. 59. 59 WorkFlowKurulumKılavuzu Normalde 6 onayverilmişolmasıgerekirken;buradahenüz4tanesininverildiğinigörüyoruz. TamamenonaylamışbirSAT’taise,tabloda6 onayın 6’sı birdengözükecektir: Ne var ki;bu fonksiyondabirSAT’ınreddedildiğinedairherhangi birbilgi bulamazsınız. Sıradaki onay kodunudöndürenörnekbirABAPkoduaşağıdagörülebilir.Bukodbelli birsenaryoiçin hazırlanmıştır; modifiyeetmekgerekebilir.
  60. 60. 60 WorkFlowKurulumKı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. 61. 61 WorkFlowKurulumKı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. 62. 62 WorkFlowKurulumKı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. ProgramdanSAT Redddetmek methodreject_pr. “PFD_I_BANFN TYPE BANFN Satınalma talebinumarası “PFD_I_FRGAB TYPE FRGAB Satınalma talebionay kodu data: lit_contatype standardtable of swr_cont, lrd_conta type ref to swr_cont, lit_msgl type standardtable of swr_messag, lit_msgs type standardtable of swr_mstruc, lit_xebantype standardtable of ueban, lrd_xebantype ref toueban, lit_yebantype standardtable of ueban, lit_xebkntype standardtable of uebkn, lit_yebkntype standardtable of uebkn, lfd_okey type swr_struct-object_key. * Mevcutveriler select*intocorrespondingfieldsof table: lit_xeban##too_many_itab_fields from ebanwhere banfneqpfd_i_banfn, lit_xebkn##too_many_itab_fields from ebknwhere banfneqpfd_i_banfn. lit_yeban[] =lit_xeban[]. lit_yebkn[] =lit_xebkn[]. * EBAN durumdeğişikliği
  63. 63. 63 WorkFlowKurulumKılavuzu loopat lit_xebanreference intolrd_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. commitworkand wait. * İşakışında red Event'ini tetikleme appendinitial line tolit_contareference intolrd_conta. lrd_conta->element='RELEASECODE'. lrd_conta->value = pfd_i_frgab. loopat lit_xebanreference intolrd_xeban. concatenate lrd_xeban->banfnlrd_xeban->bnfpointolfd_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. * Mevcutiş akışlarını durdurma (Eventişe yaramazsa) loopat lit_xebanreference intolrd_xeban. cancel_active_wfs( lrd_xeban->banfn). endloop. endmethod.
  64. 64. 64 WorkFlowKurulumKılavuzu methodcancel_active_wfs. “PFD_I_BANFN TYPE BANFN Satınalma talebinumarası data: lit_wi type standardtable of swr_wihdr, lrd_wi type ref to swr_wihdr, lwa_portype 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. checklit_wi[] isnotinitial. * Cancel loopat lit_wi reference intolrd_wi. call function 'SAP_WAPI_ADM_WORKFLOW_CANCEL' exporting workitem_id=lrd_wi->wi_id. endloop. endmethod. Yetkilendirme İş akışı tetikleyecekolankişilere,S_RFCve S_WF_WIyetkilerininverilmişolmasıgerekmektedir. Bununyanı sıra; bukişiler,işakışınakonuolanişlemile ilgili yetkilere de sahipolmalıdır. ÖrneğinSAT ile ilgilibirişakışı sözkonusuysa,SATaçabilecekyetkilere de sahipolmalıdır. Java Çözümü’nünuygulandığıyerlerde;Webüzerindenonayverecekkişilerinde S_RFCyetkisine sahipolmasıgerekmektedir.Bununyanısıra, onayverecekleriekranlaraaityetkilerinde verilmiş olmasıgerekmektedir.
  65. 65. 65 WorkFlowKurulumKılavuzu Vekalet İş akışında vekaletvermekiçin,SBWPişlemkodundaAyarlar  İşAkışıAyarları  Vekil Bakımı menüsükullanılabilir.Kaydedilenvekiller,HRUS_D2tablosundasaklanır. Vekil girişi sırasında,birvekaletprofili seçilmelidir. Bu vekaletingeçerliolacağıTask’lerde,aynıvekil profilininbulunmasıgerekmektedir.
  66. 66. 66 WorkFlowKurulumKılavuzu Vekillerdeeksikrol olursa,Inbox’larınadüşse bile onayveremezler.Eksikrolleri tamamlayan aşağıdaki Method,bir program/ Job olarakkurulabilir.
  67. 67. 67 WorkFlowKurulumKı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. 68. 68 WorkFlowKurulumKı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 verilerini hazırla ve çağır
  69. 69. 69 WorkFlowKurulumKı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. 70. 70 WorkFlowKurulumKı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 WorkFlowTetiklenmiyor ÖncelikletemelWorkFlowayarlarınındoğruolduğundaneminolun. Tüm ayarlar doğruolmasınarağmeniş akışı tetiklenmiyorsa,SWUDişlemkodunagidin,yukarıya tetiklenmeyenWorkFlow’unkodunugirinve “Problem:Tasknotstarted”düğmesine tıklayın.
  71. 71. 71 WorkFlowKurulumKılavuzu Yeni ekranda, WorkFlow’utetikleyemeyenkişininkullanıcıadını girinve “EventQueue (tRFClog)” düğmesine tıklayın.(Bubölümdeki diğerdüğmelerde işinizeyarayabilir) Burada karşınıza gelecekolanliste,sözkonusukullanıcıdaortayaçıkmış WorkFlow hatalarını listeleyecektir.Buhatalarıinceleyerekgerekli düzeltmeleri yapabilirsiniz. WorkFlow’uTekrarBaşlatmak Hata almış biriş akışının tekrar başlatılması,SWPRişlemkodundanyapılır. Hata almadansonuçlanmışbiriş akışını, ilgili Event’i tetikleyerektekrar başlatmakiçinSWUEişlem kodukullanılabilir. ConfigureRFC DestinationProblemleri Temel Workflowayarlarınıyaparken,Configure RFCDestinationbölümünde RFCbağlantısıveya kullanıcıile ilgili hatalaralıyorsanız, veyatetiklenmeyenbirWorkFlow’unEventQueuebölümünde “IncorrectLogon” tarzı birileti alıyorsanız, probleminçözümüiçinşuadımlarıtakipedin:  SM59’a giderekilgili RFCbağlantısınısilin  SU01’de (Önplandakullanılanbirhesapdeğilse) sözkonusukullanıcıhesabınısilin  SU01’de WF-BATCHadında yeni birhesapyaratın. Kullanıcıtipi Colsun(İletişimkullanıcı – harici RFC)  SM59’da RFC bağlantısınıtekrar yaratın (bağlantıtipi:L,Unicode:aktif),kaydedin,ve kaydettiktensonratekrariçine giripyeni yarattğınızWF-BATCHkullanıcısınınbilgilerini girin  SWUD’a giderekRFCDestinationayarlarınıtekraryapın AnındaBelirenOnayEkranı Diyelimki birMMbelgesininarkasındahemenWorkFlow tetikleniyor.Belgeyi yaratankişi ileonay vermesi gerekenilkkişiaynıise,belge yaratılıryaratılmazkişininkarşısınaonaypenceresi gelebilir. Bunuönlemekiçin,WorkFlow’untetiklenmeEvent’iile onayekranıarasınaDummybir Background Stepkoyabilirsiniz. BoşOOCU Listesi OOCU işlemkodunagirdiğinizde,görevlerive işakışlarınılistelemenizgerekenekrandalisteyehiçbir şeygelmediğinigörüyorsanız,buprobleminsebebi yetkilendirme olabilir.OOSP/OOSBişlem kodlarınagiderek,kullanıcınızınyeterli yetkiye sahipolduğundaneminolunve tekrardeneyin.
  72. 72. 72 WorkFlowKurulumKılavuzu Hata İletileri ‘...’ görevininişlemetayini yok Bu hatayı almanızınsebebi büyükihtimalle sözkonusuTask’in“GeneralTask”olmamasıdır. Task’i General Taskhaline getirin ve tekrardeneyin. Agentsof typeA cannot bedefined Bu hatanın alınması,iş akışı adımındaki muhatabınbelirlenemediğineişareteder.Hatayıgidermenin enbasitve genel çözümü,sözkonusu Task’i “General Task”haline getirmektir.Dahaözel durumlarda;Task’ingönderildiği kişinin,Task’i işleyebilecekkişilerdenbiri olduğundaneminolun. User Exitkullanıyorsanız,Task’i işleyebilecekherhangibirininbulunamamışolmasıdabuhataya yol açabilir. Object Type‘WF’ Is Not Valid Bu hatayı MM satınalma sürecinde alıyorsanız,bununsebebionaystratejisi uyarlamasındaüretim yerleriningirilmemişolmasıolabilir. SWF_RUN594 SASWorkFlow’ubaşladıktansonrailgilikişininInbox’unahiçbirşeydüşmüyorsave WorkFlow yöneticisine buhatailetiliyorsa, 797775 numaralıOSS notununuygulanmasıgerekebilir. Bununyanı sıra, SAS işakışındaki (SWDD) onay verme adımının “General Task” olarakişaretlenmiş olmasıda gerekebilir. DiğerAgenthataları İki Client’lıbirsistemde çalışıyorsanız, GenericTaskhaline getirdiğinizTask’leri SCC1ile testyaptığınız Client’adataşımalısınız.Bunu yapmadıysanız,TestClient’ındahataalabilirsiniz. Bir Task sistemdeki gümkullanıcılaragidiyorsa;sebebimuhtemelenesasAgent’ınbelirlenemiyor olmasıve Task’inGenericTaskolarakişaretlenmişolmasıdır.Agent’uRule ile belirliyorsanız, Rule’un Yaratılması başlığı altında“Terminate if Rule ResolutionWithoutResult”açıklamasınadikkatedin. Works Cited Wilson,K.(2007, 06 10). WorkflowStarttransaction in NetWeaver. 12 15, 2009 tarihinde ERPGenie: http://www.erpgenie.com/abaptips/content/view/460/1/adresindenalındı

×