SDK для работы с файлами - обработка файлов .msg (C#)

Пакет SDK файлов поддерживает операции маркировки для .msg файлов таким же образом, как и любой другой тип файла, за исключением того, что пакет SDK должен включить флаг компонента MSG. В этом кратком руководстве показано, как задать этот флаг.

Как упоминалось ранее, для создания экземпляра IFileEngine требуется объект настроек FileEngineSettings. Приложение использует FileEngineSettings для передачи пользовательских параметров для конкретного экземпляра. Свойство CustomSettings у FileEngineSettings устанавливает флаг enable_msg_file_type, чтобы включить обработку .msg-файлов.

Предпосылки

Если вы еще не сделали этого, перед продолжением обязательно выполните следующие предварительные требования:

Установите enable_msg_file_type и используйте File SDK для маркировки файлов .msg.

В продолжение краткого руководства по инициализации приложения API файлов измените код создания файлового движка, чтобы задать enable_msg_file_type flag, а затем используйте файловый движок для обозначения файла .msg.

  1. Откройте решение Visual Studio, созданное в предыдущем разделе "Краткое руководство. Инициализация приложения пакета SDK для файлов (C#)".

  2. В Обозреватель решений откройте файл .cs в проекте, который содержит реализацию Main() метода. По умолчанию используется то же имя, что и проект, содержащий его, указанный во время создания проекта.

  3. Удалите реализацию функции Main() из предыдущего краткого руководства. Main() В текст вставьте следующий код. В следующем блоке кода при создании файлового механизма задается флаг enable_msg_file_type. IFileHandler Объекты, созданные с помощью обработчика файлов, могут обрабатывать .msg файл.

    static void Main(string[] args)
    {
        // Initialize Wrapper for File SDK operations.
        MIP.Initialize(MipComponent.File);
    
        // Create ApplicationInfo, setting the clientID from Azure AD App Registration as the ApplicationId.
        ApplicationInfo appInfo = new ApplicationInfo()
        {
                ApplicationId = clientId,
                ApplicationName = appName,
                ApplicationVersion = "1.0.0"
        };
    
        // Instantiate the AuthDelegateImpl object, passing in AppInfo.
        AuthDelegateImplementation authDelegate = new AuthDelegateImplementation(appInfo);
    
        MipContext mipContext = MIP.CreateMipContext(appInfo,"mip_data",LogLevel.Trace,null,null);
    
        // Initialize and instantiate the File Profile.
        // Create the FileProfileSettings object.
        // Initialize file profile settings to create/use local state.
        var profileSettings = new FileProfileSettings(mipContext, 
                                    CacheStorageType.OnDiskEncrypted, 
                                    new ConsentDelegateImplementation());
    
        // Load the Profile async and wait for the result.
        var fileProfile = Task.Run(async () => await MIP.LoadFileProfileAsync(profileSettings)).Result;
    
        // Create a FileEngineSettings object, then use that to add an engine to the profile.
        var customSettings = new List<KeyValuePair<string, string>>();
        customSettings.Add(new KeyValuePair<string, string>("enable_msg_file_type", "true"));
    
        // Create a FileEngineSettings object, then use that to add an engine to the profile.
        var engineSettings = new FileEngineSettings("user1@tenant.com", authDelegate, "", "en-US");
        engineSettings.Identity = new Identity("user1@tenant.com");
        //set custom settings for the engine
        engineSettings.CustomSettings = customSettings;
    
        //Add fileEngine to profile
        var fileEngine = Task.Run(async () => await fileProfile.AddEngineAsync(engineSettings)).Result;
    
        //Set file paths
        string inputFilePath = "<input-file-path>"; //.msg file to be labeled
        string actualFilePath = inputFilePath;
        string outputFilePath = "<output-file-path>"; //labeled .msg file
        string actualOutputFilePath = outputFilePath;
    
        //Create a file handler for original file
        var fileHandler = Task.Run(async () => await fileEngine.CreateFileHandlerAsync(inputFilePath, 
                                                                    actualFilePath, 
                                                                    true)).Result;
    
        // List labels available to the user and use one of them to label the MSG file.
    
        foreach (var label in fileEngine.SensitivityLabels)
        {
            Console.WriteLine(string.Format("{0} - {1}", label.Name, label.Id));
    
            if (label.Children.Count > 0)
            {
                foreach (Label child in label.Children)
                {
                    Console.WriteLine(string.Format("\t{0} - {1}", child.Name, child.Id));
                }
            }
        }
    
        string labelId = "<label-id>"; //label retrieved using file engine
    
        LabelingOptions labelingOptions = new LabelingOptions()
        {
            AssignmentMethod = options.AssignmentMethod
        };
    
        fileHandler.SetLabel(labelId, labelingOptions, new ProtectionSettings());
    
        // Commit changes, save as outputFilePath
        var result = Task.Run(async () => await fileHandler.CommitAsync(outputFilePath)).Result;
    
        // Create a new handler to read the labeled file metadata
        var handlerModified = Task.Run(async () => await fileEngine.CreateFileHandlerAsync(outputFilePath, 
                                                                        actualOutputFilePath, 
                                                                        true)).Result;
    
        Console.WriteLine(string.Format("Original file: {0}", inputFilePath));
        Console.WriteLine(string.Format("Labeled file: {0}", outputFilePath));
        Console.WriteLine(string.Format("Label applied to file: {0}", 
            handlerModified.Label.Name));
        Console.WriteLine("Press a key to continue.");
        Console.ReadKey();
    
        // Application Shutdown
        fileHandler = null;
        handlerModified = null;
        fileEngine = null;
        fileProfile = null;
        mipContext = null;
    }
    
    

    Дополнительные сведения об операциях с файлами см. в разделе "Основные понятия обработчика файлов".

  4. Замените значения заполнителей в исходном коде следующими значениями:

    Замещающее поле Ценность
    <путь к входному файлу> Полный путь к файлу тестового входного сообщения, например: c:\\Test\\message.msg
    <путь к выходным файлам> Полный путь к выходному файлу, который является помеченной копией входного файла, например: c:\\Test\\message_labeled.msg
    <label-id> Идентификатор метки, полученный с помощью обработчика файлов, например: 667466bf-a01b-4b0a-8bbf-a79a3d96f720

Создание и тестирование приложения

Используйте F6 (сборка решения) для создания клиентского приложения. Если у вас нет ошибок сборки, используйте F5 (начать отладку) для запуска приложения.

    Original file: C:\Test.msg
    Labeled file: C:\Test_Labeled.msg
    Label applied to file: Confidential    
    Press a key to continue.