Danh mục lưu trữ: Phát triển SharePoint

Tre lịch tương tác với SharePoint gây ra "bất ngờ lỗi"

Ngày hôm nay, Tôi đã làm việc trong một môi trường sử dụng một tre lịch web phần cho một số nghiên cứu khoa học được cải thiện. Điều này sẽ tạo ra một phương tiện truyền thông/nhỏ tiêu chuẩn trên trang trại với hai tải cân bằng WFEs, một máy chủ ứng dụng"" để lập chỉ mục và InfoPath và một nhóm SQL trở lại kết thúc.

Khách hàng cài đặt một số phần mềm phục hồi thảm họa vào một trong các WFEs và đó đã dẫn đến một WFE bị hỏng cho một trang web cụ thể trong bộ sưu tập trang web. Bất cứ khi nào tải cân bằng chỉ ở WFE bị ảnh hưởng và trang web đó, người dùng thấy một màn hình trắng trống chủ yếu với câu "một lỗi bất ngờ xảy ra". Thông tin không khác cho thấy, chỉ cần rằng câu.

Họ yêu cầu tôi để nhìn vào nó. Tôi dễ dàng sao chép vấn đề và sau đó thêm một ?nội dung = 1 đến đầu của URL. Điều này là làm thế nào tôi biết được họ đang sử dụng một phần web tre. Tôi đi trở lại trang và bây giờ, đột nhiên, nó cho thấy tôi một thông báo lỗi có trật tự tốt đẹp:

image

Tôi không biết những gì đã xảy ra hoặc những gì tôi đã làm để có được các thông báo lỗi kiểm soát để hiển thị khác hơn là phụ thêm các ?nội dung = 1 chút chuỗi truy vấn.

Điều này có lẽ là một trường hợp rất hiếm cạnh nhưng nếu bạn nhận được thông báo rằng, "Một lỗi bất ngờ đã xảy ra" đi trước và thêm ?nội dung = 1 đến chuỗi truy vấn và xem nơi đó dẫn.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Technorati Tags: ,

Sử dụng phản xạ trên Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal đã dựng lên một Các bài viết về cảnh báo và lượt xem ("Lượt xem đó có thể được sử dụng khi tạo ra một cảnh báo ?"), đó là thú vị về giá trị riêng của mình. Tuy nhiên, Tôi đã được nhiều hơn quan tâm để xem làm thế nào ông phương pháp đi qua quá trình của việc sử dụng của Redgate .NET phản xạ. Từng bước, ông đã cho thấy làm thế nào để sử dụng theo dõi công cụ đó xuống cách SharePoint sẽ xác định cho dù một cái nhìn vào một danh sách cần được "subscribable" cho thiếu từ tốt hơn (he explains this much better than I do 🙂 ).

Tại thời điểm này trong thời kỳ SharePoint, bạn sẽ gần như có được điếc và mù để không có nghe nói hoặc đọc về việc sử dụng công cụ. Nó đã nâng cao công cụ và ý thức của riêng của tôi là rằng nó là trong nhiều cách một công cụ cuối cùng. Tuy nhiên, Nếu bạn nghĩ rằng bạn cần nhưng không thực sự biết làm thế nào, Của Michael viết lên có vẻ như một hướng dẫn tuyệt vời về chủ đề này.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Sắp xếp khoản mục lịch trong hai Calendar View

Tôi đang sử dụng lịch để theo dõi các cuộc thảo luận bảng điều khiển vào một ngày nhất định. Tôi có hai khóa học: buổi sáng và buổi chiều. Tôi muốn tạo ra một cái nhìn cho thấy buổi sáng chỉ được liệt kê theo thứ tự ABC thông qua một ID phiên. Đây là một chút khôn lanh để thực hiện (trừ khi tôi mất một cái gì đó thực sự rõ ràng).

Tôi có thể dễ dàng tạo ra một cái nhìn lọc Hiển thị chỉ cần ngày hôm đó sự kiện. Lịch sẽ hiển thị tất cả các sự kiện đó và nếu họ tất cả có đặt trên cùng một giờ, nó sẽ liệt kê chúng cạnh nhau trong các khe cắm giờ. Điều đó thật tuyệt. Phần khôn lanh là, Theo mặc định, nó muốn liệt kê chúng ở định dạng ID. Vì vậy, Nếu tôi thêm "phiên 02" và sau đó "phiên 01" lịch, nó cho thấy họ trong đó đặt hàng (tức là, Phiên làm việc 02 và sau đó phiên 01). Để liệt kê chúng theo thứ tự phiên ID, Tôi nghĩ rằng để thử những điều:

  1. Cấu hình giao diện bằng cách sử dụng giao diện người dùng web. Không có may mắn. Không có không có tùy chọn để sắp xếp khoản mục theo cách này.

    Kể từ khi đó không làm việc, Tôi bây giờ, Hy vọng có là một truy vấn CAML một nơi nào đó trong đó mà sẽ cho phép tôi để ghi đè lên các loại. CQWP cho phép tôi làm điều đó loại thay đổi, có lẽ lịch sẽ là tốt?

  2. Chỉnh sửa phần web, Tìm kiếm một "xuất khẩu" chức năng và … BZZZT! Tôi không thể xuất XML của nó. Có là không có tùy chọn xuất khẩu.

    Tôi vẫn còn giữ ra hy vọng rằng tôi có thể tìm thấy và sửa đổi một số truy vấn CAML. Kể từ khi tôi không thể xuất khẩu phần web, đó lá SharePoint Designer.

  3. Tôi thêm một phần web lịch vào một trang web chỗ thử và mở trang web đó bằng cách sử dụng SharePoint Designer. Tôi nhìn vào đánh dấu cho phần web và tôi tìm thấy những gì tôi đang tìm kiếm. Nó đã mã hóa điên rồ, nhưng nó là có: "<ListViewXml …. >mã hóa điên rồ</ListViewXml>". Đặc biệt, đó là đá quý này:

<Truy vấn>
<Nơi>
<DateRangesOverlap>
<FieldRef tên = "EventDate" />
<FieldRef tên = "EndDate" />
<FieldRef tên = "RecurrenceID" />
<Giá trị loại = "DateTime">
<Tháng />
</Giá trị>
</DateRangesOverlap>
</Nơi>
<OrderBy><FieldRef tên = "Session_x0020_ID" /></OrderBy>
</Truy vấn>

(Tôi đã giải mã các &LT;của và &gt của và tách chúng ra để nhiều dòng cho vì lợi ích của sự rõ ràng).

Thêm các <OrderBy> bit và bây giờ nó sắp xếp theo Session ID, không phải nội bộ danh sách mã ID.

Khổng LỒ Mẹo o’ mũ để Becky Isserman cho bình luận của cô đến bài đăng blog Isha sử ký: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. Tôi sẽ không có đặt các <OrderBy> đúng nơi mà không có bình luận của cô.

Tôi hy vọng để viết này rõ ràng hơn với ảnh chụp màn hình nhanh chóng, nhưng trong trường hợp tôi không bao giờ làm, ít nhất tôi đã làm nhiều này.

</kết thúc>

Technorati Tags: , , ,

Tính năng SharePoint & Giải pháp quản lý — Đừng quên các u trong CRUD (hoặc d cho rằng vấn đề)

Chúng tôi gọi chung dành rất nhiều thời gian suy nghĩ về các giải pháp SharePoint — làm thế nào để tạo ra chúng, công cụ để sử dụng, những gì sẽ xảy ra khi họ không để triển khai, bộ đếm thời gian công việc, phạm vi, vv. Chúng tôi dành rất nhiều thời gian suy nghĩ về các bit lên-trước rằng nó rất dễ quên rằng chúng ta cần phải rút lại chúng cũng. Càng đáp xếp giải pháp là có lẽ khó khăn hơn, từ một quan điểm thiết kế khái niệm, hơn triển khai chúng. Triển khai cơ bản là một vụ sách dạy nấu ăn. Thông thường, cài đặt một tính năng, có thể có một bộ tiếp nhận tính năng tải một số dữ liệu vào một danh sách, rằng loại điều. Tuy nhiên, càng đáp xếp là khả năng có thể phức tạp hơn.

Một giải pháp nhất định có thể tạo ra các hiện vật như thế này:

  • Loại nội dung
  • Danh sách định nghĩa
  • Định nghĩa trang web
  • Các dữ liệu trong một danh sách
  • Thậm chí thu
  • InfoPath hình thức

Danh sách đi.

Trong khi nó là rõ ràng là quan trọng để thiết kế một giải pháp mà instantiates những đồ tạo tác một cách chính xác, nó là quan trọng để xem xét Cập Nhật và xóa trường hợp. Nếu giải pháp của bạn tạo ra một danh sách mới và populates rằng danh sách với dữ liệu, những gì sẽ xảy ra khi các giải pháp rút lại? Trong một số trường hợp, cần xóa danh sách. Trong trường hợp khác, nó nên được để lại nguyên vẹn cho các mục đích lịch sử. Yêu cầu kinh doanh của bạn sẽ hướng dẫn bạn đến các quyết định đúng.

Để giúp với điều này, tạo một ma trận liệt kê mỗi artifact của bạn giải pháp triển khai cho SharePoint. Danh sách ba cột một artifact, một cho tạo, Cập Nhật và xóa. Cho mỗi trường hợp, xác định kết quả chính xác cho chiến dịch đó.

Điều này loại phân tích rõ ràng là tốt nhất được thực hiện trước khi giải pháp bao giờ được bố trí đến một trang trại SharePoint. Tuy nhiên, giống như hút thuốc, nó không bao giờ quá muộn để bắt đầu làm việc một cách chính xác. Tạo ma trận đó và phát triển một kế hoạch để giải quyết các kịch bản Cập Nhật/xoá mất tích. Nó có thể là một vấn đề khó khăn để giải quyết, nhưng ít bạn sẽ đã đặt một hộp xung quanh vấn đề.

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên Twitter lúc http://www.twitter.com/pagalvin

Technorati Tags:

Nhanh chóng khắc phục: Dịch vụ web mà tương tác với SharePoint, InvalidOperationException

Một triệu năm trước, Tôi đã giúp phát triển một dịch vụ web được kích hoạt thông qua một hành động tùy chỉnh cho một quy trình làm việc SharePoint Designer. Tuần này, khách hàng muốn di chuyển nó vào sản xuất (cuối cùng!) Vì vậy, chúng tôi đã làm.

Hành động tùy chỉnh hoạt động tốt, nhưng các dịch vụ web nó gọi không, cho chúng tôi lỗi này:

System.InvalidOperationException: Thao tác này có thể được thực hiện chỉ trên một máy tính là tham gia vào một trang trại máy chủ của người sử dụng có quyền trong SQL Server để đọc từ cơ sở dữ liệu cấu hình. Để kết nối hệ phục vụ này với máy chủ trang trại, sử dụng SharePoint sản phẩm và công nghệ thuật sĩ cấu hình, nằm trên menu bắt đầu trong công cụ quản trị.
tại Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Chỉ ra rằng tôi quên để thêm dịch vụ vào hồ bơi ứng dụng SharePoint trong IIS. Một khi tôi đã làm điều đó, nó hoạt động tốt.

MSDN diễn đàn gửi bài này đã cho tôi đầu mối tôi cần thiết: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</kết thúc>

Đăng ký vào blog của tôi.

Theo tôi trên twitter: http://twitter.com/pagalvin

Technorati Tags:

Nhanh chóng và dễ dàng: Nhận được SPFolder của SPItemList

Tôi tiếp tục chạy vào vấn đề này và Google không bao giờ có vẻ để hiểu những gì tôi muốn làm, Vì vậy tôi figured tôi sẽ viết thư này.

Tôi đã làm rất nhiều sự kiện nhận gỡ lỗi trong tuần trước hoặc hai. Phòng cấp cứu được định nghĩa với một thư viện tài liệu. Các mục riêng lẻ trong thư viện tài liệu có liên quan chặt chẽ đến các thư mục phụ huynh. Vì vậy, Tôi luôn luôn nhận được thư mục cho các thao tác. Trong khi gỡ lỗi, Tôi cần thiết để cập nhật các siêu dữ liệu của một thư mục cho một mục cụ thể mà ID tôi biết.

Đây là một chút giao diện điều khiển ứng dụng (được thiết kế để chạy trên các máy chủ trong trang trại) mà phải mất hai đối số: ID của một mục và một giá trị để gán cho một lĩnh vực, "Trạng thái phê duyệt". Nó cứng mã rất nhiều thứ và đã không kiểm tra lỗi.

Mã nhìn lên một trang web cứng mã hoá, được một thư viện tài liệu cứng mã hoá và sau đó tìm thấy mục chỉ định. Nó sau đó tìm thấy thư mục chính của mục đó và gán giá trị trạng thái.

Bài học quan trọng đối với tôi là SPItem không nhận được bạn truy cập vào thư mục. Bạn cần phải sử dụng SPListItem.File.

Nếu bất cứ ai quan tâm để cung cấp một phê phán hoặc đề nghị một cách tốt hơn để có được vào thư mục của một mục, Xin vui lòng để lại một thảo luận.

<Mã>
bằng cách sử dụng Hệ thống;
bằng cách sử dụng System.Collections.Generic;
bằng cách sử dụng System.Text;
bằng cách sử dụng Microsoft.SharePoint;
bằng cách sử dụng System.Collections;

không gian tên Conchango
{
    /// <tóm tắt>
 /// </tóm tắt>
 lớp học ManualFolderUpdate
    {
        tĩnh void Chính(chuỗi[] args)
        {
            chuỗi MSH = "ManualFolderUpdate (v1.0): "; // MSH = "tin nhắn tiêu đề"

 Giao diện điều khiển.WriteLine(MSH + "Bắt đầu lên.  Tôi lần cuối ngày 08/04/08.");

            chuỗi URL = http://localhost/xyzzy;

            bằng cách sử dụng (SPSite oSPSite = mới SPSite(URL))
            {

                bằng cách sử dụng (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    Splist.Update() docLib = oSPWeb.Lists["Tài liệu"];

                    Giao diện điều khiển.WriteLine(MSH + "Có thư viện tài liệu.");

                    Giao diện điều khiển.WriteLine(MSH + "Doc lib mục tính.: [" + docLib.ItemCount + "].");

                    int FolderID = 0;
                    chuỗi NewStatus = "xyzzy";

                    FolderID = hệ thống.Chuyển đổi.ToInt32(args[0].ToString());
                    Giao diện điều khiển.WriteLine("Tìm kiếm thư mục cho các mục: [" + FolderID + "].");

                    SPListItem Li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Giao diện điều khiển.WriteLine(MSH + "Có cặp cha mẹ.");

                    NewStatus = args[1].ToString();
                    Giao diện điều khiển.WriteLine("Thiết lập tình trạng để [" + NewStatus + "].");

                    Giao diện điều khiển.WriteLine("Bấm trở về cam kết các bản Cập Nhật hoặc CTRL-C để hủy bỏ.");

                    Giao diện điều khiển.ReadLine();

                    thisItemFolder.Item["Trạng thái phê duyệt"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Giao diện điều khiển.WriteLine(MSH + "Hoàn thành Cập Nhật thư mục.  Thoát khỏi.");

                } // bằng cách sử dụng SPWeb

            } // bằng cách sử dụng SPSite

 Giao diện điều khiển.WriteLine(MSH + "Hoàn thành.");

        } // Chính

    } // lớp foldersync
} // không gian tên
</Mã>

</kết thúc>

Đăng ký vào blog của tôi.

Technorati Tags:

Ẩn các hành động tùy chỉnh trong SharePoint

Một vài tháng trước đây, trong khi làm việc trên một dự án cho một khách hàng, Tôi tạo ra một tính năng. Trong số những thứ khác, tính năng xác định một hành động tùy chỉnh (chúng xuất hiện trong trang web cài đặt). Mục đích duy nhất cho hành động tùy chỉnh này là để chứng minh với tôi rằng việc kích hoạt tính năng đã làm việc như mong đợi. Về cơ bản, Tôi đã sử dụng nó như là một hình thức thô của gỡ lỗi.

Nhiều bối rối của tôi, artifact gỡ lỗi này được thực hiện theo cách của mình từ dev UAT và sản xuất trước khi ai đó nhận xung quanh để yêu cầu, "những gì là liên kết này xyzzy?"

Bởi bây giờ, chúng tôi đang trong sản xuất và tôi thực sự không muốn gỡ cài đặt các tính năng, Sửa chữa elements.xml và sau đó cài đặt lại.

Todd Bleaker chỉ ra một cách dễ dàng để xử lý nó. Nói cách của mình:

"CustomActions không sao chép vào cơ sở dữ liệu, họ đang đọc trực tiếp từ các tập tin Elements.xml và sao chép vào ứng dụng tình trạng tại thời gian chạy. Vì vậy, bạn không cần phải tắt, gỡ cài đặt, cài đặt lại, và kích hoạt lại các tính năng để loại bỏ CustomAction. Chỉ cần loại bỏ nó từ các tập tin Elements.xml và tái chế các hồ bơi ứng dụng(s) thực hiện. Trong thời gian tới các tính năng là trong phạm vi, bạn sẽ không thấy CustomAction nữa."

Tôi theo hướng dẫn của ông và, Tất nhiên, họ làm việc.

Trong trường hợp của tôi, đây là một vùng cấp cài đặt với chỉ duy nhất WFE. Nếu bạn thấy mình với vấn đề này trong tương lai và nhiều WFE, Tôi tin rằng bạn sẽ cần phải thực hiện thay đổi trong mỗi.

</kết thúc>

Đăng ký vào blog của tôi.

Nhanh chóng khắc phục: Truy cập vào trang web SharePoint ném [HttpException (0x 80004005): Yêu cầu hết thời gian.]

Một trong những đồng nghiệp phát triển của tôi đã làm việc trên một dự án tuần này và chạy vào một vấn đề thời gian chờ trong khi làm việc trên một số phần điên web xây dựng. Một phần trang web của mình được tốt, nhưng "đột nhiên" một trang web không liên quan đã trở thành rất chậm và thường xuyên hết với lỗi này:

[HttpException (0x 80004005): Yêu cầu hết thời gian.]

Tôi đăng nhập và thấy rằng một số các trang web khác đã chỉ là tốt. Tôi nghi ngờ rằng đã có một số bộ phận ẩn web trên trang và sử dụng đáng tin cậy ?nội dung = 1 gỡ lỗi kỹ thuật, Tôi đã tìm thấy trong thực tế 11 web phụ tùng trên trang, chỉ là hai trong số đó đã có thể nhìn thấy. Thậm chí tốt hơn (từ một quan điểm let's-hope-I-find-something-ugly-here-that-I-can-fix), ba trong số các bộ phận đóng cửa trang web có tên "Lỗi".

Tôi đã xóa các bộ phận web (mà tự nó mất một thời gian dài đáng ngạc nhiên) và đó giải quyết vấn đề. Cho ngày hôm nay 🙂

</kết thúc>

Đăng ký vào blog của tôi.

Technorati Tags:

Invoking dịch vụ Web SSRS từ WSS / RÊU thuộc họ FBA môi trường

Chúng tôi cần thiết để gọi "CreateSubscription" Các phương pháp trên một dịch vụ web SSRS được lưu trữ trong một FBA quản lý môi trường MOSS từ một phần web tùy chỉnh. Chúng tôi giữ nhận được các biến thể của:

  • 401: Chưa được kiểm chứng
  • Đối tượng di chuyển

"Đối tượng di chuyển" tin nhắn là thú vị nhất bởi vì nó đã nói rằng "đối tượng" (chúng tôi dịch vụ SSRS) muốn "di chuyển" để login.aspx. Điều này rõ ràng có nghĩa là chúng tôi đã có một số loại vấn đề xác thực.

Tôi cuối cùng đã nhận ra rằng tôi đã có đánh dấu một blog entry bởi Robert Garret mô tả làm thế nào để gọi một dịch vụ web WSS/RÊU trơn sống bên trong một môi trường FBA. Lưu ý rằng tôi không thể liên kết trực tiếp đến bài viết (như của 06/09/08) bởi vì nó muốn xác thực. Liên kết tôi cung cấp mang đến cho bạn một "bài viết tất cả" xem và bạn có thể xác định bài viết cụ thể bằng cách tìm kiếm cho "Truy cập MOSS Web dịch vụ bằng cách sử dụng hình thức dựa trên xác thực".

Đây là mã mà làm việc cho chúng tôi:

ReportingService2006 rs = null; 
// Xác thực Xác thực auth = mới Xác thực(); 
c.chỉURL = "http://URL/_vti_bin/Authentication.asmx";
c.chỉCookieContainer =
mới CookieContainer();
Kết quả LoginResult = c.chỉĐăng nhập("userid", "mật khẩu");
Nếu (kết quả.ErrorCode == LoginErrorCode.NoError) 
{
// Không có lỗi, do đó, có các tập tin cookie.
CookieCollection cookie = c.chỉCookieContainer.GetCookies(mới URI(c.chỉURL));
Cookie authCookie = cookie[kết quả.CookieName];
RS =
mới ReportingService2006();
RS.URL =
"http://Server/_vti_bin/ReportServer/ReportService2006.asmx";
RS.CookieContainer =
mới CookieContainer();
RS.CookieContainer.Add(authCookie);
}
Hãy thử
{
  RS.CreateSubscription(báo cáo, extSettings, desc, eventType, matchData, parameters1);
}
bắt (Ngoại lệ cũ)
{
  System.console.WriteLine(cũ.Message.ToString());
}

Tôi giải thích những điều để làm việc như thế này:

  • Một phần trang web của chúng tôi cần phải quay số dịch vụ xác thực và nói, "Hey, Tony, nó là tôi!".
  • Xác thực dịch vụ trả lời nói, "Hey, Tôi biết bạn. Làm thế nào là những đứa trẻ? Đây là một mã thông báo."
  • Chúng tôi gọi Dịch vụ SSRS và nói, "Tony đã gửi cho tôi, đây là kỷ niệm."

</kết thúc>

Đăng ký vào blog của tôi.

Nhanh chóng và đơn giản: Cấp quyền truy cập một trang Web bằng cách sử dụng mô hình đối tượng SharePoint trong C#

Tôi đã cố gắng tìm kiếm một chút đoạn mã đó sẽ hiển thị như thế nào tôi có thể tạo ra một SPWeb mới trong một bộ sưu tập trang web. Tôi đã không thấy nó như là một cách nhanh chóng hoặc dễ dàng như tôi mong đợi vì vậy tôi nghĩ rằng tôi sẽ slap với nhau một chút mục về chủ đề.

Mã này tạo ra một trang web Wiki mới:

 SPSite siteCollection;

    siteCollection = mới SPSite("http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy tiêu đề",
        "xyzzy mô tả", 1033, SPWebTemplate.WebTemplateWIKI, sai, sai);

Tìm kiếm ban đầu của tôi không thành công vì tôi đã tìm kiếm cụm từ như "cung cấp một trang web bằng cách sử dụng mô hình đối tượng sharepoint" và như thế.

Nếu bạn Tìm kiếm cho "Webs.Add()", bạn sẽ tìm thấy một số rất hữu ích blog mới, Bài viết MSDN và tài liệu SDK mà đi vào chiều sâu về chủ đề này. Tôi khuyên bạn nên chắc chắn Trang web này.

</kết thúc>

Đăng ký vào blog của tôi.

Technorati Tags: