2011-12-09 3 views
2

J'ai un problème lors de l'insertion de nouveaux enregistrements dans une liste SharePoint qui peut contenir des éléments de plusieurs types de contenu lors de l'utilisation de Linq2SharePoint.Insertion LinqToSharepoint dans la liste avec plusieurs types de contenu

Ma liste et ses types de contenu sont créés par une fonction et dans le cas où les liaisons de type de contenu du récepteur sont créées pour un certain nombre de types de contenu. Il s'agit en fait d'un arbre de types héritant l'un de l'autre qui dérivent tous d'un type de contenu personnalisé qui lui-même dérive du type de contenu intégré de l'élément.

Mon contexte de données est généré par SPMetal, puis une couche de référentiel est créée à l'aide de modèles T4 personnalisés. Je n'utilise pas Linq2SharePoint pour accéder aux listes nommées, mais plutôt pour créer des référentiels pour les types de contenu. En effet, comme la liste en question peut être créée dans n'importe quel SPWeb en activant la fonctionnalité, elle n'existe pas au moment de la compilation, elle est donc inconnue du contexte de données. Sur MSDN, il est expliqué que pour gérer les listes de plusieurs types de contenu, SPMetal génère le contexte de données pour utiliser le type de contenu de base le plus proche pour une liste de cette nature. Voir la section 'Générer des types de contenu' ici http://msdn.microsoft.com/en-us/library/ff798478.aspx

Sur cette base, j'accède à la liste en utilisant le type de contenu de base. Par exemple en supposant que la hiérarchie de type contenu suivant:

Item 
    Foo : Item 
    BlueFoo : Foo 
    RedFoo : Foo 
     BrightRedFoo : RedFoo 
     DarkRedFoo : RedFoo 
    GreenFoo : Foo 

Ensuite ma liste peut contenir des éléments de l'un des types de contenu XXXFoo et d'y accéder le contexte de données utilise un EntityList<Foo>. Ceci fonctionne parfaitement pour lire les éléments de la liste, bien qu'ils soient tous de type Foo plutôt que leurs types dérivés (bien que ce ne soit pas un problème car l'utilisation de certains jiggery implique une extension ICustomMapping à Item pour accéder au champ de type de contenu masqué la couche de référentiel générée peut également accéder au SPListItem sous-jacent et à la fusion descendante vers le type dérivé si nécessaire).

Le problème se pose lorsque j'essaie d'écrire un élément dans la liste. J'ai d'abord essayé de créer une EntityList spécifique à cet effet, par ex. EntityList<RedFoo> mais cela a provoqué une exception. Alors j'ai ajouté le type Foo aux types de contenu Lists et j'ai essayé d'ajouter un élément en utilisant un EntityList<Foo> mais cela provoque la même exception.

L'exception est la même dans les deux cas et le message d'erreur est "Les colonnes associées aux mappages ont été supprimées/renommées". Une recherche de Google pour cela trouve juste le bonhomme heureux qui a rencontré ce message, (omourad.blogspot.com/2010/06/columns-associated-with-mappings-have.html), mais son problème était incorrectement nommant sa liste. Ce n'est pas mon problème.

Après quelques heures de recherche sur le WWW, je trouve très peu de discussion sur les SPLists avec plusieurs types de contenu et pratiquement rien concernant Linq et ce problème. Il ya ceci sur CodePlex http://sporm.codeplex.com/ mais il a 0 téléchargements et a été silencieux depuis 2009 ...

J'ai essayé d'accéder directement du contexte de données plutôt qu'utilisant la couche de référentiel pour m'assurer que le problème n'est pas dans mon code . J'ai régénéré le contexte de données à partir d'un site Web avec la fonctionnalité activée afin que je puisse être certain qu'il n'est pas désynchronisé.

Ai-je raté quelque chose? Est-ce que c'est corrigé par une mise à jour cumulative que j'ai ratée? Sûrement je ne suis pas la seule personne qui a essayé de faire cela? Je me sens presque aussi seul que lorsque vous avez un problème et la seule référence en ligne que vous pouvez trouver est une question StackOverflow tumbleweed. Il doit y avoir quelqu'un là-bas qui peut arrêter cette question tumbleweed propre?

+0

Bonjour Rob, Pourriez-vous nous expliquer comment vous avez résolu le problème de Foo? Je suis confus sur la façon dont vous êtes supposé modéliser ceci dans L2SP et il semble que vous l'ayez résolu "en utilisant un peu de jiggery". En ce qui concerne votre problème de type, j'ai réussi à ajouter un sous-type à la liste des types de base. Quelle exception cela lance-t-il lorsque vous essayez? –

+0

Voici un lien vers une question à ce sujet J'ai publié une offre http://stackoverflow.com/questions/9386437/linq-to-sharepoint-multiple-content-types-for-a-single-list –

+0

Bonjour Jason. J'ai posté une explication de et un exemple de code pour utiliser ICustomMapping pour fournir le "jiggery" nécessaire pour pouvoir résoudre le type dérivé d'une entité de base L2SP sur votre autre question. J'espère que cela aide. En ce qui concerne mes problèmes avec l'insertion via L2SP, je n'ai pas tellement corrigé ces derniers qu'ils étaient heureux de les voir disparaître lorsque nous avons apporté quelques modifications à nos ContentTypes. Après beaucoup de fouilles, il y a certainement une petite incohérence dans la mise en œuvre de l'attribut Inherits en 2010, bien qu'il ne serait pas juste d'exclure entièrement ma propre contribution inepte;) – robwilliams

Répondre

0

[Insérer une image de Tumbleweed ici]

Je n'ai pas une réponse claire à cette question en apparence, il est pas vraiment un problème, ou du moins la manifestation que j'avais été qu'un symptôme. Ou peut-être que je n'ai pas de réponse claire car il n'y a pas de réponses claires dans le monde SharePoint où il est apparemment tout à fait acceptable de dire "Ne fais pas X" ou "Tu dois faire Y" sans vraiment pouvoir expliquer ou justifier il. Dans cet esprit, je dirais les généralisations inappropriées suivantes non prises en charge:

N'utilisez pas les attributs 'Inherits' ou 'Overwrite' sur ContentTypes.

Ils sonnent bien. Les docs ont l'air bien. La fonctionnalité serait fabuleuse pour des choses comme se débarrasser de ce champ "Titre" ennuyeux, mais en vérité, ils ne semblent tout simplement pas fonctionner. Je ne sais pas pourquoi, et j'imagine que l'équipe SharePoint ne me donne pas le meilleur d'elle-même, c'est qu'une erreur est survenue. Veuillez réessayer »ou une autre. Ce que je sais, c'est sans ces deux attributs et les effets hautement souhaitables qu'ils confèrent tout fonctionne beaucoup mieux.

Questions connexes