SAP Business One Service Layer: kendi yazılımınızı B1'e nasıl bağlarsınız?
Service Layer, SAP Business One'ın iş nesnelerini (cari, sipariş, fatura, stok) HTTPS üzerinden OData protokolüyle açan resmi web servis katmanıdır. Uygulama POST /Login ile şirket veritabanı, kullanıcı ve şifre gönderir; dönen B1SESSION çerezini sonraki isteklerde taşır. Varsayılan kapı 50000, varsayılan boşta kalma süresi 30 dakikadır. Kayıtlar B1'in kendi iş kuralları çalışarak oluşur; DI API'nin yaptığı doğrulamalar burada da geçerlidir.
Service Layer nedir, DI API’nin yerine mi geldi?
SAP Business One’a program yazan herkes uzun süre DI API ile çalıştı: Windows’a bağlı, COM/.NET tabanlı bir nesne katmanı. Service Layer aynı iş mantığını HTTP’ye taşıdı. Apache HTTP sunucusu üzerine kurulu bir uygulama sunucusudur; iş nesnelerini OData protokolüyle, JSON gövdelerle açar. SAP HANA ve Microsoft SQL Server sürümlerinin ikisinde de çalışır; SUSE Linux’ta ve 10.0 PL01’den itibaren Windows’ta da kurulur.
Bu yazıdaki teknik gerçekler SAP’nin “Working with SAP Business One Service Layer” dokümanından 2 Eylül 2026’da doğrulandı. Kurulumunuzun sürümü, kapı numarası ve yerelleştirme eklentileri için kendi sistem yöneticinizin ve yerel iş ortağınızın bilgisi esastır.
Adres kalıbı iki sürümlü:
| Adres | Protokol | Ne zaman |
|---|---|---|
https://sunucu:50000/b1s/v1 | OData sürüm 3 | Mevcut istemci kütüphaneleri v3 bekliyorsa |
https://sunucu:50000/b1s/v2 | OData sürüm 4 | Yeni projelerde |
Varsayılan kapı 50000, protokol HTTPS. Meta veri $metadata ucundan okunur; hangi nesnelerin (BusinessPartners, Orders, Items, Invoices…) hangi alanlarla açıldığı buradan görülür.
Oturum: Login, B1SESSION ve 30 dakika
POST https://sunucu:50000/b1s/v1/Login
Content-Type: application/json
{"CompanyDB": "SBO_FIRMA", "UserName": "entegrasyon", "Password": "•••"}
HTTP/1.1 200 OK
Set-Cookie: B1SESSION=PTRzIjYK-weN6-1Lx1-ZG0J-3ARxfjcU0Shy; HttpOnly;
Set-Cookie: ROUTEID=.node1; path=/b1s
{"SessionId": "PTRzIjYK-weN6-1Lx1-ZG0J-3ARxfjcU0Shy", "Version": "1000110", "SessionTimeout": 30}
İki çerez var ve ikisi de geri gönderilir: B1SESSION oturumun kendisi, ROUTEID ise yük dengeleyicinin isteği aynı Service Layer düğümüne yönlendirmesi için. SessionTimeout boşta kalma süresidir, varsayılan 30 dakika; b1s.conf dosyasından değiştirilir. Oturum POST /Logout ile kapatılır.
Bizim ara katmanımızın oturum kuralı üç maddedir: tek oturum havuzu (her uygulama kendi login’ini atmaz), süre dolduğunda sessiz yeniden giriş, ve Service Layer kullanıcısının B1’de yalnız gereken yetkilerle tanımlanması. Kullanıcı bir B1 kullanıcısıdır; lisans ve yetki kurgusu onun üzerinden işler.
Okuma: OData sorguları
Service Layer’ın en güçlü yanı sorgu dili. Aynı Orders ucu farklı sorularla çağrılır:
GET /b1s/v1/Orders?$filter=DocTotal gt 3000&$select=DocEntry,DocNum,CardCode,DocTotal&$orderby=DocEntry desc
GET /b1s/v1/Orders?$top=3&$skip=2
GET /b1s/v1/BusinessPartners?$filter=contains(CardCode, 'c2')&$select=CardCode
B1S-CaseInsensitive: true
- Sayfalama
$topve$skipile ya daPrefer: odata.maxpagesize=50başlığıyla yapılır; yanıtPreference-Appliedbaşlığıyla kabul edilip edilmediğini söyler. Sayfa boyutuB1S-PageSizebaşlığı veyab1s.confiçindeki PageSize ile de ayarlanır. $expandbağlı nesneleri (sipariş satırları gibi) tek istekte getirir;$selectile birlikte kullanılabilir.$crossjoinaralarında tanımlı ilişki olmayan nesne kümelerini birlikte sorgular;QueryService_PostQueryuzun sorguları POST gövdesinde taşır.- SQLQueries kayıtlı sorguları bir uç olarak açar; kullanıcı tanımlı tablo ve nesneleri de kapsar.
- Semantic Layer görünümleri yalnız SAP HANA sürümünde (9.3 PL02 ve sonrası) OData ucu olarak açılır.
Yönetim kokpiti ve rapor işlerinde bu okuma uçları yeterlidir; B1 veritabanına doğrudan SQL ile gitmeye gerek kalmaz.
Yazma: sipariş oluşturma, güncelleme ve toplu istek
POST /b1s/v1/Orders
Cookie: B1SESSION=…; ROUTEID=.node1
{
"CardCode": "C20000",
"NumAtCard": "WEB-2026-000118",
"DocDueDate": "2026-09-12",
"DocumentLines": [
{"ItemCode": "A00001", "Quantity": 240},
{"ItemCode": "A00002", "Quantity": 60}
]
}
Başarılı yanıt 201 Created ile B1’in ürettiği DocEntry ve DocNum değerlerini döndürür. NumAtCard alanına dış sistemin belge numarasını yazmak, tekrarlanan gönderimi yakalamanın en ucuz yoludur: köprü aynı numarayı ikinci kez görünce yeni sipariş açmaz, mevcut kaydın DocEntry değerini döner.
Güncelleme PATCH ile yapılır; bir koleksiyonun tamamının değiştirilmesi isteniyorsa B1S-ReplaceCollectionsOnPatch: true başlığı eklenir. Birden çok işlem tek HTTP isteğinde POST /b1s/v1/$batch ile gönderilir. Bir sınır dokümanda açıkça yazılı: işlemler istek içinde kalır; DI API’deki StartTransaction/EndTransaction gibi istekler arası bir kullanıcı işlemi yoktur. Beş belgeyi “ya hepsi ya hiçbiri” yazmak istiyorsanız tek $batch içinde gönderirsiniz.
B1’den dışarı: EventSubscriptions webhook’ları
Dış sistemin B1’i sürekli sorgulaması yerine B1’in haber vermesi mümkün. EventSubscriptions ucuna bir abonelik yazılır:
POST /b1s/v1/EventSubscriptions
{
"WebhookID": "SiparisOlustu",
"WebhookURL": "https://kopru.sirket.local/b1/siparis",
"AuthenticationType": "None",
"Handshake": "tNO",
"EventCollection": [
{"BusinessObject": "Orders", "TransactionType": "Created"}
]
}
Bildirimleri Webhook Messenger bileşeni iletir; varsayılan kapısı 40008’dir ve erişilebilirliği telnet ile sınanabilir. Sevkiyat, üretim veya bayi portalı gibi dış sistemlerin B1’deki değişikliği dakikalar değil saniyeler içinde görmesi bu yolla sağlanır. Abonelikleri güncellerken koleksiyonu tamamen değiştirmek için yine B1S-ReplaceCollectionsOnPatch başlığı kullanılır.
Service Layer’ın DI API’ye göre sınırları
| Konu | DI API | Service Layer |
|---|---|---|
| Platform | Windows, COM/.NET | HTTP konuşan her platform |
| RecordSet ile doğrudan SQL | Var | Yok — okuma OData sorgularıyla |
| ImportFromXML / ExportToXML | Var | Yok |
| Yeni UDO / UDF / UDT | Anında | Service Layer yeniden başlatılınca görünür |
| İstekler arası işlem (transaction) | StartTransaction / EndTransaction | Yok — işlem tek istek veya tek $batch içinde |
| Yük dengeleme | — | Apache yük dengeleyici, ROUTEID ile yapışkan oturum |
Uygulamada çoğu proje için bu sınırlar sorun değildir; XML içe aktarma ve doğrudan SQL zaten iyi tasarlanmış bir entegrasyonda yer almaz. Sürpriz olan tek madde UDO/UDF yeniden başlatma şartıdır — kullanıcı tanımlı alan ekleyen bir proje, bunu bakım penceresine planlar.
Türkiye e-fatura tarafı: standart dokümanda yok
Service Layer dokümanında UBL-TR, GİB veya e-arşiv adına bir uç yoktur. Türkiye’deki SAP Business One kurulumlarında e-belge, yerelleştirme ve e-belge eklentileriyle yürür; hangi eklentinin kurulu olduğu, faturanın hangi alanının hangi belge türünü tetiklediği kurulumdan kuruluma değişir. Bu yüzden entegrasyonu üç parça olarak kurarız: belge B1’de doğar (Service Layer ile), e-belgeyi mevcut eklenti gönderir, dış sistem eklentinin yazdığı durum alanını geri okur. Senaryo seçimi, durum kuyruğu ve mutabakat disiplini e-fatura entegrasyonu rehberinde programdan bağımsız anlatılıyor.
En sık kurulan SAP Business One entegrasyon senaryoları
1. B2B bayi ve müşteri portalı
BusinessPartners, Items ve fiyat listeleri Service Layer'dan artımlı okunur; portalda onaylanan sipariş Orders ucuna yazılır, Created olayı webhook'la geri döner ve bayi ekranında belge numarası görünür.
2. Depo ve üretim el terminali
Mal kabul, sayım ve sevkiyat el terminalinden girilir; stok hareketleri B1'e Service Layer üzerinden yazılır, çevrimdışıyken kayıt cihazda bekler.
3. Saha satış uygulaması
Plasiyer cari bakiyeyi, açık faturaları ve stoğu telefonda görür; sipariş kuyruktan B1'e düşer, NumAtCard ile çift kayıt engellenir.
4. Yönetim kokpiti
SQLQueries ve OData okuma uçlarıyla gece toplanan satış, tahsilat ve stok verisi kendi veritabanınızda birleşir; pano sabah B1'i hiç yormaz.
Aynı senaryoların Logo, Netsis ve Mikro karşılıklarını Logo, Netsis REST API ve Mikro yazılarında; bulut ERP tarafını DİA Web Servis API yazısında anlattık.
Entegrasyonda dikkat edilecek noktalar
- ROUTEID’yi düşürmeyin. Yük dengeli kurulumda yalnız B1SESSION gönderen istemci farklı düğüme düşer ve oturum yokmuş gibi 401 alır.
- Boşta kalan oturum. 30 dakika sessizlik oturumu kapatır; köprü 401’i yakalayıp yeniden login olur, uygulama bunu görmez.
- Tek gönderim kimliği. Dış belge numarası
NumAtCardalanına yazılır; tekrar denemede yeni belge doğmaz. - Sürüm sabitleme. Meta veri sürümle değişir; köprü
$metadataçıktısını versiyonlar ve yükseltme sonrası alan farklarını raporlar. - Yetkiyi dar tutmak. Service Layer kullanıcısı yalnız gereken nesnelere yetkili olur; şifre ve çerez uygulama sunucusunda kalır.
Bütçe ve süre
Service Layer köprüsü kendi sisteminizin yanına ek modül olarak kurulur: kapsama göre 8.000 - 45.000 ₺ bandında, tek yönlü okuma veya sipariş aktarımı 2-3 haftada, webhook’lu çift yönlü akış 2-4 haftada devreye girer. Bantların tamamı fiyat sayfasında; SAP lisansı ve yerel iş ortağı bedelleri sizinle onlar arasındaki sözleşmeye göre ayrıca işler.
Kurulumunuzun sürümünü, HANA mı SQL Server mı olduğunu ve hangi süreçlerin dışarı açılacağını yazın; teklif formundan başlayalım, ilk fazın kapsamını meta verinizle birlikte çıkaralım.
İlgili Bayi ve Sipariş Rehberleri
- B2B Bayi Sipariş Portalı Fiyatları 2026 — Toptancı ve distribütör bayi portalları maliyet analizi.
- Elle İş Maliyeti Hesaplayıcı — Manuel sipariş girişi ve mutabakat için harcanan yıllık emek kaybını hesaplayın.
- En İyi B2B Bayi Portalı Yazılımları 2026 — T-Soft, Ticimax, Logo ve özel bayi portalı incelemesi.
- Saha Satış ve Plasiyer Programı Fiyatları — Plasiyer mobil sipariş ve cari takip sistemleri.
Sıkça sorulan sorular
SAP Business One Service Layer nedir?
SAP Business One'ın Apache HTTP sunucusu üzerine kurulu, iş nesnelerini OData protokolüyle HTTPS üzerinden açan uygulama sunucusudur. SAP HANA ve Microsoft SQL Server sürümlerinde çalışır; SUSE Linux'ta ve SAP Business One 10.0 PL01'den itibaren Windows'ta da kurulur. Varsayılan adres https://sunucu:50000/b1s/v1 biçimindedir.
Service Layer'da /b1s/v1 ile /b1s/v2 arasındaki fark nedir?
/b1s/v1 OData sürüm 3, /b1s/v2 OData sürüm 4 ile konuşur. Aynı iş nesneleri iki yoldan da erişilebilir; fark sorgu sözdizimi ve meta veri biçimindedir. Yeni projelerde v2 (OData 4) tercih edilir, mevcut istemci kütüphanesi v3 bekliyorsa v1 kullanılır.
Service Layer'a nasıl login olunur?
POST /b1s/v1/Login gövdesinde CompanyDB, UserName ve Password gönderilir. Başarılı yanıt Set-Cookie ile B1SESSION ve ROUTEID çerezlerini, gövdede SessionId, Version ve SessionTimeout değerlerini döndürür. Sonraki her istek bu çerezlerle gönderilir; POST /Logout oturumu kapatır. SessionTimeout varsayılanı 30 dakikadır ve b1s.conf dosyasından değiştirilir.
Service Layer ile DI API arasındaki fark nedir?
İkisi de aynı iş mantığını çalıştırır; fark erişim yoludur. DI API COM/.NET tabanlı ve Windows'a bağlıdır, Service Layer ise HTTP konuşan her platformdan çağrılır. Service Layer'ın sınırları da dokümanda yazılıdır: RecordSet ile doğrudan SQL yok, ImportFromXML/ExportToXML yok, yeni oluşturulan UDO/UDF/UDT için yeniden başlatma gerekir ve istekler arası kullanıcı işlemi (transaction) desteklenmez.
SAP Business One'dan dış sisteme anlık bildirim alınabilir mi?
Evet. Service Layer'ın EventSubscriptions ucuna bir webhook tanımı gönderilir: hangi iş nesnesinde (örneğin Orders) hangi olay (Created, Updated) olduğunda hangi adrese bildirim gideceği belirtilir. Bildirimleri Webhook Messenger bileşeni iletir; varsayılan kapısı 40008'dir.
SAP Business One'da Türkiye e-fatura Service Layer'dan gönderilir mi?
Service Layer'ın standart dokümanında UBL-TR veya GİB'e özel bir uç yoktur. Türkiye e-belge süreçleri yerelleştirme ve e-belge eklentileriyle yürür; entegrasyon, kurulumunuzdaki eklentinin alanlarına ve durum kodlarına göre yazılır. Bizim önerimiz: fatura B1'de doğar, e-belgeyi mevcut eklenti gönderir, dış sistem durumu geri okur.
İlgili rehberler
- Logo ve Netsis entegrasyon rehberi: REST API, Objects ve özel web/mobil arayüz köprüsü
- DİA Web Servis API: kendi yazılımınızı DİA'ya nasıl bağlarsınız?
- Nebim V3 Entegratör REST API: perakende ERP'nizi dış sistemlere nasıl bağlarsınız?
Hizmet sayfası: Entegrasyon hizmeti
Mevcut muhasebe ve ERP entegrasyonunu netleştirelim.
Logo, Netsis, Mikro, Vega: hangi veri, hangi yön, ne kadar sürede? 30 dakikada yol haritası.