مدیریت برچسب‌های حساسیت در ارائه‌های پاورپوینت با C++

بررسی کلی

Microsoft Purview sensitivity labels به سازمان‌ها کمک می‌کنند اسناد را دسته‌بندی و حاکمیت کنند. در حین پردازش خودکار ارائه، برنامه ممکن است نیاز داشته باشد برچسب موجود را حفظ کند، برچسبی که توسط یک سیاست انتخاب شده است اعمال کند، وضعیت آن را به‌روزرسانی کند، یا فراداده برچسب نوشته‌شده توسط یک جریان کاری قدیمی Microsoft Information Protection (MIP) را منتقل کند.

Aspose.Slides متادیتای برچسب حساسیت مدرن را از طریق IPresentation::get_SensitivityLabels. این متد یک ISensitivityLabelCollection را برمی‌گرداند که می‌توان آن را قبل از ذخیره ارائه به‌عنوان PPTX بررسی و اصلاح کرد.

درک ویژگی‌های برچسب حساسیت

هر ISensitivityLabel شامل متادیتای زیر است:

دستورات دسترسی هدف
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 علامت‌گذاری مرتبط با برچسب را شناسایی می‌کند:

مقدار معنی
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();

علامت‌گذاری برچسب حساسیت به عنوان حذف شده

برای حفظ این واقعیت که برچسبی حذف شده است، برچسب را پیدا کنید و با مقدار true متد ISensitivityLabel::set_IsRemoved را فراخوانی کنید. این کار ورودی برچسب را نگه می‌دارد و وضعیت حذف آن را ثبت می‌کند. اگر به‌جای آن نیاز به حذف ورودی از مجموعه مدرن دارید، از 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();

خواندن و انتقال برچسب‌های حساسیت Legacy MIP

گردش کارهای مبتنی بر MIP قدیمی می‌توانند متادیتای برچسب حساسیت را در ویژگی‌های سفارشی سند به‌جای مجموعه برچسب مدرن ذخیره کنند. آن متادیتا را با IDocumentProperties::GetSensitivityLabels بخوانید. این متد ویژگی‌های سفارشی قدیمی را تجزیه کرده و آرایه‌ای از اشیای ISensitivityLabel را برمی‌گرداند.

برای انتقال متادیتا، هر برچسب بازگردانده‌شده را از طریق ISensitivityLabelCollection::Add به ISensitivityLabelCollection مدرن اضافه کنید. چون افزودن شناسه برچسب تکراری منجر به استثنا می‌شود، مثال قبل از کپی هر برچسب، مجموعه مقصد را بررسی می‌کند. می‌توانید اعتبارسنجی بیشتری اضافه کنید تا تأیید کنید هر برچسب Legacy هنوز در سیاست 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();

انتقال، اشیای برچسب تجزیه‌شده را به مجموعه مدرن کپی می‌کند. این کار نیازی به پاک‌سازی تمام ویژگی‌های سفارشی سند ندارد، بنابراین متادیتای غیرمرتبط سند دست‌نخورده می‌ماند. برای نوشتن متادیتای برچسب مدرن به یک فایل PPTX از IPresentation::Save همراه با SaveFormat::Pptx استفاده کنید.

سوالات متداول

آیا افزودن یک نوع علامت‌گذاری محتوا یک سرصفحه، پاصفحه یا واترمارک قابل مشاهده روی اسلایدها ایجاد می‌کند؟

خیر. مقادیری که از طریق ISensitivityLabel::get_ContentMarkTypes اضافه می‌شوند، توصیف‌کنندهٔ علامت‌های مرتبط با برچسب حساسیت هستند. آن‌ها متن یا اشکال قابل مشاهده‌ای در ارائه ایجاد نمی‌کنند. اگر گردش کار شما نیاز به رندر کردن این علامت‌ها دارد، محتویات مربوط به اسلاید را جداگانه اضافه کنید.

تفاوت علامت‌گذاری یک برچسب به عنوان حذف شده و حذف آن از مجموعه چه‌ست؟

فراخوانی ISensitivityLabel::set_IsRemoved با مقدار true ورودی برچسب را نگه می‌دارد و وضعیت حذف آن را ثبت می‌کند. فراخوانی ISensitivityLabelCollection::RemoveAt ورودی را از مجموعه مدرن حذف می‌کند. عملیاتی را انتخاب کنید که با الزامات نگهداری متادیتای سازمان شما مطابقت داشته باشد.

آیا یک ارائه می‌تواند هم متادیتای MIP Legacy و هم برچسب‌های حساسیت مدرن را داشته باشد؟

بله. برچسب‌های Legacy می‌توانند در ویژگی‌های سفارشی سند باقی بمانند در حالی که برچسب‌های مدرن از طریق IPresentation::get_SensitivityLabels قابل دسترسی هستند. از IDocumentProperties::GetSensitivityLabels برای خواندن متادیتای Legacy استفاده کنید و فقط برچسب‌های معتبر که قبلاً در مجموعه مدرن وجود ندارند را منتقل کنید.

وقتی یک برچسب با همان شناسه بیش از یک‌بار اضافه شود چه اتفاقی می‌افتد؟

ISensitivityLabelCollection::Add هنگامیکه مجموعه از پیش شامل برچسبی با همان شناسه باشد، یک استثنای آرگومان پرتاب می‌کند. قبل از افزودن یا انتقال برچسب‌ها، مقادیر ISensitivityLabel::get_Id موجود را بررسی کنید.

کدام فرمت خروجی باید برای حفظ برچسب‌های حساسیت به‌روزرسانی‌شده استفاده شود؟

ارائه را به‌عنوان PPTX ذخیره کنید با فراخوانی IPresentation::Save همراه با SaveFormat::Pptx، همان‌طور که در مثال‌های بالا نشان داده شده است.