Sharepoint 2010 - Adding sample data to a user field type

Hi members of StackOverflow!

I have my own custom list in Visual Studio (via XML). I created a list definition (with content type) and added an instance of the list to it.

Here is the .xml outline of my list:

<?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> 

and elements.xml with a list template and content type:

 <?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> 

Question: how to add sample data to this list? Especially in a field like "User"?

I tried to add this code to the list instance element as follows:

 <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> 

, but an error occurs: Error during deployment phase “Activate functions”: at least one field type is not set correctly. Any help for his work with the dialogue would be greatly appreciated.

+4
source share
3 answers

A User field is a special type of search field. Thus, the text value is presented in the format ID;#TextValue . Indeed, this is only an identifier that is important. The value is largely ignored. This can be a problem because when the username is always the same, the identifier that represents this user will change from a site collection to a site collection.

Your XML string should look something like this:

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

You said that this is being deployed to an existing site, so you can go to the user information page for CONTOSO \ joses. The identifier will be in the query string of the URL. But keep in mind that even if a function works on this site, there is no guarantee that this function will work on other site collections.

To avoid this problem, instead of sowing an instance of a list using XML, I usually use Feature Receiver to pre-populate lists with User fields. I prefer EnsureUser because it will add the user to the site if the user does not already exist.

+6
source

This will also work:

 <Field Name="Employee">-1;#CONTOSO\joses</Field> 
+3
source

In SharePoint 2013, using -1; # to populate a column of type User is less error prone.

If you are mistaken or provide a non-existent user:

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

Record NOT created.

Explicitly specifying an identifier can result in the assignment of an existing group or user and can be much more difficult to debug. Especially if you also provided a value for the ID column:

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

The answers of Rich and Jonathan are correct, they just wanted to clarify and could not comment because of their low reputation.

+1
source

All Articles