Sharepoint 2010 - Добавление образца данных в тип поля пользователя - PullRequest
4 голосов
/ 17 августа 2011

Привет, участники StackOverflow!

У меня есть собственный список в Visual Studio (через XML). Я создал определение списка (с типом содержимого) и добавил к нему экземпляр списка.

Вот схема.xml моего списка:

<?xml version="1.0" encoding="utf-8"?>
<List xmlns:ows="Microsoft SharePoint" Title="Teams" EnableContentTypes="TRUE"  FolderCreation="FALSE" Direction="$Resources:Direction;" Url="Lists/Teams" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/">
 <MetaData>
<ContentTypes>
  <ContentTypeRef ID="0x010089E3E6DB8C9B4B3FBB980447E313DE94" />
</ContentTypes>
<Fields>
  <Field Type="User" Name="Employee" DisplayName="Employee" Required="TRUE" ID="{7B18E941-BAAD-453A-895C-39579AB5A9F1}"  Group="Sample Group" />
  <Field Type="Boolean" Name="Manager" DisplayName="Manager" ID="{9FC927CC-45EB-4E9E-8F25-18AAEDF7DCAF}"  Group="Sample Group" />
</Fields>
<Views>
  <View BaseViewID="0" Type="HTML" MobileView="TRUE" TabularView="FALSE">
    <Toolbar Type="Standard" />
    <XslLink Default="TRUE">main.xsl</XslLink>
    <RowLimit Paged="TRUE">30</RowLimit>
    <ViewFields>      
      <FieldRef  Name="Employee" />
      <FieldRef  Name="Manager" />
    </ViewFields>
    <Query>
      <OrderBy>
        <FieldRef Name="Modified" Ascending="FALSE"></FieldRef>
      </OrderBy>
    </Query>
    <ParameterBindings>
      <ParameterBinding Name="AddNewAnnouncement" Location="Resource(wss,addnewitem)" />
      <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
      <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_ONET_HOME)" />
    </ParameterBindings>
  </View>
  <View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" Url="AllItems.aspx">
    <Toolbar Type="Standard" />
    <XslLink Default="TRUE">main.xsl</XslLink>
    <RowLimit Paged="TRUE">30</RowLimit>
    <ViewFields>
      <FieldRef Name="LinkTitle"></FieldRef>     
      <FieldRef  Name="Employee" />
      <FieldRef  Name="Manager" />
    </ViewFields>
    <Query>
      <OrderBy>
        <FieldRef Name="ID"></FieldRef>
      </OrderBy>
    </Query>
    <ParameterBindings>
      <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
      <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
    </ParameterBindings>
  </View>
</Views>
<Forms>
  <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
  <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
  <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
</Forms>

и elements.xml с шаблоном списка и типом контента:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- Do not change the value of the Name attribute below. If it does not match the folder name of the List Definition project item, an error will occur when the project is run. -->
<ListTemplate
    Name="TeamList"
    Type="10000"
    BaseType="0"
    OnQuickLaunch="TRUE"
    SecurityBits="11"
    Sequence="410"
    DisplayName="TeamList"
    Description="My List Definition"
    Image="/_layouts/images/itgen.png">

</ListTemplate>
<ContentType
    ID="0x010089E3E6DB8C9B4B3FBB980447E313DE94"
    Name="Team Member"
    Group="Sample Group"
    Description=""
    Version="0">
    <FieldRefs>
      <FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" Hidden="TRUE" />
      <FieldRef ID="{7B18E941-BAAD-453A-895C-39579AB5A9F1}" />
      <FieldRef ID="{9FC927CC-45EB-4E9E-8F25-18AAEDF7DCAF}" />
    </FieldRefs>
</ContentType>

<Field Type="User" Name="Employee" DisplayName="Employee" Required="TRUE" ID="{7B18E941-BAAD-453A-895C-39579AB5A9F1}"  Group="Sample Group" />
<Field Type="Boolean" Name="Manager" DisplayName="Manager" ID="{9FC927CC-45EB-4E9E-8F25-18AAEDF7DCAF}"  Group="Sample Group" />

</Elements>

Вопрос: как добавить пример данных в этот список? Особенно в поле типа "Пользователь"?

Я пытался добавить этот код в элемент экземпляра списка следующим образом:

<ListInstance Title="TeamList"
            OnQuickLaunch="TRUE"
            TemplateType="10000"
            Url="Lists/TeamList"
            Description="TeamList">
  <Data>
      <Rows>
          <Row>
              <Field Name="Employee">CONTOSO\joses</Field>
              <Field Name="Manager">true</Field>
          </Row>
      </Rows>
  </Data>

но возникает ошибка: Произошла ошибка на этапе развертывания «Активировать компоненты»: по крайней мере один тип поля не установлен должным образом. Любая помощь, чтобы заставить его работать с диалогом была бы очень признательна.

Ответы [ 3 ]

6 голосов
/ 18 августа 2011

A Пользователь поле - это особый тип поля поиска.Таким образом, текстовое значение представляется в формате ID;#TextValue.И действительно, важен только идентификатор.Значение в значительной степени игнорируется.Это может быть проблемой, потому что, хотя имя пользователя всегда будет одинаковым, идентификатор, представляющий этого пользователя, изменится с семейства сайтов на семейство сайтов.

Ваша строка XML должна выглядеть примерно так:

<Data>
  <Rows>
      <Row>
          <Field Name="Employee">99;#CONTOSO\joses</Field>
          <Field Name="Manager">true</Field>
      </Row>
  </Rows>
</Data>

Вы сказали, что это развертывается на существующем сайте, поэтому вы можете перейти на страницу информации о пользователе для CONTOSO \ joses.Идентификатор будет в строке запроса URL.Но имейте в виду, что даже если функция работает на этом сайте, нет гарантии, что эта функция будет работать в других семействах сайтов.

Чтобы избежать этой проблемы, вместо заполнения экземпляра списка с использованием XML, я обычно будуиспользуйте Feature Receiver для предварительного заполнения списков пользовательскими полями.Я предпочитаю EnsureUser , потому что он добавит пользователя на сайт, если пользователь еще не существует.

3 голосов
/ 11 июня 2012

Это также будет работать:

<Field Name="Employee">-1;#CONTOSO\joses</Field>
1 голос
/ 24 сентября 2015

В SharePoint 2013 использование -1; # для заполнения столбца типа Пользователь менее подвержено ошибкам.

Если вы ошиблись или указали несуществующего пользователя:

<Field Name="Employee">-1;#domain\nonexistent account or misspelled</Field>

Запись НЕ создана.

Явное указание идентификатора может привести к назначению существующей группы или пользователя и может быть намного сложнее для отладки. Особенно, если вы также указали значение для столбца ID:

<Field Name="ID">1</Field>
<Field Name="Employee">1;#domain\nonexistent account or misspelled</Field>

Ответы Рича и Джонатана верны, они просто хотели уточнить и не могли комментировать из-за низкой репутации.

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