2009-08-18 19 views
6

¿Cómo puedo agregar un campo de búsqueda a un tipo de contenido en sharepoint usando la definición xml? (Recibo errores).Agregue un campo de búsqueda a un tipo de contenido en sharepoint

Puntos a tener en cuenta: - La lista de búsqueda existirá cuando el tipo de contenido se agregue a la biblioteca de documentos. - La lista de búsqueda siempre tendrá el mismo nombre. : la lista de búsqueda tiene un espacio en el nombre.

Esto es lo que he añadido a la xml:

<Field ID="{GUID}" 
     Type="Lookup" 
     List="$Resources:core,lists_Folder;/List%20Name" 
     ShowField="Title" 
     Name="MyLookupFieldName" 
     DisplayName="MyLookupFieldName" 
     StaticName="MyLookupFieldName" 
     Hidden="FALSE" 
     Required="FALSE" 
     Sealed="TRUE" 
     > 

Cuando a continuación, añadir programáticamente el tipo de contenido a una biblioteca de documentos consigo una excepción (sin información útil), y se registra el siguiente al registro sharepoint:

18/08/2009 17: 13: 39.50 w3wp.exe (0x08B8) 0x11B0 Base de datos de Windows SharePoint Services 6f8g Inesperado Error inesperado en la ejecución de consultas, código de error 8114. Se incluye información de error adicional de SQL Server a continuación . "Error al convertir el tipo de datos nvarchar a uniqueidentifier". Texto de consulta (si está disponible): "{? = Call proc_GetListMetaDataAndEventReceivers (?,?,?,?,?,?)}"

+0

¿Cómo es el XML? Parece que se eliminó cuando lo publicó – Yuliy

+0

... ... ... ¿Qué más quieren ver? – zikoziko

Respuesta

2

El problema es que debe hacer referencia al GUID de la lista, no a su título. Como probablemente no sabrá el GUID de la lista, no podrá hacerlo sin ejecutar un código personalizado después.

Incluso si no está utilizando VSeWSS, los últimos pasos en la publicación de dahlbyk se han vinculado para mostrarle cómo hacerlo. Chris O'Brien se ha tomado la molestia de hacer un CodePlex project que lo ayudará si no está usando VSeWSS.

+0

No es necesario agregar una referencia al GUID de la lista. Agregar una referencia al título de la Lista como se muestra en Ahmed, su muestra XML también es perfectamente válida y resuelve el problema "No sé el GUID de golpe". –

1

Ok, así que no pude obtener la definición xml de un campo para un tipo de contenido que funcione para mí por algún motivo. Descubrí cómo hacerlo en código. La solución que funcionó para mí es no añadir la definición del campo en XML, en lugar de añadirlo en código:

  • Agregar el tipo de contenido a la lista (en el código de definición de sitio, o donde sea).
  • Agregue una búsqueda de campo al campo SPWeb dado (¿entonces el campo es un campo web? En lugar de un campo de sitio)
  • Agregue un nuevo enlace de campo al tipo de contenido de la lista.
  • Actualiza el tipo de contenido.

Por ejemplo:

SPContentType myContentType = myWeb.Site.RootWeb.ContentTypes["MyContentType "]; 
myLib.ContentTypes.Add(myContentType); 

myContentType = myLib.ContentTypes["MyContentType "]; 

myWeb.Fields.AddLookup("MyLookupFieldName", myWeb.Lists["MyLookupListName"].ID, false); 
SPFieldLink myFIeldLink = new SPFieldLink(myWeb.Fields["MyLookupFieldName"]); 
myContentType.FieldLinks.Add(myFIeldLink); 
myContentType.Update(); 
9

Por suerte, en SharePoint 2010, puede hacerlo de forma declarativa esto fijando todos properities requeridos como se muestra en el siguiente ejemplo de trabajo.

<Field Type="Lookup" DisplayName="Link Type" Description="Represents link type." 
Required="TRUE" EnforceUniqueValues="FALSE" List="Lists/Links Types" WebId="~sitecollection" 
Overwrite="TRUE" PrependId="TRUE" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE" 
Group="Research Links Columns" ID="{a15e9fa2-4ea0-41f1-a583-b21d53cf72d3}" 
SourceID="{30650f6f-fbb8-4acc-a935-29745f5d3c59}" StaticName="Link_x0020_Type" 
Name="Link_x0020_Type" Hidden="FALSE" ReadOnly="FALSE"></Field> 

Es importante establecer WebID a tener un valor de "~ sitecollection" y ajuste de sobrescritura para ser verdad.
More info

+0

Impresionante, probé todo lo demás-- esto funcionó para mí. ¡Gracias! –

+0

En lugar de usar WebId = "~ sitecollection", también puede consultar directamente el nombre de un subsitio que contiene la lista con la que desea vincular su campo de búsqueda. –

+0

¿Puede el campo de búsqueda establecerse para referir la misma lista de la que forma parte? –

Cuestiones relacionadas