Verwalten von Sensitivitäts-Labels in PowerPoint-Präsentationen in C++

Übersicht

Microsoft Purview Sensitivity‑Labels helfen Organisationen, Dokumente zu klassifizieren und zu verwalten. Bei der automatisierten Präsentationsverarbeitung kann eine Anwendung ein bestehendes Label beibehalten, ein durch eine Richtlinie ausgewähltes Label anwenden, dessen Zustand aktualisieren oder Label‑Metadaten migrieren, die von einem älteren Microsoft Information Protection‑Workflow (MIP) geschrieben wurden.

Aspose.Slides stellt moderne Sensitivitäts‑Label‑Metadaten über IPresentation::get_SensitivityLabels bereit. Diese Methode gibt eine ISensitivityLabelCollection zurück, die vor dem Speichern der Präsentation als PPTX eingesehen und geändert werden kann.

Sensitivitäts‑Label‑Eigenschaften verstehen

Jedes ISensitivityLabel enthält die folgenden Metadaten:

Accessors Zweck
ISensitivityLabel::get_Id, ISensitivityLabel::set_Id Kennzeichnet das Sensitivitäts‑Label in der Purview‑Richtlinie.
ISensitivityLabel::get_SiteId, ISensitivityLabel::set_SiteId Kennzeichnet die mit der Richtlinie verknüpfte Site.
ISensitivityLabel::get_IsEnabled, ISensitivityLabel::set_IsEnabled Gibt an, ob das Label aktiviert ist.
ISensitivityLabel::get_IsRemoved, ISensitivityLabel::set_IsRemoved Gibt an, dass das Label entfernt wurde. Setzen Sie den Wert auf true, wenn der Entfernungszustand in den Metadaten erhalten bleiben muss.
ISensitivityLabel::get_AssignmentMethodType, ISensitivityLabel::set_AssignmentMethodType Gibt an, ob das Label automatisch oder durch eine Benutzerentscheidung zugewiesen wurde.
ISensitivityLabel::get_ContentMarkTypes Listet die Inhaltskennzeichnungstypen auf, die dem Label zugeordnet sind.

Die Aufzählung SensitivityLabelAssignmentType beschreibt, wie ein Label zugewiesen wurde:

Die Aufzählung SensitivityLabelContentType identifiziert die mit einem Label verbundene Kennzeichnung:

Value Bedeutung
SensitivityLabelContentType::None Das Label wurde standardmäßig oder automatisch angewendet.
SensitivityLabelContentType::Header Eine Kopfzeilen‑Kennzeichnung ist dem Label zugeordnet.
SensitivityLabelContentType::Footer Eine Fußzeilen‑Kennzeichnung ist dem Label zugeordnet.
SensitivityLabelContentType::Watermark Eine Wasserzeichen‑Kennzeichnung ist dem Label zugeordnet.
SensitivityLabelContentType::Encryption Eine Verschlüsselungsschutz ist dem Label zugeordnet.

Mehrere Kennzeichnungstypen können einem Label zugeordnet sein.

Bestehende Sensitivitäts‑Labels auflisten

Lesen Sie die moderne Label‑Sammlung über IPresentation::get_SensitivityLabels und iterieren Sie darüber. Das folgende Beispiel listet jede Eigenschaft und jede Inhaltskennzeichnung für jedes Label auf:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <DOM/SensitivityLabelAssignmentType.h>
#include <DOM/SensitivityLabelContentType.h>
#include <system/collections/ilist.h>
#include <system/console.h>
#include <system/guid.h>
#include <system/shared_ptr.h>
#include <system/string.h>

using Aspose::Slides::Presentation;
using System::Console;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();

for (auto&& sensitivityLabel : sensitivityLabels)
{
    auto labelIdentifier = sensitivityLabel->get_Id();
    auto siteIdentifier = sensitivityLabel->get_SiteId();
    auto isEnabled = sensitivityLabel->get_IsEnabled();
    auto isRemoved = sensitivityLabel->get_IsRemoved();
    auto assignmentMethod = sensitivityLabel->get_AssignmentMethodType();

    Console::WriteLine(u"Label ID: {0}", labelIdentifier);
    Console::WriteLine(u"Site ID: {0}", siteIdentifier);
    Console::WriteLine(u"Enabled: {0}", isEnabled);
    Console::WriteLine(u"Removed: {0}", isRemoved);
    Console::WriteLine(u"Assignment method: {0}", assignmentMethod);

    for (auto contentMarkType : sensitivityLabel->get_ContentMarkTypes())
    {
        Console::WriteLine(u"Content marking: {0}", contentMarkType);
    }
}

presentation->Dispose();

Ein Sensitivitäts‑Label mit Inhaltskennzeichnung hinzufügen

Verwenden Sie ISensitivityLabelCollection::Add mit der Label‑Kennung, Site‑Kennung, dem Aktivierungszustand und der Zuweisungsmethode. Nachdem die Methode das neue ISensitivityLabel zurückgegeben hat, fügen Sie die erforderlichen Kennwert‑Typen über ISensitivityLabel::get_ContentMarkTypes hinzu.

Das folgende Beispiel fügt ein manuell ausgewähltes Label hinzu, das mit Fußzeilen‑ und Wasserzeichen‑Kennzeichnungen verknüpft ist, und speichert das Ergebnis anschließend als PPTX:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <DOM/SensitivityLabelAssignmentType.h>
#include <DOM/SensitivityLabelContentType.h>
#include <Export/SaveFormat.h>
#include <system/collections/ilist.h>
#include <system/guid.h>
#include <system/shared_ptr.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::SensitivityLabelAssignmentType;
using Aspose::Slides::SensitivityLabelContentType;
using Aspose::Slides::Export::SaveFormat;
using System::Guid;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();

auto labelIdentifier = u"{11111111-2222-3333-4444-555555555555}";
auto siteIdentifier = Guid::Parse(u"{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}");
bool isEnabled = true;
auto assignmentMethod = SensitivityLabelAssignmentType::Privileged;

auto sensitivityLabel = sensitivityLabels->Add(
    labelIdentifier,
    siteIdentifier,
    isEnabled,
    assignmentMethod);

sensitivityLabel->get_ContentMarkTypes()->Add(SensitivityLabelContentType::Footer);
sensitivityLabel->get_ContentMarkTypes()->Add(SensitivityLabelContentType::Watermark);

presentation->Save(u"presentation_with_label.pptx", SaveFormat::Pptx);
presentation->Dispose();

Ein Sensitivitäts‑Label aktualisieren

Die Werte des ISensitivityLabel können über deren Getter‑ und Setter‑Methoden gelesen und geschrieben werden, wobei die durch ISensitivityLabel::get_ContentMarkTypes zurückgegebene Sammlung über Listenoperationen modifiziert wird. Nachdem Sie das gewünschte Label gefunden haben, können Sie Kennung, Site‑Kennung, Aktivierungszustand, Zuweisungsmethode, Entfernungszustand und Inhaltskennzeichnungstypen aktualisieren. Speichern Sie die Präsentation, um die Änderungen zu übernehmen.

Das folgende Beispiel aktualisiert den Aktivierungszustand und die Zuweisungsmethode des ersten Labels:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <DOM/SensitivityLabelAssignmentType.h>
#include <Export/SaveFormat.h>
#include <system/shared_ptr.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::SensitivityLabelAssignmentType;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();
int labelCount = sensitivityLabels->get_Count();

if (labelCount > 0)
{
    auto sensitivityLabel = sensitivityLabels->idx_get(0);
    sensitivityLabel->set_IsEnabled(true);
    sensitivityLabel->set_AssignmentMethodType(SensitivityLabelAssignmentType::Privileged);
}

presentation->Save(u"presentation_with_updated_label.pptx", SaveFormat::Pptx);
presentation->Dispose();

Ein Sensitivitäts‑Label als entfernt markieren

Um festzuhalten, dass ein Label entfernt wurde, finden Sie das Label und rufen Sie ISensitivityLabel::set_IsRemoved mit true auf. Dadurch bleibt der Eintrag erhalten, aber sein Entfernungsstatus wird gespeichert. Wenn Sie stattdessen einen Eintrag aus der modernen Sammlung löschen müssen, verwenden Sie ISensitivityLabelCollection::RemoveAt; benutzen Sie ISensitivityLabelCollection::Clear, um sämtliche Einträge zu entfernen.

Das folgende Beispiel markiert ein bestimmtes Label als entfernt und speichert die aktualisierte Präsentation:

#include <DOM/Presentation.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <Export/SaveFormat.h>
#include <system/shared_ptr.h>
#include <system/string.h>
#include <system/string_comparison.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;
using System::String;
using System::StringComparison;

auto presentation = MakeObject<Presentation>(u"presentation.pptx");
auto sensitivityLabels = presentation->get_SensitivityLabels();
auto targetLabelIdentifier = u"{11111111-2222-3333-4444-555555555555}";

for (auto&& sensitivityLabel : sensitivityLabels)
{
    auto labelIdentifier = sensitivityLabel->get_Id();
    bool isTargetLabel = String::Equals(
        labelIdentifier,
        targetLabelIdentifier,
        StringComparison::OrdinalIgnoreCase);

    if (isTargetLabel)
    {
        sensitivityLabel->set_IsRemoved(true);
        break;
    }
}

presentation->Save(u"presentation_with_removed_label.pptx", SaveFormat::Pptx);
presentation->Dispose();

Legacy‑MIP‑Sensitivitäts‑Labels lesen und migrieren

Ältere, auf MIP basierende Workflows können Sensitivitäts‑Label‑Metadaten in benutzerdefinierten Dokumenteneigenschaften statt in der modernen Label‑Sammlung speichern. Lesen Sie diese Metadaten mit IDocumentProperties::GetSensitivityLabels. Die Methode parst die Legacy‑Eigenschaften und gibt ein Array von ISensitivityLabel-Objekten zurück.

Um die Metadaten zu migrieren, fügen Sie jedes zurückgegebene Label über ISensitivityLabelCollection::Add zur modernen ISensitivityLabelCollection hinzu. Da das Hinzufügen einer doppelten Label‑Kennung eine Ausnahme auslöst, prüft das Beispiel die Ziel‑Sammlung, bevor jedes Label kopiert wird. Sie können zusätzliche Validierungen einbauen, um sicherzustellen, dass jedes Legacy‑Label noch in der aktuellen Purview‑Richtlinie existiert.

#include <DOM/Presentation.h>
#include <DOM/IDocumentProperties.h>
#include <DOM/ISensitivityLabel.h>
#include <DOM/ISensitivityLabelCollection.h>
#include <Export/SaveFormat.h>
#include <system/array.h>
#include <system/shared_ptr.h>
#include <system/string.h>
#include <system/string_comparison.h>

using Aspose::Slides::Presentation;
using Aspose::Slides::Export::SaveFormat;
using System::MakeObject;
using System::String;
using System::StringComparison;

auto presentation = MakeObject<Presentation>(u"presentation_with_legacy_labels.pptx");
auto documentProperties = presentation->get_DocumentProperties();
auto legacySensitivityLabels = documentProperties->GetSensitivityLabels();
auto modernSensitivityLabels = presentation->get_SensitivityLabels();

for (auto&& legacySensitivityLabel : legacySensitivityLabels)
{
    bool labelAlreadyExists = false;
    auto legacyLabelIdentifier = legacySensitivityLabel->get_Id();

    for (auto&& modernSensitivityLabel : modernSensitivityLabels)
    {
        auto modernLabelIdentifier = modernSensitivityLabel->get_Id();
        labelAlreadyExists = String::Equals(
            modernLabelIdentifier,
            legacyLabelIdentifier,
            StringComparison::OrdinalIgnoreCase);

        if (labelAlreadyExists)
        {
            break;
        }
    }

    if (!labelAlreadyExists)
    {
        modernSensitivityLabels->Add(legacySensitivityLabel);
    }
}

presentation->Save(u"presentation_with_modern_labels.pptx", SaveFormat::Pptx);
presentation->Dispose();

Die Migration kopiert die geparsten Label‑Objekte in die moderne Sammlung. Es ist nicht nötig, alle benutzerdefinierten Dokumenteneigenschaften zu löschen, sodass nicht‑relevante Dokument‑Metadaten erhalten bleiben. Verwenden Sie IPresentation::Save mit SaveFormat::Pptx, um die modernen Label‑Metadaten in eine PPTX‑Datei zu schreiben.

FAQ

Erzeugt das Hinzufügen eines Inhaltskennzeichnungstyps eine sichtbare Kopfzeile, Fußzeile oder ein Wasserzeichen auf Folien?

Nein. Werte, die über ISensitivityLabel::get_ContentMarkTypes hinzugefügt werden, beschreiben die mit dem Sensitivitäts‑Label verbundenen Kennzeichnungen. Sie erzeugen keinen sichtbaren Text oder Formen in der Präsentation. Fügen Sie den entsprechenden Folieninhalt separat hinzu, wenn Ihr Workflow diese Kennzeichnungen rendern muss.

Was ist der Unterschied zwischen dem Markieren eines Labels als entfernt und dem Löschen aus der Sammlung?

Der Aufruf von ISensitivityLabel::set_IsRemoved mit true bewahrt den Label‑Eintrag und zeichnet seinen Entfernungsstatus auf. Der Aufruf von ISensitivityLabelCollection::RemoveAt löscht den Eintrag aus der modernen Sammlung. Wählen Sie die Operation, die den Aufbewahrungsvorgaben Ihrer Organisation entspricht.

Kann eine Präsentation sowohl Legacy‑MIP‑Metadaten als auch moderne Sensitivitäts‑Labels enthalten?

Ja. Legacy‑Labels können in benutzerdefinierten Dokumenteneigenschaften verbleiben, während moderne Labels über IPresentation::get_SensitivityLabels verfügbar sind. Verwenden Sie IDocumentProperties::GetSensitivityLabels, um die Legacy‑Metadaten zu lesen und nur die gültigen Labels zu migrieren, die noch nicht in der modernen Sammlung vorhanden sind.

Was passiert, wenn ein Label mit derselben Kennung mehrfach hinzugefügt wird?

ISensitivityLabelCollection::Add wirft eine ArgumentException, wenn die Sammlung bereits ein Label mit derselben Kennung enthält. Prüfen Sie vorhandene ISensitivityLabel::get_Id-Werte, bevor Sie Labels hinzufügen oder migrieren.

Welches Ausgabeformat sollte verwendet werden, um aktualisierte Sensitivitäts‑Labels zu erhalten?

Speichern Sie die Präsentation als PPTX, indem Sie IPresentation::Save mit SaveFormat::Pptx aufrufen, wie in den obigen Beispielen gezeigt.