2010-05-10 2 views
0

Je rencontre un problème très important lors de la copie d'un type de contenu personnalisé et de ses colonnes d'un site Web à un autre sur le même site. En gros, voici le code que j'ai:Copie par programme du type de contenu personnalisé et des colonnes d'un site Web à un autre

foreach (SPField field in existingWeb.Fields) 
{ 
    if (!destinationWeb.Fields.ContainsField(field.Title)) 
    { 
     destinationWeb.Fields.AddFieldAsXml(field.SchemaXml); 
     destinationWeb.Update(); 
    } 
} 

foreach (SPContentType existingWebCt in existingWeb.ContentType) 
{ 
    SPContentType newContentType = new SPContentType(existingWebCt.Parent, destinationWeb.ContentTypes, existingWebCt.Name); 
    foreach (SPFieldLink fieldLink in existingWebCt.FieldLinks) 
    { 
     SPField sourceField = existingWebCt.Fields[fieldLink.Id]; 
     if (destinationWeb.Fields.ContainsField(sourceField.Title)) 
     { 
      SPFieldLink destinationWebFieldLink = new SPFieldLink(destinationWeb.Fields[sourceField.Title]); 
      newContentType.FieldLinks.Add(destinationWebFieldLink); 
     } 
    } 
} 

existingWeb et destinationWeb sont 2 toiles dans le même site. Le code fonctionne bien. Mais le problème est que dans l'écran Type de contenu du site (dans les paramètres du site), lorsque je clique sur le lien de colonne personnalisée dans le type de contenu personnalisé, je suis une erreur en disant:

Invalid field name {UID}. 

L'UID est le même UID que la colonne personnalisée dans le site existant. J'ai vérifié avec mes paramètres Web après l'achèvement. Je peux voir la liste personnalisée (que j'ai créée avec un objet à tester), mais la colonne personnalisée a disparu de la vue (bien que les données réelles soient toujours là ... il suffit de cocher la case pour l'afficher) . Mais je pense que c'est moins important ... plus de fyi.

J'ai également reçu une variété d'exceptions différentes si je fais des copies incorrectes. Google n'a pas réussi à m'aider sur celui-ci.

Est-ce que quelqu'un sait ce qui me manque pour que ce lien fonctionne à nouveau?

Merci.

+0

avez-vous une faute de frappe dans votre code? Je pense qu'il devrait être foreach (SPContentType existingWebCt dans existingWeb.ContentTypes) et pas destinationWeb.ContentType – desigeek

+0

Oui ... désolé mon mauvais pour la faute de frappe. C'est mis à jour. – BeraCim

Répondre

0

Gary lapointe abordé la copie de type de contenu déjà, et il se trouve qu'il est un doozy: http://stsadm.blogspot.com/2007/08/copy-content-types.html

Check it out et voir s'il y a quelque chose que vous avez manqué

+0

J'ai essayé à nouveau. Le lien vers la colonne personnalisée dans le type de contenu de site personnalisé me donne toujours une erreur de nom de champ non valide. D'une certaine manière le lien ne lie pas à la colonne. – BeraCim

Questions connexes