Inserir dados no corpo ao compor um compromisso ou uma mensagem no Outlook

Use os métodos assíncronos (Body.getAsync, Body.getTypeAsync, Body.prependAsync, Body.setAsync e Body.setSelectedDataAsync) para obter o tipo de corpo e inserir dados no corpo de uma nomeação ou mensagem que está sendo composta. Esses métodos assíncronos só estão disponíveis para compor suplementos. Para usar esses métodos, verifique se você configurou o manifesto de suplemento adequadamente para que o Outlook ative seu suplemento em formulários de composição, conforme descrito em Criar suplementos do Outlook para formulários de composição.

No Outlook, um usuário pode criar uma mensagem em texto, HTML ou RTF (Rich Text Format) e pode criar um compromisso no formato HTML. Antes de inserir dados, primeiro você deve verificar o formato de item com suporte chamando getTypeAsync, pois talvez seja necessário tomar medidas adicionais. O valor que getTypeAsync retorna depende do formato de item original, bem como do suporte do sistema operacional do dispositivo e do aplicativo para edição no formato HTML. Depois de verificar o formato do item, defina o coercionType parâmetro de prependAsync ou setSelectedDataAsync de acordo para inserir os dados, conforme mostrado na tabela a seguir. Se você não especificar um argumento e prependAsyncsetSelectedDataAsync assumir que os dados a serem inseridos estão no formato de texto.

Dados a inserir Formato de item retornado por getTypeAsync coercionType a ser usado
Texto Texto1 Texto
HTML Texto1 Texto2
Texto HTML Texto/HTML
HTML HTML HTML

Observação

1 Em tablets e smartphones, getTypeAsync retorna "Text" se o sistema operacional ou aplicativo não dá suporte à edição de um item, que foi originalmente criado em HTML, no formato HTML.

2 Se seus dados a serem inseridos forem HTML e getTypeAsync retornarem um tipo de texto para o item de email atual, você deverá reorganizar seus dados como texto e definir coercionTypeOffice.CoercionType.Textcomo . Se você simplesmente inserir os dados HTML em um item formatado por texto, o aplicativo exibirá as marcas HTML como texto. Se você tentar inserir os dados HTML e definir coercionType como Office.CoercionType.Html, você receberá um erro.

Além do parâmetro, como acontece com a maioria dos coercionType métodos assíncronos na API JavaScript do Office, getTypeAsync, e setSelectedDataAsyncprependAsyncuse outros parâmetros de entrada opcionais. Para obter mais informações sobre como especificar esses parâmetros de entrada opcionais, confira "Passando parâmetros opcionais para métodos assíncronos" na programação assíncrona nos Suplementos do Office.

Inserir dados na posição atual do cursor

Esta seção mostra um exemplo de código que usa getTypeAsync para verificar o tipo de corpo do item que está sendo composto e, em seguida, usa setSelectedDataAsync para inserir dados no local atual do cursor.

Você deve passar uma cadeia de dados como um parâmetro de entrada para setSelectedDataAsync. Dependendo do tipo do corpo do item, você pode especificar essa cadeia de caracteres de dados no formato HTML ou de texto adequadamente. Conforme mencionado anteriormente, você pode especificar opcionalmente o tipo dos dados a serem inseridos no coercionType parâmetro. Para obter o status e os resultados de setSelectedDataAsync, passe uma função de retorno de chamada e parâmetros de entrada opcionais para o método e extraia as informações necessárias do parâmetro de saída asyncResult do retorno de chamada. Se o método for bem-sucedido, você poderá obter o tipo do corpo do item da asyncResult.value propriedade, que é "text" ou "html".

Se o usuário não tiver colocado o cursor no corpo do item, setSelectedDataAsync insira os dados na parte superior do corpo. Se o usuário tiver selecionado o texto no corpo do item, setSelectedDataAsync substituirá o texto selecionado pelos dados especificados. Observe que setSelectedDataAsync pode falhar se o usuário alterar simultaneamente a posição do cursor ao compor o item. O número máximo de caracteres que você pode inserir de cada vez é um milhão.

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.
                    */
            });
        }
    });
}

Inserir dados no início do corpo do item

Como alternativa, você pode usar prependAsync para inserir dados no início do corpo do item e ignorar o local atual do cursor. Além do ponto de inserção, prependAsync e setSelectedDataAsync se comporte de maneiras semelhantes. Primeiro, você deve marcar o tipo do corpo da mensagem para evitar a preparação de dados HTML para uma mensagem no formato de texto. Em seguida, passe a cadeia de dados para ser pré-endereçada no formato de texto ou HTML para prependAsync. O número máximo de caracteres que você pode anexar no início de cada vez é um milhão.

O código JavaScript a seguir primeiro chama getTypeAsync para verificar o tipo do corpo do item. Em seguida, dependendo do tipo, ele insere os dados como HTML ou texto na parte superior do corpo.

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.
                    */
            });
        }
    });
}

Confira também