OneNote API: запрос PATCH для самого верхнего объекта

Я пытаюсь понять, как обновить свою страницу - мне всегда нужно заменять все внутри тега <body>.

OneNote API говорит:

Следующие элементы не поддерживают никаких действий PATCH: - img или object (абсолютно позиционированный) - meta, head - tr, tda, span, любые теги стиля

Примечание. Абсолютно позиционированные элементы div, img или object являются прямыми дочерними элементами тела страницы, которые определяют style = position: absolute.

Хорошо, это ясно. Поэтому я не могу заменить <object>, у которого нет идентификатора, потому что в противном случае он либо должен быть частью <div> с идентификатором, либо принадлежать самому верхнему div.

Вот содержание моей страницы:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
    <title>image and PDF 2</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body data-absolute-enabled="true" style="font-family:Calibri;font-size:11pt">
    <div id="div:{cfaf2831-c9e3-4b68-99ac-c4fc0bac0937}{32}" data-id="_default" style="position:absolute;left:48px;top:120px;width:624px">
        <p id="p:{cfaf2831-c9e3-4b68-99ac-c4fc0bac0937}{38}" style="margin-top:2.8pt;margin-bottom:2.8pt"> SOME TEXT HERE <br />
        </p>
        <object data-attachment="pdf-sample.pdf" type="application/pdf" data="https://www.onenote.com/api/v1.0/me/notes/resources/0-3329938c15524891836ef46f570c17ce!1-6481EB8A1188E91C!389/$value" />
        <img id="img:{cfaf2831-c9e3-4b68-99ac-c4fc0bac0937}{42}" alt="Image" src="https://www.onenote.com/api/v1.0/me/notes/resources/0-dfd3e39146d4425b974a71479787845f!1-6481EB8A1188E91C!389/$value" data-src-type="image/jpeg" data-fullres-src="https://www.onenote.com/api/v1.0/me/notes/resources/0-dfd3e39146d4425b974a71479787845f!1-6481EB8A1188E91C!389/$value" data-fullres-src-type="image/jpeg" />
        <object data-attachment="_SaferoomTestDOC.doc" type="application/msword" data="https://www.onenote.com/api/v1.0/me/notes/resources/0-07e77c13690247e88afcd20af3b45a12!1-6481EB8A1188E91C!389/$value" />
    </div>
  </body>
</html>

Теперь, если я хочу заменить изображение выше (<img>), мне это нравится:

 {
'target':'img:{cfaf2831-c9e3-4b68-99ac-c4fc0bac0937}{42}',
'action':'replace',
'content':'<img src="NEW IMAGE" alt="NEW IMAGE" />'

},

Но как мне заменить объект, который в моем случае является документом PDF или Word? А как заменить весь <body>?

P.S. Я пробовал обернуть <object> объектные теги в div, теги <div> удаляются при загрузке.

P.P.S. Мне всегда нужно заменять весь контент внутри тела, а также все объекты и изображения.


person ilia510    schedule 27.05.2016    source источник


Ответы (2)


Но как мне заменить объект, который в моем случае является документом PDF или Word? А как заменить целиком?

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

POST https://www.onenote.com/api/v1.0/me/notes/pages
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
Authorization: Bearer {token}

---------------------------acebdf13572468
Content-Disposition:form-data; name="Presentation"
Content-Type:text/html

<!DOCTYPE html>
<html>
  <head>
    <title>A page with rendered images and an attached file</title>
    <meta name="created" content="2016-05-30T07:30:00-08:00" />
  </head>
  <body>
    <p>Here's an image from an <i>online source</i>:</p>
    <img src="http://png-4.findicons.com/files/icons/2795/office_2013_hd/2000/onenote.png" alt="an image on the page" width="500" />
    <p>Here's an image uploaded as <b>binary data</b>:</p>
    <img src="name:imageBlock1" alt="an image on the page" width="300" />
    <p>Here's a file attachment:</p>
    <object data-attachment="doc1.docx" data="name:fileBlock1" type="application/docx" />
  </body>
</html>

---------------------------acebdf13572468
Content-Disposition: form-data; name="imageBlock1"; filename="wdIcon.jpg"
Content-Type: image/jpeg

<@INCLUDE *C:\users\username\desktop\wdIcon.jpg*@>
---------------------------acebdf13572468
Content-Disposition: form-data; name="fileBlock1"; filename="doc1.docx"
Content-Type: application/msword

<@INCLUDE *C:\users\username\desktop\doc1.docx*@>
---------------------------acebdf13572468—
person Fei Xue - MSFT    schedule 30.05.2016
comment
Хм .. звучит разумно. Вкратце мой код должен работать так: 1. Получить текущую страницу. 2. Позвольте пользователю редактировать его так, как он хочет. 3. Удалите старую страницу. 4. Создайте новую страницу с изменениями, внесенными пользователем. Тогда она изменит идентификатор страницы, верно? и это означает, что любые ссылки, которые у меня были на эту страницу с использованием идентификатора страницы, с этого момента не будут работать? - person ilia510; 30.05.2016
comment
Это зависит от того, хотите ли вы старого содержимого страницы. Если вы хотите создать новую страницу, обратитесь к старой странице. Вы можете получить информацию о текущей странице и создать новую страницу по своему усмотрению. И если вы хотите сохранить старую страницу, вам не нужно ее удалять. И все ссылки, которые вы сделали на новой странице, будут доступны после создания страницы. - person Fei Xue - MSFT; 31.05.2016

Чтобы заменить все тело (технически только первый непосредственный дочерний div тега body), используйте:

{
 'target':'body',
 'action':'replace',
 'content':'your new page content'
}
person DipakBoyed    schedule 03.06.2016
comment
Я не думаю, что это возможно. Проверьте страницу: dev.onenote.com/docs#/reference/patch- pages В нем говорится, что ‹body› = первый div на странице, который, в свою очередь, имеет position: absolute и действие REPLACE для него не поддерживается. - person ilia510; 04.06.2016