Работа с содержимым страницы OneNote через API Graph - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть ряд проблем при работе с OneNote через график API.

Я понимаю, что OneNote использует не прямой HTML, и им нужно преобразовать его назад и вперед для API ... ноКазалось бы, это не такая уж сложная задача.

Я обрабатываю теги в содержимом, и мне нужно обновить элемент тега.Это хорошо, за исключением тех случаев, когда у меня есть список элементов (p или li) тегов, где есть отступы.

ОБНОВЛЕНО

Если в моем списке есть такие элементыonenote

У вас нет прав на встраивание изображения ... вот ссылка https://xomq6w.ch.files.1drv.com/y4mc-mJZRhkI5c_fvOAbHGOnzEKVNKgxTHLop-OHfNofncLcC2gUc_Z_aYi0sgrc3hxIxxWpnvwRFc7p-reL5mX8J5pp1ePaY0V2McibdocMTplud7lxcso0EwAGJpHpBkcyLbcsLxDUpoYZ9T5XgCCxxmfUwQhHFPFQdFscfQoDPp7ZA-vCNbErgqyz0FK7prVaeMjs8LpiftMKu6-Xcv7Rg?width=160&height=541&cropmode=none

Я нажал Graph API, чтобы получить контент со следующим URL-адресом через Graph API Explorer.

GET - https://graph.microsoft.com/beta/users/myname/onenote/pages/0-c9861926a1e8080518ca3750afa63800!1-2B303C571455A20B!102505/content?includeIDs=true

HTML-код, который возвращается, будет выглядеть следующим образом (обратите внимание, что отступов нет)

<body data-absolute-enabled="true" style="font-family:Calibri;font-size:11pt">
    <div id="div:{f115c5ea-0481-0f03-31aa-07b94321c323}{65}" style="position:absolute;left:264px;top:139px;width:624px">
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{67}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 1</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{74}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{71}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2a</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{73}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2b</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{76}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 3</p>
    </div>
</body>

И если я исправлю теу которых есть дочерние элементы, подобные этому, для установки идентификаторов (оставляя идентификатор там ... превращает его в постоянный идентификатор данных) для последующих обновлений или даже для закрытия тега:

PATCH - https://graph.microsoft.com/beta/users/myname/onenote/pages/0-c9861926a1e8080518ca3750afa63800!1-2B303C571455A20B!102505/content?includeIDs=true

[
  {
    'target':'p:{f115c5ea-0481-0f03-31aa-07b94321c323}{74}',
    'action':'replace',
    'content':'<p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{74}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2</p>'
  }
]

Обновление будетобработано, и затем содержимое будет обновлено до этого:

Изображение здесь: https://kw9psa.ch.files.1drv.com/y4mplcvzocTmhN9DZBpFt4Sic3AOpxe2Ik4r7VX_0Joxs5ay9woTUYZufKSr0ojcfwQckovsJv5__fSrDx1GqWK9cFa2yQ7uFPE8JQOBwPyYn6PQZHDMM4N9JB4IXF4Rs7dIDoqa0XYfjz93qGiI97Ais99l04QxWZyV1Og5eXRguUYlBoNTwXIuzFEbKZfA03mt_ynxXCjbM7CFHYP99_QgQ?width=160&height=134&cropmode=none

<body data-absolute-enabled="true" style="font-family:Calibri;font-size:11pt">
    <div id="div:{f115c5ea-0481-0f03-31aa-07b94321c323}{65}" style="position:absolute;left:264px;top:139px;width:624px">
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{67}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 1</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{71}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2a</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{73}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2b</p>
        <p id="p:{78cb2ca5-efec-4e6f-a763-12e9cac6a2b5}{2}" lang="en-US" data-tag="to-do" data-id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{74}" style="margin-top:0pt;margin-bottom:0pt">Item 2</p>
        <p id="p:{f115c5ea-0481-0f03-31aa-07b94321c323}{76}" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 3</p>
    </div>
</body>

То же самое по существу происходит с вложенными элементами ul / ol ... Я также попытался заменитьвесь список вместо отдельных элементов, но API вызывает ошибки без дополнительной информации.Вложенные маркированные списки также, похоже, теряют родительский маркер.

Я пытался пакетировать все обновления для всех элементов, делая по одному, меняя порядок.

Как ни странно, если я сделаю вставкутогда отступы и порядок текста сохраняются, но нет патча удаления / удаления для очистки старого текста ... например,

[
  {
    'target':'p:{56d579c0-1203-0224-0587-6fe03fb82539}{34}',
    'action':'insert',
    'position':'before',
    'content':'<p data-id="My_own_id" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 1</p>'
  },
  {
    'target':'p:{56d579c0-1203-0224-0587-6fe03fb82539}{34}',
    'action':'<tried replace or delete/remove hoping it was undocumented>',
    'content':'<tried blank or just a span>'
  }
]

Другие проблемы включают

  • потери таблицих свойства отображают линии сетки
  • теги без текста, который не возвращается или даже просто исчезает, если я обновлю любой текст на странице

Частичный ответ

Вот частичный ответ на проблему со списком без маркировки ... спасибо codeye за то, что он указал мне правильное направление.

Вставляя мой элемент перед существующим, он сохраняет порядок.

[
  {
    'target':'p:{20781e6d-ba99-4fca-9994-622720cad7f8}{249}',
    'action':'insert',
    'position':'before',
    'content':'<p data-id="test" data-tag="to-do" style="margin-top:0pt;margin-bottom:0pt">Item 2</p>'
  }
]

Затем удаляем старый со следующим, чтобы сохранить форматирование.И так как это пустой div, OneNote не добавляет элемент.

[
  {
    'target':'p:{20781e6d-ba99-4fca-9994-622720cad7f8}{249}',
    'action':'replace',
    'content':'<div></div>'
  }
]

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Решение для границ таблицы

При работе с таблицами используйте атрибут border вместо style.

API возвращает таблицу с границами как <table style="border:1px solid;border-collapse:collapse">...</table>.Используйте table.style.border, чтобы узнать, есть ли граница (это может быть 1px или 0px).Чтобы установить границу для таблицы, используйте атрибут border: <table border="1">...</table>.

Атрибут border для td будет игнорироваться.

0 голосов
/ 23 сентября 2018

Для конкретной проблемы со списком дел я могу подтвердить проблему, в которой элементы с отступом сдвигаются вверх и «отсоединяются» от обновляемого элемента.Похоже, что единственный надежный способ обновить список с отступами - это заменить весь список (аналогичное ограничение накладывается на таблицы).В вашем примере все 5 абзацев, кажется, необходимо обновить, чтобы сохранить выравнивание.Если это не сработает, попробуйте заменить окружающий div

 [
      {
        'target':'div:{9dfa7be6-2de0-b802-01ae-20c164255f9d}{30}',
        'action':'replace',
        'content':'<div><p data-tag="to-do">Item 1</p>
                   <div><p data-tag="to-do">Item 2</p>
                        <ul>
                           <p data-tag="to-do:completed">Item 2a</p>
                           <p data-tag="to-do:completed">Item 2b</p>
                       </ul>
                   <div><p data-tag="to-do">Item 3</p>
                   <div><p data-tag="to-do">Item 4</p>
                  </div>'
      }    
]

Что касается удаления элемента, то ниже должно работать

[{
      'target': 'p:{f5837c83-d816-4337-ab6d-a52abde869a6}{13}',
      'action': 'replace',
      'content': '<br/>'
    }]

Это не будет работать в середине спискакак вы получите вертикальный разрыв.

...