إدارة تسميات الحساسية في عروض PowerPoint التقديمية باستخدام C++

نظرة عامة

تساعد تسميات الحساسية في Microsoft Purview المنظمات على تصنيف المستندات وحكمها. أثناء معالجة العروض التقديمية تلقائيًا، قد تحتاج التطبيقات إلى الحفاظ على تسمية موجودة، أو تطبيق تسمية مختارة وفق سياسة، أو تحديث حالتها، أو ترحيل بيانات تعريف التسمية التي كتبها سير عمل Microsoft Information Protection (MIP) أقدم.

توفر Aspose.Slides بيانات تعريف التسميات الحديثة عبر IPresentation::get_SensitivityLabels. تُعيد هذه الطريقة مجموعة ISensitivityLabelCollection يمكن فحصها وتعديلها قبل حفظ العرض التقديمي بصيغة PPTX.

فهم خصائص تسميات الحساسية

كل كائن ISensitivityLabel يحتوي على البيانات التعريفية التالية:

Accessors Purpose
ISensitivityLabel::get_Id, ISensitivityLabel::set_Id تحديد تسمية الحساسية في سياسة Purview.
ISensitivityLabel::get_SiteId, ISensitivityLabel::set_SiteId تحديد الموقع المرتبط بسياسة التسمية.
ISensitivityLabel::get_IsEnabled, ISensitivityLabel::set_IsEnabled الإشارة إلى ما إذا كانت التسمية مفعَّلة.
ISensitivityLabel::get_IsRemoved, ISensitivityLabel::set_IsRemoved الإشارة إلى أن التسمية قد أُزيلت. ضع القيمة true عندما يجب الاحتفاظ بحالة الإزالة في البيانات التعريفية.
ISensitivityLabel::get_AssignmentMethodType, ISensitivityLabel::set_AssignmentMethodType تحديد ما إذا تم تطبيق التسمية تلقائيًا أو عبر قرار المستخدم.
ISensitivityLabel::get_ContentMarkTypes سرد أنواع العلامات المحتوى المرتبطة بالتسمية.

تصف تعداد SensitivityLabelAssignmentType كيفية إسناد التسمية:

تحدد تعداد SensitivityLabelContentType العلامة المرتبطة بالتسمية:

Value Meaning
SensitivityLabelContentType::None تم تطبيق التسمية افتراضيًا أو تلقائيًا.
SensitivityLabelContentType::Header توجد علامة محتوى رأسية مرتبطة بالتسمية.
SensitivityLabelContentType::Footer توجد علامة محتوى تذييل مرتبطة بالتسمية.
SensitivityLabelContentType::Watermark توجد علامة محتوى علامة مائية مرتبطة بالتسمية.
SensitivityLabelContentType::Encryption توجد حماية تشفير مرتبطة بالتسمية.

يمكن ربط أنواع علامات متعددة بتسمية واحدة.

قائمة تسميات الحساسية الموجودة

اقرأ مجموعة التسميات الحديثة من IPresentation::get_SensitivityLabels وقم بتعدادها. المثال التالي يسرد كل خاصية وعلامة محتوى مخزّنة لكل تسمية:

#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();

إضافة تسمية حساسية مع علامة محتوى

استخدم ISensitivityLabelCollection::Add مع معرف التسمية، ومعرف الموقع، وحالة التفعيل، وطريقة الإسناد. بعد عودة الطريقة كائن ISensitivityLabel الجديد، أضف قيم العلامات المطلوبة عبر ISensitivityLabel::get_ContentMarkTypes.

المثال التالي يضيف تسمية مختارة يدويًا مرتبطة بعلامات تذييل وعلامة مائية، ثم يحفظ النتيجة بصيغة 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();

تحديث تسمية حساسية

قِيَم ISensitivityLabel قابلة للقراءة والكتابة عبر طُرُق getter وsetter الخاصة بها، باستثناء المجموعة التي تُعيدها ISensitivityLabel::get_ContentMarkTypes حيث تُعدَّل عبر عمليات القائمة. بعد تحديد التسمية المطلوبة، يمكنك تحديث معرفها، ومعرف الموقع، وحالة التفعيل، وطريقة الإسناد، وحالة الإزالة، وأنواع علامات المحتوى. احفظ العرض التقديمي لتثبيت التغييرات.

المثال التالي يُحدِّث حالة التفعيل وطريقة الإسناد للتسمية الأولى:

#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();

وضع علامة إزالة على تسمية حساسية

للحفاظ على حقيقة أن التسمية قد أزيلت، ابحث عن التسمية واستدعِ ISensitivityLabel::set_IsRemoved مع true. هذا يُبقي سجل التسمية مع تسجيل حالة الإزالة. إذا كنت بحاجة إلى حذف السجل من المجموعة الحديثة، استخدم ISensitivityLabelCollection::RemoveAt; واستخدم ISensitivityLabelCollection::Clear لحذف جميع السجلات.

المثال التالي يضع علامة إزالة على تسمية محددة ويُحفظ العرض المحدث:

#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();

قراءة وترحيل تسميات الحساسية القديمة من MIP

يمكن لسير العمل القائم على MIP الأقدم تخزين بيانات تعريف تسميات الحساسية في خصائص المستند المخصصة بدلاً من مجموعة التسميات الحديثة. اقرأ تلك البيانات عبر IDocumentProperties::GetSensitivityLabels. تقوم الطريقة بتحليل الخصائص المخصصة القديمة وتُعيد مصفوفة من كائنات ISensitivityLabel.

لترحيل البيانات، أضف كل تسمية مُستلمة إلى مجموعة ISensitivityLabelCollection الحديثة عبر ISensitivityLabelCollection::Add. بما أن إضافة معرف تسمية مكرر يُثير استثناءً، يتحقق المثال من وجود المجموعة الهدف قبل نسخ كل تسمية. يمكنك إضافة مزيد من التحقق لتأكيد أن كل تسمية قديمة لا تزال موجودة في سياسة 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();

الترحيل ينسخ كائنات التسميات التي تم تحليلها إلى المجموعة الحديثة. لا يتطلب مسح جميع خصائص المستند المخصصة، وبالتالي تظل البيانات التعريفية غير المتعلقة بالمستند سليمة. استخدم IPresentation::Save مع SaveFormat::Pptx لكتابة بيانات تعريف التسميات الحديثة إلى ملف PPTX.

الأسئلة المتكررة

هل إنشاء نوع علامة محتوى يضيف رأسًا أو تذيلاً أو علامة مائية مرئية إلى الشرائح؟

لا. القيم المضافة عبر ISensitivityLabel::get_ContentMarkTypes تصف العلامات المرتبطة بتسمية الحساسية. هي لا تنشئ نصًا أو أشكالًا مرئية في العرض. أضف محتوى الشريحة المناسب بشكل منفصل إذا كان سير عملك يتطلب إظهار تلك العلامات.

ما الفرق بين وضع علامة إزالة على تسمية وحذفها من المجموعة؟

استدعاء ISensitivityLabel::set_IsRemoved مع true يُبقي سجل التسمية ويسجل حالة الإزالة. استدعاء ISensitivityLabelCollection::RemoveAt يحذف السجل من المجموعة الحديثة. اختر العملية التي تتماشى مع متطلبات احتفاظ مؤسستك بالبيانات التعريفية.

هل يمكن للعرض التقديمي أن يحتوي على بيانات تعريف MIP القديمة وتسميات حساسية حديثة في آنٍ واحد؟

نعم. يمكن أن تظل التسميات القديمة في خصائص المستند المخصصة بينما تكون التسميات الحديثة متاحة عبر IPresentation::get_SensitivityLabels. استخدم IDocumentProperties::GetSensitivityLabels لقراءة البيانات القديمة وترحيل التسميات الصالحة التي لا توجد بالفعل في المجموعة الحديثة.

ماذا يحدث إذا أضيفت تسمية بنفس المعرف أكثر من مرة؟

ISensitivityLabelCollection::Add يرمي استثناءً من نوع ArgumentException عندما تحتوي المجموعة مسبقًا على تسمية بنفس المعرف. تحقق من قيم ISensitivityLabel::get_Id الموجودة قبل الإضافة أو الترقي.

أي تنسيق إخراج يجب استخدامه للحفاظ على تسميات الحساسية المحدثة؟

احفظ العرض بصيغة PPTX عن طريق استدعاء IPresentation::Save مع SaveFormat::Pptx، كما هو موضح في الأمثلة أعلاه.