Повторное использование контекста с object.track () прерывается при попытке получить parentContentControl - PullRequest
1 голос
/ 16 июня 2019

Контекст: при обнаружении клика я пытаюсь определить, нет ли каких-либо абзацев с контентом contentControl.Следовательно, требуется повторное использование контекста.Я смог заставить работать повторное использование контекста, но не для этого конкретного бита кода.

Поэтому минимальное воспроизведение при запуске фрагмента кода дважды:

        let randomObject: Word.Document = null;
        await Word.run(async (context) => {
            randomObject = context.document;
            randomObject.track();
        })
        await Word.run(randomObject, async (context) => {
            await test(context);
        });

        await Word.run(randomObject, async (context) => {
            await test(context);
        });

Этокод, который просто получает первый contentControl в первом абзаце.Он выполняет следующее:

  • Извлечение тела
  • Извлечение абзацев
  • Извлечение первого элемента
  • Извлечение parentContentControlOrNullObject
async function test(context: Word.RequestContext) {
    try {
        const body = context.document.body;
        await context.sync();
        const paragraphs = body.paragraphs;
        paragraphs.load('items');
        context.load(paragraphs);
        await context.sync();
        console.log('1111', paragraphs.items.length);
        const para = paragraphs.items[0];
        await context.sync();
        console.log('2222');
        const cc = para.parentContentControlOrNullObject;
        await context.sync();
        console.log('3333');
        await context.sync();
        console.log('done');
    } catch (e) {
        console.log('Error: test', e);
        if (e instanceof OfficeExtension.Error) {
            console.log('Debug info: ' + JSON.stringify(e.debugInfo));
        }
    }
}

Это вывод:

enter image description here

Очевидно, что он успешен при первом запуске, но не во втором.

Подробноошибки следующие:

{
   [functions]: ,
   __proto__: { },
   code: "ItemNotFound",
   errorLocation: "ParagraphCollection.getItem",
   fullStatements: [ ],
   message: "ItemNotFound",
   statement: "var paragraph=paragraphs.getItem(...) /* originally getItem(...) */;",
   surroundingStatements: [ ],
   Symbol()_7.e7nkt729xmo: undefined,
   Symbol()_k.e7nkt729xt6: undefined,
   Symbol()_m.e7nkt729xt6: undefined,
   Symbol(Symbol._hidden)_l.e7nkt729xt6: undefined,
   Symbol(Symbol.observable)_n.e7nkt729xt6: undefined,
   Symbol(util.promisify.custom)_j.e7nkt729xt6: undefined
}

@ michael-zlatkovsky Не похоже, что это связано с Использование Paragraph вне потока Word.run

            const body = context.document.body;
            await context.sync();
            const paragraphs = body.paragraphs;
            paragraphs.load('items');
            context.load(paragraphs);
            await context.sync();
            console.log('xxxxxxxxxxx');
            const t = paragraphs.items[0].getRange();
            await context.sync();
            console.log('yyyyyyyyyyy');

Никогда не получаетдо yyyyyyyyyyy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...