Belgedeki Değişiklikleri İzleme

İnceleme olarak da bilinen değişiklikleri izleme işlevi, sizin veya diğer kullanıcıların içerikte ve biçimlendirmede yaptığı değişiklikleri izlemenize olanak tanır. Aspose.Words’li bu parça değiştirme özelliği, Microsoft Word’deki parça değişikliklerini destekler. Bu işlevsellik sayesinde belgenizdeki revizyonlara tek tek erişebilir ve onlara farklı özellikler uygulayabilirsiniz.

Değişiklikleri izle özelliğini etkinleştirdiğinizde, belgenin eklenen, silinen ve değiştirilen tüm öğeleri, kimin tarafından, ne zaman ve neyin değiştirildiğine ilişkin bilgilerle birlikte görsel olarak vurgulanacaktır. Neyin değiştiğine dair bilgiyi taşıyan nesnelere “değişiklikleri izleme” adı veriliyor. Örneğin, bir belgeyi incelemek ve önemli değişiklikler yapmak istediğinizi varsayalım; bu, düzeltmeler yapmanız gerektiği anlamına gelebilir. Ayrıca bazı değişiklikleri tartışmak için yorum eklemeniz gerekebilir. Belgelerdeki değişiklikleri izlemenin devreye girdiği yer burasıdır.

Bu makalede, aynı belgede birçok gözden geçiren tarafından oluşturulan değişikliklerin nasıl yönetileceği ve izleneceğinin yanı sıra değişiklikleri izlemeye yönelik özellikler açıklanmaktadır.

Revizyon Nedir?

Revizyonlara geçmeden önce revizyonların anlamını açıklayalım. revision, bir belgenin bir düğümünde meydana gelen bir değişikliktir; RevisionGroup sınıfı tarafından temsil edilen bir revizyon grubu ise bir belgenin birçok düğümünde meydana gelen sıralı revizyonların bir grubudur. Temel olarak revizyon, değişiklikleri izlemeye yönelik bir araçtır.

Revizyonlar, değişiklikleri izleme özelliğinde ve karşılaştırma sonucunda revizyonların göründüğü belgeleri karşılaştırma özelliğinde kullanılır. Yani değişiklikleri takip etme özelliğindeki revizyonlar, kimin tarafından ve neyin değiştirildiğini gösterir.

Aspose.Words, Microsoft Word’de olduğu gibi Ekleme, Silme, FormatChange, StyleDefinitionChange ve Taşıma gibi farklı revizyon türlerini destekler. Tüm revizyon türleri RevisionType numaralandırmasıyla temsil edilir.

Değişiklikleri İzlemeyi Başlatma ve Durdurma

Bir belgeyi düzenlemek genellikle siz onu izlemeye başlayana kadar revizyon olarak sayılmaz. Aspose.Words, belgenizdeki tüm değişiklikleri basit adımlarla otomatik olarak izlemenize olanak tanır. StartTrackRevisions yöntemini kullanarak değişiklikleri takip etme sürecini kolaylıkla başlatabilirsiniz. Gelecekteki düzenlemelerin revizyon olarak kabul edilmemesi için değişiklikleri izleme sürecini durdurmanız gerekirse, StopTrackRevisions yöntemini kullanmanız gerekecektir.

Belgenizdeki değişiklik takibi sürecinin sonunda, tüm düzeltmeleri kabul etme veya belgeyi orijinal haline döndürmek için reddetme olanağına sahip olacaksınız. Bu, AcceptAllRevisions veya RejectAll yöntemi kullanılarak gerçekleştirilebilir. Ayrıca Accept veya Reject yöntemini kullanarak her revizyonu ayrı ayrı kabul edebilir veya reddedebilirsiniz.

Süreci başlattığınız andan durdurduğunuz ana kadar tüm değişiklikler bir yineleme boyunca izlenecektir. Farklı yinelemeler arasındaki bağlantı şu senaryoyla temsil edilir: izleme işlemini tamamlarsınız, ardından bazı değişiklikler yaparsınız ve değişiklikleri izlemeye yeniden başlarsınız. Bu senaryoda kabul etmediğiniz veya reddetmediğiniz tüm değişiklikler yeniden görüntülenecektir.

Aşağıdaki kod örneği, değişiklikleri izlemeyle nasıl çalışılacağını gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Body body = doc.FirstSection.Body;
Paragraph para = body.FirstParagraph;
// Add text to the first paragraph, then add two more paragraphs.
para.AppendChild(new Run(doc, "Paragraph 1. "));
body.AppendParagraph("Paragraph 2. ");
body.AppendParagraph("Paragraph 3. ");
// We have three paragraphs, none of which registered as any type of revision
// If we add/remove any content in the document while tracking revisions,
// they will be displayed as such in the document and can be accepted/rejected.
doc.StartTrackRevisions("John Doe", DateTime.Now);
// This paragraph is a revision and will have the according "IsInsertRevision" flag set.
para = body.AppendParagraph("Paragraph 4. ");
Assert.True(para.IsInsertRevision);
// Get the document's paragraph collection and remove a paragraph.
ParagraphCollection paragraphs = body.Paragraphs;
Assert.AreEqual(4, paragraphs.Count);
para = paragraphs[2];
para.Remove();
// Since we are tracking revisions, the paragraph still exists in the document, will have the "IsDeleteRevision" set
// and will be displayed as a revision in Microsoft Word, until we accept or reject all revisions.
Assert.AreEqual(4, paragraphs.Count);
Assert.True(para.IsDeleteRevision);
// The delete revision paragraph is removed once we accept changes.
doc.AcceptAllRevisions();
Assert.AreEqual(3, paragraphs.Count);
Assert.That(para, Is.Empty);
// Stopping the tracking of revisions makes this text appear as normal text.
// Revisions are not counted when the document is changed.
doc.StopTrackRevisions();
// Save the document.
doc.Save(ArtifactsDir + "WorkingWithRevisions.AcceptRevisions.docx");

Aşağıdaki kod örneği, izlenen bir belgede bir düğüm taşındığında düzeltmelerin nasıl oluşturulduğunu gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Paragraph 1");
builder.Writeln("Paragraph 2");
builder.Writeln("Paragraph 3");
builder.Writeln("Paragraph 4");
builder.Writeln("Paragraph 5");
builder.Writeln("Paragraph 6");
Body body = doc.FirstSection.Body;
Console.WriteLine("Paragraph count: {0}", body.Paragraphs.Count);
// Start tracking revisions.
doc.StartTrackRevisions("Author", new DateTime(2020, 12, 23, 14, 0, 0));
// Generate revisions when moving a node from one location to another.
Node node = body.Paragraphs[3];
Node endNode = body.Paragraphs[5].NextSibling;
Node referenceNode = body.Paragraphs[0];
while (node != endNode)
{
Node nextNode = node.NextSibling;
body.InsertBefore(node, referenceNode);
node = nextNode;
}
// Stop the process of tracking revisions.
doc.StopTrackRevisions();
// There are 3 additional paragraphs in the move-from range.
Console.WriteLine("Paragraph count: {0}", body.Paragraphs.Count);
doc.Save(ArtifactsDir + "WorkingWithRevisions.MoveNodeInTrackedDocument.docx");

Değişiklikleri Revizyon Olarak Yönetin ve Saklayın

Önceki değişiklikleri takip etme özelliği ile belgenizde hangi değişikliklerin yapıldığını ve bu değişiklikleri kimin yaptığını anlayabilirsiniz. TrackRevisions özelliği ile belgenizdeki herhangi bir değişikliğin revizyon olarak saklanmasını zorlarsınız.

Aspose.Words, HasRevision özelliğini kullanarak bir belgenin revizyonunun olup olmadığını kontrol etmenizi sağlar. Belgenizdeki değişiklikleri StartTrackRevisions ve StopTrackRevisions yöntemleri aracılığıyla otomatik olarak izlemeniz gerekmiyorsa, Microsoft Word’de bir belge düzenlenirken değişikliklerin izlenip izlenmediğini ve revizyon olarak saklanıp saklanmadığını kontrol etmek için TrackRevisions özelliğini kullanabilirsiniz.

TrackRevisions özelliği gerçek DOM değişiklikleri yerine revizyonlar yapar. Ancak revizyonların kendisi ayrıdır. Örneğin, herhangi bir paragrafı silerseniz, Aspose.Words bunu silmek yerine, silme olarak işaretleyerek onu revizyon olarak yapar.

Ayrıca Aspose.Words, IsDeleteRevision, IsFormatRevision, IsInsertRevision, IsMoveFromRevision ve IsMoveToRevision özelliklerini kullanarak bir nesnenin eklenip eklenmediğini, silinip silinmediğini veya biçimlendirmesinin değiştirilip değiştirilmediğini kontrol etmenize olanak tanır.

Aşağıdaki kod örneği, farklı özelliklerin düzeltmelerle nasıl uygulanacağını gösterir:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
// Insert an inline shape without tracking revisions.
Assert.False(doc.TrackRevisions);
Shape shape = new Shape(doc, ShapeType.Cube);
shape.WrapType = WrapType.Inline;
shape.Width = 100.0;
shape.Height = 100.0;
doc.FirstSection.Body.FirstParagraph.AppendChild(shape);
// Start tracking revisions and then insert another shape.
doc.StartTrackRevisions("John Doe");
shape = new Shape(doc, ShapeType.Sun);
shape.WrapType = WrapType.Inline;
shape.Width = 100.0;
shape.Height = 100.0;
doc.FirstSection.Body.FirstParagraph.AppendChild(shape);
// Get the document's shape collection which includes just the two shapes we added.
List<Shape> shapes = doc.GetChildNodes(NodeType.Shape, true).Cast<Shape>().ToList();
Assert.AreEqual(2, shapes.Count);
// Remove the first shape.
shapes[0].Remove();
// Because we removed that shape while changes were being tracked, the shape counts as a delete revision.
Assert.AreEqual(ShapeType.Cube, shapes[0].ShapeType);
Assert.True(shapes[0].IsDeleteRevision);
// And we inserted another shape while tracking changes, so that shape will count as an insert revision.
Assert.AreEqual(ShapeType.Sun, shapes[1].ShapeType);
Assert.True(shapes[1].IsInsertRevision);
// The document has one shape that was moved, but shape move revisions will have two instances of that shape.
// One will be the shape at its arrival destination and the other will be the shape at its original location.
doc = new Document(MyDir + "Revision shape.docx");
shapes = doc.GetChildNodes(NodeType.Shape, true).Cast<Shape>().ToList();
Assert.AreEqual(2, shapes.Count);
// This is the move to revision, also the shape at its arrival destination.
Assert.False(shapes[0].IsMoveFromRevision);
Assert.True(shapes[0].IsMoveToRevision);
// This is the move from revision, which is the shape at its original location.
Assert.True(shapes[1].IsMoveFromRevision);
Assert.False(shapes[1].IsMoveToRevision);