Belgedeki Değişiklikleri İzleme

Değişiklikleri izle işlevi, gözden geçirme olarak da bilinir, sizin veya diğer kullanıcılar tarafından yapılan içerik ve biçimlendirmedeki değişiklikleri izlemenize olanak tanır. Aspose.Words ile yapılan bu değişiklik izleme özelliği, Microsoft Word içindeki değişiklikleri izlemeyi destekler. Bu işlevle, belgenizdeki tek tek revizyonlara erişebilir ve bunlara farklı özellikler uygulayabilirsiniz.

Değişiklikleri izle özelliğini etkinleştirdiğinizde, belgenin eklenen, silinen ve değiştirilen tüm öğeleri, kimin, ne zaman ve neyin değiştirildiğine ilişkin bilgilerle görsel olarak vurgulanır. Değiştirilenlerle ilgili bilgileri taşıyan nesnelere “değişiklikleri izleme” denir. Örneğin, bir belgeyi gözden geçirmek ve önemli değişiklikler yapmak istediğinizi varsayalım - bu, revizyonlar 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 yanı sıra değişiklikleri izleme özelliklerinin nasıl yönetileceği ve izleneceği açıklanmaktadır.

Revizyon Nedir

Revizyonlara dalmadan önce revizyonların anlamını açıklayalım. revision, bir belgenin bir düğümünde meydana gelen bir değişiklikken, RevisionGroup sınıfı tarafından temsil edilen bir revizyon grubu, bir belgenin birçok düğümünde meydana gelen sıralı revizyonlar grubudur. Temel olarak, revizyon değişiklikleri izlemek için bir araçtır.

Düzeltmeler, değişiklikleri izleme özelliğinde ve karşılaştırmanın sonucu olarak düzeltmelerin göründüğü belgeleri karşılaştır özelliğinde kullanılır. Bu nedenle, değişiklikleri izleme özelliğindeki revizyonlar kimin ve neyin değiştirildiğini gösterir.

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

Değişiklikleri İzlemeyi Başlat ve Durdur

Bir belgeyi düzenlemeye, siz onu izlemeye başlayana kadar genellikle revizyon sayılmaz. Aspose.Words belgenizdeki tüm değişiklikleri basit adımlarla otomatik olarak izlemenizi sağlar. StartTrackRevisions yöntemini kullanarak değişiklikleri izleme işlemini kolayca başlatabilirsiniz. Gelecekteki düzenlemelerin revizyon olarak kabul edilmemesi için değişiklikleri izleme işlemini durdurmanız gerekiyorsa, StopTrackRevisions yöntemini kullanmanız gerekir.

Belgenizdeki değişiklikleri izleme işleminin sonunda, belgeyi orijinal formuna döndürmek için tüm revizyonları kabul etme veya reddetme olanağına sahip olacaksınız. Bu, AcceptAllRevisions veya RejectAll yöntemi kullanılarak sağlanabilir. Ayrıca, Accept veya Reject yöntemini kullanarak her revizyonu ayrı ayrı kabul edebilir veya reddedebilirsiniz.

Tüm değişiklikler, işlemi başlattığınız andan durdurduğunuz ana kadar tek bir yineleme için izlenecektir. Farklı yinelemeler arasındaki bağlantı şu senaryo olarak gösterilir: izleme işlemini tamamlar, ardından bazı değişiklikler yapar ve değişiklikleri yeniden izlemeye başlarsınız. Bu senaryoda, kabul etmediğiniz veya reddetmediğiniz tüm değişiklikler yeniden görüntülenir.

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

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = System::MakeObject<Document>();
System::SharedPtr<Body> body = doc->get_FirstSection()->get_Body();
System::SharedPtr<Paragraph> para = body->get_FirstParagraph();
// Add text to the first paragraph, then add two more paragraphs.
para->AppendChild(System::MakeObject<Run>(doc, u"Paragraph 1. "));
body->AppendParagraph(u"Paragraph 2. ");
body->AppendParagraph(u"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(u"John Doe", System::DateTime::get_Now());
// This paragraph is a revision and will have the according "IsInsertRevision" flag set.
para = body->AppendParagraph(u"Paragraph 4. ");
ASSERT_TRUE(para->get_IsInsertRevision());
// Get the document's paragraph collection and remove a paragraph.
System::SharedPtr<ParagraphCollection> paragraphs = body->get_Paragraphs();
ASSERT_EQ(4, paragraphs->get_Count());
para = paragraphs->idx_get(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_EQ(4, paragraphs->get_Count());
ASSERT_TRUE(para->get_IsDeleteRevision());
// The delete revision paragraph is removed once we accept changes.
doc->AcceptAllRevisions();
ASSERT_EQ(3, paragraphs->get_Count());
ASSERT_EQ(0, para->get_Count());
// Stopping the tracking of revisions makes this text appear as normal text.
// Revisions are not counted when the document is changed.
doc->StopTrackRevisions();
System::String outputPath = outputDataDir + u"WorkingWithRevisions.AcceptRevisions.doc";
doc->Save(outputPath);

Aşağıdaki kod örneği, izlenen bir belge içinde bir düğüm taşındığında revizyonların nasıl oluşturulduğunu gösterir:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = System::MakeObject<Document>();
auto builder = System::MakeObject<DocumentBuilder>(doc);
builder->Writeln(u"Paragraph 1");
builder->Writeln(u"Paragraph 2");
builder->Writeln(u"Paragraph 3");
builder->Writeln(u"Paragraph 4");
builder->Writeln(u"Paragraph 5");
builder->Writeln(u"Paragraph 6");
System::SharedPtr<Body> body = doc->get_FirstSection()->get_Body();
std::cout << "Paragraph count: " << body->get_Paragraphs()->get_Count() << std::endl;
// Start tracking revisions.
doc->StartTrackRevisions(u"Author", System::DateTime(2020, 12, 23, 14, 0, 0));
// Generate revisions when moving a node from one location to another.
System::SharedPtr<Node> node = body->get_Paragraphs()->idx_get(3);
System::SharedPtr<Node> endNode = body->get_Paragraphs()->idx_get(5)->get_NextSibling();
System::SharedPtr<Node> referenceNode = body->get_Paragraphs()->idx_get(0);
while (node != endNode)
{
System::SharedPtr<Node> nextNode = node->get_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.
std::cout << "Paragraph count: " << body->get_Paragraphs()->get_Count() << std::endl;
System::String outputPath = outputDataDir + u"WorkingWithRevisions.MoveNodeInTrackedDocument.pdf";
doc->Save(outputPath);

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

Önceki değişiklikleri izleme özelliğiyle belgenizde hangi değişikliklerin yapıldığını ve bu değişiklikleri kimin yaptığını anlayabilirsiniz. TrackRevisions özelliğiyle, belgenizdeki değişiklikleri düzeltme olarak depolamaya zorlarsınız.

Aspose.Words bir belgenin revizyonu olup olmadığını HasRevision özelliğini kullanarak kontrol etmenizi sağlar. Belgenizdeki değişiklikleri StartTrackRevisions ve StopTrackRevisions yöntemleri aracılığıyla otomatik olarak izlemeniz gerekmiyorsa, Microsoft Word’deki bir belgeyi düzenlerken 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şiklikler yerine revizyonlar yapar. Ancak revizyonların kendileri ayrıdır. Örneğin, herhangi bir paragrafı silerseniz, Aspose.Words paragrafı silmek yerine onu silme olarak işaretleyerek revizyon olarak yapın.

Buna ek olarak, Aspose.Words, bir nesnenin eklenip eklenmediğini, silinip silinmediğini veya biçimlendirmenin değiştirilip değiştirilmediğini kontrol etmenizi sağlar. IsDeleteRevision, IsFormatRevision, IsInsertRevision, IsMoveFromRevision, ve IsMoveToRevision özellikleri.

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

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = System::MakeObject<Document>();
// Insert an inline shape without tracking revisions.
ASSERT_FALSE(doc->get_TrackRevisions());
auto shape = System::MakeObject<Shape>(doc, ShapeType::Cube);
shape->set_WrapType(WrapType::Inline);
shape->set_Width(100.0);
shape->set_Height(100.0);
doc->get_FirstSection()->get_Body()->get_FirstParagraph()->AppendChild(shape);
// Start tracking revisions and then insert another shape.
doc->StartTrackRevisions(u"John Doe");
shape = System::MakeObject<Shape>(doc, ShapeType::Sun);
shape->set_WrapType(WrapType::Inline);
shape->set_Width(100.0);
shape->set_Height(100.0);
doc->get_FirstSection()->get_Body()->get_FirstParagraph()->AppendChild(shape);
// Get the document's shape collection which includes just the two shapes we added.
auto shapes = doc->GetChildNodes(NodeType::Shape, true)->LINQ_Cast<System::SharedPtr<Shape>>()->LINQ_ToList();
ASSERT_EQ(2, shapes->get_Count());
// Remove the first shape.
shapes->idx_get(0)->Remove();
// Because we removed that shape while changes were being tracked, the shape counts as a delete revision.
ASSERT_EQ(ShapeType::Cube, shapes->idx_get(0)->get_ShapeType());
ASSERT_TRUE(shapes->idx_get(0)->get_IsDeleteRevision());
// And we inserted another shape while tracking changes, so that shape will count as an insert revision.
ASSERT_EQ(ShapeType::Sun, shapes->idx_get(1)->get_ShapeType());
ASSERT_TRUE(shapes->idx_get(1)->get_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 = System::MakeObject<Document>(inputDataDir + u"Revision shape.docx");
shapes = doc->GetChildNodes(NodeType::Shape, true)->LINQ_Cast<System::SharedPtr<Shape>>()->LINQ_ToList();
ASSERT_EQ(4, shapes->get_Count());
// This is the move to revision, also the shape at its arrival destination.
ASSERT_FALSE(shapes->idx_get(0)->get_IsMoveFromRevision());
ASSERT_TRUE(shapes->idx_get(0)->get_IsMoveToRevision());
// This is the move from revision, which is the shape at its original location.
ASSERT_TRUE(shapes->idx_get(1)->get_IsMoveFromRevision());
ASSERT_FALSE(shapes->idx_get(1)->get_IsMoveToRevision());