카테고리 아카이브: SharePoint

신비한 SharePoint 오류 문제를 해결 하는 방법.

개요:

Windows SharePoint Services에 대 한 사용자 지정 기능을 개발할 때 디버깅 하는 것은 어려운 3.0 (WSS) 또는 Microsoft Office SharePoint 서버 (모스). 주요 범죄자는 SharePoint 일반적으로 표면 거의 진단 정보는 웹 브라우저에 오류가 발생 하는 경우는. 이 블로그 항목을 추가 시스템에서 생성 된 진단 제공할 수 있는 정보 자주 여분의 것을 찾는 방법에 설명 합니다 그 하나 세부의 근본 원인을 식별 하기 위해 필요. 이 문제를 해결 다음 발생할 수 있습니다..

나 큰 성공을 함께 해결 하기 위해이 기술을 사용 달리 신비한 오류.

접근:

SharePoint 진단 로그에서 로그 파일에 많은 정보를 저장 합니다 12 하이브.

"12 하이브" 일반적으로 "C에 위치 해 있습니다.:\프로그램 파일 공통 파일 마이크로 소프트 파일 서버 Extensions12 ". (가능 하다 면 확신 하지는 12 다른 곳에 살고 하이브, 사실).

아이디어는 현재 로그 파일을 찾습니다., 오류를 강제 하 고 로그 파일을 신속 하 게 열. 이러한 로그 파일에 의해 특징:

  • 풍부한 양의 정보. SharePoint는 매우 많은 양의 진단 정보를 생성 하 고 매우 신속 하 게 그 로그 파일에 기록. 당신이 그것을 잡으려고 손가락으로 빨리 해야.
  • 다중성. SharePoint는 단일 로그 파일에 기록 하지 않습니다 하지만 오히려 여러 로그 파일을 생성 하는 순서 대로.
  • 복사 하 고 MS Excel로 잘 붙여.

나의 마음에 드는 방법:

  1. 가리키고 windows 탐색기를 열고는 12 hivelogs.
  2. 수정 된 날짜에 의해 보여 보기 정렬 (가장 최근의 첫 번째).
  3. 최신 로그 파일을 강조 표시.
  4. 웹 브라우저 창에, 강제로 오류를 발생.
  5. 신속 하 게 현재 로그 파일을 열고 내용을 MS Excel로 복사.
  6. 끝으로 점프 하 고 관련 항목을 분석.

기타 참고 사항:

기본적으로, 진단 로그에 위치 하 고 있는 12 hiveLOGS 디렉토리.

MS 모범 사례 (마이크 T 당. 마이크로소프트의) 로그 파일을 별도 하드 드라이브에 저장 해야 하는 상태. 하나는 중앙 관리를 통해 이것을 한다합니다. 시스템 관리자가 할 수 있습니다이, 어떤 경우에 분명히 해야 거기 기본값 대신 로그 파일을 찾을 12 하이브 위치).

이 항목 같은 문제를 해결:

  • SharePoint 워크플로 내부 오류로 인해 시작 하지 못했습니다..
  • (더 많은 시간이 지남에 추가)
  • 이 항목은 워크플로 오류 진단 도움이 되었습니다. (예를 들어. "워크플로 내부 오류 때문에 시작 하지 못했습니다").

모스: 조직에 효과적인 소개

(이 항목 사이의 교차 게시 http://paulgalvin.spaces.live.com/blog/ 그리고 http://blogs.conchango.com)

이 사이트에 게시물 내 자신의 고 반드시 Conchango의 위치를 대표 하지 않는다, 전략 또는 의견.

개요:

이 항목에 큰 몇 가지 배경 정보를 설명 합니다. (3,000 사용자) Microsoft Office SharePoint Server (모스) 모스 기능 세트의 전체 채택 끝나는 롤아웃 및 우리는 프로젝트를 같은 방식으로 클라이언트는 행복 및 경로 아래로 단단히 했어요. 항목의 작성, 우리는 약 50% 프로젝트의 첫 단계 완료. 일 진행으로, 난이 항목을 업데이 트 거 야 및 새 항목을 작성.

이 특정 경우에, 회사 이미 SharePoint Portal Server를 설치 했다 2003. IT 그룹 "보자 아무도 관심의 일종에서 제품 설치" 패션. 그것은 많은 비즈니스 사용자가 신속 하 게 채택 되었다 하 고 대형 기업에서 확실히 대중적 되었다. 당신이 상상할 수 있습니다, 이것은 최고의 출시 전략 (클라이언트가 즉시 승인) 그리고 모스 현장에 도착 했을 때, 클라이언트 "그것을 바로 확인" 그들을 돕기 위해 우리를 고용.

우리가이 프로젝트를 구현 하기 시작 하는 때 우리가 직면 하 고 중앙 질문 중 하나는: 이 클라이언트에 게 이끼를 어떻게 소개 우리? 클라이언트에 이미 SharePoint와 경험을 감안할 때, 우리가 궁금해 하는 — 우리는 "차등 어떻게 해야 합니까" 교육 또는 우리를 지상에서 시작? 주요 사용자와 함께 작업 후, 우리가 결정을 그린 필드 프로젝트 더 이해가 만든이.

그 결정 출발점 주었지만 여전히 남아 우리 기업에 이끼를 밖으로 압 연에 대 한 좋은 전략을 알아내는의 주요 요구 사항. 모스가 큰 동물 … 콘텐츠 관리, 문서 관리, 검색, 보안, 대상, 프로젝트 관리, "멋진 40" 서식 파일, 워크플로, 비즈니스 데이터 커넥터, 등. 큰 조직 이다 사실이 커플을 수 있습니다. 정말 거의 모든 주요 모스 사용할 수 있도록 기능 하 고 엔터프라이즈 범위와 많은 좋은 일 들이 일어나 고 큰 프로젝트의 자질이 있다.

우리 몇 번이 고이 문제에 직면 거 야 … 이끼는 기업 그것의 기업 기능 세트와 도달, 아직도 다소 정교한 클라이언트는 힘든 시간을 정신적으로 그 기능을 흡수, 혼자 그들의 일상에 그들의 큰 분수를 통합 하자.

나는 마법의 문제에 해결책 없어. 나는 대신 우리가 찍은 첫 단계 그냥 주소 성공적인 장기 도입 경로를 그들을 끌는 클라이언트와.

범위:

내가 원하는 그런 이정표 "PoepleSoft 통합을 통해 BDC 완료"로 포함 된 프로젝트 계획을 팀으로, "새로운 크로스-부서별 제품 출시 워크플로 완료" "집행 관리 KPI의 허용", 뭔가 덜 정착 했다. 이것은 그 "없는 말을 하지" 나쁘다. 사실, "덜" 우리는 초기 롤아웃에 대 한 결정은 어디 그들은 우리가 시작 하기 전에 앞서 마일. 우리의 경우, "덜" 바 뀌:

  • 문서 라이브러리를 사용 하 여 간단한 문서 관리, 버전 제어 및 콘텐츠 형식.
  • 효과적인 검색 콘텐츠 형식에 기반 하 고 사전 검색 사용자 지정 (관리 되는 속성을 통해, 예쁜 결과 생산 하는 XSLT, 등).

위의 엔터프라이즈 기능 (그들은 모든 부서 및 사용자에 게 밖으로 굴러 했다 의미), 우리는 다음과 같은 단일 범위 내 미니 프로젝트 추가:

  • BDC 통합 개념 증명.
  • SPD를 통해 만든 여러 단계 및 다중 워크플로우 프로세스.
  • 복잡 한 InfoPath 양식.
  • 일부 비즈니스 프로세스에 대 한 KPI의 부상 (아마 우리의 경우 HR 재능 인수, 하지만 그 변경 될 수 있습니다.).

여기 범위가 아니다. 100% 하지만 우리의 접근 방법의 정확 하 고 여기에 내 목적을 위해 충분 한, 무엇 "효과적인을 생각 설명 하는 것입니다" 전체 모스 채택 황금 길을 확고 하 게 클라이언트를 설정 하는 이끼의 소개.

이 항목에는 단일 항목에 대 한 훨씬 더를 쓰지 않습니다.. 나 이들은 우리의 아치를 만들 전략의 한 부분을 지적 하 고 싶다. 아이디어 제공 하는 고 기능 아직 모든 사용자에 게는 핵심 문서 관리 및 검색 기능을 구현 하는 것입니다., 단순히 대부분의 사용자의 능력을이 초기 단계에서 흡수 되는 다른 코어 모스 기능의 높은 표시 및 높은 대표적인 예. 그러나, 그들은 "밖으로 거기 있을 것 이다" 하나는 다른 사업부의 알 또는 그들에 대해 배울 되며 자신에 대 한 이러한 기능을 원하는 희망, 큰 채용에 지도. 이러한 단일 성공 사례 또한 우리의 판매 팀 "탄약을 제공 하는 역" 성공적으로 두 번째 우승에 대 한, 세 번째 및 n-단계 프로젝트.

우리는 무엇을 소개 했 고 왜?

기준선 엔터프라이즈 요구 사항으로 문서 관리 및 검색에 정착 하는 데, 우리가 정보를 수집을 시작 하는 데 필요한. 실질적인 문제로 서, 이 이해 하는 그들의 문서 및 궁극적으로 이해 하는 콘텐츠 형식에 매핑되는 주변 revolved.

그것은 시각적 측근 없이 콘텐츠 형식을 설명 하기 어려운 발견 했습니다.. CT의 데이터베이스에서 설명 하는 때 더 기술 민속 콘텐츠 형식에 대 한 토론에서 걸을 수합니다 있습니다.. "A CT 비슷합니다 데이터베이스 테이블, 그것은 열과 열 데이터 형식으로 정의 됩니다., CT 데이터 형식을 간단한 정수/날짜 보다 더 포함 하지만, 그러나 또한 "선택" 그리고 "조회" 그리고 같은입니다." 우리 "확장에 대해 이야기 수 있습니다." 콘텐츠 형식, 객체 지향 언어에서 기본 클래스 로부터 기능을 상속 수 하나 처럼. 그러나 이것은 분명히 사람에 대 한 운송 부서 관리자 없는 기술적 배경을 도움이. 즉, 거의 모든 이끼 롤아웃에서 중요.

불확실은 화이트 보드를 사용 하 여. 콘텐츠 형식 및 그려진된 화려한의 아이디어를 제시 했습니다. (또는 이렇게 그들은 것) 콘텐츠 형식의 사진 및 검색 측면에서 당신을 위해 할 무엇 및 어떻게 확장 될 수 있다, 등. 끝에서, 그것은 몇 가지 전구 켜져 있다 느낌지 않습니다., 하지만 결과 화이트 보드 사진 난 장판.

이것은 우리가 우리의 현재 및 지금까지 가장 효과적인 상륙 장소: 이러한 기능을 표시 하도록 구성 된 모스 샌드 박스 사이트.

샌드 박스 사이트를 사용 하 여, 우리가 보여:

  • 콘텐츠 형식:
    • CT는 여러 데이터 형식 만들기 (텍스트, 날짜, 선택, 부울, 조회, 등).
    • 만들어 부모에 따라 새로운 CT는 CT를 확장.
    • CT 메타 데이터를 사용 하 여 문서에 대 한 검색.
  • 문서 라이브러리:
    • 라이브러리 단일 CT 연결.
    • 우리는 해당 라이브러리에 문서를 업로드 하면 어떻게 됩니까?
    • 문서 라이브러리와 여러 CT 연결.
    • 우리는 해당 라이브러리에 문서를 업로드 하면 어떻게 됩니까?
    • 필터링 및 doc lib에서 열 머리글을 통해 정렬.
    • 문서 라이브러리 보기:
      • 정렬
      • 그룹화
      • "빠른 항목" (데이터 시트 보기)
      • "태그가 지정 되지 않은 데이터" (다른 콘텐츠 원본에서 이끼를 마이그레이션 지원; 이 아래에 대 한 자세한).

샌드 박스 사이트:

우리 우리 프로젝트 끝나면 긴 훈련 목적을 위해 사용 하는 개발 환경에서 영구적인 기능으로 샌드 박스 사이트를 설계 하 고 설명 된 대로 여러 아티팩트를 포함:

콘텐츠 형식:

다음 콘텐츠 형식 정의: 송장, 구매 주문, 서비스 송장.

왜냐하면 그들은 보편적으로 더 많거나 적은 아래 우리 송장 및 구매 주문 선택
서 기관. 모두 사업에 청구서를 지불에 대 한 수요는 이해 하는 고객 대 한 한 금액 특정 발행 날짜 어떤에 의하여 지급 지불 조건. 이것은 우리가 "훈련 청구서 라는 CT의 자연 정의" (청구서의 다른 종류에서 그것을 구별 하). 주문서는 마찬가지로 쉽게 정의. 우리는 또한 "교육 서비스 송장 생성" "훈련 청구서에 따라 새로운 CT를 만들어서" CT 및 추가 한 열, "렌더링 서비스".

위의, 우리 이제 추상적인 개념을 먼저 설명 하 고 수렁에 점점 없이 CT의 몇 가지 주요 기능을 보여줄 수 있는; 모두가 이미 "송장 의미 이해" "구매 주문 및" 대신 CT의 역학에 초점을 수 있습니다 자체.

사용자 지정 목록:

"조회 형식의 열과 CT" 사용자 지정 목록 또는 문서 라이브러리를 가리킨. 우리는이 광범위 하 게 그리고 샌드 박스에 대 한 사용, 지원 고객을 포함 하는 사용자 지정 목록을 하나 만들었습니다.. 우리가 이해 하는 쉬운 개념 이기 때문에 고객을 선택 하 고 설명 하기 쉽게. 송장 CT는 열, "고객" 유형 "조회의 정의 된" 이 목록에 있는 포인트.

"공급 업체 관리에 비슷한 사용자 지정 목록을 만들었습니다." "구매 주문서에 대 한" CT.

문서 라이브러리:

우리 두 문서 라이브러리를 만든: "송장" "혼합 문서".

CT 유형 "청구서"의 유일한 문서 관리에 송장 문서 라이브러리 구성.

"혼합 문서 구성" 모든 3 개의 CT를 관리 하는 라이브러리.

정렬 표시 되는 여러 가지 보기 만들기, 필터링, 데이터 시트 및 그룹화.

검색:

우리는 두 개의 새로운 관리 되는 속성을 정의 하 고 송장 번호 및 고객에 매핑된.

우리가 만든 새로운 사용자 지정된 사전 검색 사이트 및 "송장에 대 한 검색 하는 사용자가 그것을 수정" 그 두 개의 매핑된 속성을 사용 하 여.

수정 된 XSLT를 인보이스 및 고객 번호, 때 제시, 밝은 색에는 HTML 테이블에 표시. 여기 목적은 이러한 서식을 가능 하다는 것을 입증 하.

모두 함께 넣고:

우리는 주요 사용자 데모에 참여를 위한 준비.

우리는이 간단한 스크립트를 따라:

  1. 의미와는 CT의 목적 설명, 송장 및 구매 주문 예제로 사용 하 여.
  2. 동시에 그들은 스스로 그 스크린을 사용 하지 않아도 그들을 확보 하면서 송장 CT 정의 표시, 그냥 데리 러 개념.
  3. 청구서 문서 라이브러리로 이동.
  4. 문서 업로드.
  5. 고객 드롭 다운은 정말 사용자 지정 목록에서 sourced 설명.
  6. 고객 목록에 새로운 고객을 추가 하 고 새로 만든 고객 최근에 업로드 된 송장 메타 데이터 업데이트.
  7. "혼합된 문서 전환" 라이브러리 및 문서 업로드. 어떻게 메시지가 나타납니다 문서 유형에 대 한 설명.
  8. 청구서 문서 라이브러리를 표시 다시 이동 열 이름을 클릭 하면 정렬 순서를 변경 하는 방법.
  9. 열 수준 필터링 설명.
  10. 다단계 정렬 하는 방법을 보여 주는 다른 보기, 필터링 및 그룹화.
  11. 데이터 시트 보기를 표시.
  12. "태그 없는 문서의 목적을 설명" 보기.
  13. 사용자 지정 된 고급 검색으로 전환.
  14. 지금까지, 최근 업로드 된 문서가 크롤링되 고 색인이 생성 되었습니다 해야, 그래서 매핑된 속성을 통해 해당 청구서를 찾는 기능을 보여 주는 검색 수행.
  15. 매핑된 속성 비교를 통해 검색의 차이 설명. 그냥 텍스트 검색.

이 시점에서, 우리는 더 많거나 적은 데모와 함께 완료. 그것에 대 한 걸릴 것으로 보인다 30 받는 사람 45 분, 사람들에 게 물어 얼마나 많은 질문에 따라.

우리는 다음 "숙제" 그들의 책상에 다시 그들을 보내합니다. 이 간단한 구성 excel 스프레드 시트 어디 우리가 그들을 물어 그들은 CT의 측면에서 필요 생각 우리가 정의 하, 높은 수준에서 모두 (그냥 이름 및 사업 목적) 열 및 데이터 형식 열에 저장할 것. 우리 모스 측면에서 열 데이터 형식을 정의 하도록 요청 하지 않습니다., 하지만 비즈니스 용어.

요약:

우리는 우리가 그 호소는 엔터프라이즈 코어 모스 기능 몇 가지를 보여 주기 위해 사용할 수 있는 샌드박스 환경을 만들었습니다..

사용자가 MOSS에 집중할 수 있고 엔터티에 꼼짝 있도록 쉽게 이해 하 고 일반적인 비즈니스 엔터티를 모델로 우리 / 스스로 예.

"숙제 논문 세션 걸어서 비즈니스 사용자" 그들은 지금 작성 하 고 디자인 하는 그들의 자신의 첫 번째 컷 콘텐츠 형식에 대 한 사용 유능한 excel 문서 형태로.

마지막으로, 시간 동안 데모를 수행 하는 우리, 클라이언트의 팀원 스스로 더 앞으로 있게 될, 데모의 자신 하 고 일반적으로 더 복잡 한 문제에까지 우리의 나머지 부분을 무료, 글로벌 분류 등, 복잡 한 워크플로, BDC와 같은.

모스: 기능 예-사용자 정의 데이터 형식

비즈니스 시나리오:

제조 회사에 대 한 이끼의 엔터프라이즈 구현 30+ 사이트 및 몇 가지 12 개 기업 부서.

비즈니스 목표:

비즈니스 그룹의 군중에도 불구 하 고 (부서, 위치, 등), 글로벌 수준에서 특정 데이터를 유지 합니다.. 예를 들어, 회사의 모든 물리적 위치는 신뢰할 수 있는 마스터 목록 (예를 들어. 제조 시설, 창 고 위치, 영업 사무소) 중앙 위치에서 유지 되어야 합니다..

기술 문제:

기업 분류는 여러 사이트 모음을 사용 하 여 구현 된. 우리는 사용자 지정 WSS 목록에서 실제 위치 신뢰할 수 있는 목록을 만들 수 있으면 좋 겠. 다음, 우리는 콘텐츠 형식에 열을 필요로 할 때 (목록 또는 문서 라이브러리에 열 추가 또는) 기업의 위치를 포함는, 우리 "조회를 사용 하 여 열을 만들 것입니다." 데이터 형식 및이 마스터 목록에 포인트.

불행 하 게도, 조회 데이터 소스 목록 "로컬 액세스 해야 합니다." 우리의 신뢰할 수 있는 목록 사이트 모음에 걸쳐 있을 수 없습니다 의미.

기술 솔루션:

새 사용자 정의 데이터 형식에 따라 SPField을 구현 하 고 누구의 ListItems 마스터 WSS 목록에서 채우는 UI에 드롭다운 목록으로 표시 구현.

라는 새 사이트 모음을 만들었습니다. "http://localhost/EnterpriseData". 거기, "기업의 위치" 라는 사용자 지정 목록을 만들었습니다.. 이 목록은 표준 "제목 사용" 실제 기업의 위치 목록을 포함 하는 필드.

한 wss에서 사용자 정의 데이터 형식을 만드는 데 여러 개별 단계를 따릅니다.. 그들은:

  1. 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

  1. 기본 필드 컨트롤에서 상속 하는 다른 클래스 정의, 마찬가지로:

공용 클래스 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에 넣어 (강한 필요, 물론).

  1. 컨트롤 템플릿 구현 (.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.

  1. 마지막으로, 우리가 만들 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 멋지게 작업 모든 시작을 한다.

모스: 사용자 지정 목록 업데이트

SDK 통해 사용자 지정 목록을 업데이 트의 많은 좋은 예입니다.. 여기는 또 다른.

비즈니스 문제: InfoPath 양식을 설계 되었습니다 수 있습니다 사용자가 온라인 입력 요청 구매. 포 징 발 번호 전통적인 순서 이어야 한다 정수 값을 기반으로 하 고 자동으로 계산.

비즈니스 솔루션: 두 개의 열이 포함 된 사용자 정의 이끼 목록 만들기: "ControlField" 그리고 "과". 값 열에 다음 구매 요청 서 번호 포함. Note는 일반 "제어" 필요에 따라 사용할 수 있는 미래의 컨트롤 필드에 대 한 명명 규칙을 제공 합니다..

기술 솔루션: InfoPath 클라이언트에 의해 액세스 하는 웹 서비스 만들기. 웹 서비스 반환 합니다 다시 다음 구매 요청 서 번호 및 목록의 값을 업데이트.

교훈:

  • InfoPath 양식으로이 웹 서비스를 데이터 소스로 추가 하는 경우, 나는 udc를 변환 하 고 데이터 연결 라이브러리에 저장 하는 데 필요한 발견.
  • 나 또한 중앙 서비스 관리를 통해 교차 도메인 스크립팅을 사용 하도록 설정 하는 데 필요한 발견 // 응용 프로그램 관리 // 폼 서버 구성.
  • 처음으로 양식을 웹 서비스에 액세스 하 려, 그것은 걸립니다 그리고 때때로, 그것은 시간을 것입니다.. 시간 제한 설정에 폼 서버 구성에서 설정 fiddled 고 그 도움을 보 였.

코드:

사용 하 여 시스템;
사용 하 여 System.Web;
사용 하 여 System.Web.Services;
사용 하 여 System.Web.Services.Protocols;
사용 하 여 Microsoft.SharePoint;
사용 하 여 System.Configuration;

[웹 서비스(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
공용 클래스 PoService : System.Web.Services.웹 서비스
{
공용 PoService () {

//다음 줄 사용 하는 경우 디자인 구성 요소 주석
//InitializeComponent();
}

/// <요약>
/// Sharepoint가 번호 컨트롤 목록에서 다음 사서함 번호를 가져올.
/// 그 목록에서 주문서 번호를 증가.
/// </요약>
/// <반환></반환>
[WebMethod]
공용 문자열 GetNextPoNumber()
{
문자열 SpPoControlSiteName; // 포 제어 목록을 호스팅하는 실제 MOSS 사이트의 이름.
문자열 SpPoControlListName; // 포 컨트롤을 포함 하는 실제 모스 목록 이름.

SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();

문자열 nextPoReqNumber = "xyzzy";

사용 하 여 (SPSite 사이트 = 새로운 내용 SPSite(SpPoControlSiteName))
{
사용 하 여 (SPWeb 웹 사이트를 =. OpenWeb())
{

SPList currentList = 웹. 목록[SpPoControlListName];

foreach (SPItem controlItem 에서 currentList.Items)
{

만약 (((문자열)controlItem["ControlField"]).같음("NextPoNumber"))
{
nextPoReqNumber = (문자열)controlItem["과"];

int int_nextPoReqNumber;
int_nextPoReqNumber = 변환.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

controlItem["과"] int_nextPoReqNumber =;
controlItem.Update();
}

} // 찾기, 읽기 및 업데이트 목록에서 주문서 번호.


} // spweb 웹을 사용 하 여 site.openweb =()
} // spsite 사이트를 사용 하 여 새로운 spsite =("http://localhost/미즈호 ")

반환 nextPoReqNumber;

}
}