0

シナリオでは、新しいサイト列を追加しようとしています。スキーマ定義を更新する必要があります。2回目の更新の実行では、フィールドが見つからなかったと表示されますが、機能がクラッシュした後、サイトの列に表示されることもあります。

private void AddManagerField(SPWeb currentweb)
        {
             try
            {
                //Add new field to Site Columns
                string managerFieldName = currentweb.Fields.Add(SponsoringCommon.Constants.FIELDS_SPONSORINGMANAGER_NAME, SPFieldType.User, false);
                SPFieldUser managerField = currentweb.Fields.GetFieldByInternalName(managerFieldName) as SPFieldUser;
                managerField.Group = SponsoringCommon.Constants.DEFAULT_TAXONOMY_TERMGROUP_NATIONALELOTERIJSPONSORING;
                managerField.Update();


                SPFieldUser managerField2 = currentweb.Fields.GetFieldByInternalName(managerFieldName) as SPFieldUser;

                string schemaXmlWithResourceTokens = managerField2.SchemaXmlWithResourceTokens;
                int startIndex = schemaXmlWithResourceTokens.IndexOf("\"", schemaXmlWithResourceTokens.IndexOf("DisplayName=\"")) + 1;
                int endIndex = schemaXmlWithResourceTokens.IndexOf("\"", startIndex);
                int substringLength = endIndex - startIndex;
                string value = schemaXmlWithResourceTokens.Substring(startIndex, substringLength);
                schemaXmlWithResourceTokens = schemaXmlWithResourceTokens.Replace(value, "$Resources:SPNLSponsoring,Field_SponsoringManager_Name");
                managerField2.SchemaXml = schemaXmlWithResourceTokens;
                managerField2.Update();


                SPContentTypeId dossierCTID = new SPContentTypeId(SponsoringCommon.Constants.CONTENTTYPES_DOSSIER_ID);
                SPContentType dossierCT = currentweb.ContentTypes[dossierCTID];
                SPFieldLink managerFieldLink = new SPFieldLink(managerField2);
                dossierCT.FieldLinks.Add(managerFieldLink);
                dossierCT.Update(true);
            }
            catch (Exception ex)
            {
                Logger.LogError("error", "AddManagerField(SPWeb currentweb)", ex);
                throw;
            }

        }
4

1 に答える 1

0

内部名が同一であることを確認しましたか。

サーバーにアクセスできる場合は、列のGUIDを取得して、代わりにそれを使用してください。これにより、正しいフィールドを探していることが保証されます。

このメソッドに渡すWebのフィールドはありますか?

申し訳ありませんが、単純に思えるかもしれませんが、(デバッグ後)座ってコードを確認すると、通常、すべての角度をチャッキングすることを怠っています。


これがTruezに役立つことを願っています

于 2012-07-19T14:21:40.670 に答える