비즈니스 시나리오:
사용자가 정확한 구매 요청을 신속 하 게 입력할 수 있도록 하는 방법을 제공합니다.
비즈니스 문제:
클라이언트 몇 백 공급 업체와 비즈니스를 않습니다..
공급 업체는 "유형" 특정. 즉, 공급 업체 컴퓨터 장비 판매 (예를 들어. Dell) 또는 사무 용품 (예를 들어. 스테이플).
어떻게 만든 구매 요청 선택 유효한 공급 업체는 최종 사용자를 활성화 우리가?
비즈니스 솔루션:
"유형"를 통해 시스템 공급 업체 차별화.
사용자가 "유형 선택" 제품의 적절 한 공급 업체의 필터링된 된 집합 제공.
기술 솔루션:
InfoPath 양식을 설계 되었습니다 수 있습니다 사용자가 온라인 입력 요청 구매.
두 개의 InfoPath 선택 목록 제어 공급 업체 선정. 첫 번째, 사용자가 선택 "구매 유형". 이 구매 형식에 대 한 판매 하는 공급 업체를 포함 하는 두 번째 선택 목록 제한. 이것은 고전적인 계단식 드롭다운.
공급 업체 이름 같은 공급 업체 특성에 대 한 사용자 지정 열으로 모스 사용자 지정 목록에 저장 됩니다., 주소와 특히 "유형".
사용자 지정 공급 업체 목록을 반복 구현 InfoPath 클라이언트는 소비에 대 한 웹 서비스, 제공 된 "유형" 일치 하는 공급 업체만 반환.
InfoPath 양식을 웹 서비스를 호출.
교훈:
- 첫 번째, 이 경로 이동 하는 데 필요한 것 같다. 난 여기 모든 웹 서비스 기능을 만들지를 InfoPath 내에서 필터링 할 선호 하는 것. 그러나, 폼 서버 필요한 필터링 기능을 제공 하지 않습니다.. 우리는 규칙에 넣을 수 있습니다 있는 "형식" 일종의 공급 업체 쿼리를 다시 열고 형태로 선택 목록, 그러나 우리가 제대로 작동 하기 위하여 그것을 얻을 수 없다. 따라서, 그것은 웹 서비스를 구현 하는 데 필요한.
- 이것은 고전적인 "계단식 선택 목록" InfoPath에서 문제 서버 세계를 형성 하 고 많은 좋은 보기가 있다 거기 밖으로이 문제를 해결 하는 방법을 설명 하는.
- 공급 업체 목록에서 열에 대해 빈 값이 참조 될 때 빈 문자열을 반환 하지 않는: initItem["공급 업체 이름"]. 대신, null을 반환 합니다..
기타 참고 사항:
- 배열 반환[] 공급 업체의 몇 가지 어려움을 ArrayList를 반환 했기 때문에. InfoPath는 그것에 대해 불평 하 고 시간이 나 위에 싸 우기 위하여 경사 하지 않았다. 이, 물론, 공급 업체의 총 수에 인공 한계를 박 았. 그것은 또한 트림 구현 하 라고 강요() 메서드는 배열에 반환의 아이디어를 싫어 하기 때문에 다시 100의 null 공급 업체. InfoPath 상관 하지 않습니다., 하지만 그것은 내게 잔소리. (다시, 이것은 InfoPath 저장 싸움 보다 쉽게).
- 나는 GetSpecificVendorByName을 구현() 기능 뿐만, 유익한 될 수 있습니다..
코드:
사용 하 여 시스템;
사용 하 여 System.Web;
사용 하 여 System.Web.Services;
사용 하 여 System.Web.Services.Protocols;
사용 하 여 Microsoft.SharePoint;
사용 하 여 System.Configuration;
/// <요약>
/// 공급 업체 서비스: 관련 공급 업체는 오늘 infopath 클라이언트 양식을 소비 하는 서비스를 제공 합니다..
///
/// 역사:
/// ——–
/// 07/24/07: 초기 코딩, Paul J. Conchango의 개 빈.
///
/// </요약>
[웹 서비스(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
공용 클래스 VendorService : System.Web.Services.웹 서비스
{
/// <요약>
/// MSUSA에 의해 유지 하는 사용자 지정 sharepoint 목록에서 공급 업체를 나타냅니다..
/// </요약>
공용 클래스 공급 업체
{
공용 공급 업체() { }
공용 공급 업체(SPItem initItem)
{
만약 (! (initItem["공급 업체 이름"] == null)) VendorName = initItem["공급 업체 이름"].ToString();
만약 (! (initItem["1 주소"] == null)) VendorAddress1 = initItem["1 주소"].ToString();
만약 (! (initItem["주소 2"] == null)) VendorAddress2 = initItem["주소 2"].ToString();
만약 (! (initItem["도시"] == null)) VendorCity = initItem["도시"].ToString();
만약 (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
만약 (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
만약 (! (initItem["상태"] == null)) VendorState = initItem["상태"].ToString();
만약 (! (initItem["우편 번호"] == null)) VendorZip = initItem["우편 번호"].ToString();
만약 (!(initItem["팩스"] == null)) VendorFax = initItem["팩스"].ToString();
만약 (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();
VendorItemId = initItem.ID; // 이끼를 통해 유지 하는 고유 ID.
}
공용 int VendorItemId;
공용 문자열 VendorName;
공용 문자열 VendorAddress1;
공용 문자열 VendorAddress2;
공용 문자열 VendorCity;
공용 문자열 VendorState;
공용 문자열 VendorZip;
공용 문자열 VendorPhone;
공용 문자열 VendorType;
공용 문자열 VendorSalesRepName;
공용 문자열 VendorFax;
}
공용 VendorService () {
//다음 줄 사용 하는 경우 디자인 구성 요소 주석
//InitializeComponent();
}
개인 공급 업체[] GenerateTestVendors()
{
공급 업체[] resultList;
resultList = 새로운 내용 공급 업체[100];
공급 업체 v;
v = 새로운 내용 공급 업체();
v.VendorAddress1 = "v1_address1";
v.VendorAddress2 = "v1_address2";
v.VendorCity = "v1_city";
v.VendorName = "v1_vendorname";
v.VendorPhone = "v1_vendorphone";
v.VendorState = "v1_st";
v.VendorType = "v1_type";
v.VendorZip = "v1_zip";
resultList[0] = v;
v = 새로운 내용 공급 업체();
v.VendorAddress1 = "v2_address1";
v.VendorAddress2 = "v2_address2";
v.VendorCity = "v2_city";
v.VendorName = "v2_vendorname";
v.VendorPhone = "v2_vendorphone";
v.VendorState = "v2_st";
v.VendorType = "v2_type";
v.VendorZip = "v2_zip";
resultList[1] = v;
v = 새로운 내용 공급 업체();
v.VendorAddress1 = "v3_address1";
v.VendorAddress2 = "v3_address2";
v.VendorCity = "v3_city";
v.VendorName = "v3_vendorname";
v.VendorPhone = "v3_vendorphone";
v.VendorState = "v3_st";
v.VendorType = "v3_type";
v.VendorZip = "v3_zip";
resultList[2] = v;
반환 resultList;
}
[WebMethod]
공용 공급 업체 GetSpecificVendorById(int vendorId)
{
문자열 SpVendorSiteName; // 공급 업체의 사용자 지정 목록을 호스팅하는 실제 MOSS 사이트의 이름.
문자열 SpVendorListName; // 공급 업체를 포함 하는 실제 모스 목록 이름.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
사용 하 여 (SPSite 사이트 = 새로운 내용 SPSite(SpVendorSiteName))
{
사용 하 여 (SPWeb 웹 사이트를 =. OpenWeb())
{
SPList currentList = 웹. 목록[SpVendorListName];
SPItem specificItem = currentList.Items[vendorId];
반환 새로운 내용 공급 업체(specificItem);
} // spweb 웹을 사용 하 여 site.openweb =()
} // spsite 사이트를 사용 하 여 새로운 spsite =("http://localhost/미즈호 ")
}
[WebMethod]
// 공급 업체 이름이 고유 하다는 것을 가정합니다, 비즈니스 관점에서
공용 공급 업체 GetSpecificVendorByVendorName(문자열 수)
{
문자열 SpVendorSiteName; // 공급 업체의 사용자 지정 목록을 호스팅하는 실제 MOSS 사이트의 이름.
문자열 SpVendorListName; // 공급 업체를 포함 하는 실제 모스 목록 이름.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
사용 하 여 (SPSite 사이트 = 새로운 내용 SPSite(SpVendorSiteName))
{
사용 하 여 (SPWeb 웹 사이트를 =. OpenWeb())
{
SPList currentList = 웹. 목록[SpVendorListName];
foreach (SPItem vendorItem 에서 currentList.Items)
{
만약 (vendorItem["공급 업체 이름"] == null) «««;
만약 (vendorItem["공급 업체 이름"].ToString().같음(수))
반환 새로운 내용 공급 업체(vendorItem);
}
공급 업체 v = 새로운 내용 공급 업체();
v.VendorPhone = "찾을 수 없습니다: " + 수;
반환 v;
반환 null;
} // spweb 웹을 사용 하 여 site.openweb =()
} // spsite 사이트를 사용 하 여 새로운 spsite =("http://localhost/미즈호 ")
} // 메서드
[WebMethod]
공용 공급 업체[] GetVendorsOfType (문자열 filterType)
{
문자열 SpVendorSiteName; // T를 호스팅하는 실제 MOSS 사이트의 이름
그는 공급 업체의 사용자 지정 목록.
문자열 SpVendorListName; // 공급 업체를 포함 하는 실제 모스 목록 이름.
SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();
공급 업체[] resultList;
int vendorIndex = 0;
resultList = 새로운 내용 공급 업체[1000];
// 기본 친절 한 메시지와 함께 목록 초기화.
공급 업체 v = 새로운 내용 공급 업체();
v.VendorName = "이이 목록을 채우는 공급 업체 유형을 선택 합니다.";
resultList[0] = v;
// 필터를 나중에 쉽게 문자열 비교에 대 한 소문자로 변환.
filterType = filterType.ToLower();
// 필터 형식이 전달 하는 경우는 "테스트", 몇 가지 간단한 데이터 생성.
#지역 필터 유형 = "테스트"
만약 (filterType입니다. 같음("테스트"))
반환 GenerateTestVendors();
#endregion
만약 (true)
{
사용 하 여 (SPSite 사이트 = 새로운 내용 SPSite(SpVendorSiteName))
{
사용 하 여 (SPWeb 웹 사이트를 =. OpenWeb())
{
v = null;
SPList currentList = 웹. 목록[SpVendorListName];
// 공급 업체 목록에서 모든 항목을 반복.
foreach (SPItem vendorItem 에서 currentList.Items)
{
문자열 lowerVendorType;
lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);
만약 (lowerVendorType입니다. 같음(filterType))
{
resultList[vendorIndex ] = 새로운 내용 공급 업체(vendorItem);
}
} // 목록에서 모든 공급 업체를 통해 반복
반환 TrimVendorArray(vendorIndex, resultList);
// resultList를 반환;
} // spweb 웹을 사용 하 여 site.openweb =()
} // spsite 사이트를 사용 하 여 새로운 spsite =("http://localhost/미즈호 ")
} // true 인 경우
반환 null;
}
개인 공급 업체[] TrimVendorArray(int newsize, 공급 업체[] originalVendorArray)
{
공급 업체[] trimmedArray;
만약 (newsize = = 0) newsize = 1;
trimmedArray = 새로운 내용 공급 업체[newsize];
int currentCounter = 0;
에 대 한 (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] originalVendorArray =[currentCounter];
}
반환 trimmedArray;
}
}