비즈니스 시나리오:
제조 회사에 대 한 이끼의 엔터프라이즈 구현 30+ 사이트 및 몇 가지 12 개 기업 부서.
비즈니스 목표:
비즈니스 그룹의 군중에도 불구 하 고 (부서, 위치, 등), 글로벌 수준에서 특정 데이터를 유지 합니다.. 예를 들어, 회사의 모든 물리적 위치는 신뢰할 수 있는 마스터 목록 (예를 들어. 제조 시설, 창 고 위치, 영업 사무소) 중앙 위치에서 유지 되어야 합니다..
기술 문제:
기업 분류는 여러 사이트 모음을 사용 하 여 구현 된. 우리는 사용자 지정 WSS 목록에서 실제 위치 신뢰할 수 있는 목록을 만들 수 있으면 좋 겠. 다음, 우리는 콘텐츠 형식에 열을 필요로 할 때 (목록 또는 문서 라이브러리에 열 추가 또는) 기업의 위치를 포함는, 우리 "조회를 사용 하 여 열을 만들 것입니다." 데이터 형식 및이 마스터 목록에 포인트.
불행 하 게도, 조회 데이터 소스 목록 "로컬 액세스 해야 합니다." 우리의 신뢰할 수 있는 목록 사이트 모음에 걸쳐 있을 수 없습니다 의미.
기술 솔루션:
새 사용자 정의 데이터 형식에 따라 SPField을 구현 하 고 누구의 ListItems 마스터 WSS 목록에서 채우는 UI에 드롭다운 목록으로 표시 구현.
라는 새 사이트 모음을 만들었습니다. "http://localhost/EnterpriseData". 거기, "기업의 위치" 라는 사용자 지정 목록을 만들었습니다.. 이 목록은 표준 "제목 사용" 실제 기업의 위치 목록을 포함 하는 필드.
한 wss에서 사용자 정의 데이터 형식을 만드는 데 여러 개별 단계를 따릅니다.. 그들은:
- SPField에서 상속 하는 클래스 정의 (필요한 경우 하나 다른 분야에서 상속 받을 수 있습니다.).
다음은 그에 대 한 코드:
공용 클래스 XYZZYCorporateLocationField : SPFieldText
{
공용 XYZZYCorporateLocationField
(SPFieldCollection 필드, 문자열 typeName, 문자열 displayName)
: 자료(필드, typeName, displayName) { }
공용 XYZZYCorporateLocationField
(SPFieldCollection 필드, 문자열 displayName)
: 자료(필드, displayName) { }
공용 재정의 BaseFieldControl FieldRenderingControl
{
가져오기
{
BaseFieldControl 제어 = 새로운 내용 XYZZYCorporateLocationFieldControl();
제어 합니다. FieldName = 이.InternalName;
반환 제어;
} //가져오기
} // fieldrenderingcontrol
공용 재정의 문자열 GetValidatedString(개체 값)
{
만약 (이.필수 || 값입니다. ToString().같음(문자열.빈))
{
던져 새로운 내용 SPFieldValidationException ("부서 할당 되지 않습니다.");
}
반환 자료.GetValidatedString(값);
} // getvalidatedstring
} // XYZZYCorporateLocation
- 기본 필드 컨트롤에서 상속 하는 다른 클래스 정의, 마찬가지로:
공용 클래스 XYZZYCorporateLocationFieldControl : BaseFieldControl
{
보호 드롭다운 목록 XYZZYCorporateLocationSelector;
보호 재정의 문자열 DefaultTemplateName
{
가져오기
{
반환 "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName
공용 재정의 개체 값
{
가져오기
{
EnsureChildControls();
반환 이.XYZZYCorporateLocationSelector입니다. SelectedValue;
} // 가져오기
설정
{
EnsureChildControls();
이.XYZZYCorporateLocationSelector.SelectedValue = (문자열)이.ItemFieldValue;
} // 설정
} // 개체 값 재정의
보호 재정의 void CreateChildControls()
{
만약 (이.필드 = = null || 이.ControlMode = = SPControlMode.디스플레이)
반환;
자료.CreateChildControls();
이.XYZZYCorporateLocationSelector =
(드롭다운 목록)FindControl TemplateContainer입니다.("XYZZYCorporateLocationSelector");
만약 (이.XYZZYCorporateLocationSelector = = null)
던져 새로운 내용 예외("오류: 로드할 수 없습니다. ASCX 파일!");
만약 (!이.IsPostBack 페이지입니다.)
{
사용 하 여 (SPSite 사이트 = 새로운 내용 SPSite("http://localhost/enterprisedata"))
{
사용 하 여 (SPWeb 웹 사이트를 =. OpenWeb())
{
SPList currentList = 웹. 목록["기업의 위치"];
foreach (SPItem XYZZYCorporateLocation 에서 currentList.Items)
{
만약 (XYZZYCorporateLocation["제목"] == null) «««;
문자열 theTitle;
theTitle = XYZZYCorporateLocation["제목"].ToString();
이.XYZZYCorporateLocationSelector.Items.Add
(새로운 내용 ListItem(theTitle, theTitle));
} // foreach
} // spweb 웹을 사용 하 여 site.openweb =()
} // spsite 사이트를 사용 하 여 새로운 spsite =("http://localhost/enterprisedata ")
} // 하지 않을 경우 포스트백
} // CreateChildControls
} // XYZZYCorporateLocationFieldControl
위의 코드는 기본적으로 WSS 사용자 지정 목록에 있는 값으로 DropDownList를 채우기 위한 논리를 구현 http://localhost/enterprisedata 및 명명 된 "기업 부서".
단일.cs 파일에 있는 두 클래스를 정의, 그것을 컴파일하고 GAC에 넣어 (강한 필요, 물론).
-
컨트롤 템플릿 구현 (.ascx) 같이:
<%@ 제어 언어= "C#" 상속="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,버전 12.0.0.0, 문화 = 중립 =,Publickeytoken 등 = 71e9bce111e9429c" compilationMode"항상 =" %>
<%@ 등록 Tagprefix"wssawc =" Namespace="Microsoft.SharePoint.WebControls" 어셈블리="Microsoft.SharePoint, 버전 12.0.0.0 =, 문화 = 중립, Publickeytoken 등 = 71e9bce111e9429c" %> <%@ 등록 Tagprefix"SharePoint =" Namespace="Microsoft.SharePoint.WebControls" 어셈블리="Microsoft.SharePoint, 버전 12.0.0.0 =, 문화 = 중립, Publickeytoken 등 = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID"XYZZYCorporateLocationFieldControl =" runat"서버" =>
<서식 파일>
<asp:드롭다운 목록 ID"XYZZYCorporateLocationSelector =" runat"서버 =" />
</서식 파일>
</SharePoint:RenderingTemplate>
위의 c에 저장 됩니다.:\프로그램 파일 공통 파일 마이크로 소프트 파일 서버 extensions12controltemplates.
- 마지막으로, 우리가 만들 XML 파일에 저장 하는... 12XML 디렉터리. 이것은 CAML 우리의 사용자 정의 데이터 형식을 정의 하 고 내 예, 이 처럼 보이는:
<?xml 버전="1.0" 인코딩="u t f-8" ?>
<Fieldtype>
<FieldType>
<필드 이름="TypeName">CorporateLocations</필드>
<필드 이름="ParentType">텍스트</필드>
<필드 이름="TypeDisplayName">회사 위치</필드>
<필드 이름="TypeShortDescription">제조 또는 다른 시설을 포함 한 모든 XYZZY 기업 위치.</필드>
<필드 이름="UserCreatable">사실</필드>
<필드 이름="ShowInListCreate">사실</필드>
<필드 이름="ShowInDocumentLibraryCreate">사실</필드>
<필드 이름="ShowInSurveyCreate">사실</필드>
<필드 이름="ShowInColumnTemplateCreate">사실</필드>
<필드 이름="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, 버전 1.0.0.0 =, 문화 = 중립, Publickeytoken 등 = b0b19e85410990c4</필드>
<RenderPattern 이름="DisplayPattern">
<스위치>
<Expr>
<열 />
</Expr>
<케이스 값=""/>
<기본>
<HTML>
<![CDATA[<스팬 스타일 = "색상:레드 "><b>]]>
</HTML>
<열 SubColumnNumber="0" HTMLEncode="사실"/>
<HTML><![CDATA[</b></범위>]]></HTML>
</기본>
</스위치>
</RenderPattern>
</FieldType>
</Fieldtype>
이 XML 파일 WSS "라이브러리에 사용자 지정 데이터 형식을 추가합니다" GAC에 대하여 일치 했다 어셈블리.
곳으로 모든이 비트를 이동한 후, 서버에서 iisreset 멋지게 작업 모든 시작을 한다.
System.Web.UI를 사용 하 여;
System.Web.UI.WebControls를 사용 하 여;
솔루션을 구현 하려고 해요. 그러나 드롭다운 목록 대신 나, 단지 내가 한 DropDownChoiceList에 대 한 옵션. 당신이 항목을 DropDownChoiceList을 추가 하는 방법을 알고 어떻게 하나요? 우리는 SharePoint를 사용 하 여 2007 S p 1과 Visual Studio 2005 S P 1.