Monosync ile entegrasyon geliştirme
Neler değişti
Her içerik güncellemesi sürümlenir. Bir sürümü seçerek öncekiyle karşılaştırın.
Sürüm 7 → 8
GüncellemeKursun MCIE sınavını kapsaması için entegrasyon işlerini ayrıntılı anlatan yeni modül: platform kaynakları, şema yeniden yükleme, her yazımda değişkenler, eşleme hataları ve satır sırası, kaldırma eylemleri, bağlantılar, nesne API'si, dışa ve içe aktarma, zaman aşımları, çalıştırmaları durdurma ve toparlama. Düzeltme: hata fırlatan eylem entegrasyonu devre dışı bırakır. Yeni derslere diyagramlar ve ilk bakılacaklar listeleri eklendi.
3 ders güncellendisüre
İçerik güncellemesi. Kayıtlı öğrenciler bilgilendirildi.
Süre 22 dakikadan 25 dakikaya değişti.
Demoda çalışan bir entegrasyon gerçek veriyle yine de kötü davranabilir. Nedenler neredeyse her zaman kaynaklar, şemalar ve eşleme satırlarıyla ilgili birkaç kuraldır. Bu ders onları, bir çalıştırmanın karşılaştığı sırayla ele alır.
### Monosync nesne deposunu okumak
`Integration Platform` türündeki kaynak, Monosync'in kendi nesnelerini okur. `Incremental Sync` çalıştırmasını küçük yapan ayar `Use only updated items` seçeneğidir: bu olmadan artımlı çalıştırma her nesneyi alır ve tam çalıştırma kadar sürer. Yanıtı `Priority` alanında aramayın. Bu alan saklanır ancak çalıştırma kodu onu okumaz.
### Reload bayraklarınızı sıfırlar
Zaten var olan bir şemada `Reload`, özel olmayan her özelliği sağlayıcının güncel listesiyle değiştirir. Kendi oluşturduğunuz özellikler kalır, ancak sağlayıcı özelliklerindeki `Key`, `Identity` ve diğer bayraklar sağlayıcının değerlerine döner. Link çalıştırması hedef şemanın `Key` özelliği üzerinden eşleştirir ve `Identity` değerini saklar; dikkatsiz bir yeniden yüklemeden sonra mevcut kullanıcılar bulunamaz ve Create eylemi zaten var olan hesaplarla karşılaşır. `Reload` sonrasında, `Save` öncesinde bayrakları denetleyin.
### Sırların yeri değişkenlerdir
Kilit simgeli kaynak ayarı yalnızca ekranda maskelenir. Kaynağın ayarları düz JSON olarak saklanır ve kaynağın her kaydı bir commit satırı yazar. Gerçek şifreli depo, şifreli olarak işaretlenmiş değişkendir. Parolayı böyle bir değişkene koyun ve kaynak ayarında `{{Variables.AdPassword}}` biçiminde başvurun. Değer, çalıştırma sırasında ve bağlantıyı sınadığınızda yerine konur.
### Üç yer, üç yazım
| Nereye yazıyorsunuz | Değişken nasıl yazılır | Örnek |
| --- | --- | --- |
| Kaynak ayarları ve eylem parametreleri | Çift süslü parantez | `{{Variables.MailDomain}}` |
| Eşleme satırındaki `Formatted` düzenleyicisi | Tek süslü parantez; gelen değer için `{0}` | `{0}@{Variables.MailDomain}` |
| `Code` düzenleyicisi | Bir C# adı | `Variables.MailDomain` |
Yukarıdaki `Formatted` şablonuyla `jdoe` değeri ve `MailDomain` = `example.com` değişkeni `[email protected]` sonucunu verir. Yanlış biçimde yazılmış değişken yerine konmaz ve satır eşleme hatasıyla başarısız olur.
### Hata veren satır ne yapar
Hata veren eşleme satırı o kayıt için günlüğe yazılır ve kayıt atlanır. Çalıştırma devam eder. Yalnızca her kayıt başarısız olduğunda hatayla biter. `Code` satırı boş değerleri kendisi denetlemelidir. Başarısız kayıtları çalıştırmanın eylemler görünümündeki `Mapping error(s) found!` altında bulursunuz; varsayılan olarak açık olan `Include Action(s) failed on last run(s)` sayesinde, kod düzeltildikten sonra sonraki artımlı çalıştırmalar onları yeniden alır.
### Satırlar arasındaki sıra
Satırlar paralel değerlendirilir; tek bir istisna vardır: `Data.X = ...` ataması yapan `Code` satırı diğerlerinin hepsinden önce sırayla çalışır. Bir satır e-posta adresini başka bir satırın hesapladığı kullanıcı adından oluşturuyorsa, ilk satır hesaplanan değeri `Data.X` üzerinden atamalıdır. `One Time` burada yardımcı olmaz; `One Way` gibi davranır.
::diagram scd-mapping-order
### Link çalıştırması neden olmayan bir değişiklik görür
Link çalıştırması tekil değerleri metin biçimleriyle karşılaştırır ve karşılaştırma büyük/küçük harfe duyarlıdır. Eşlemenin ürettiği bir boolean `True` olarak yazılır; bu, hedefteki `true` değerine hiçbir zaman eşit olmaz ve aynı kullanıcılar her çalıştırmada güncellenecek olarak işaretlenir. Böyle bir nesnenin `Values` penceresini açın: `Before` ve `Now` yalnızca harf büyüklüğü veya türde farklıdır. Çözüm, değeri eşlemede normalleştirmektir; örneğin küçük harfli metne çevirmek.
### İşlevler her çalıştırmada derlenir
Her işlev, çalıştırma başlarken yeniden derlenir. Bir işlevde `Remove` yalnızca eşleme kodunu denetler. Hâlâ bir interceptor, filtre veya başka bir işlev tarafından çağrılan işlev kaldırılabilir; o andan itibaren çağıranlar derlenemez ve etkilenen entegrasyonların her çalıştırması hatayla biter. İşlevi kaldırmadan önce `Show References` kullanın ve interceptor ile filtre kodunda adı arayın.
> İpucu: Bir çalıştırma sizi şaşırttığında şu sırayla bakın: `Reload` sonrasında `Key` ve `Identity` işaretleri, her değişkenin yazıldığı yere uygun yazımı ve çalıştırmanın eylemler görünümündeki `Mapping error(s) found!`.
Eşlemeden sonra kayıtlar eylemlere ulaşır. Entegrasyon gerçek sisteme burada yazar; bu yüzden en çok buradaki kurallar önemlidir.
### Nerede filtrelenir
| Yer | Ne görür | Ne için kullanılır |
| --- | --- | --- |
| Entegrasyonun `Sources` sekmesindeki kural oluşturucu | Kaynak kayıtlarını | Satırları kaynak tarafında seçmek |
| `After Source Fetch` interceptor'ı | Seçilen kaynakların ham alanlarını | Eşlemeden önce kayıtları kodla atmak veya değiştirmek |
| `After Mapping` interceptor'ı | Eşlenmiş kayıtları | Eylemlerden önce eşlenmiş listeyi düzenlemek |
| Eylemdeki filtre | Eşlenmiş, hedef tarafındaki değerleri | Bu eylemin hangi kayıtları alacağına karar vermek |
Hiçbir yere eşlenmemiş bir alan yalnızca ilk iki yerde sınanabilir. Interceptor'daki bir hata çalıştırmayı hatayla bitirir; yeterliyse düz kaynak filtresini tercih edin.
::diagram scd-filter-places
### Kaldırma için `None` ve filtre gerekir
Eylem, `Projection` değerine uyan kayıtları alır. `Create` ve `Update` nesnenin bağlantısını izler. Ayrılanların hesaplarını devre dışı bırakmak gibi kaldırma türündeki eylem farklıdır: sync çalıştırmalarında `Remove` projeksiyonu hiçbir kayıt seçmez ve eylem günlüğü `No need to take action. There is no data for this projection.` der. Eylemi `None` projeksiyonu ve ayrılanları seçen bir filtreyle yapılandırın. Eylem filtreleri eşlenmiş değerleri okuduğu için ayrılma göstergesi eşlenmiş bir özellik olmalıdır.
### Başarısız eylem ile fırlatılan hata farklıdır
| Eylemde ne olur | Çalıştırmaya etkisi |
| --- | --- |
| Bazı öğeler Warning veya Error ile biter | Eylem günlüğü bunu gösterir ve sonraki eylem yine çalışır |
| Eylem hata fırlatır; örneğin geçersiz filtre veya sağlayıcı çökmesi | Sonraki eylemler çalışmaz, çalıştırma Error olur ve entegrasyon devre dışı bırakılır |
Her iki durumda da önceki eylemlerin yaptığı iş yerinde kalır. Hiçbir şey geri alınmaz. Hatadan sonra nedeni giderir ve entegrasyonu yeniden etkinleştirirsiniz.
### Kayıt verisini betiğe aktarmak
PowerShell `Execute Script` eylemi kayıt değerlerini iki yolla alabilir. `{{Data.displayName}}` yer tutucusu betik metnine yapıştırılır; bu yüzden tırnak veya noktalı virgül içeren bir değer, yapılandırılan hesabın yetkileriyle çalışan kodu değiştirir. `Parameters` altındaki adlandırılmış girdi ise değer olarak aktarılır:
```
param($DisplayName, $Sam)
Set-ADUser -Identity $Sam -DisplayName $DisplayName
```
Kayıt verisinden gelen her şey için `Parameters` kullanın.
### Create mi Update mi, bağlantılar belirler
Link çalıştırması her nesneyi hedef şemanın `Key` özelliği üzerinden bir hedef satırıyla eşleştirir ve satırın `Identity` değerini bağlantıda saklar. İki sistemde de kararlı ve benzersiz bir `Key` seçin; örneğin sicil numarası. Görünen adlar değişir ve tekrarlanır.
Bağlantı entegrasyona göre değil; nesne, kaynak ve sağlayıcıya göre bulunur. A ve B entegrasyonları aynı kaynağa yazıyorsa, A'nın oluşturduğu bağlantı B'nin de nesneyi bağlı saymasına yol açar. B'nin bağlantılarını temizlemek A'nınkileri yerinde bırakır ve B nesneyi Update eylemine göndermeyi sürdürür.
### REST API ile nesne yazmak
```
PATCH /api/v1/objects/employee/1042
Api-Key: <anahtar>
{ "department": "Sales" }
```
| Yöntem | Gövdede olmayan özellikler |
| --- | --- |
| `POST`, `PUT` | Değerleri kaldırılır |
| `PATCH` | Değerleri korunur |
Her API yazması, hiçbir değer değişmese bile bir nesne değişikliği kaydeder; böylece nesne bir sonraki artımlı çalıştırmaya girer. Yalnızca gerçek değişiklikleri gönderin.
### Ortamlar arasında dışa ve içe aktarma
`Settings`; seçilen entegrasyonları, kaynakları, nesne türlerini, değişkenleri ve işlevleri tek bir JSON dosyasına aktarır ve başka bir yerde öğe öğe içe alır. Gelen öğe önce kimliğe, sonra ada göre eşleştirilir ve eşleşme yalnızca `Overwrite all objects` ile değiştirilir. Bu seçenekle üretime içe aktarmadan önce üç şeyi unutmayın: seçilen kaynaklar test sunucularını ve parolalarını beraberinde getirir, bu yüzden seçimlerini kaldırın; içe aktarılan veya üzerine yazılan entegrasyon etkin olmayan durumda kalır, sonrasında etkinleştirin; nesne kayıtları ise dışa aktarmaya dahil değildir.
Çalıştırma, bir entegrasyonun hedef sisteme gerçekten dokunduğu andır. İşletimdeki sürprizlerin çoğu üç sorudan çıkar: bir çalıştırma ne zaman başlar, neden başlamadı ve yarıda durduğunda geride ne kalır. Bu ders bu soruları sırayla yanıtlar.
### Bir çalıştırma dört yolla başlar
| Başlatma | Ne zaman | Unutmayın |
| --- | --- | --- |
| Zamanlama | `Triggers` sekmesindeki cron zamanı, UTC olarak değerlendirilir | Her zamanlamanın tek bir çalışma modu vardır |
| Zamanlamasız döngü | Entegrasyon etkin ve etkin bir zamanlaması yok | Art arda çalışır |
| `Run Once` | Yalnızca etkin olmayan entegrasyonda | Gerçek yazma yapar |
| `Calculate` | Her zaman, seçilen bir modla | Hedef eylemleri hiç çağırmayan bir deneme çalıştırması |
Zamanlamasız döngü, zamanlamayı eklemeden entegrasyonu etkinleştirenleri şaşırtır. Entegrasyon beklemez. Hemen çalışır ve her çalıştırmadan sonra yeniden çalışır: son bir gün içinde başlamış başarılı bir zamanlamasız Full Sync yoksa Full Sync, varsa Incremental Sync olarak. Önce zamanlamayı ekleyin, sonra etkinleştirin.
### Kaçırılan zamanlar telafi edilmez
Bir sonraki zamanlama anı, şu iki andan geç olanından sonraki ilk cron zamanıdır: o zamanlamanın son iş başlangıcı ve etkinleştirme anı. Hafta sonu devre dışı bırakılan bir entegrasyon, pazartesi etkinleştirdiğinizde kaçırdığı iki zamanı çalıştırmaz. Bakım modunu bitirmek de aynı şekilde davranır. Kaçırılan iş gerekiyorsa bilinçli olarak başlatın.
### Entegrasyon başına tek çalıştırma
Monosync bir entegrasyonun iki işini aynı anda asla çalıştırmaz. Çakışacak çalıştırma `This integration is running in another task.` iletisiyle atlanır. `Integration Jobs` sayfasındaki satırı boşta kalır ve sonra Aborted olarak kapatılır. `Start / End` alanları boş birkaç Aborted satırı bu yüzden hata değil, atlamadır. Yaygın neden, bir çalıştırmanın süresinden daha sık tetiklenen zamanlamadır.
### Zaman aşımı
| Ayar | Değer | Anlamı |
| --- | --- | --- |
| Entegrasyondaki `Timeout (in seconds)` | 0'dan büyük | Çalıştırma o kadar saniye sonra iptal edilir |
| Entegrasyondaki `Timeout (in seconds)` | 0 veya boş | Servis varsayılanı geçerlidir |
| Servis düğümlerindeki `MONOSYNC_SERVICE_INTEGRATION_TIMEOUT_SECONDS` | Varsayılan `14400` | Kendi zaman aşımı olmayan her entegrasyon için dört saat |
Sınıra ulaşan çalıştırma Aborted olarak biter. Varsayılan kurulumda beş saat süren bir tam eşitleme, entegrasyona kendi değerini verene kadar her seferinde iptal edilir; örneğin altı saat için `21600`. `Cron Buffer (in minutes)` ve `Priority` saklanır ama okunmaz; yardımcı olmazlar.
### Çalıştırmayı durdurmak
`Integration Jobs` salt okunurdur ve yalnızca `Refresh` düğmesi vardır. Çalışan bir işi durdurmak için entegrasyonu devre dışı bırakın ve soruyu `Yes, stop also running tasks` ile yanıtlayın.
### İptal edilen çalıştırmadan sonra
Hedef yazmaları eylem eylem kaydedilir ve bir nesne değişikliği yalnızca işlenmesi başarılı olduğunda işlenmiş olarak kaydedilir. Eylemlerin ortasındaki bir iptalin iki sonucu olur:
- Yapılmış yazmalar hedefte kalır.
- Sonraki artımlı çalıştırma aynı nesne değişikliklerini yeniden alır.
Entegrasyonun veri tarihi yalnızca başarılı bir Sync'ten sonra ilerler; yani hiçbir şey kaybolmaz. Ancak hedef eylemler tekrara dayanmalıdır: iki kez uygulanan bir güncelleme, bir kez uygulananla aynı sonucu vermelidir.
::diagram scd-run-after-abort
### Önce neye bakmalı
- Çalıştırmalar art arda geliyorsa: entegrasyon, etkin bir zamanlaması olmadan mı etkin?
- `Start / End` alanı boş Aborted satırları: bunlar atlamadır; zamanlama aralığını bir çalıştırmanın süresiyle karşılaştırın.
- Her seferinde Aborted biten uzun bir Full Sync: entegrasyona kendi `Timeout (in seconds)` değerini verin.