Идентификатор документа не задан в типе контента при сохранении из клиента Office

У меня есть проблема, с которой я боролся в течение длительного времени. Эта проблема проявляется в тестовой среде, но не в моей среде разработки.

У меня есть шаблон библиотеки документов. В обработчике событий я присоединяю несколько типов контента (все они наследуются от базового типа контента, который, в свою очередь, наследуется от Document). Базовый тип контента имеет настраиваемый шаблон документа и обработчики событий, определенные в xmldocuments в определении типа контента.

На сайте включена функция Doc-ID.

При загрузке файла в библиотеку документов документу присваивается идентификатор документа, как и ожидалось. Однако при сохранении файла из Word идентификатор документа остается пустым. По-видимому, значение установлено для элемента, потому что при последующем изменении типа содержимого элемента doc-ID появляется с номером, указывающим, что он был присвоен при первом сохранении файла. При возврате исходного значения для типа содержимого идентификатор документа остается отображаемым в представлении.

Чтобы уточнить: это не поле идентификатора типа контента Item, а идентификатор документа, который создается функцией идентификатора документа в SharePoint 2010.

Любые идеи, почему это значение не устанавливается при продвижении значений из Word?


person Øyvind Skaar    schedule 25.01.2012    source источник


Ответы (1)


Похоже, решение кроется в базовом типе контента Document в семействе сайтов. Когда функция идентификатора документа активирована, обработчики событий добавляются в определение типа контента как xmldocuments. Когда создается обычная библиотека документов, тип контента в библиотеке наследуется от этого типа контента и, таким образом, получает копию приемников событий. Моя пользовательская библиотека документов с пользовательскими типами контента наследовала не от типа контента документа семейства веб-сайтов, а от базового типа контента документа (0x0101) и не получала копии приемников событий. Копирование xmldocuments в мой базовый тип контента, кажется, помогает.

<XmlDocuments>
        <XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/events">
          <spe:Receivers xmlns:spe="http://schemas.microsoft.com/sharepoint/events">
            <Receiver>
              <Name>Document ID Generator</Name>
              <Synchronization>Synchronous</Synchronization>
              <Type>10001</Type>
              <SequenceNumber>1000</SequenceNumber>
              <Assembly>Microsoft.Office.DocumentManagement, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
              <Class>Microsoft.Office.DocumentManagement.Internal.DocIdHandler</Class>
              <Data>
              </Data>
              <Filter>
              </Filter>
            </Receiver>
            <Receiver>
              <Name>Document ID Generator</Name>
              <Synchronization>Synchronous</Synchronization>
              <Type>10002</Type>
              <SequenceNumber>1001</SequenceNumber>
              <Assembly>Microsoft.Office.DocumentManagement, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
              <Class>Microsoft.Office.DocumentManagement.Internal.DocIdHandler</Class>
              <Data>
              </Data>
              <Filter>
              </Filter>
            </Receiver>
            <Receiver>
              <Name>Document ID Generator</Name>
              <Synchronization>Synchronous</Synchronization>
              <Type>10004</Type>
              <SequenceNumber>1002</SequenceNumber>
              <Assembly>Microsoft.Office.DocumentManagement, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
              <Class>Microsoft.Office.DocumentManagement.Internal.DocIdHandler</Class>
              <Data>
              </Data>
              <Filter>
              </Filter>
            </Receiver>
            <Receiver>
              <Name>Document ID Generator</Name>
              <Synchronization>Synchronous</Synchronization>
              <Type>10006</Type>
              <SequenceNumber>1003</SequenceNumber>
              <Assembly>Microsoft.Office.DocumentManagement, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>
              <Class>Microsoft.Office.DocumentManagement.Internal.DocIdHandler</Class>
              <Data>
              </Data>
              <Filter>
              </Filter>
            </Receiver>
          </spe:Receivers>
        </XmlDocument>
      </XmlDocuments>
person Øyvind Skaar    schedule 07.02.2012
comment
Привет, у меня похожий сценарий: у меня есть один ctype CT1, который наследуется от страницы ctype, другой ctype CT2 наследуется от CT1, а еще один CT3 наследуется от CT2, что означает: page-›ct1-›ct2-›ct3. Я импортировал их xml из cksdev, который добавил вышеуказанные приемники событий ко всем ctypes, то есть ct1, ct2 и ct3. Я пробовал все комбинации, такие как удалить EH со всех, добавить ко всем и так далее. но во всех случаях я не получаю docid, сгенерированный для страниц, созданных из макета страницы, созданного с использованием ct3, даже не могу увидеть свойство docid для макета страницы при просмотре в spdesigner (функция docid активирована) .. помогите .. вы можете сделать .. - person vikas mehta; 24.04.2012
comment
Похоже, эта функция действительно не предназначена для разработчиков. Наилучшим путем может быть создание ваших типов контента во время выполнения с кодом, используя базовый документ ct в каждой библиотеке в качестве основы. - person Øyvind Skaar; 03.05.2012