Ana içeriğe geç

İş Akışı Verilerinden Yeni Belge Sürümü Oluşturma

Amaç

Düz metin iş akışı alanlarından PDF oluşturun ve önceki sürümü ile dosyalarını koruyarak mevcut bir belgenin yeni sürümü olarak yayımlayın.

Neler Öğreneceksiniz

  • bir sürüm ID'sini sabit belge ailesi ID'sine çözümleyin;
  • kaynak dosyaların bağımsız kopyalarını içeren bir taslak oluşturun;
  • PDF işaretlemesi oluştururken metni kodlayın ve ortaya çıkan revizyonu yayımlayın;
  • sonucu kaydedin ve yeniden deneme işaretçisinin sınırlarını anlayın.

Zorluk ve Tahmini Süre

  • Zorluk: İleri
  • Tahmini süre: 20 dakika

Varsayılan Bilgiler

Sunucu tarafı iş sonrası komut dizilerini, süreç XML'ini, belge dizinlerini ve belge kimliği ve yetkilendirme modelini.

Gerekli Okumalar

Ön Koşullar

  • PDF oluşturma yapılandırılmış ve erişim izni bulunan yalıtılmış bir test import/run alanadında örnek süreç.
  • Belge dizininde yayımlanmış bir test belgesi; bir sürümün Iddeğerini kaydedin, BranchId değerini değil.
  • Bu iş akışını kimlerin çalıştırabileceğini ve hangi belge ailelerini gözden geçirebileceğini kısıtlayan onaylı bir yetkilendirme ilkesi. $Documents çağrıyı yapan kullanıcının belge ACL'sini uygulamaz.
  • Belgenin kopyalanmış ACL'sini doğrulamak için bilinen bir test okuyucusu ve erişimi reddedilen bir okuyucu.

Örneğe Genel Bakış

Tanımda bir havuz, bir başlatıcı görev ve bir form bulunur. Form şu değerleri kabul eder: DocumentId, Titleve düz metin Body; ayrıca şunu depolar: ResultVersionId. İlk görev, harici bir role bağımlılık olmadan başlatan kullanıcıyı kullanır. Mevcut bir test belgesi ve ana makinenin PDF oluşturma hizmetleri gerekir; bu bağımlılıkları içermez.

Kaynak ID'si belirli bir kaydı seçer. NewVersion ardından ailesindeki en yüksek mevcut sürümü kopyalar; ailede daha yeni revizyonlar varsa bu sürüm seçilen kayıttan farklı olabilir. Test düzeneğini buna göre hazırlayın.

Adımlar

Test Sürecini İçe Aktarma ve Yapılandırma

  1. Aşağıdaki tanımı indirip test alanadına aktarın.
  2. Süreç başlatma yetkisini amaçlanan test operatörleriyle sınırlandırın. Üretim iş akışında kısıtlanmamış belge ID'lerini açığa çıkarmayın; bunu yapmadan önce uygulamanın sunucu tarafı hedef yetkilendirmesini ekleyin.
  3. Süreci yayımlayın, ardından Sürüm Oluştur'ubaşlatın ve mevcut belge sürümünün ID'sini, bir başlığı ve düz metin gövdesini girin.

İş Sonrası Komut Dizisinde Sürüm Oluşturma ve Yayımlama

İndirilebilir tanımda şu komut dizisi kullanılır:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var source = $Documents.Get($Xml.Evaluate('DocumentId'));
if (!source) {
    throw new Error('The source document was not found.');
}
if ($Xml.IsEmpty('ResultVersionId')) {
    var document = $Documents.NewVersion(source.BranchId, $Xml.Evaluate('Title'));
    var writer = $Xml.Create();
    writer.StartElement('div');
    writer.Element('h1', $Xml.Evaluate('Title'));
    writer.Element('p', $Xml.Evaluate('Body'));
    writer.EndElement();
    document.Files.AddPDF(writer.ToXml(), 'generated-document.pdf');
    document.Publish();
    $Xml.SetValue('ResultVersionId', document.Id);
}

Get sağlanan sürüm ID'sini çözümler ve kayıt bulunamadığında null geri döner. Şunu source.BranchId şuna geçirmek NewVersion yeni kaydı aynı ailede tutar. En son sürümdeki dosyalar kopyalanır; AddPDF bir ek dosya daha ekler. Bu örnek, daha önce oluşturulmuş PDF'ler dahil olmak üzere kopyalanan tüm ekleri kasıtlı olarak korur. Değiştirme davranışı için, yeni taslağa yedeğini eklemeden önce yalnızca geçerliliğini yitirmiş kopyayı kaldırın.

XmlWriter.Element her metin değerini kodlar; böylece < ve & başlıkta veya gövdede işaretleme diline dönüşmek yerine metin olarak kalır. Sabit yapı uzak kaynak veya kullanıcı tarafından sağlanan HTML içermez. Publish() revizyonu kalıcı hale getirir ve ailenin mevcut dizin ilişkilendirmelerini yeniden kullanır. Save() tek başına kullanıldığında taslak Draft durumunda kalır ve yayımlanmış dizin listelerinde yer almaz.

Yüklenen Dosyayı Değiştirmeden Önce Kopyalama

Genel yükleme dönüştürmelerinde kaynak değişmeden kalmalıysa bağımsız bir çalışma kopyası kullanın. Genel dosya işlemlerini sürüme ait dosyalarla karıştırmadan önce Dosyalar ve Bağımsız Kopyalar bölümünü inceleyin.

Sonucu Kaydetme ve Uzlaştırma

Komut dizisi, ortaya çıkan sürüm ID'sini şuraya kaydeder: ResultVersionId ve bu alan doluysa oluşturmayı atlar. Alanı sunucuya ait iş akışı çıktısı olarak değerlendirin. Bu, eşzamanlılık veya kilitlenmeden kurtarma için eksiksiz bir çözüm değildir: yayımlama işlemi kesinleşir ancak iş akışı alanı güncellenmezse yeniden deneme başka bir revizyon daha oluşturabilir.

Üretimde kullanmadan önce işlem işaretçisini ve belge sonucunu denetimli bir işlemin veya serileştirilmiş bir işlemin parçası haline getirin. Sonuç belirsiz olduğunda yeniden denemeden önce yayımlanmış sürümü uzlaştırın. Bir hatayı ortadan kaldırmak için işaretçiyi temizlemeyin.

Sonucu Doğrulama

  1. Görevi çalıştırmadan önce kaynak ailenin sürüm numaralarını ve dosya sayısını not edin.
  2. Formu bir kez gönderin. Dizinde yeni yayımlanmış sürümün listelendiğini ve History'de önceki sürümün bulunduğunu doğrulayın.
  3. Yeni sürümü açın. Kopyalanan dosyaların yanı sıra bir yeni dosyanın da generated-document.pdf bulunduğunu doğrulayın.
  4. PDF'yi açın ve title/body. gibi bir metin kullanarak yeni bir test düzeneğinde tekrarlayın: A < B & C; metin olarak görünmelidir.
  5. Önceki sürümü açın ve dosyalarının değişmediğini doğrulayın.
  6. Amaçlanan okuyucunun sonucu açabildiğini, erişimi reddedilen okuyucunun ise açamadığını kontrol edin. Bu, komut dizisi düzeyindeki kullanıcı yetkilendirmesini değil, sonuç ACL'sini test eder.
  7. İş akışı verilerini inceleyin ve ResultVersionId değerinin yeni sürümün Id değeriyle eşleştiğini doğrulayın. Dolu işaretçi dalını denetimli bir komut dizisi çalıştırmasında test edin ve ek revizyon oluşturmadığını doğrulayın.

Hata ve Sınır Durumları

  • Geçersiz veya eksik sürüm ID'si: biçimi bozuk GUID'ler komut dizisi hatasına yol açar; geçerli ancak bulunmayan ID, null denetimiyle reddedilir.
  • Eşzamanlı sürüm oluşturma: sürüm numarası çakışabilir; yeniden denemeden önce aileyi uzlaştırın.
  • PDF oluşturma hatası: yeniden denemeden önce iş akışı hatalarını ve oluşturulmuş dosyaları inceleyin; dosya oluşturma ile iş akışının tamamlanmasının her zaman aynı geri alma sınırını paylaştığını varsaymayın.
  • Dizin girdisi yok: ailenin dizin ilişkilendirmesi bulunduğunu ve yeni revizyonun Published olduğunu doğrulayın.

Güvenlik ve Taşınabilirlik Notları

Atılabilir test belgeleri ve genel veriler kullanın. Hedefi sunucuda yetkilendirin; form alanını gizlemek veya dizinin görünürlüğüne güvenmek yeterli değildir. HTML yapısını sabit tutun, kodlanmış metin kullanın ve kiracıya özgü uzak varlıklardan kaçının. Revize edilen içeriğin hedef kitlesi farklıysa, yayımlamadan önce kopyalanmış ACL'yi inceleyin.

İndirin ve Kendiniz Deneyin

Belge sürümü tanımını indirin.

Sorun Giderme

İş akışı başarısız olursa hatasını ve source/result sürüm ID'lerini toplayın. Yeniden göndermeden önce belge ailesini ve iş akışı işaretçisini inceleyin. Dizin beklenmeyen bir sürüm gösteriyorsa, yayımlanmış sürümleri, şu değerinin döndürdüğü en yüksek sürümle karşılaştırın: GetLastVersion; bunlar farklı seçimlerdir.

Sırada Ne Öğrenmeli?