Danh mục lưu trữ: RÊU

MOSS nâng cao tìm kiếm tuỳ chỉnh — Trường hợp quan trọng trong tìm kiếm nâng cao XSLT

Tôi không sửa đổi tìm kiếm nâng cao XSLT thường xuyên, do đó, nó có vẻ như tôi đang leo núi đồi nhỏ mỗi khi.

Bài học mới nhất của tôi là đây: Trường hợp một vấn đề khi tham khảo một cột. Trong tìm kiếm nâng cao của tôi, Tôi có cột định nghĩa như thế này:

<người chủ xmlns:XSi="http://www.w3.org/2001/XMLSchema-instance">
<
Cột>
<
Cột Tên="GafTrainingInvoiceNumber" />
<
Cột Tên="GafTrainingInvoiceLocation" />
<
Cột Tên="WorkId"/>
<
Cột Tên="Đánh giá"/>
<
Cột Tên="Tiêu đề"/>
<
Cột Tên="Tác giả"/>
<
Cột Tên="Kích thước"/>
<
Cột Tên="Đường dẫn"/>
<
Cột Tên="Mô tả"/>
<
Cột Tên="Viết"/>
<
Cột Tên="SiteName"/>
<
Cột Tên="CollapsingStatus"/>
<
Cột Tên="HitHighlightedSummary"/>
<
Cột Tên="HitHighlightedProperties"/>
<
Cột Tên="ContentClass"/>
<
Cột Tên="IsDocument"/>
<
Cột Tên="PictureThumbnailURL"/>
</
Cột>
</
người chủ>

XLST hiển thị hoá đơn số và hóa đơn vị trí đã:

<p>
Đào tạo hoá đơn số: <XSL:giá trị của chọn="GafTrainingInvoiceNumber"/>
<
BR></BR>
Đào tạo hoá đơn vị trí: <XSL:giá trị của chọn="GafTrainingInvoiceLocation"/>
</
p>

Tuy nhiên, những lựa chọn có để tham khảo các tài sản trong tất cả các trường hợp thấp hơn, như trong:

<p>
Đào tạo hoá đơn số: <XSL:giá trị của chọn="gaftraininginvoicenumber"/>
<
BR></BR>
Đào tạo hoá đơn vị trí: <XSL:giá trị của chọn="gaftraininginvoicelocation"/>
</
p>


Cho đến khi tôi sửa chữa mà, kết quả tìm kiếm cho thấy các nhãn (tức là. "Đào tạo hoá đơn số") nhưng không có dữ liệu.

RÊU / Hệ phục vụ các hình thức InfoPath (InfoPath 2007) hiệu suất danh sách thả-xuống

Thêm thể loại: InfoPath

Tóm tắt: Một InfoPath 2007 hình thức được bố trí đến một máy chủ MOSS cung cấp một danh sách thả xuống của các nhà cung cấp gắn với một danh sách tùy chỉnh MOSS. Khi lựa chọn một nhà cung cấp, quy tắc chỉ định giá trị trường cho một số lĩnh vực văn bản ví dụ như đại diện bán hàng tên, địa chỉ, thành phố, nhà nước, Zip và điện thoại. Hiệu suất là khủng khiếp. Chúng tôi nhận thấy rằng hiệu suất bị nặng hơn (trong một thời trang phi tuyến tính) cho mỗi lĩnh vực bổ sung chúng tôi Cập Nhật theo cách này. Tức là, Nếu chúng ta chỉ cần Cập Nhật tên đại diện bán hàng, phải mất [x] số lượng thời gian. Nếu chúng tôi Cập Nhật đại diện bán hàng, address1, address2, thành phố, nhà nước, Số Zip, phải mất 10 thời gian dài hơn.

Giải pháp: Viết một dịch vụ web (mã mẫu có thể được tìm thấy Ở đây) đó là thông qua trong tên của một nhà cung cấp và nó sẽ trả lại các chi tiết nhà cung cấp. Sau đó, chỉ định các lĩnh vực theo cách này. Mặc dù điều này có vẻ quá chậm, đã có không có sự khác biệt discernable tại hiệu suất trong khi chúng tôi chỉ định 1 các lĩnh vực so với 8 lĩnh vực. Là một tiền thưởng thêm, người dùng nhận được một mát "liên hệ với hệ phục vụ" Cylon có hiệu lực trong khi họ chờ đợi cho các hình thức để gọi và tiêu thụ các kết quả dịch vụ.

RÊU: Xảy ra ngoại lệ. (Ngoại lệ từ HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

CẬP NHẬT: Chúng tôi không bao giờ xác định nguyên nhân gốc của vấn đề này và nó bề mặt không bao giờ một lần nữa.

Chúng tôi nhận thấy trong thời gian thực hiện của một trang web phát triển đó đột nhiên, hai người dùng không thể truy cập vào một bộ sưu tập trang web. Các tài khoản có thể xác thực để các trang web chính, nhưng khi cố gắng để truy cập vào một bộ sưu tập trang web cụ thể, họ chỉ nhận được một màn hình trống. Không có lỗi hiển thị, chỉ là một trang trống màu trắng.

Chúng tôi đăng nhập như một quản trị viên bộ sưu tập trang web và cố gắng thêm một trong những người dùng là một trang web quản trị và thời gian này, sau khi nhấn "OK", chúng tôi nhận được tin nhắn này:

Xảy ra ngoại lệ. (Ngoại lệ từ HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Chúng tôi đã dành một số thời gian nghiên cứu này và không may, đã không đưa ra bất cứ điều gì hữu ích. Đã có một số thông điệp trong Nhật ký chuẩn đoán, nhưng nó đã được khó khăn để chính xác tương quan họ với vấn đề này.

Cuối cùng, chúng tôi xóa bộ sưu tập trang web và tái tạo nó và rằng đã giải quyết nó.

Nếu tôi tìm ra những gì gây ra điều này trong tương lai, Tôi sẽ cập nhật các bài đăng này.

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;

}
}