JavaScript で PowerPoint プレゼンテーションの機密ラベルを管理する

概要

Microsoft Purview Sensitivity ラベルは、組織がドキュメントを分類および管理できるようにします。自動化されたプレゼンテーション処理中に、アプリケーションは既存のラベルを保持したり、ポリシーで選択されたラベルを適用したり、状態を更新したり、古い Microsoft Information Protection (MIP) ワークフローで書き込まれたラベル メタデータを移行したりする必要があります。

Aspose.Slides for Node.js via Java は、Presentation.getSensitivityLabels を介して最新の機密ラベル メタデータを公開します。このメソッドは、SensitivityLabelCollection を返し、プレゼンテーションを PPTX として保存する前に検査および変更できます。

機密ラベルプロパティの理解

SensitivityLabel には、以下のメタデータが含まれます。

メソッド 目的
SensitivityLabel.getIdSensitivityLabel.setId Purview ポリシー内の機密ラベル識別子を取得または設定します。
SensitivityLabel.getSiteIdSensitivityLabel.setSiteId ラベル ポリシーに関連付けられたサイトを取得または設定します。
SensitivityLabel.isEnabledSensitivityLabel.setEnabled ラベルが有効かどうかを取得または設定します。
SensitivityLabel.isRemovedSensitivityLabel.setRemoved ラベルが削除されたかどうかを取得または設定します。削除状態をメタデータに保持する必要がある場合は、値を true に設定します。
SensitivityLabel.getAssignmentMethodTypeSensitivityLabel.setAssignmentMethodType ラベルが自動的に適用されたか、ユーザーの判断によって適用されたかを取得または設定します。
SensitivityLabel.getContentMarkTypes ラベルに関連付けられたコンテンツ マーキングの種類を取得します。

SensitivityLabelAssignmentType クラスは、ラベルの割り当て方法を定義します。

SensitivityLabelContentType クラスは、ラベルに関連付けられるマーキングを定義します。

意味
SensitivityLabelContentType.None ラベルはデフォルトまたは自動的に適用されました。
SensitivityLabelContentType.Header ヘッダー コンテンツ マーキングがラベルに関連付けられています。
SensitivityLabelContentType.Footer フッター コンテンツ マーキングがラベルに関連付けられています。
SensitivityLabelContentType.Watermark ウォーターマーク コンテンツ マーキングがラベルに関連付けられています。
SensitivityLabelContentType.Encryption 暗号化保護がラベルに関連付けられています。

1 つのラベルに複数のマーキング タイプを関連付けることができます。

既存の機密ラベルを一覧表示

Presentation.getSensitivityLabels から最新のラベルコレクションを取得し、列挙します。以下の例は、各ラベルに保存されているすべてのプロパティとコンテンツ マーキングを一覧表示します。

const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const sensitivityLabels = presentation.getSensitivityLabels();
    const labelCount = sensitivityLabels.getCount();

    for (let labelIndex = 0; labelIndex < labelCount; labelIndex++) {
        const sensitivityLabel = sensitivityLabels.get_Item(labelIndex);
        const labelIdentifier = sensitivityLabel.getId();
        const siteIdentifier = sensitivityLabel.getSiteId();
        const isEnabled = sensitivityLabel.isEnabled();
        const isRemoved = sensitivityLabel.isRemoved();
        const assignmentMethod = sensitivityLabel.getAssignmentMethodType();

        console.log("Label ID: " + labelIdentifier);
        console.log("Site ID: " + siteIdentifier);
        console.log("Enabled: " + isEnabled);
        console.log("Removed: " + isRemoved);
        console.log("Assignment method: " + assignmentMethod);

        const contentMarkTypes = sensitivityLabel.getContentMarkTypes();
        const contentMarkCount = contentMarkTypes.size();

        for (let contentMarkIndex = 0; contentMarkIndex < contentMarkCount; contentMarkIndex++) {
            const contentMarkType = contentMarkTypes.get_Item(contentMarkIndex);
            console.log("Content marking: " + contentMarkType);
        }
    }
} finally {
    presentation.dispose();
}

コンテンツ マーキング付き機密ラベルを追加

SensitivityLabelCollection.add を使用し、ラベル識別子、サイト識別子、有効状態、割り当て方法を指定します。メソッドが新しい SensitivityLabel を返したら、SensitivityLabel.getContentMarkTypes が返すリストを通じて必要なマーキング値を追加します。

以下の例は、フッターとウォーターマークのマーキングが関連付けられた手動選択ラベルを追加し、結果を PPTX として保存します。

const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const sensitivityLabels = presentation.getSensitivityLabels();

    const labelIdentifier = "{11111111-2222-3333-4444-555555555555}";
    const siteIdentifier = java.callStaticMethodSync(
        "java.util.UUID",
        "fromString",
        "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
    const isEnabled = true;
    const assignmentMethod = aspose.slides.SensitivityLabelAssignmentType.Privileged;

    const sensitivityLabel = sensitivityLabels.add(
        labelIdentifier,
        siteIdentifier,
        isEnabled,
        assignmentMethod);

    const contentMarkTypes = sensitivityLabel.getContentMarkTypes();
    contentMarkTypes.addItem(aspose.slides.SensitivityLabelContentType.Footer);
    contentMarkTypes.addItem(aspose.slides.SensitivityLabelContentType.Watermark);

    presentation.save("presentation_with_label.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

機密ラベルを更新

SensitivityLabel の値は読み書き可能ですが、SensitivityLabel.getContentMarkTypes が返すリストはそのリスト操作を通じて変更します。必要なラベルを特定したら、識別子、サイト識別子、有効状態、割り当て方法、削除状態、コンテンツ マーキング タイプを更新できます。変更を永続化するためにプレゼンテーションを保存してください。

以下の例は、最初のラベルの有効状態と割り当て方法を更新します。

const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const sensitivityLabels = presentation.getSensitivityLabels();
    const labelCount = sensitivityLabels.getCount();

    if (labelCount > 0) {
        const sensitivityLabel = sensitivityLabels.get_Item(0);
        sensitivityLabel.setEnabled(true);
        sensitivityLabel.setAssignmentMethodType(
            aspose.slides.SensitivityLabelAssignmentType.Privileged);
    }

    presentation.save("presentation_with_updated_label.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

機密ラベルを削除済みとしてマーク

ラベルが削除されたことを保持したい場合は、ラベルを見つけて SensitivityLabel.setRemovedtrue を渡して呼び出します。これにより、エントリは残り、削除状態が記録されます。最新コレクションからエントリ自体を削除したい場合は、SensitivityLabelCollection.removeAt を使用し、すべてのエントリを削除するには SensitivityLabelCollection.clear を使用します。

以下の例は、特定のラベルを削除済みとしてマークし、更新されたプレゼンテーションを保存します。

const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
    const sensitivityLabels = presentation.getSensitivityLabels();
    const targetLabelIdentifier = "{11111111-2222-3333-4444-555555555555}";
    const labelCount = sensitivityLabels.getCount();

    for (let labelIndex = 0; labelIndex < labelCount; labelIndex++) {
        const sensitivityLabel = sensitivityLabels.get_Item(labelIndex);
        const labelIdentifier = sensitivityLabel.getId();
        const isTargetLabel = labelIdentifier.toLowerCase() === targetLabelIdentifier.toLowerCase();

        if (isTargetLabel) {
            sensitivityLabel.setRemoved(true);
            break;
        }
    }

    presentation.save("presentation_with_removed_label.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

レガシー MIP 機密ラベルの読み取りと移行

古い MIP ベースのワークフローは、最新ラベルコレクションの代わりにカスタム ドキュメントプロパティに機密ラベル メタデータを格納することがあります。これらのメタデータは DocumentProperties.getSensitivityLabels で取得できます。このメソッドはレガシー カスタムプロパティを解析し、SensitivityLabel オブジェクトの配列を返します。

メタデータを移行するには、返された各ラベルを SensitivityLabelCollection.add を介して最新の SensitivityLabelCollection に追加します。重複したラベル識別子を追加しようとすると例外がスローされるため、例ではコピー前に宛先コレクションをチェックしています。レガシー ラベルが現在の Purview ポリシーにまだ存在するかどうかを確認するさらなる検証を追加することもできます。

const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("presentation_with_legacy_labels.pptx");
try {
    const legacySensitivityLabels = presentation.getDocumentProperties().getSensitivityLabels();
    const modernSensitivityLabels = presentation.getSensitivityLabels();

    for (let legacyLabelIndex = 0; legacyLabelIndex < legacySensitivityLabels.length; legacyLabelIndex++) {
        const legacySensitivityLabel = legacySensitivityLabels[legacyLabelIndex];
        const legacyLabelIdentifier = legacySensitivityLabel.getId();
        const modernLabelCount = modernSensitivityLabels.getCount();
        let labelAlreadyExists = false;

        for (let modernLabelIndex = 0; modernLabelIndex < modernLabelCount; modernLabelIndex++) {
            const modernSensitivityLabel = modernSensitivityLabels.get_Item(modernLabelIndex);
            const modernLabelIdentifier = modernSensitivityLabel.getId();

            labelAlreadyExists =
                modernLabelIdentifier.toLowerCase() === legacyLabelIdentifier.toLowerCase();

            if (labelAlreadyExists) {
                break;
            }
        }

        if (!labelAlreadyExists) {
            modernSensitivityLabels.add(legacySensitivityLabel);
        }
    }

    presentation.save("presentation_with_modern_labels.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

この移行は、解析されたラベルオブジェクトを最新コレクションにコピーするだけです。すべてのカスタム ドキュメントプロパティをクリアする必要はなく、無関係なドキュメントメタデータはそのまま残ります。最新ラベルメタデータを書き出すには、Presentation.saveSaveFormat.Pptx を使用して PPTX ファイルとして保存します。

FAQ

コンテンツ マーキング タイプを追加すると、スライドに可視的なヘッダー、フッター、またはウォーターマークが作成されますか?

いいえ。SensitivityLabel.getContentMarkTypes が返すリストに追加された値は、機密ラベルに関連付けられたマーキングを記述するだけです。プレゼンテーションに可視テキストやシェイプは自動的に作成されません。ワークフローでそれらのマーキングを表示する必要がある場合は、別途スライド コンテンツを追加してください。

ラベルを「削除済み」とマークすることと、コレクションから削除することの違いは何ですか?

SensitivityLabel.setRemovedtrue を設定すると、ラベル エントリは保持され、削除状態が記録されます。一方、SensitivityLabelCollection.removeAt を呼び出すと、エントリ自体が最新コレクションから削除されます。組織のメタデータ保持要件に合わせて操作を選択してください。

プレゼンテーションにレガシー MIP メタデータと最新の機密ラベルの両方を含めることはできますか?

はい。レガシー ラベルはカスタム ドキュメントプロパティに残したままにでき、最新のラベルは Presentation.getSensitivityLabels で取得できます。レガシー メタデータを読み取り、まだ最新コレクションに存在しない有効なラベルだけを移行するには、DocumentProperties.getSensitivityLabels を使用してください。

同じ識別子のラベルを複数回追加するとどうなりますか?

同一識別子のラベルがコレクションに既に存在する場合、SensitivityLabelCollection.add は例外をスローします。追加または移行する前に、SensitivityLabel.getId が返す既存の値を確認してください。

更新された機密ラベルを保持するために推奨される出力形式は何ですか?

上記の例に示すように、Presentation.saveSaveFormat.Pptx を指定してプレゼンテーションを PPTX として保存してください。