2011-01-10 4 views
0

Visual Studio에서 MOSS에 게시 기능을 만들었습니다.이 기능에는 사용자 지정 목록 서식 파일과 서식 파일 정의를 사용하는 일부 목록이 포함되어 있습니다. 이제는 목록 템플릿을 업데이트해야하는데, 이는 단지 몇 줄을 내 schema.xml에 추가하는 것만 큼 문제가되지 않지만 기존 목록에도 업데이트를 반영 할 수있는 방법이 필요합니다.사용자 지정 목록 서식 파일을 변경할 때 목록 업데이트

내가 아는 한이 기능은 표준 셰어 포인트가 아니지만 어떻게 프로그래밍 방식으로이 문제를 해결할 수 있습니까? 내 OnActivated의 뉴욕, 내 목록을 통해 루프 및 목록의 템플릿을 기반으로 필드를 업데이 트 (삭제/추가)?

답변

0

예, 목록 스키마를 업데이트하면 이미 만들어진 목록에 반영되지 않습니다. 이를 위해 스키마에 FeatureActivated 이벤트 처리기를 추가하십시오. 이 이벤트 핸들러는 기능을 활성화 할 때마다 코드를 실행합니다.

이미 작성된 목록 이름을 포함하는 XML 구성 파일을 피처에 작성하십시오. 코드는 XML 파일을 읽고 이미 생성 된 목록을 업데이트합니다.

확장 성 및 유연성을 위해이 코드는 가능한 한 방어 적이어야합니다. 예를 들어, 나중에 다시 기능을 다시 활성화하면 다시 변경하지 않아야 변경 사항이 손실되거나 중복됩니다. 먼저 확인한 다음 변경 만하십시오.

동일한 구성표를 콘텐츠 유형에 사용할 수 있습니다. 필요한 경우 코드 스 니펫을 게시 할 수 있습니다.

public override void FeatureActivated(SPFeatureReceiverProperties properties) 
    { 
     try 
     { 
      // Fix the Article Date column 
      if (properties != null) 
      { 
       FixArticleDate(properties); 
      } 

      // Fix Metadata Tagging site columns by setting CustomField "MetadataType" to the Default value set in the field definition manifest file. 
      if (properties != null && properties.Feature.Properties["FixMetadataTagging"] != null) 
      { 
       RepairMetadataTaggingSiteColumns(properties); 
      } 

      // Fix Lookup site columns by retrieving lookup list GUID from List="url". 
      if (properties != null && properties.Feature.Properties["FixListTagging"] != null) 
      { 
       RepairListTaggingSiteColumns(properties); 
      } 

      // Fixing Site Columns 
      if (properties != null && properties.Feature.Properties["FixSiteColumns"] != null) 
      { 
       RepairSiteColumns(properties); 
      } 
     } 
     catch (SPException sharepointEx) 
     { 
      ExceptionManager.LogError(ULSTracerCategoriesEnum.FeatureReceivers, sharepointEx); 
     } 
    } 

XML :

<?xml version="1.0" encoding="utf-8" ?> 
<Feature Id="A23990CF-C35D-4771-BF5A-916C304C9EF9" 
    Title="Content Types" 
    Description="This Feature Creates all the Required Content Types and site columns" 
    Version="1.0.0.0" Scope="Site" Hidden="FALSE" 
    ReceiverAssembly="xxxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=86597c5d57921943" 
    ReceiverClass="xxxx.SharePoint.UI.Core.FeatureReceivers.CoreFeatureReceiver"   
    xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <ElementManifests> 
    <ElementManifest Location="SiteColumns\SiteColumns.xml" /> 
    <ElementManifest Location="ContentTypes\ContentTypes.xml" /> 
    </ElementManifests> 
    <Properties> 
    <Property Key="FixMetadataTagging" Value="SiteColumns\MetadataTaggingSiteColumnsManifest.xml"/> 
    <Property Key="FixListTagging" Value="SiteColumns\ListTaggingSiteColumnsManifest.xml"/> 
    <Property Key="FixSiteColumns" Value="ContentTypeFixes\SiteColumnAdditions.xml"/> 
    </Properties> 
</Feature> 
+0

은 조각/코드 예제 내가 수리-방법에 내가 필드 누락을 발견하고이를 추가해야합니다 추측 주어진 코드 : 가능 – keysersoze

+0

하면 좋은 것 MySPList.Fields.Add를 사용하여? – keysersoze

+0

네, 기본적으로 원하는 것은 무엇이든간에. 필드 이름과 같이 xml에 데이터를 넣고 코드에서 읽고 작업을 수행하십시오. 수비가 확실한지 확인하십시오. 같은 필드를 반복해서 추가하는 일이 없도록하십시오. –

관련 문제