Gerenciar rótulos de sensibilidade em apresentações PowerPoint em C++
Visão geral
Os rótulos de sensibilidade do Microsoft Purview ajudam as organizações a classificar e governar documentos. Durante o processamento automatizado de apresentações, um aplicativo pode precisar preservar um rótulo existente, aplicar um rótulo selecionado por uma política, atualizar seu estado ou migrar metadados de rótulo gravados por um fluxo de trabalho mais antigo do Microsoft Information Protection (MIP).
Aspose.Slides expõe os metadados modernos de rótulo de sensibilidade por meio de IPresentation::get_SensitivityLabels. Esse método retorna uma ISensitivityLabelCollection que pode ser inspecionada e modificada antes que a apresentação seja salva como PPTX.
Nota
Os identificadores de rótulo de sensibilidade e as informações de política são definidos pela sua configuração do Microsoft Purview. Valide a disponibilidade de rótulos e os requisitos de política no seu ambiente antes de adicionar ou migrar metadados. Os valores de ISensitivityLabel::get_ContentMarkTypes descrevem as marcações de conteúdo associadas a um rótulo; eles não adicionam texto ou formas visíveis aos slides por si só.Entenda as propriedades do rótulo de sensibilidade
Cada ISensitivityLabel contém os seguintes metadados:
| Acessadores | Propósito |
|---|---|
| ISensitivityLabel::get_Id, ISensitivityLabel::set_Id | Identifica o rótulo de sensibilidade na política do Purview. |
| ISensitivityLabel::get_SiteId, ISensitivityLabel::set_SiteId | Identifica o site associado à política de rótulo. |
| ISensitivityLabel::get_IsEnabled, ISensitivityLabel::set_IsEnabled | Indica se o rótulo está habilitado. |
| ISensitivityLabel::get_IsRemoved, ISensitivityLabel::set_IsRemoved | Indica que o rótulo foi removido. Defina o valor como true quando o estado de remoção precisar ser mantido nos metadados. |
| ISensitivityLabel::get_AssignmentMethodType, ISensitivityLabel::set_AssignmentMethodType | Especifica se o rótulo foi aplicado automaticamente ou por decisão do usuário. |
| ISensitivityLabel::get_ContentMarkTypes | Lista os tipos de marcação de conteúdo associados ao rótulo. |
A enumeração SensitivityLabelAssignmentType descreve como um rótulo foi atribuído:
- SensitivityLabelAssignmentType::Standard representa um rótulo padrão ou aplicado automaticamente.
- SensitivityLabelAssignmentType::Privileged representa um rótulo aplicado por decisão do usuário, incluindo rótulos aplicados manualmente, recomendados e obrigatórios.
A enumeração SensitivityLabelContentType identifica a marcação associada a um rótulo:
| Valor | Significado |
|---|---|
| SensitivityLabelContentType::None | O rótulo foi aplicado por padrão ou automaticamente. |
| SensitivityLabelContentType::Header | A marcação de conteúdo de cabeçalho está associada ao rótulo. |
| SensitivityLabelContentType::Footer | A marcação de conteúdo de rodapé está associada ao rótulo. |
| SensitivityLabelContentType::Watermark | A marcação de conteúdo de marca d’água está associada ao rótulo. |
| SensitivityLabelContentType::Encryption | A proteção de criptografia está associada ao rótulo. |
Vários tipos de marcação podem ser associados a um rótulo.
Listar rótulos de sensibilidade existentes
Leia a coleção moderna de rótulos a partir de IPresentation::get_SensitivityLabels e enumere-a. O exemplo a seguir lista todas as propriedades e marcações de conteúdo armazenadas para cada rótulo:
#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();
Adicionar um rótulo de sensibilidade com marcação de conteúdo
Use ISensitivityLabelCollection::Add com o identificador do rótulo, identificador do site, estado habilitado e método de atribuição. Após o método retornar o novo ISensitivityLabel, adicione os valores de marcação necessários através de ISensitivityLabel::get_ContentMarkTypes.
O exemplo a seguir adiciona um rótulo selecionado manualmente associado a marcações de rodapé e marca d’água e, em seguida, salva o resultado como 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();
Atualizar um rótulo de sensibilidade
Os valores de ISensitivityLabel são de leitura/gravação por meio de seus métodos getter e setter, exceto que a coleção retornada por ISensitivityLabel::get_ContentMarkTypes é modificada através de suas operações de lista. Depois de localizar o rótulo necessário, você pode atualizar seu identificador, identificador do site, estado habilitado, método de atribuição, estado de remoção e tipos de marcação de conteúdo. Salve a apresentação para persistir as alterações.
O exemplo a seguir atualiza o estado habilitado e o método de atribuição do primeiro rótulo:
#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();
Marcar um rótulo de sensibilidade como removido
Para preservar o fato de que um rótulo foi removido, encontre o rótulo e chame ISensitivityLabel::set_IsRemoved com true. Isso mantém a entrada do rótulo enquanto registra seu estado removido. Se precisar excluir uma entrada da coleção moderna, use ISensitivityLabelCollection::RemoveAt; use ISensitivityLabelCollection::Clear para excluir todas as entradas.
O exemplo a seguir marca um rótulo específico como removido e salva a apresentação atualizada:
#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();
Ler e migrar rótulos de sensibilidade legados do MIP
Fluxos de trabalho mais antigos baseados em MIP podem armazenar metadados de rótulo de sensibilidade em propriedades de documento personalizadas em vez da coleção moderna de rótulos. Leia esses metadados com IDocumentProperties::GetSensitivityLabels. O método analisa as propriedades personalizadas legadas e devolve um array de objetos ISensitivityLabel.
Para migrar os metadados, adicione cada rótulo retornado à moderna ISensitivityLabelCollection através de ISensitivityLabelCollection::Add. Como adicionar um identificador de rótulo duplicado gera uma exceção, o exemplo verifica a coleção de destino antes de copiar cada rótulo. Você pode acrescentar validações adicionais para confirmar que cada rótulo legado ainda existe na política atual do Purview.
#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();
A migração copia os objetos de rótulo analisados para a coleção moderna. Não é necessário limpar todas as propriedades de documento personalizadas, de modo que metadados de documento não relacionados permanecem intactos. Use IPresentation::Save com SaveFormat::Pptx para gravar os metadados modernos de rótulo em um arquivo PPTX.
FAQ
Adicionar um tipo de marcação de conteúdo cria um cabeçalho, rodapé ou marca d’água visível nos slides?
Não. Os valores adicionados através de ISensitivityLabel::get_ContentMarkTypes descrevem as marcações associadas ao rótulo de sensibilidade. Eles não criam texto ou formas visíveis na apresentação. Adicione o conteúdo de slide correspondente separadamente se o seu fluxo de trabalho precisar renderizar essas marcações.
Qual é a diferença entre marcar um rótulo como removido e excluí-lo da coleção?
Chamar ISensitivityLabel::set_IsRemoved com true mantém a entrada do rótulo e registra seu estado removido. Chamar ISensitivityLabelCollection::RemoveAt exclui a entrada da coleção moderna. Escolha a operação que corresponde aos requisitos de retenção de metadados da sua organização.
Uma apresentação pode conter tanto metadados legados do MIP quanto rótulos de sensibilidade modernos?
Sim. Rótulos legados podem permanecer em propriedades de documento personalizadas enquanto os rótulos modernos ficam disponíveis através de IPresentation::get_SensitivityLabels. Use IDocumentProperties::GetSensitivityLabels para ler os metadados legados e migrar apenas os rótulos válidos que ainda não estejam presentes na coleção moderna.
O que acontece quando um rótulo com o mesmo identificador é adicionado mais de uma vez?
ISensitivityLabelCollection::Add lança uma exceção de argumento quando a coleção já contém um rótulo com o mesmo identificador. Verifique os valores existentes de ISensitivityLabel::get_Id antes de adicionar ou migrar rótulos.
Qual formato de saída deve ser usado para preservar os rótulos de sensibilidade atualizados?
Salve a apresentação como PPTX chamando IPresentation::Save com SaveFormat::Pptx, conforme mostrado nos exemplos acima.