Aracılığıyla paylaş


Hızlı Başlangıç: Duyarlılık etiketi ayarlama ve alma (C++)

Bu Hızlı Başlangıçta, MIP Dosya SDK'larının daha fazlasını nasıl kullanacağınız gösterilmektedir. Önceki Hızlı Başlangıçta listelediğiniz duyarlılık etiketlerinden birini kullanarak bir dosyaya etiket ayarlamak/almak için Dosya işleyicisi kullanırsınız. Dosya işleyici sınıfı, desteklenen dosya türleri için etiket ayarlama/alma veya koruma için çeşitli işlemleri kullanıma sunar.

Ön koşullar

Henüz yapmadıysanız devam etmeden önce aşağıdaki önkoşulları tamamladığınızdan emin olun:

Dosya işleyici nesnesini izlemek için bir gözlemci sınıfı uygulama

Uygulama başlatma Hızlı Başlangıcı'nda uyguladığınız gözlemciye (Dosya profili ve altyapısı için) benzer şekilde, şimdi bir Dosya işleyici nesnesi için bir gözlemci sınıfı uygularsınız.

SDK'nın mip::FileHandler::Observer sınıfını genişleterek Dosya işleyicisi gözlemcisi için temel bir uygulama oluşturun. Gözlemci örneği oluşturulur ve daha sonra Dosya işleyicisi işlemlerini izlemek için kullanılır.

  1. Önceki "Hızlı Başlangıç: Duyarlılık etiketlerini listeleme (C++)" makalesinde üzerinde çalıştığınız Visual Studio çözümünü açın.

  2. Projenize, sizin için hem header/.h hem de application/.cpp dosyalarını oluşturan yeni bir sınıf ekleyin:

    • Çözüm Gezgini proje düğümüne yeniden sağ tıklayın, Ekle'yi ve ardından Sınıf'ı seçin.
    • Sınıf Ekle iletişim kutusunda:
      • Sınıf Adı alanına "filehandler_observer" girin. Hem .h dosyası hem de .cpp dosya alanlarının, girdiğiniz ada göre otomatik olarak doldurulduğunu fark edin.
      • İşiniz bittiğinde Tamam düğmesine tıklayın.
  3. sınıfı için .h ve .cpp dosyaları üretildikten sonra, her iki dosya da Düzenleyici Grubu sekmelerinde açılır. Şimdi her dosyayı yeni gözlemci sınıfınızı uygulayacak şekilde güncelleştirin:

    • Oluşturulan filehandler_observer sınıfı seçerek/silerek "filehandler_observer.h" dosyasını güncelleştirin. Önceki adım (#pragma, #include) tarafından oluşturulan önişlemci yönergelerini kaldırmayın . Ardından, var olan önişlemci yönergelerinden sonra aşağıdaki kaynağı kopyalayıp dosyaya yapıştırın:

      #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;		
      };
      
    • Oluşturulan filehandler_observer sınıf uygulamasını seçerek/silerek "filehandler_observer.cpp" dosyasını güncelleştirin. Önceki adım (#pragma, #include) tarafından oluşturulan önişlemci yönergelerini kaldırmayın . Ardından, var olan önişlemci yönergelerinden sonra aşağıdaki kaynağı kopyalayıp dosyaya yapıştırın:

      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);
      }
      
  4. İsteğe bağlı olarak, devam etmeden önce başarılı bir şekilde derlendiğinden emin olmak için çözümünüzün test derlemesini/bağlantısını çalıştırmak için F6 (Derleme Çözümü) kullanın.

Duyarlılık etiketi ayarlamak ve almak için mantık ekleme

Dosya altyapısı nesnesini kullanarak dosyaya duyarlılık etiketi ayarlamak ve almak için mantık ekleyin.

  1. Çözüm Gezgini kullanarak, yönteminin uygulanmasını main() içeren projenizde .cpp dosyasını açın. Varsayılan olarak, proje oluşturma sırasında belirttiğiniz, onu içeren projeyle aynı ada sahiptir.

  2. Dosyanın en üstüne, ilgili mevcut yönergelerin altına aşağıdaki #include ve using yönergelerini ekleyin:

    #include "filehandler_observer.h" 
    #include "mip/file/file_handler.h" 
    
    using mip::FileHandler;
    
  3. Gövdenin main() sonuna doğru, altına system("pause"); ve üstüne return 0; (önceki Hızlı Başlangıçta kaldığınız yerden) aşağıdaki kodu ekleyin:

    // 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 " << filePathIn << endl;
         mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);
         handler->SetLabel(engine->GetLabelById(labelId), labelingOptions, new 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");
    
  4. İlk hızlı başlangıçta oluşturulan uygulama kapatma bloğunu bulma ve işleyici satırını açıklamayı kaldırma işleminin sonuna main() doğru:

    // 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;
    
  5. Kaynak kodundaki yer tutucu değerlerini aşağıdaki gibi dize sabitlerini kullanarak değiştirin:

    Yer tutucu Değer
    <input-file-path> Bir test giriş dosyasının tam yolu, örneğin: "c:\\Test\\Test.docx".
    <içerik tanımlayıcısı> İçerik için insan tarafından okunabilen bir tanımlayıcı. Örnek:
    • bir dosya için path\filename değerini göz önünde bulundurun: "c:\Test\Test.docx"
    • e-posta için subject:sender konusunu göz önünde bulundurun: "RE: Audit design:user1@contoso.com"
    <label-id> Önceki Hızlı Başlangıç'ta konsol çıkışından kopyalanan duyarlılık etiketi kimliği, örneğin: "f42a3342-8706-4288-bd31-ebb85995028z".
    <output-file-path> Çıkış dosyasının tam yolu; giriş dosyasının etiketli bir kopyası olacaktır, örneğin: "c:\\Test\\Test_labeled.docx".

Uygulamayı derleme ve test etme

İstemci uygulamanızı derleyin ve test edin.

  1. İstemci uygulamanızı derlemek için F6 (Derleme Çözümü) kullanın. Derleme hatanız yoksa, uygulamanızı çalıştırmak için F5 (Hata ayıklamayı başlat) kullanın.

  2. Projeniz başarıyla derlenip çalıştırılırsa, SDK yönteminizi AcquireOAuth2Token() her çağırdığında uygulama bir erişim belirteci ister. Daha önce "Duyarlılık etiketlerini listeleme" Hızlı Başlangıcı'nda yaptığınız gibi, $authority ve $resourceUrl için sağlanan değerleri kullanarak belirteci her seferinde almak için PowerShell betiğinizi çalıştırın.

    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 . . .
    

Çıkış dosyasını açıp belgenin bilgi koruma ayarlarını görsel olarak inceleyerek etiketin uygulamasını doğrulayabilirsiniz.

Dekont

Bir Office belgesini etiketlediğiniz halde erişim belirtecinin alındığı (ve duyarlılık etiketlerinin yapılandırıldığı) Microsoft Entra kiracısından bir hesap kullanarak oturum açmadıysanız, etiketli belgeyi açabilmeniz için önce oturum açmanız istenebilir.