Erreur : Le champ sélectionné est un champ obligatoire et ne peut pas être supprimé<\/A> ? Je me gratte la tête, me demandant comment j'ai vérifié "Field IsRequired". La solution officielle, exporter la classe d'entités vers une autre classe d'entités et faire un peu de magie de mappage de champs, puis supprimer l'original, importer celui modifié......non. Voyez-vous, toutes mes classes d'entités sont intégrées dans une géodatabase d'entreprise avec toutes sortes de dépendances et de relations (c'est un peu le but d'une géodatabase d'entreprise, non ?). <\/P><\/P>
Il existe une manière plus rapide et plus simple de résoudre ce problème. Je passe beaucoup de temps à éditer les métadonnées dans leur XML natif (plus rapide, et je peux automatiser les choses plus facilement), alors pourquoi ne pas éditer une définition de classe d'entités, qui est aussi en XML ? Les définitions des classes d'entités vivent dans une colonne XML (Definition) dans la table GDB_ITEMS. <\/P>
<\/P>
<\/P>
Cliquez sur le xml dans la colonne definition, et vous verrez le schéma brut pour la classe d'entités. Cherchez le nom de l'attribut qui prétendument ne vous laisse pas le supprimer : <\/P>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>GPFieldInfoEx<\/SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:<\/SPAN>type<\/SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/SPAN><SPAN class="punctuation token">"<\/SPAN>typens:GPFieldInfoEx<SPAN class="punctuation token">"<\/SPAN><\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>ModelName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>ModelName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/PAN>FieldType<\/PAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>esriFieldTypeGUID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/PAN>FieldType<\/PAN><span class='punctuation token'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation token'></</span>IsNullable</span><span class='punctuation token'>></span></span>false<span class='token tag'><span class='token tag'><span class='punctuation token'></</span>IsNullable</span><span class='punctuation token'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation token'><</span>Required</span><span class='punctuation token'>></span></span>true<span class='token tag'><span class='token tag'><span class='punctuation token'></</span>Required</span><span class='punctuation token'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation token'><</span>Editable</span><span class='punctuation token'>></span></span>false<span class='token tag'><span class='token tag'><span class='punctuation token'></</span>Editable</span><span class='punctuation token'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation token'></</span>GPFieldInfoEx</span><span class='punctuation token'>></span></span><span class='line-numbers-rows'><span><<EMOJI_0>></span><span><<EMOJI_1>></span><span><<EMOJI_2>></span><span><<EMOJI_3>></span><span><<EMOJI_4>></span><span><<EMOJI_5>></span><span><<EMOJI_6>></span><span><<EMOJI_7>></span></span>
Notez la balise Required. Ok, nous avons identifié ce qui cause le problème, maintenant, comment le résoudre. Mettre à jour du XML dans SQL est assez simple, si vous remplacez toute la chaîne.<\/strong> Mettre à jour des nœuds et éléments spécifiques dans SQL est un peu plus délicat (mais possible). Dans le code ci-dessous, notez le =N' avant la définition xml. J'ai omis beaucoup d'autres xml, mais ce que j'ai fait c'est copier la définition XML entière<\/strong> et l'ai collée après le =N'. Il y a un ' à la fin. Notez aussi le WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT' qui limite la mise à jour à cette seule classe d'entités avec l'attribut supposément indélébile.<\/Span><\/p><\/>UPDATE [dbo].[GDB_ITEMS]
SET [Definition] =N'<Span class=\"token tag\"><Span class=\"token tag\"><Span class=\"punctuation token\"><<\/>DEFeatureClassInfo<\/><Span class=\"attr-name token\"><Span class=\"namespace token\">xmlns:<\/>xsi<\/><Span class=\"attr-value token\"><Span class=\"punctuation token\">=<\/><Span class=\"punctuation token\">"<\/><A class=\"jive-link-external-small\" href=\"https:\/\/community.esri.com\/external-link.jspa?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance\" target=\"_blank\">http:\/\/www.w3.org\/2001\/XMLSchema-instance<\/><Span class=\"punctuation token\">"<\/><Span class=\"attr-name token\"><Span class=\"namespace token\">xmlns:<\/>xs<\/><Span class=\"attr-value token\"><Span class=\"punctuation token\">=<\/><Span class=\"punctuation token\">"<\/><A class=\"jive-link-external-small\" href=\"https:\/\/community.esri.com\/external-link.jspa?url=http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema\" target=\"_blank\">http:\/\/www.w3.org\/2001\/XMLSchema<\/><Span class=\"punctuation token\">"<\/><Span class=\"attr-name token\"><Span class=\"namespace token\">xmlns:<\/>typens<\/><Span class=\"attr-value token\"><Span class=\"punctuation token\">=<\/><Span class=\"punctuation token\">"<\/><A class=\"jive-link-external-small", class="token tag"><SPAN class="punctuation token"><<\/SPAN>OIDFieldName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>OBJECTID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>OIDFieldName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>\n\n\nblabla blabla\n\n <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>GPFieldInfoEx<\/SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:<\/SPAN>type<\/SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/SPAN><SPAN class="punctuation token">"<\/SPAN>typens:GPFieldInfoEx<SPAN class="punctuation token">"<\/SPAN><\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>\n <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>\n <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>ModelName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/Span>ModelName<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>FieldType<\/span><span class="punctuation token">><\/span><\/span>esriFieldTypeGUID<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>FieldType<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>IsNullable<\/span><span class="punctuation token">><\/span><\/span>true<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>IsNullable<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>GPFieldInfoEx<\/span><span class="punctuation token">><\/span><\/span>\n\nblabla blabla\n\n <span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>ChangeTracked<\/span><span class="punctuation token">><\/span><\/span>true<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>ChangeTracked<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>FieldFilteringEnabled<\/span><span class="punctuation token">><\/span><\/span>false<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/pan>FieldFilteringEnabled<\/pan><panclass= " punctuation tok en "> & gt ; < / span > < / span > \ n < span clas s = " toke n ta g " > < span clas s = " toke n ta g " > < span clas s = " pun ctu at ion toke n " > & lt ; \/ < / span > FilteredFieldNames < / span > < span clas s = " attr - name toke n " > < span clas s = " namesp ace toke n " > xsi : < / span > type < / span > < span clas s = " attr - value toke n " > < span clas s = " pun ctu at ion toke n " > = < / span > < span clas s = " pun ctu at ion toke n " > " < / span > typens : Names < span clas s = " pun ctu at ion toke n " > " < / span > < / span > < span clas s = " pun ctu at ion toke n " > / & gt ; < / span > < / span > \ n < span clas s = " toke n ta g " > < span clas s = " toke n ta g " > < span clas s = " pun ctu at ion toke n " > & lt ; \/ < / span > DEFeatureClassInfo < / span > < span clas s = " pun ctu at ion toke n " > & gt ; < / span > < / span > ' \ nWHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT'< span clas s = " line - numbers - rows" >< span ><<EMOJI_0> >< / span >< span ><<EMOJI_1> >< / span >< span ><<EMOJI_2> >< / span >< span ><<EMOJI_3> >< / span >< span ><<EMOJI_4> >< / span >< span ><<EMOJI_5> >< / span >< span ><<EMOJI_6> >< / span >< span ><<EMOJI_7> >< / span >< span ><<EMOJI_8> >< / span >< span ><<EMOJI_9> >< / span >< span ><<EMOJI_10> >< / span >< span ><<EMOJI_11> >< / span >< span ><<EMOJI_12> >< / span >< span ><<EMOJI_13> >< / span >< span ><<EMOJI_14> >< / sp an >< sp an >< EM OJ I _15 >> </ sp an > < sp an > << EM OJ I _16 >> </ sp an > < sp an > << EM OJ I _17 >> </ sp an > < sp an > << EM OJ I _18 >> </ sp an > < sp an > << EM OJ I _19 >> </ sp an > < sp an > << EM OJ I _20 >> </ sp an > < sp an > << EM OJ I _21 >> </ sp an > < sp an > << EM OJ I _22 >> </ sp an > < sp an > << EM OJ I _23 >> </ sp an > < sp an > << EM OJ I _24 >> </ sp an > < sp an > << EM OJ I _25 >> </ sp an > < sp an > << EM OJ I _26 >> </ sp an > < sp an > << EM OJ I _27 >> </ sp an > < sp an > << EM OJ I _28 >> </ sp an > < sp an > << EM OJ I _29 >> </ sp an > < sp an > << EM OJ I _30 >> </ sp an ></sp a n>Vous verrez, quelque part au milieu, j'ai changé les restrictions d'attribut pour qu'elles soient comme tout autre attribut : un que je peux supprimer. <
P>
Fermez et redémarrez Arc Catalog pour voir le changement (et supprimer l'attribut). Il va sans dire que vous devriez faire une sauvegarde complète de votre SQL avant de faire cela, et tester cela sur une base de données non production, d'abord ! Notez aussi que cela ne fonctionnera pas sur un champ GlobalID (par exemple si vous avez un attribut GLobalID mais qu'il ne s'appelle pas GlobalID), il y a quelques changements supplémentaires à faire pour modifier celui-là, et vous ne devriez pas considérer cette méthode comme un moyen de modifier la conception physique du schéma de la table. <
P>
Avertissement : Modifier les tables GDB sous-jacentes de cette manière n'est pas supporté par ESRI. ..cela étant dit, il y a beaucoup d'administration de base de données que vous pouvez réaliser en manipulant les définitions XML. J'ai utilisé cela avec grand succès pour exporter un « workspace », éditer le XML pour appliquer quelques modifications find and replace, puis importer comme une nouvelle GDB. <
P>