Dynamics 365 Finance & Operations

Dokümandan teslime:
Claude Code ile bir D365 F&O geliştirmesi

Her adımda danışmanın ve geliştiricinin gördüğü, ve altta çalışan araçlar.

Örnek iş

İstek: transfer emrinde tek bir buton

Otomotiv distribütörü. Araçlar PDI (teslim öncesi kontrol) deposundan transfer emriyle lojistik merkezine gidiyor.

Dokümanda istenen

  • Transfer emrinde "Lojistik merkezi sevkiyatı oluştur" butonu
  • Depoya serbest bırakma standart mantıkla
  • Açık işlerin lojistik merkezi için bir kümeye toplanması
  • Sevkiyat hesabına parametredeki varsayılan lojistik merkezi

Ne nerede çalışıyor

  • Bizim makine: Claude Code, standart paketlerin ve müşteri modelinin yerel kopyaları, araçlarımız (DmrTools)
  • Dev VM: Claude yok, git yok. Yama zip'i alır; geliştirici derler ve sync eder
  • D365 dev: Edge'de script ile test; girişi kişi yapar, parola Claude'a gelmez
1Bağlamla başla
2Kararlar
3Etki analizi
4Geliştir ve doğrula
5Yama ve derleme
6Script ile test
7Teslim ve ek istek

Turuncu: bir kişi karar verir. Yeşil: dev VM'de çalışır. Beyaz: işi Claude yapar ve kanıtını bırakır.

1 Bağlam2 Kararlar3 Etki4 Geliştirme5 Yama6 Test7 Teslim

Adım 1–2 · Bağlamla başla, kararı danışmana bırak

Claude boş bir sohbetten başlamaz ve dokümandaki boşluğu kendi varsayımıyla doldurmaz.

KARARLAR.md: her boşluk öneriyle birlikte bir soru Danışman

SoruÖneri → karar
Ayrıcalık düzeyi (doküman "Silme" diyordu)Invoke: buton bir işlem çalıştırıyor
"Kutu" alanının veri tipiStandart küme pozisyonu EDT'sinden türet
Kümeler profile göre süzülsün mü?Hayır: şablon + rota grubu + kilitli değil
Mevcut özel küme akışından ayırmaRota grubuyla, parametrede seçilir
Dokümanda yok: işe plaka atamasıEvet, diğer küme oluşturucular gibi
Ekip

İlkeler

Her oturumda otomatik yüklenir: "yalnız hedef senaryo değişir", "etki analizi olmadan tasarım yok", "kararı danışman verir".

Proje

Proje Kartı

CLAUDE.md: paket/model, dev URL, şirket, standart kaynağın yeri. Eksikse Claude önce sorar.

İş

İş klasörü

KARARLAR.md + DEVAM_NOTU.md: sonraki oturum tam buradan devam eder.

1 Bağlam2 Kararlar3 Etki4 Geliştirme5 Yama6 Test7 Teslim

Adım 3 · İki metadata indeksi üzerinden etki analizi Claude

Tasarımdan önce: bu nesnelere standartta ve müşteri modelinde zaten kim dokunuyor? Cevap hafızadan değil, indeksten gelir.

İndeks nasıl çalışıyor

  • Standart indeks: 239 bin XML, D365 sürümü başına bir kez kurulur
  • Müşteri indeksi: ~5 bin XML, saniyeler içinde artımlı güncellenir
  • İkisi tek sorguda birleşir: "VendTable'ın gerçek hali" = standart alanlar + müşteri uzantıları + iki taraftaki CoC
  • Soru başına ~0,25 sn; D365'in kendi serializer'ıyla doğrulandı
q nesne InventTransferOrders   # nesne + tüm uzantıları
q coc   InventTransferOrders   # CoC sınıfları, sarılan metotlar
q kaynak WhsWarehouseRelease transferOrderFormRelease

Bu işte ne buldu

  • Standart serbest bırakma girişi WhsWarehouseRelease → çağrılır, kopyalanmaz
  • Transfer emri formu ve sınıfı müşteri modelinde zaten genişletilmiş → oraya eklenir
  • Başka bir özel akış da küme oluşturuyor → ikisi ayrı tutulur
  • Standart serbest bırakma yalnız rezerve miktarı bırakır

Ne değişmemeli

  • Standart "Depoya serbest bırak" · PDI olmayan transferler · mevcut küme akışı

Her biri 6. adımda bir regresyon senaryosu olur.

1 Bağlam2 Kararlar3 Etki4 Geliştirme5 Yama6 Test7 Teslim

Adım 4 · Geliştir, kontrolü D365'in kendi kurallarına bırak Claude

11 nesne: 4 yeni, 7 güncelleme. Claude'un düzenlediği her metadata dosyası aynı turda bir hook ile otomatik kontrol edilir.

Değişiklik kümesi

yeniİşlem sınıfı: serbest bırak → kümele → sevkiyat hesabı
yeniEDT, menü öğesi (action), ayrıcalık
gncTransfer emri form + sınıf uzantısı (buton)
gncDepo parametreleri tablo + form uzantısı
gncEtiket dosyaları (3 dil)

Her XML'de kontroller

  1. D365 serializer'ıyla gidiş-dönüş: kayıp yok, yanlış ebeveyn yok
  2. Eleman sırası ve namespace, D365 DLL'inden okunan sözleşme kataloğundan (580 tip)
  3. Form desen kuralları ve ad çakışmaları
  4. X++'taki her referans standart ya da müşteri indeksinde var
  5. Ekip review listesi, sonra insan

Neden önemli: geçerli bir XML bile bir kontrolü sessizce düşürebilir. D365 hatasız yükler, buton ekranda yoktur.

1 Bağlam2 Kararlar3 Etki4 Geliştirme5 Yama6 Test7 Teslim

Adım 5 · Tek yama, tek derleme turu Dev VM

Git yok; teslim kendini kontrol eden bir zip. Her projede aynı araç.

PaketleDeğişen dosyalar, hash'ler, eklenen / kaldırılan üyeler, uygulama betiği, OKUBENI. Öz-test: uygula + geri al
DryRunDev'deki her dosya BEKLENEN sürüm olmalı. Farklı sürüm ya da kayıp üye → durur
UygulaÖnce yedek, sonra yazma; nesneler ve etiketler VS projesine eklenir
Derle + syncGeliştirici, Visual Studio'da
ToplaTek betik log ve hataları zip ile geri gönderir. Tüm hatalar tek turda okunur

Bu iş

İlk derlemede temiz.

Geri alma

Her yama tek parametreyle kendi yedeğinden geri alınabilir.

Ortak dosyalar

Etiket dosyaları etiket kimliğiyle birleşir; aynı dosyaya dokunan paralel işler birbirini ezmez.

1 Bağlam2 Kararlar3 Etki4 Geliştirme5 Yama6 Test7 Teslim

Adım 6 · Script ile test, ve neden Playwright'a geçtik Claude

Önce Claude'a D365'i tarayıcı panelinde tıklatarak test ettirdik. Her tıklama bütün konuşmayı yeniden okuyan bir model turuydu ve her yeniden çalıştırmada tekrar ödendi.

Tarayıcı paneli, adım adım
40–60
senaryo başına adım
657
oturumda tarayıcı çağrısı
~97M
girdi token'ı, 250 tur
Playwright script'i
1
komut, tüm senaryolar
1
tur, sonucu okumak için
~300
karakter geri döner

Nasıl kurulu

  • Ortak kütüphane (tek kopya): giriş, filtre, grid, sekme, kaydet, mesaj, OData. Düzeltme buraya yapılır, tüm projeler faydalanır
  • İş script'i: dokümandaki test adımları → ~100 satır. Veri OData ile hazırlanıp kontrol edilir, arayüz yalnız buton için

Bu işin senaryoları

  • PDI → lojistik merkezi: işler kümelendi, sevkiyat hesabı atandı
  • PDI olmayan transfer → reddedildi · teslim alınmış → buton pasif
  • Rezervasyon yok → "açık iş bulunamadı" uyarısı
  • Panelde adım adım geçildi; script'e döküldü, script ile şimdilik S1 koşuldu
1 Bağlam2 Kararlar3 Etki4 Geliştirme5 Yama6 Test7 Teslim

Adım 7 · Teslim et, yeni isteği ikinci yamaya çevir

Danışman ekran görüntülü Word test ve teslim dokümanını alır. Okuyunca şunu istedi: "Buton satırları kendisi rezerve etsin."

DeğerlendirYama 1 dev'de ve test edilmiş. Genel otomatik rezervasyon KAPALI kalmalı: ithalat da transfer emri kullanıyor
SeçeneklerA: rezerve edilebileni yap · B: ya hep ya hiç. Danışman B'yi seçti
KodAynı transaction içinde tek yeni metot: herhangi bir hata tüm rezervasyonları geri alır
Yama 2Yerel model değil, yama 1'in çıktısı üzerine. 4 dosya, DB sync yok
Yeniden testYeni senaryolar dev'de (o gün panelde). Güncel doküman

Yama 2 neden güvenli

  • Tabanı dev'de gerçekte olan: yama 1'in çıktısı
  • Sınıf dosyası dev'de yama 1'in hash'iyle eşleşmeli, yoksa durur
  • Etiketler kimlikle birleşir; çakışma olursa zorlansa bile durur

Yeni senaryolar

  • Stok 1, sipariş 5 → hata, hiçbir satırda rezervasyon kalmadı
  • Miktar 1'e düzeltildi → satırlar rezerve edildi, iş oluştu
  • 2'nin 1'i elle rezerve → yalnız eksik 1 rezerve edildi

İstek → karar → yama 2 → dev → testler → güncel teslim dokümanı: aynı gün.

Nasıl çalışıyoruz

Kim ne yapıyor

Okuma, yazma ve kontrolü Claude Code yapıyor. Kararlar, ortam ve sorumluluk insanlarda.

Danışman
  • Dokümanı yazar
  • Açık kararları cevaplar
  • Teslim dokümanını kabul eder
  • Ek istekleri iletir
Claude Code
  • Dokümanı ve standart kaynağı okur
  • Etki analizi, kod, metadata
  • Kontroller, review, yama
  • Test script'i, teslim dokümanı
Geliştirici
  • İşi yönlendirir ve inceler
  • Yamayı uygular, derler, sync eder
  • Testler için giriş yapar
  • Teslim edilenin sorumluluğunu taşır

Çalışma kuralları

  • Yalnız hedef senaryo değişir
  • Etki analizi olmadan tasarım yok
  • Standart kaynaktan doğrula, tahmin etme
  • Danışman kararını Claude vermez
  • Tek yama, tek derleme turu
  • "Derlenmedi" ya da "test edilmedi" açıkça yazılır
Bir işin geride bıraktıkları

Her adım, başkasının devam edebileceği bir dosya bırakır

İş bir sohbette yaşamıyor. Başka bir geliştirici ya da sonraki oturum bunlardan devam edebilir.

AdımÇıktıKim kullanır
1–2CLAUDE.md, KARARLAR.md, DEVAM_NOTU.mdDanışman kararları kontrol eder; sonraki oturum buradan devam eder
3Etki analizi notları + "değişmemeli" listesiİnceleyen; regresyon senaryolarına dönüşür
4Düzenlenen her XML'in kontrol sonucuPaketlemeden önce inceleyen
5Yama zip'i: patch.json, uygulama betiği, OKUBENI, dev'de yedekDev'de geliştirici; gerekirse geri alma
5Derleme sonucu zip'iClaude tüm hataları tek turda okur
6<iş>.test.js + sonuç dosyası + hata ekran görüntüleriHer değişiklikten sonra, ek yama dahil yeniden çalıştırılır
7Word test ve teslim dokümanıDanışman ve müşteri

Yolda bulunan yeni tuzaklar ekip kütüphanesine önerilir; sonraki iş onlarla başlar.

Cümleye tıkla: açıklama