Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento quickstart ukazuje, jak používat další funkce sady MIP File SDK. Pomocí jednoho z popisků citlivosti, které jste uvedli v předchozím rychlém průvodci, použijete obslužnou rutinu pro soubory k nastavení a získání popisku u souboru. Třída pro obsluhu souborů poskytuje různé operace pro nastavení a načítání popisků nebo ochrany pro podporované typy souborů.
Požadavky
Pokud jste to ještě neudělali, nezapomeňte před pokračováním dokončit následující požadavky:
- Rychlý start: Vypsat popisky citlivosti (C++) Nejprve dokončete tento rychlý úvod. Vytvoří počáteční Visual Studio řešení, které obsahuje popisky citlivosti organizace. Tento rychlý úvod „Nastavení a získání popisku citlivosti“ navazuje na předchozí.
- Volitelně: Zkontrolujte obslužné rutiny souborů v konceptech sady MIP SDK .
Implementace třídy pozorovatele pro sledování objektu správce souboru
Stejně jako jste v rychlém úvodu k inicializaci aplikace implementovali třídu pozorovatele pro profil souboru a engine, nyní implementujete třídu pozorovatele pro objekt obsluhy souboru.
Vytvořte základní implementaci pozorovatele obsluhy souborů rozšířením třídy mip::FileHandler::Observer ze sady SDK. Aplikace vytvoří instanci pozorovatele a později ji použije ke sledování operací obsluhy souborů.
Otevřete řešení Visual Studio, na kterém jste pracovali v předchozím článku Úvod: Seznam popisků citlivosti (C++).
Přidejte do projektu novou třídu. Visual Studio vygeneruje soubory header/.h i implementace/.cpp za vás:
- V Průzkumníku řešení znovu klikněte pravým tlačítkem myši na uzel projektu, vyberte Přidat a pak vyberte Třída.
- V dialogovém okně Přidat třídu :
- Do pole Název třídy zadejte "filehandler_observer". Všimněte si, že se automaticky vyplní pole souboru .h i .cpp na základě zadaného názvu.
- Po dokončení vyberte OK.
Jakmile Visual Studio vygeneruje soubory .h a .cpp pro třídu, oba soubory se otevřou na kartách editoru. Aktualizujte každý soubor tak, aby implementovali novou třídu pozorovatele:
Aktualizujte "filehandler_observer.h" tak, že vyberete nebo odstraníte vygenerovanou
filehandler_observertřídu. Neodebíjejte direktivy preprocesoru generované předchozím krokem (#pragma, #include). Potom zkopírujte/vložte následující zdroj do souboru po všech existujících direktivách preprocesoru.#include <memory> #include "mip/file/file_engine.h" #include "mip/file/file_handler.h" class FileHandlerObserver final : public mip::FileHandler::Observer { public: FileHandlerObserver() { } // Observer implementation void OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) override; void OnCreateFileHandlerFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override; void OnCommitSuccess(bool committed, const std::shared_ptr<void>& context) override; void OnCommitFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override; };Aktualizujte filehandler_observer.cpp tak, že vyberete nebo odstraníte vygenerovanou
filehandler_observerimplementaci třídy. Neodebíjejte direktivy preprocesoru generované předchozím krokem (#pragma, #include). Potom zkopírujte/vložte následující zdroj do souboru po všech existujících direktivách preprocesoru.void FileHandlerObserver::OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context); promise->set_value(fileHandler); } void FileHandlerObserver::OnCreateFileHandlerFailure(const std::exception_ptr & error, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context); promise->set_exception(error); } void FileHandlerObserver::OnCommitSuccess(bool committed, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<bool>>(context); promise->set_value(committed); } void FileHandlerObserver::OnCommitFailure(const std::exception_ptr & error, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<bool>>(context); promise->set_exception(error); }
Volitelně můžete pomocí F6 (build solution) spustit testovací kompilaci nebo propojení vašeho řešení a před pokračováním potvrdit, že se sestavení úspěšně sestaví.
Přidat logiku pro nastavení a získání štítku citlivosti
Pomocí objektu File engine přidejte logiku pro nastavení a získání popisku citlivosti u souboru.
V Průzkumník řešení otevřete soubor .cpp v projektu, který obsahuje implementaci
main()metody. V rámci výchozího nastavení se použije stejný název jako projekt, který ho obsahuje a který jste zadali při vytváření projektu.Za odpovídající existující direktivy v horní části souboru přidejte následující
#includedirektivy ausingdirektivy:#include "filehandler_observer.h" #include "mip/file/file_handler.h" using mip::FileHandler;Ke konci sekce
main()body, zasystem("pause");a předreturn 0;, kde jste skončili v předchozím rychlém startu, vložte následující kód:// Set up async FileHandler for input file operations string inputFilePath = "<input-file-path>"; string actualFilePath = "<content-identifier>"; std::shared_ptr<FileHandler> handler; try { auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>(); auto handlerFuture = handlerPromise->get_future(); engine->CreateFileHandlerAsync( inputFilePath, actualFilePath, true, std::make_shared<FileHandlerObserver>(), handlerPromise); handler = handlerFuture.get(); } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid input file path?\n\n" << e.what() << "'\n"; system("pause"); return 1; } // Set a label on input file try { string labelId = "<label-id>"; cout << "\nApplying Label ID " << labelId << " to " << inputFilePath << endl; mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED); handler->SetLabel(engine->GetLabelById(labelId), labelingOptions, mip::ProtectionSettings()); } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n"; system("pause"); return 1; } // Commit changes, save as a different/output file string filePathOut = "<output-file-path>"; try { cout << "Committing changes" << endl; auto commitPromise = std::make_shared<std::promise<bool>>(); auto commitFuture = commitPromise->get_future(); handler->CommitAsync(filePathOut, commitPromise); if (commitFuture.get()) { cout << "\nLabel committed to file: " << filePathOut << endl; } else { cout << "Failed to label: " + filePathOut << endl; return 1; } } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid commit file path?\n\n" << e.what() << "'\n"; system("pause"); return 1; } system("pause"); // Set up async FileHandler for output file operations actualFilePath = "<content-identifier>"; try { auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>(); auto handlerFuture = handlerPromise->get_future(); engine->CreateFileHandlerAsync( filePathOut, actualFilePath, true, std::make_shared<FileHandlerObserver>(), handlerPromise); handler = handlerFuture.get(); } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid output file path?\n\n" << e.what() << "'\n"; system("pause"); return 1; } // Get the label from output file try { cout << "\nGetting the label committed to file: " << filePathOut << endl; auto label = handler->GetLabel(); cout << "Name: " + label->GetLabel()->GetName() << endl; cout << "Id: " + label->GetLabel()->GetId() << endl; } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n"; system("pause"); return 1; } system("pause");Na konci
main()vyhledejte blok vypnutí aplikace vytvořený v prvním rychlém startu a odkomentujte řádek obslužné rutiny:// Application shutdown. Null out profile and engine, call ReleaseAllResources(); // Application may crash at shutdown if resources aren't properly released. profile = nullptr; engine = nullptr; handler = nullptr; mipContext = nullptr;Zástupné hodnoty ve zdrojovém kódu nahraďte následujícím způsobem pomocí řetězcových konstant:
Placeholder Hodnota <cesta k vstupnímu souboru> Úplná cesta k testovacímu vstupnímu souboru, například: "c:\\Test\\Test.docx".<identifikátor obsahu> Identifikátor pro obsah čitelný člověkem. Například: - Pro soubor použijte cestu\název_souboru:
"c:\Test\Test.docx" - Pro e-mail použijte předmět:sender:
"RE: Audit design:user1@contoso.com"
<identifikátor štítku> ID popisku citlivosti zkopírované z výstupu konzoly v předchozím rychlém startu, například: "f42a3342-8706-4288-bd31-ebb85995028z".<cesta k výstupnímu souboru> Úplná cesta k výstupnímu souboru, což je označená kopie vstupního souboru, například: "c:\\Test\\Test_labeled.docx".- Pro soubor použijte cestu\název_souboru:
Sestavení a otestování aplikace
Sestavte a otestujte klientskou aplikaci.
K sestavení klientské aplikace použijte klávesu F6 (Build Solution). Pokud sestavení neobsahuje žádné chyby, spusťte aplikaci pomocí klávesy F5 (Spustit ladění).
Pokud se projekt sestaví a úspěšně spustí, aplikace zobrazí výzvu k zadání přístupového tokenu pokaždé, když sada SDK volá vaši
AcquireOAuth2Token()metodu. Stejně jako v předchozím rychlém startu "Výpis popisků citlivosti" spusťte skript PowerShellu, abyste získali token pokaždé s hodnotami zadanými pro$authoritya$resourceUrl.Run the PowerShell script to generate an access token using the following values, then copy/paste it below: Sensitivity labels for your organization: Non-Business : 87ba5c36-17cf-14793-bbc2-bd5b3a9f95cz Public : 83867195-f2b8-2ac2-b0b6-6bb73cb33afz General : f42a3342-8706-4288-bd31-ebb85995028z Confidential : 074e457c-5848-4542-9a6f-34a182080e7z Highly Confidential : f55c2dea-db0f-47cd-8520-a52e1590fb6z Press any key to continue . . . Applying Label ID 074e457c-5848-4542-9a6f-34a182080e7z to c:\Test\Test.docx Committing changes Label committed to file: c:\Test\Test_labeled.docx Press any key to continue . . . Getting the label committed to file: c:\Test\Test_labeled.docx Name: Confidential Id: 074e457c-5848-4542-9a6f-34a182080e7z Press any key to continue . . .
Ověřte aplikaci popisku tak, že otevřete výstupní soubor a vizuálně zkontrolujete nastavení ochrany informací v dokumentu.
Poznámka:
Pokud označujete dokument Office popiskem, ale nejste přihlášeni účtem z tenanta Microsoft Entra, který vydal přístupový token (a popisky citlivosti jsou nakonfigurované), může se před otevřením dokumentu opatřeného popiskem zobrazit výzva k přihlášení.