RÊU: Iterating thông qua danh sách tùy chỉnh và trả về dữ liệu lọc để InfoPath

Kinh doanh kịch bản:

Cung cấp một phương thức mà cho phép người dùng nhập chính xác mua nhiều một cách nhanh chóng.

Vấn đề kinh doanh:

Khách hàng nào kinh doanh với một số nhà cung cấp hàng trăm.

Nhà cung cấp là "loại" cụ thể. Điều này có nghĩa rằng một nhà cung cấp bán thiết bị máy tính (Ví dụ như. Dell) hoặc thiết bị văn phòng (Ví dụ như. Lương thực).

Làm thế nào để chúng tôi có thể kích hoạt cuối cùng người sử dụng tạo ra mua nhiều lựa chọn một nhà cung cấp hợp lệ?

Giải pháp kinh doanh:

Phân biệt các nhà cung cấp trong hệ thống thông qua "loại".

Cho phép người dùng để chọn kiểu"" của sản phẩm và sau đó cung cấp một bộ lọc nhà cung cấp thích hợp.

Giải pháp kỹ thuật:

Một hình thức InfoPath đã được thiết kế cho phép người dùng để nhập trực tuyến mua nhiều.

Kiểm soát hai InfoPath lựa chọn danh sách lựa chọn nhà cung cấp. Đầu tiên, người dùng chọn một "mua loại". Điều này giới hạn một danh sách lựa chọn thứ hai để chứa chỉ là nhà cung cấp bán cho mua loại. Đây là một cổ điển tầng thả xuống.

Nhà cung cấp được lưu trữ trong một danh sách tùy chỉnh MOSS với tuỳ chỉnh cột cho các nhà cung cấp thuộc tính ví dụ như tên, địa chỉ và đặc biệt là "loại".

Thực hiện một dịch vụ web cho một khách hàng InfoPath tiêu thụ mà iterates thông qua danh sách tùy chỉnh nhà cung cấp, trở về nhà cung cấp chỉ phù hợp với một cung cấp "loại".

Gọi Dịch vụ web thông qua hình thức InfoPath.

Bài học:

  • Đầu tiên, có vẻ như cần thiết để đi con đường này. Tôi đã có thể ưa thích để làm việc lọc hoàn toàn trong InfoPath và không tạo ra bất kỳ chức năng dịch vụ web ở đây. Tuy nhiên, hình thức máy chủ không cung cấp khả năng lọc cần thiết. Chúng tôi có thể đặt một quy tắc vào một loại"" danh sách chọn trong các hình thức để loại mở lại các truy vấn người bán hàng, nhưng chúng tôi không thể làm cho nó hoạt động đúng. Do đó, nó là cần thiết để thực hiện các dịch vụ web.
  • Đây là một cổ điển "tầng lựa chọn danh sách" Các vấn đề trong InfoPath hình thức thế giới máy chủ và có rất nhiều ví dụ trên mạng tốt mà giải thích làm thế nào để giải quyết điều này.
  • Một giá trị trống cho một cột trong danh sách nhà cung cấp không trả lại một chuỗi sản phẩm nào khi tham chiếu như thế này: initItem["Nhà cung cấp tên"]. Thay vào đó, nó trả về một null.

Một số ghi chú khác:

  • Tôi trở lại một mảng[] của nhà cung cấp bởi vì tôi đã có một số khó khăn trở về một ArrayList. InfoPath đã phàn nàn về nó và tôi không có thời gian hoặc độ nghiêng để chiến đấu trên nó. Điều này, Tất nhiên, Đặt một giới hạn nhân tạo trên tổng số của nhà cung cấp. Nó cũng bắt buộc tôi để thực hiện một trim() Các phương pháp trên bởi vì tôi ghét ý tưởng trở lại trở lại 100 nhà cung cấp vô. InfoPath không quan tâm, nhưng nó nagged tôi. (Một lần nữa, Điều này đã dễ dàng hơn so với chiến đấu InfoPath trên ArrayLists).
  • Tôi thực hiện một GetSpecificVendorByName() chức năng là tốt, mà có thể được instructive.

:

bằng cách sử dụng Hệ thống;
bằng cách sử dụng System.Web;
bằng cách sử dụng System.Web.Services;
bằng cách sử dụng System.Web.Services.Protocols;
bằng cách sử dụng Microsoft.SharePoint;
bằng cách sử dụng System.Configuration;

/// <tóm tắt>
///
Nhà cung cấp dịch vụ: Cung cấp các nhà cung cấp liên quan đến dịch vụ mà ngày nay được tiêu thụ của một hình thức khách hàng infopath.
///
/// Lịch sử:
/// ——–
/// 07/24/07: Ban đầu mã hóa, Paul J. Gavin của Conchango.
///
/// </tóm tắt>
[WebService(Không gian tên = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
công cộng lớp học VendorService : System.Web.Services.WebService
{

/// <tóm tắt>
/// Đại diện cho một nhà cung cấp từ một danh sách tùy chỉnh sharepoint duy trì bởi MSUSA.
/// </tóm tắt>
công cộng lớp học Nhà cung cấp
{
công cộng Nhà cung cấp() { }

công cộng Nhà cung cấp(SPItem initItem)
{
Nếu (! (initItem["Nhà cung cấp tên"] == null)) VendorName = initItem["Nhà cung cấp tên"].ToString();
Nếu (! (initItem["Địa chỉ 1"] == null)) VendorAddress1 = initItem["Địa chỉ 1"].ToString();
Nếu (! (initItem["Địa chỉ 2"] == null)) VendorAddress2 = initItem["Địa chỉ 2"].ToString();
Nếu (! (initItem["Thành phố"] == null)) VendorCity = initItem["Thành phố"].ToString();
Nếu (! (initItem["VendorPhone"] == null)) VendorPhone = initItem["VendorPhone"].ToString();
Nếu (! (initItem["PurchaseType"] == null)) VendorType = initItem["PurchaseType"].ToString();
Nếu (! (initItem["Nhà nước"] == null)) VendorState = initItem["Nhà nước"].ToString();
Nếu (! (initItem["Zip"] == null)) VendorZip = initItem["Zip"].ToString();
Nếu (!(initItem["Fax"] == null)) VendorFax = initItem["Fax"].ToString();
Nếu (!(initItem["SalesRepName"] == null)) VendorSalesRepName = initItem["SalesRepName"].ToString();

VendorItemId = initItem.ID; // ID duy nhất duy trì thông qua MOSS.
}

công cộng int VendorItemId;
công cộng chuỗi VendorName;
công cộng chuỗi VendorAddress1;
công cộng chuỗi VendorAddress2;
công cộng chuỗi VendorCity;
công cộng chuỗi VendorState;
công cộng chuỗi VendorZip;
công cộng chuỗi VendorPhone;
công cộng chuỗi VendorType;
công cộng chuỗi VendorSalesRepName;
công cộng chuỗi VendorFax;
}

công cộng VendorService () {

//Bỏ ghi chú dòng sau nếu sử dụng thiết kế thành phần
//InitializeComponent();
}

tư nhân Nhà cung cấp[] GenerateTestVendors()
{
Nhà cung cấp[] resultList;
resultList = mới Nhà cung cấp[100];

Nhà cung cấp v;
v = mới Nhà cung cấp();
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 = mới Nhà cung cấp();

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 = mới Nhà cung cấp();
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;

trở lại resultList;

}

[WebMethod]
công cộng Nhà cung cấp GetSpecificVendorById(int vendorId)
{
chuỗi SpVendorSiteName; // Tên của trang web thực tế của MOSS lưu trữ danh sách tùy chỉnh nhà cung cấp.
chuỗi SpVendorListName; // Tên danh sách MOSS thực tế có nhà cung cấp.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

bằng cách sử dụng (SPSite Trang web = mới SPSite(SpVendorSiteName))
{

bằng cách sử dụng (SPWeb web = trang web. OpenWeb())
{

Splist.Update() currentList = trang web. Danh sách[SpVendorListName];

SPItem specificItem = currentList.Items[vendorId];

trở lại mới Nhà cung cấp(specificItem);

} // bằng cách sử dụng spweb web = site.openweb()
} // bằng cách sử dụng trang web spsite = mới spsite("http://localhost/mizuho")

}

[WebMethod]
// Giả định rằng nhà cung cấp tên là duy nhất, từ góc độ kinh doanh
công cộng Nhà cung cấp GetSpecificVendorByVendorName(chuỗi được)
{
chuỗi SpVendorSiteName; // Tên của trang web thực tế của MOSS lưu trữ danh sách tùy chỉnh nhà cung cấp.
chuỗi SpVendorListName; // Tên danh sách MOSS thực tế có nhà cung cấp.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

bằng cách sử dụng (SPSite Trang web = mới SPSite(SpVendorSiteName))
{
bằng cách sử dụng (SPWeb web = trang web. OpenWeb())
{

Splist.Update() currentList = trang web. Danh sách[SpVendorListName];

foreach (SPItem vendorItem currentList.Items)
{
Nếu (vendorItem["Nhà cung cấp tên"] == null) «««;

Nếu (vendorItem["Nhà cung cấp tên"].ToString().Bằng(được))
trở lại mới Nhà cung cấp(vendorItem);
}

Nhà cung cấp v = mới Nhà cung cấp();
v.VendorPhone = "không tìm thấy: " + được;

trở lại v;

trở lại null;

} // bằng cách sử dụng spweb web = site.openweb()
} // bằng cách sử dụng trang web spsite = mới spsite("http://localhost/mizuho")

} // phương pháp

[WebMethod]
công cộng Nhà cung cấp[] GetVendorsOfType (chuỗi filterType)
{

chuỗi SpVendorSiteName; // Tên của trang web thực tế của MOSS lưu trữ t
ông nhà cung cấp danh sách tùy chỉnh.
chuỗi SpVendorListName; // Tên danh sách MOSS thực tế có nhà cung cấp.

SpVendorSiteName = ConfigurationSettings.AppSettings["VendorListHostingSite"].ToString();
SpVendorListName = ConfigurationSettings.AppSettings["VendorList"].ToString();

Nhà cung cấp[] resultList;
int vendorIndex = 0;
resultList = mới Nhà cung cấp[1000];

// Khởi tạo danh sách với một thông điệp thân thiện mặc định.
Nhà cung cấp v = mới Nhà cung cấp();
v.VendorName = "Chọn loại nhà cung cấp để đưa danh sách này.";
resultList[0] = v;

// Chuyển đổi các bộ lọc để các trường hợp thấp hơn để so sánh chuỗi dễ dàng hơn sau này.
filterType = filterType.ToLower();

// Nếu loại bộ lọc thông qua là "kiểm tra", tạo ra một số dữ liệu đơn giản.
#khu vực Bộ lọc loại = "kiểm tra"
Nếu (Bằng filterType.("kiểm tra"))
trở lại GenerateTestVendors();
#endregion

Nếu (sự thật)
{
bằng cách sử dụng (SPSite Trang web = mới SPSite(SpVendorSiteName))
{
bằng cách sử dụng (SPWeb web = trang web. OpenWeb())
{

v = null;

Splist.Update() currentList = trang web. Danh sách[SpVendorListName];

// Iterate qua tất cả các mục trong danh sách nhà cung cấp.
foreach (SPItem vendorItem currentList.Items)
{

chuỗi lowerVendorType;

lowerVendorType = vendorItem["PurchaseType"].ToString().ToLower();
lowerVendorType = lowerVendorType.Substring(3);

Nếu (Bằng lowerVendorType.(filterType))
{
resultList[vendorIndex ] = mới Nhà cung cấp(vendorItem);
}
} // iterating thông qua tất cả các nhà cung cấp trong danh sách


trở lại TrimVendorArray(vendorIndex, resultList);
// trở lại resultList;

} // bằng cách sử dụng spweb web = site.openweb()
} // bằng cách sử dụng trang web spsite = mới spsite("http://localhost/mizuho")

} // Nếu thật sự

trở lại null;
}

tư nhân Nhà cung cấp[] TrimVendorArray(int newsize, Nhà cung cấp[] originalVendorArray)
{
Nhà cung cấp[] trimmedArray;

Nếu (newsize == 0) newsize = 1;
trimmedArray = mới Nhà cung cấp[newsize];

int currentCounter = 0;

cho (currentCounter = 0; currentCounter < newsize; currentCounter )
{
trimmedArray[currentCounter] = originalVendorArray[currentCounter];
}

trở lại trimmedArray;

}
}

Để lại câu trả lời

Địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu *