Вставка данных в текст при создании встречи или сообщения в Outlook

Используйте асинхронные методы (Body.getAsync, Body.getTypeAsync, Body.prependAsync, Body.setAsync и Body.setSelectedDataAsync) для получения типа текста и вставки данных в текст создаваемой встречи или сообщения. Эти асинхронные методы доступны только для создания надстроек. Чтобы использовать эти методы, убедитесь, что манифест надстройки настроен соответствующим образом, чтобы Outlook активировал надстройку в формах создания, как описано в разделе Создание надстроек Outlook для форм создания.

В Outlook пользователь может создавать сообщения (текстовые, а также в формате HTML и RTF) и встречи (в формате HTML). Прежде чем вставлять данные, необходимо сначала проверить поддерживаемый формат элемента, вызвав getTypeAsync, так как может потребоваться выполнить дополнительные действия. Возвращаемое getTypeAsync значение зависит от исходного формата элемента, а также от поддержки операционной системы устройства и приложения для редактирования в формате HTML. После проверки формата элемента задайте coercionType параметр prependAsync или setSelectedDataAsync , соответственно, чтобы вставить данные, как показано в следующей таблице. Если не указать аргумент и setSelectedDataAsync предположить, prependAsync что вставляемые данные в текстовом формате.

Данные для вставки Формат элемента, возвращенный методом getTypeAsync CoercionType для использования
Текст Текст1 Текст
HTML Текст1 Текст2
Текст HTML Текст или HTML
HTML HTML HTML

Примечание.

1 На планшетах и смартфонах возвращает текст, getTypeAsync если операционная система или приложение не поддерживает редактирование элемента, который был создан в ФОРМАТЕ HTML, в формате HTML.

2 Если вставляемые данные являются HTML и getTypeAsync возвращают тип текста для текущего почтового элемента, необходимо реорганизовать данные как текстовые и задать для параметра coercionTypeOffice.CoercionType.Textзначение . Если просто вставить HTML-данные в текстовый элемент, приложение отобразит html-теги в виде текста. Если вы попытаетесь вставить html-данные и присвоить значение coercionTypeOffice.CoercionType.Html, вы получите сообщение об ошибке.

В дополнение к параметру coercionType , как и большинство асинхронных методов в API JavaScript для Office, getTypeAsync, prependAsyncи setSelectedDataAsync принимают другие необязательные входные параметры. Дополнительные сведения о том, как указать эти необязательные входные параметры, см. в разделе Передача необязательных параметров в асинхронные методы статьи Асинхронное программирование в надстройках Office.

Вставка данных в текущей позиции курсора

В этом разделе показан пример кода, который используется getTypeAsync для проверки типа текста создаваемого элемента, а затем используется setSelectedDataAsync для вставки данных в текущее расположение курсора.

Необходимо передать строку данных в качестве входного параметра в setSelectedDataAsync. В зависимости от типа текста элемента можно указать эту строку в виде текста или HTML соответственно. Как упоминалось ранее, при необходимости можно указать тип данных для вставки в coercionType параметр . Чтобы получить состояние и результаты , передайте функцию обратного setSelectedDataAsyncвызова и необязательные входные параметры в метод, а затем извлеките необходимые сведения из выходного параметра asyncResult обратного вызова. В случае успешного выполнения метода можно получить тип текста элемента из asyncResult.value свойства , то есть "text" или "html".

Если пользователь не поместил курсор в текст элемента, setSelectedDataAsync вставляет данные в верхнюю часть текста. Если пользователь выбрал текст в тексте элемента, setSelectedDataAsync он заменяет выделенный текст указанными данными. Обратите внимание, что setSelectedDataAsync может завершиться ошибкой, если пользователь одновременно изменяет позицию курсора при создании элемента. Максимальное число символов, которые можно вставить за один раз — 1 000 000.

let item;

// Confirms that the Office.js library is loaded.
Office.onReady((info) => {
    if (info.host === Office.HostType.Outlook) {
        item = Office.context.mailbox.item;
        setItemBody();
    }
});

// Inserts data at the current cursor position.
function setItemBody() {
    // Identify the body type of the mail item.
    item.body.getTypeAsync((asyncResult) => {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            console.log(asyncResult.error.message);
            return;
        }

        // Insert data of the appropriate type into the body.
        if (asyncResult.value === Office.CoercionType.Html) {
            // Insert HTML into the body.
            item.body.setSelectedDataAsync(
                "<b> Kindly note we now open 7 days a week.</b>",
                { coercionType: Office.CoercionType.Html, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
        else {
            // Insert plain text into the body.
            item.body.setSelectedDataAsync(
                "Kindly note we now open 7 days a week.",
                { coercionType: Office.CoercionType.Text, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
    });
}

Вставка данных в начале текста элемента

Кроме того, можно использовать prependAsync для вставки данных в начале текста элемента и игнорировать текущее расположение курсора. Кроме точки вставки, prependAsync и setSelectedDataAsync ведут себя аналогичным образом. Сначала необходимо проверка тип текста сообщения, чтобы избежать привязки HTML-данных к сообщению в текстовом формате. Затем передайте строку данных, которая будет добавлена в текстовом или HTML-формате, в prependAsync. Максимальное число символов, которые можно вставить в начало за один раз — 1 000 000.

Следующий код JavaScript сначала вызывает getTypeAsync для проверки типа текста элемента. Затем в зависимости от типа данные вставляются в виде HTML-кода или текста в верхнюю часть текста.

let item;

// Confirms that the Office.js library is loaded.
Office.onReady((info) => {
    if (info.host === Office.HostType.Outlook) {
        item = Office.context.mailbox.item;
        prependItemBody();
    }
});


// Prepends data to the body of the item being composed.
function prependItemBody() {
    // Identify the body type of the mail item.
    item.body.getTypeAsync((asyncResult) => {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
            console.log(asyncResult.error.message);
            return;
        }

        // Prepend data of the appropriate type to the body.
        if (asyncResult.value === Office.CoercionType.Html) {
            // Prepend HTML to the body.
            item.body.prependAsync(
                '<b>Greetings!</b>',
                { coercionType: Office.CoercionType.Html, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
        else {
            // Prepend plain text to the body.
            item.body.prependAsync(
                'Greetings!',
                { coercionType: Office.CoercionType.Text, asyncContext: { optionalVariable1: 1, optionalVariable2: 2 } },
                (asyncResult) => {
                    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                        console.log(asyncResult.error.message);
                        return;
                    }

                    /*
                      Run additional operations appropriate to your scenario and
                      use the optionalVariable1 and optionalVariable2 values as needed.
                    */
            });
        }
    });
}

См. также