8 Haziran 2009 Pazartesi

ABAP : Webservis yaratma


Selamlar,
Webservis yaratma konusunda epey mail aldım ve sonunda resimli olarak anlatan bir yazı yazmaya karar verdim :).
Webservis candır efendim, hertürlü heryerden ulaşılabilir, baba yarısıdır. Kullanın , kullandırtın. İnsanı mutlu eder.
Orhan Veli'nin dediği gibi "bir de rakı şişesinde balık olsam" diyesi gelir insanın .
Gelelim, webservis yaratmaya,
buyrunuz resimli anlatım aşağıdadır.

SE37 ye gidip bir fonksiyon yaratıyoruz.




RFC olmasına DİKKAT EDİYORUZ.


PASS VALUE kısmını tıklıyoruz

Kodumuzu yazıyoruz ve aktive etmeyi unutmuyoruz

SE80'den gidip packagemizi buluyoruz ve sağ tıklayıp menülere ulaşıyoruz.



Function modul olarka yaratıyoruz.


Az önce yarattığımız fonksiyonun adını veriyoruz.

Release tıkını atıyoruz, attıktan sonra kendi aktif edecektir, yok olmaz ise WSCONFIG ve WSADMIN gerekli aktivasyon işlemlerini yapabiliriz.






WSADMIN i açıyoruz

Fonksiyonumuzu buluyoruz

WEB SERVICE > WSDL yi seçiyoruz

Devam..

SAP kullancı adı ve şifremizi giriyoruz.



Gördüğümüz üzere WSDL hali karşımıza geldi, şifre sormasını istemiyorsak programımızdan çağırırken, Credentials ayarlarını setlemeyi unutmuyoruz :=) . 
Hadi kolay gelsin.

Yazımızı bir Orhan Veli şiiri ile bitirelim.

DEDİKODU 

Kim söylemiş beni 
Süheyla'ya vurulmuşum diye? 
Kim görmüş, ama kim, 
Eleni'yi öptüğümü, 
Yüksek kaldırımda, güpe gündüz? 
Melahat'i almışım da sonra 
Alemdara gitmişim, öyle mi? 
Onu sonra anlatırım, fakat 
Kimin bacağını sıkmışım tramvayda? 
Güya bir de Galataya dadanmışız; 
Kafaları çekip çekip 
Orada alıyormuşuz soluğu; 
Geç bunları, anam babam, geç; 
Geç bunları bir kalem; 
Bilirim ben yaptığımı. 
Ya o, Mualla'yı sandala atıp, 
Ruhumda hicranını söyletme hikayesi?

Orhan Veli




7 Haziran 2009 Pazar

SQL : T-SQL ile text dosyasi okuma

Selamlar,
Bir prosedürün içinden bir text dosyasına ulaşmanız gerekebilir. Genellikle, bir yerden okunan verileri windows service ile yazdığınız dizinden okumanız gerekebilir (bana gerekti ordan biliyorum).
Onun içinde yapmanız gereken;

declare @o int, @f int, @t int, @ret int
declare @line varchar(8000)
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'opentextfile', @f out, 'c:\deneme.txt', 1
exec @ret = sp_oamethod @f, 'readline', @line out
while( @ret = 0 )
begin
print @line
exec @ret = sp_oamethod @f, 'readline', @line out end




Hadi kolay gelsin.
Bir Yelda Karataş şiiriyle bitireyim ya da özgeçmişi mi demeli..

YELDA KARATAŞ

Zonguldak’ta doğdu.
Denizi ve defne kokusunu unutamıyor.
Ellerine ve gökyüzüne inanmayı yatılı okulda öğrendi.
Bütün çocukları seviyor, bütün renkleri…
Ama bütün insanları asla!
Bu nedenle, şarkı sözü, deneme yazıyor.
Bu nedenle bazı filmlere ağlıyor, bazı müziklerde
Tüyleri diken diken…
Bu nedenle şiir yazıyor.
O’nun ilk kitabı bu.


Kalın olarak yazdığım kısım ne güzel de olmuş.

SQL : Hangi Prosedur Hangi Tabloyu Kullanmis

Selamlar,
Mevcut veritabanınızda bir tabloda değişiklik yapmak istediğiniz, hangi prosedürlerin etkilenebileceğini görmek için kağıtla kalemle uğraşmaya, hangi tablo hangi prosedürü kullanıyor tarzında dökümantasyoncuklar yapmak yerine, basit bir sorgu ile hangi tablonuz hangi prosedürlerde geçmiş şöyle öğrenebilirsiniz;

SELECT o.name, t.TABLE_NAME, c.text
FROM syscomments c
JOIN sysobjects o
ON c.id = o.id
JOIN INFORMATION_SCHEMA.Tables t
ON c.text LIKE '%'+t.TABLE_NAME+'%' and
table_name = 'tablo_adı'

4 Haziran 2009 Perşembe

ABAP : SPOOL TO PDF Convert ve Download

Selamlar,
Bir çıktıyı PDF e dönüştürmenin çeşitli yöntemleri mevcuttur. Bunlar;
-Spool numarasının direk PDF e dönüştürmek
-Çıktının OTF 'sini alarak PDF e dönüştürmek.

Benim anlatacağım direk spool numarasından PDF e dönüştürme metodudur.
Hatta arkasından dönüşmüş PDF'i de bilgisayara kaydetmeyi göstereceğim :=).
Arkasından da gaymaklı ekmek gadayıfı eheh.

* Spool to PDF conversions

data: gd_spool_nr like tsp01-rqident,

gd_destination like rlgrap-filename,

gd_bytecount like tst01-dsize,

gd_buffer type string.

 

 

 data : it_pdf_output like tline occurs 0 with header line.

 data: numbytes type i,

pdfspoolid like tsp01-rqident,

it_mess_att like solisti1 occurs 0 with header line.

 

 

data:

     p_padest like  tsp03-padest.

 

p_padest = 'ZHP2'.

  call function 'CONVERT_OTFSPOOLJOB_2_PDF'

    exporting

      src_spoolid         = gd_spool_nr     "buraya spool numarasını yazıyoruz

      dst_device          = p_padest

    importing

      pdf_bytecount       = numbytes

      pdf_spoolid         = pdfspoolid

    tables

      pdf                 = it_pdf_output

    exceptions

      err_no_otf_spooljob = 1

      others              = 12.

 

 

 

 

 

*--- DOWNLOAD TO PC {bu form için kerem köseoğlu'na teşekkür ediyoruz }

  data:

      p_file like rlgrap-filename  .

  data cancel.

  p_file = 'C:\temp\file.pdf'.

  perform download_w_ext tables it_pdf_output

  using p_file

  '.pdf'

  'BIN'

  numbytes

  cancel.

 

 

 

 

FORM download_w_ext

 TABLES datatab

USING

filename LIKE rlgrap-filename

value(extension) TYPE c

mode TYPE c

bin_filesize TYPE i

cancel TYPE c.

 

 

DATA: name TYPE string,

path TYPE string,

fullpath TYPE string,

ext TYPE string,

filter TYPE string,

size TYPE i,

uact TYPE i.

 

IF mode <> 'ASC' AND mode <> 'BIN'.

sy-subrc = 1. EXIT.

ENDIF.

CLEAR cancel.

ext = extension.

IF ext(1) = '.'.

SHIFT ext.

ENDIF.

name = filename.

IF name IS INITIAL.

name = 'test.*'.

REPLACE '$' WITH ext INTO name.

ELSEIF name NA '.'. "name has no extension, add ext

CONCATENATE name '.' ext INTO name.

ENDIF.

filter = '(*.$)|*.$|'.

REPLACE '$' WITH ext INTO filter.

REPLACE '$' WITH ext INTO filter.

 

fullpath = name.

 

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = bin_filesize

filename = fullpath

filetype = mode

TABLES

data_tab = datatab

EXCEPTIONS

file_write_error = 1

no_batch = 2

gui_refuse_filetransfer = 3

invalid_type = 4

no_authority = 5

unknown_error = 6.

filename = fullpath.

ENDFORM. "download_w_ext


.NET : Globalization Ayarlari

Selamlar,
Geliştirdiğiniz windows uygulamasında, eğer Globalization ayarlarının manuel olarak ayarlanmasını ve heryerde aynı olmasını istiyorsanız yapacağız işlem çok basit. Program.cs nin içersiğinde birazdan vereceğim kodları yapıştırmanız yeterli :=). 
Aksi halde, Globalization ayarlarına dikkat etmeden yazdığınız programda veri girişleri kendi bilgisayarınızda farklı iken müşterinin bilgisayarında farklı olacaktır. Örneğin ondalık ayırımı bizde farklı iken en-US Globalization ayarlarında farklı olmaktadır.

Program.cs de;
using System.Globalization;

 import ettikten sonra,


        [STAThread]
        static void Main()

içine;

            CultureInfo c = new System.Globalization.CultureInfo("en-GB");    
            System.Threading.Thread.CurrentThread.CurrentCulture = c;
            System.Threading.Thread.CurrentThread.CurrentUICulture = c;

yazmanız yeterlidir.

Hadi kolay gelsin iyi çalışmalar. :=)

29 Mayıs 2009 Cuma

SQL : An INSERT EXEC statement cannot be nested.

vaeeeey okuyucular selam :=)
yine bir sorunla karşı karşıyayız,
malum MSSQL de uzun prosedürler yazarken, ayak işlerini başka prosedürlere yaptırmamız gerekebiliyor. Fakat , iç içe çağırdığınız prosedürlerde, eğer çağırdığınız prosedür başka bir prosedür çağırıyor ve bir #temp tabloya veri sokuyorsa ve sizin çağırdığınız prosedürde kendi içinde veri sokuyorsa, ve sizde son prosedürde bir temp tabloya veri sokuyorsanız (tamam biraz karışık oldu ).
An INSERT EXEC statement cannot be nested.

diye bir hata verecektir.
Çözümü de GLOBAL TEMP TABLE kullanmaktır,
Bazı sitelerden OPENROWSET gibi abidik gubidik, sorgu sırasında dahi SQL bağlantısı açan, uzun karışık yöntemler mevcuttur,
boşverin onları gülün geçin "hmm fevkalede" gibi yapmacık tepkiler verip uzaklaşın ordan :).

Nedir peki GLOBAL TEMP TABLE ;
Küreselleşen dünyada ki küreselleşmiş temp table yani;
efendim normalde tanımlarken #temp yazmıyor muyuz?
bunda sadece ##temp yazacağız, o kadar :=).
Yani arasında ki fark, rakıyı tek içmekle duble içmek arasında ki fark kadar.

Yani çağırdığımız prosedürlerden birinin sonucunu global temp tabloya atacağız ve son prosedürden çağırma işlemini ve arkasından drop işlemini yapacağız. Normalde temp tablolar prosedürle işiniz bitince otomatik droplanırken, bunda bağlantı kapanınca droplanıyor, siz her ihtimale karşı işiniz bitince drop edin :)


Örnek; (benim örneğim değil, kendimin ki baya uzun )

create proc test1
as

select orderid, customerid, employeeid from ##temp2

go
create proc test2
as
create table ##temp2 (orderid int ,
customerid char(5), employeeid int)

insert into ##temp2 exec test3
go

create proc test3
as
select top 100 orderid, customerid,
employeeid from orders
go

exec test2
exec test1

go
drop proc test1, test2, test3
drop table ##temp2
go

----

Son söz ;
Ainesi iştir prosedürün, koda bakılmaz.

2 Mayıs 2009 Cumartesi

ABAP : Smartform'da pencereyi son nesne olarka ayarlama


Merhabalar,
Smartform'da yaratılan bir pencerenin son nesne olarak gelmesi,
yani 5 sayfalık bir çıktıda 5. sayfanın sonunda gelmesi yada 1 sayfalık bir çıktıda, sayfanın sonunda gelmesi için yapmanız gereken, pencerenin koşullar sekmesinde 
"yalnızca ana pencerenin sonundan sonra" ve "yalnızca bölümün sonunda" seçeneğini tıklamaktır.
Vay efendim son nesne olarak çıktı ama 2 sayfalık çıktılarda ikisinde de çıktı sorunu veya
son nesne oldu ama sadece ilk sayfada çıktı sorunu yok artık ,
sonra vay ben duymadım vay ben görmedim demeyin.

Piyonları doğru yere koyun hadi iyi çalışmalar.