Поделиться через


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

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

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

Предпосылки

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

Установите 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 флаг устанавливается во время создания файлового движка, после чего .msg файл может обрабатываться объектами, созданными с помощью файлового движка IFileHandler.

    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.