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

Giải thích đơn giản: “Giá trị không nằm trong phạm vi dự kiến.”

CẬP NHẬT: Một áp phích chưa xác định người để lại một bình luận lớn về nội bộ tên. Hãy chắc chắn để đọc nó.

Khi làm việc với các sự kiện thu và mã khác mà tài liệu tham khảo bản ghi danh sách SharePoint thông qua các mô hình đối tượng, Tôi thường làm cho những sai lầm mà tạo ra lỗi này tại thời gian chạy:

Lỗi nạp và chạy sự kiện nhận Conchango.xyzzyEventReceiver trong xyzzy, Phiên bản = 1.0.0.0, Văn hóa = trung tính, PublicKeyToken = 0dc50a750396c3ac. Bổ sung thông tin là dưới đây. : Giá trị không nằm trong phạm vi dự kiến.

Tôi nghĩ rằng đây là một lỗi khá chung chung có khả năng gây ra nhiều cách khác nhau. Tuy nhiên, một lời giải thích đơn giản là tôi đang tìm một lĩnh vực không chính xác. Nếu tên của trường là "Ngày hết hạn", Tôi phải tham chiếu nó như thế này trong một bộ tiếp nhận sự kiện:

bất động sản.ListItem["Ngày"]

Khi tôi sai hoặc sử dụng các trường hợp sai khi tham khảo các lĩnh vực, SharePoint tạo ra ở trên đề cập đến thời gian chạy lỗi. Ví dụ:, Điều này là sai:

bất động sản.ListItem["ngày"]

</kết thúc>

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

Technorati Tags:

Nhanh chóng & Dễ dàng: Tạo một thư mục và gán cho một loại nội dung (Hoặc, Có KPIs của bạn và ăn chúng quá)

Để làm việc xung quanh vấn đề KPI Tôi đã viết về đây, Tôi đã làm một số thử nghiệm và phát hiện ra rằng KPI công việc chống lại các thư mục với meta dữ liệu giống như cách họ làm việc với tài liệu hoặc danh sách các mục. Tôi đã chứng minh nó ra bằng cách tạo ra một loại nội dung mới dựa trên các loại nội dung thư mục và sau đó thêm vào một vài lĩnh vực. Tôi tạo ra một số chỉ tiêu và được chứng minh bản thân mình rằng tiêu chí làm việc như mong đợi. Điều này đã là chào đón tin tức. Nó không phải là hoàn hảo, bởi vì xuống khoan, bạn nhận được từ KPI chống lại các thư mục là không chính xác những gì bạn muốn. Đây không phải là quá nhiều một nhược điểm trong trường hợp của tôi, bởi vì 1) người dùng cuối không biết bất kỳ tốt hơn và 2) khoan xuống đi vào một thư mục. Họ bấm vào tên thư mục và họ đang ở mục. Đó là hai lần nhấp chuột thay vì một, mà không phải là kết thúc của thế giới.

Điều này chảy độc đáo với các công việc tôi đã làm. Tôi là tạo ra một thư mục cho mỗi tài liệu được tải lên. Điều này được thực hiện thông qua một bộ tiếp nhận sự kiện. Kết quả là, đó là một miếng bánh để giữ cho các cặp cha mẹ meta dữ liệu đồng bộ với các dữ liệu meta KPI thúc đẩy từ các tập tin riêng của mình kể từ khi đường ống dẫn nước đã đặt ra. This allows me to have my KPI’s and eat them too 🙂

Tôi sửa đổi nhận sự kiện để thêm các thư mục và sau đó thiết lập kiểu nội dung cặp này mới để tôi loại nội dung thân thiện với KPI tùy chỉnh. Bit của mã này đã làm các trick:

 SPFolderCollection srcFolders = targetWeb.GetFolder("Tài liệu").Thư mục con;
  SPFolder addedFolder = srcFolders.Add(bất động sản.ListItem.ID.ToString());
  SPContentTypeId kpiCT = mới SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["Nội dung loại ID"] = kpiCT;
  addedFolder.Item.Update();

Để xác định vị trí thực tế kiểu nội dung ID, Tôi truy cập đó loại nội dung thông qua trang web cài đặt và sao chép/dán nó từ URL như hiển thị:

hình ảnh

</kết thúc>

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

Technorati Tags: ,

Nhanh chóng và dễ dàng: Nhận được SPFolder một SPListItem trong một bộ tiếp nhận sự kiện

Tôi ghét phải thừa nhận nó, nhưng tôi phải vật lộn với một tất cả ngày. Nhận sự kiện của tôi cần phải cập nhật một lĩnh vực thư mục mẹ của nó. Điều này chút cho thấy làm thế nào để làm điều đó:

tư nhân void UpdateParentFolder(SPItemEventProperties thuộc tính)
{

SPFolder thisItemFolder = thuộc tính.ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ phê duyệt Status"] = "Good news, tất cả mọi người!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

Trong trường hợp này, Tôi đang làm việc với một thư viện tài liệu và các thuộc tính đang đến từ một sự kiện ItemAdded.

Các trick là bạn không thể nhận được SPFolder mục trực tiếp từ mục riêng của mình (tức là. bất động sản.ListItem.Folder là không). Thay vào đó, đi vào mục danh sách liên kết tập tin và nhận được các tập tin thư mục.

</kết thúc>

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

Technorati Tags:

Được một sự kiện nhận gỡ lỗi Trick

Tôi chắc rằng tôi không phải là người đầu tiên để đi lên với điều này. Tuy nhiên, Tôi đã không nhận thấy bất cứ ai cũng xuất bản một thủ thuật như thế này kể từ khi tôi bắt đầu chú ý cho cộng đồng cuối tháng bảy. Vì vậy, Tôi nghĩ rằng tôi muốn đăng nó này Mẹo nhanh chóng và dễ dàng gỡ lỗi.

Tôi đang làm việc trên một bộ tiếp nhận sự kiện bắt đầu để tạo ra lỗi này trong các 12 tổ ong:

Lỗi nạp và chạy sự kiện nhận Conchango.xyzzyEventReceiver trong xyzzy, Phiên bản = 1.0.0.0, Văn hóa = trung tính, PublicKeyToken = blahbalhbalh. Bổ sung thông tin là dưới đây. : Đối tượng tham chiếu không được đặt để một thể hiện của một đối tượng.

Tôi không biết nơi mà tôi đã giới thiệu lỗi này bởi vì tôi đã làm quá nhiều thứ trong một chu kỳ mã/triển khai/thử nghiệm của tôi.

Tôi đã cố gắng giải pháp này để có được pdb của tôi ở đó với hy vọng rằng SharePoint 12 tổ ong sẽ hiển thị theo dõi stack, nhưng không có may mắn. Tôi không biết nếu nó có thể và nếu ai đó làm, Xin vui lòng cho tôi biết 🙂

Tôi biết nó có thể viết của riêng bạn thông điệp ghi để các 12 tổ ong. Thẳng thắn, Tôi muốn một cái gì đó một chút ít đáng sợ và nhanh hơn để thực hiện.

Nó xảy ra với tôi rằng tôi có thể ít nhận được một số thông tin cơ bản theo dõi bởi đánh bắt và tái ném các ngoại lệ chung như thế này:

  Hãy thử {
    UpdateEditionDate(thuộc tính);
  }
  bắt (Ngoại lệ e)
  {
    ném mới Ngoại lệ("Dispatcher, UpdateEditionDate(): Ngoại lệ: [" + e.ToString() + "].");
  }

Điều này cho thấy trong các 12 hive thusly:

Lỗi nạp và chạy sự kiện nhận Conchango.xyzzyEventReceiver trong xyzzy, Phiên bản = 1.0.0.0, Văn hóa = trung tính, PublicKeyToken = blahblahblah. Bổ sung thông tin là dưới đây. : Dispatcher, UpdateEditionDate(): Ngoại lệ: [Hệ thống NullReferenceException.: Đối tượng tham chiếu không được đặt để một thể hiện của một đối tượng. tại Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties thuộc tính) tại Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties thuộc tính, Chuỗi eventDescription)].

Đó đã cho tôi tất cả các chi tiết tôi cần thiết để theo dõi vấn đề cụ thể đó và tôi hy vọng sẽ sử dụng nó rất nhiều đi về phía trước.

</kết thúc>

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

Giải pháp: SPQuery không tìm thấy thư mục

Điều này qua tuần tôi đã thực hiện một "phát triển" Các giải pháp cho một khách hàng sử dụng BDC và SPQuery và chạy vào một số khó khăn bằng cách sử dụng SPQuery chống lại một thư viện tài liệu có chứa thư mục. Điểm mấu chốt: chỉ định "đệ quy" để xem thuộc tính của các truy vấn.

Kịch bản của tôi:

  • Ngày thứ hai, Tôi tải lên một tài liệu và cung cấp một số dữ liệu meta.
  • Tuần sau, Tôi tải lên một tài liệu mới. Phần lớn tài liệu mới này meta dữ liệu dựa trên các tài liệu tôi đã tải lên vào ngày thứ hai (mà chúng tôi gọi là "tài liệu tổng thể").
  • Chúng tôi đã tạo ra một mặt tiền dịch vụ web cung cấp một giao diện thân thiện với BDC vaøo danh saùch để người dùng có thể dễ dàng xác định vị trí tài liệu thứ hai đó thông qua một tìm kiếm tiêu đề.
  • Một cột dữ liệu BDC cung cấp một giao diện người dùng thân thiện. (Đây là một phần của nỗ lực của tôi lúc bằng cách sử dụng BDC cho một cột Lookup thân thiện hơn).

Các dịch vụ mặt tiền BDC cuối cùng sử dụng một truy vấn như thế này để làm việc tra cứu:

 // Sử dụng công cụ U2U để hỗ trợ trong việc tạo truy vấn CAML này.
      oQuery.Query =
        "<Nơi>";

      Nếu (titleFilter.Length > 0)
        oQuery.Query =
          "  <Và>";

      oQuery.Query =
        "    <Và>" +
        "      <Geq>" +
        "        <FieldRef tên =  "DocumentId" />" +
        "        <Giá trị loại =  "Text">" + minId + "</Giá trị>" +
        "      </Geq>" +
        "      <LEQ>" +
        "        <FieldRef tên =  "DocumentId" />" +
        "        <Giá trị loại =  "Text">" + maxId + "</Giá trị>" +
        "      </LEQ>" +
        "    </Và>";

      Nếu (titleFilter.Length > 0)
        oQuery.Query =
          "    <Chứa>" +
          "      <FieldRef tên =  "Title" />" +
          "      <Giá trị loại =  "Text">" + titleFilter + "</Giá trị>" +
          "    </Chứa>" +
          "  </Và>";
      oQuery.Query =
        "</Nơi>";

Trong giai đoạn ban đầu của sự phát triển, Điều này làm việc tuyệt vời. Tuy nhiên, chúng tôi giới thiệu thư mục vào thư mục để giải quyết một số vấn đề và đột nhiên, chọn BDC của tôi sẽ không trả lại bất kỳ kết quả. Tôi theo dõi điều này xuống đến một thực tế rằng SPQuery sẽ không bao giờ trở lại bất kỳ kết quả. Chúng tôi sử dụng thư mục chủ yếu để cho phép nhiều tập tin có cùng tên được tải lên, nhưng với dữ liệu meta khác nhau. Khi các tập tin được tải lên, chúng tôi tạo ra một thư mục dựa trên mục danh sách ID và sau đó di chuyển các tập tin có (Tôi đã viết về điều đó Ở đây; chúng tôi đã có kết quả hỗn hợp với cách tiếp cận này, nhưng trên toàn bộ, nó làm việc tốt). Người dùng không quan tâm về thư mục và trong thực tế, không thực sự hiểu là bất kỳ thư mục. Chúng tôi đã đặt cấu hình tất cả các quan điểm trên các thư viện để hiển thị các mục bất kể thư mục.

Tôi nhấn này vấn đề hai lần như thực hiện kỹ thuật phát triển và giải quyết nó một cách khác nhau mỗi thời gian. Lần đầu tiên, Tôi đã không sử dụng các nhà điều hành chứa trong truy vấn. Mà không có một nhà điều hành chứa, Tôi đã có thể giải quyết vấn đề bằng cách xác định quan điểm trên SPQuery của contructor. Thay vì sử dụng các nhà xây dựng mặc định:

Splist.Update() oList = trang web.Danh sách["Tài liệu"];

SPQuery oQuery = mới SPQuery();

Tôi thay vì sử dụng một nhà xây dựng đã chỉ định một lần xem:

Splist.Update() oList = trang web.Danh sách["Tài liệu"];

SPQuery oQuery = mới SPQuery(oList.Views["Tất cả tài liệu"]);

Mà giải quyết vấn đề và tôi bắt đầu để có được kết quả của tôi.

Tôi sau đó thêm các nhà điều hành chứa vào hỗn hợp và nó đã phá vỡ một lần nữa. Nó chỉ ra rằng các nhà điều hành chứa, cho đến nay như tôi có thể cho biết, không làm việc với chế độ xem theo cùng một cách như là một GEQ đơn giản / Quốc gia sử dụng LEQ. Tôi đã làm một số tìm kiếm và đã học được rằng các truy vấn ViewAttributes nên được thiết lập để "Đệ quy", như trong:

oQuery.ViewAttributes = "Phạm vi = "Recursive"";

Mà giải quyết vấn đề cho chứa. Thực tế, Điều này cũng đã giải quyết vấn đề tìm kiếm ban đầu của tôi và nếu tôi đã có lý thuyết đệ quy thuộc tính đầu tiên, Tôi sẽ không có chạy vào các vấn đề một lần nữa.

Thực tế là một SPQuery xem dựa trên hoạt động cho một số quốc gia sử dụng (GEQ/LEQ) và không phải những người khác (CHỨA), kết hợp với thực tế là tiêu chí không có vẻ làm việc ở tất cả với thư mục có chứa tài liệu thư viện dẫn tôi để tin rằng SPQuery có một số vấn đề orthogonality.

Cảm ơn đặc biệt:

  • The folks tốt tại U2U và công cụ truy vấn của họ.
  • Michael Hoffer tuyệt vời "học vừa làm" bài đăng blog, ý kiến và phản ứng.

</kết thúc>

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

MOSS KPI lỗi? Chỉ báo danh sách gắn với thư viện tài liệu với các thư mục

CẬP NHẬT 02/29/08: Tôi giải quyết vấn đề này bằng cách tạo một thư mục và sau đó chỉ định loại nội dung vào thư mục đó có dữ liệu meta mà tôi cần cho các tiêu chí. Tôi mô tả mà chi tiết hơn một chút ở đây.

Chúng tôi đã thực hiện một giải pháp kỹ thuật mà người dùng tải lên các tài liệu đến một thư viện tài liệu. Một bộ tiếp nhận sự kiện tạo ra một thư mục và di chuyển các tập tin thư mục đó (bằng cách sử dụng một kỹ thuật tương tự như những gì tôi đã viết về Ở đây). Chúng tôi đã thành công đã điều hướng xung quanh các vấn đề tiềm năng gây ra bởi sự kiện thu đổi tên tập tin được tải lên (chủ yếu là bởi vì người dùng không bao giờ bắt đầu tài liệu của họ bằng cách nhấp vào "New" nhưng thay vào đó tạo ra các tài liệu tại địa phương và sau đó, tải chúng lên).

Các dữ liệu meta cho các tài liệu này bao gồm một có/không có cột trang web được gọi là "khẩn cấp" và một trang web cột được gọi là "Trạng thái". Chúng ta cần phải đáp ứng một yêu cầu kinh doanh cho thấy tỷ lệ phần trăm của "khẩn cấp" tài liệu tình trạng mà là "Đang chờ xử lý".

Điều này là thường đơn giản để làm và tôi đã mô tả một cái gì đó rất nhiều như thế này tại SharePoint Beagle với rất nhiều ảnh chụp màn hình nếu bạn quan tâm.

Trong một nutshell, Tôi đã làm những điều sau đây:

  • Tạo ra một cái nhìn vào thư viện tài liệu gọi là "Đang chờ xử lý".
  • Cấu hình giao diện để bỏ qua cấu trúc thư mục.
  • Tạo một danh sách KPI.
  • Tạo ra một chỉ số trong danh sách điểm đến doc lib và rằng "đang chờ xử lý" Xem.

Điều này chỉ đơn giản là không làm việc. KPI cho thấy mục tiêu của tôi (Ví dụ như. 5 tài liệu khẩn cấp) nhưng luôn luôn thể hiện thực tế số khẩn cấp tài liệu là zero. Nghịch lý, Nếu bạn khoan xuống đến các chi tiết, nó cho thấy các tài liệu khẩn cấp 5 trong danh sách. Tôi tạo ra một kịch bản rất đơn giản với hai tài liệu, một trong một thư mục và không. Dưới đây là ảnh chụp màn hình:

hình ảnh

Ảnh chụp màn hình ở trên rõ ràng cho thấy có hai tài liệu trong chế độ xem nhưng giá trị"" là một. "CamlSchema" với tài liệu trống Id nằm trong thư mục gốc và khác là trong một thư mục có tên "84".

Vẻ với tôi là ngay cả khi bạn chỉ định một lần xem, KPI không tôn vinh các "Hiển thị tất cả các mục mà không có thư mục" thiết lập và thay vào đó, confines chính nó đến thư mục gốc.

Nếu tôi là sai, Xin vui lòng thả cho tôi một dòng hoặc để lại một thảo luận.

</kết thúc>

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

Technorati Tags:

Giải pháp cho vấn đề: “FileNotFoundException” Với tôi nhận tính năng.

Tôi đã làm việc ngày một tính năng cuối tuần mà sẽ thêm một số sự kiện nhận vào một trường hợp cụ thể danh sách. (Tôi viết blog một chút về đó ở đây danh sách người nhận).

Bằng cách sử dụng dòng lệnh, Tôi có thể cài đặt các tính năng với không có lỗi (nhưng xem dưới đây cho lỗi ẩn). Khi tôi đã cố gắng để triển khai tính năng trên trang web, MOSS phàn nàn của một "FileNotFoundException" lỗi. Blog entry này mô tả làm thế nào tôi giải quyết nó.

Đây là lỗi MOSS đã cho thấy tôi trong trình duyệt web:

Tính năng ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ có thể không được cài đặt bởi vì nạp các sự kiện nhận hội "xyzzyFeatureReceiver_0" thất bại: System.io.FileNotFoundException: Không thể nạp tệp hoặc lắp ráp ' xyzzyFeatureReceiver_0’ hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp đã chỉ rõ.
Tên tập tin: ' xyzzyFeatureReceiver_0’
tại System.Reflection.Assembly.nLoad(Tên tập tin AssemblyName, Chuỗi codeBase, Bằng chứng assemblySecurity, Hội đồng locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
tại System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Bằng chứng assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
tại System.Reflection.Assembly.InternalLoad(Chuỗi assemblyString, Bằng chứng assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
tại System.Reflection.Assembly.Load(Chuỗi assemblyString)
tại Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Lắp ráp ràng buộc đăng nhập bị tắt.
Để cho phép lắp ráp ràng buộc đăng nhập thất bại, Đặt giá trị sổ đăng ký [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) để 1.
Lưu ý: Đó là một số hình phạt hiệu suất kết hợp với lắp ráp ràng buộc đăng nhập thất bại.
Để tắt tính năng này, loại bỏ giá trị đăng ký [HKLMSoftwareMicrosoftFusion!EnableLog].

Khắc phục sự cố với Windows SharePoint dịch vụ.

Tôi biết làm thế nào để cố tình gây ra lỗi đó: không cài đặt lắp ráp ở gấc. Nhưng, nó đã ở gấc. Tôi thường cài đặt hội đồng thành gấc bằng cách kéo chúng vào c:\windowsassembly thư mục bằng cách sử dụng windows explorer. Tôi đã không bao giờ cảm thấy 100% thoải mái làm điều đó bởi vì tôi luôn luôn nghĩ rằng gacutil tồn tại cho một lý do … Vì vậy, tôi đã cố gắng đó. Nó làm cho không có sự khác biệt.

Tôi tìm kiếm các Internets và tìm thấy bài đăng này: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

Người gửi đã xảy ra để sử dụng cùng một gốc bit mã (từ cuốn sách bên trong WSS từ danh sách này) Vì vậy, đó là một dấu hiệu hy vọng. Tuy nhiên, theo đề nghị của trang trí hội đồng với một [lắp ráp: ] chỉ thị không có ý nghĩa với tôi. Tôi đã thử nó anyway và tôi đã đúng. Nó làm cho không có sự khác biệt.

Sau đó tôi nhận thấy rằng định nghĩa lớp của tôi đã không công cộng. Tôi đã làm cho nó công cộng và làm cho không có sự khác biệt.

Tiếp theo, Tôi đã đi đến sự cố khi tạo điều kiện cho "hội ràng buộc thất bại log" (theo các hướng dẫn hữu ích và chính xác cung cấp) và đây là nơi mọi thứ bắt đầu để có được thú vị. Nhật ký đó cho thấy tôi rằng thời gian tìm kiếm ở khắp mọi nơi trên máy chủ đó để lắp ráp của tôi. Nó thậm chí xuất hiện để tìm kiếm cho nó trong tủ thuốc của tôi. Nhưng … nó sẽ không tìm kiếm cho nó trong gấc.

Tôi đặt trên áo khoác mùa đông của tôi và đi tìm kiếm các Internets một lần nữa và tìm thấy rằng ai đó đã có vấn đề này quá. Các cuộc thảo luận dài trong bài đó peters ra vào không có gì và tôi không thể tìm thấy một giải pháp.

Tôi di chuyển lắp ráp của tôi vào một trong những nơi Nhật ký tuyên bố nó tìm kiếm và tôi thực hiện tiến bộ nhiều hơn một chút. Tôi đang thưởng bằng một lỗi mới trong trình duyệt khi tôi cố gắng để kích hoạt các tính năng:

Thất bại trong việc tạo ra tính năng nhận đối tượng từ hội "xyzzyFeatureReceiver_0", loại "Conchango.xyzzyFeatureReceiver" Đối với tính năng b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Giá trị không thể được null.
Tên tham số: loại
tại System.Activator.CreateInstance(Loại loại, Boolean quan)
tại System.Activator.CreateInstance(Loại loại)
tại Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Khắc phục sự cố với Windows SharePoint dịch vụ.

Thời gian cho một chuyến đi cuối cùng để các Internets!

Thời gian này tôi tìm ra, predictably đủ, RÊU vấn đề lỗi này bởi vì việc lắp ráp không phải là gấc.

Tôi muốn có được một cái gì đó tích cực ra khỏi đây và cố gắng để cảm thấy một chút tự hào rằng tôi đã tạo ra các Bỏ trốn của Hội đồng MSIL, nhưng nó không hoạt động. Tôi khó chịu chỉ là đồng bằng. Tôi tìm thấy bản thân mình muttering "gà hoặc trứng" theo hơi thở của tôi.

Tôi cuối cùng đã quyết định punt. Tôi tạo ra một dự án hoàn toàn mới và sao chép/dán mã từ dự án không làm việc incredible-cloaked-from-the-GAC-assembly hơn cho dự án này mới. (Tôi nhìn cho một lá cờ xây dựng được gọi là một cái gì đó như "ẩn từ lắp ráp ràng buộc nếu được cài đặt trong gấc" nhưng không thể tìm thấy một).

Tôi cài đặt các tính năng và kích hoạt nó và … nó hoạt động! Vì vậy, sau khi tất cả những gì, Tôi phải về cơ bản ' khởi động lại’ dự án của tôi. Đây là một lý do tại sao tôi ghét máy tính.

Tôi đã học điều gì hữu ích từ này. Tôi đã cài đặt tính năng bằng cách sử dụng dòng lệnh stsadm tất cả các ngày dài và sử dụng các "-lực lượng" lựa chọn ra khỏi thói quen. Đối với một số lý do, Tôi đã không sử dụng tùy chọn-lực lượng khi tôi cài đặt dự án mới. Thời gian này, Tôi đã thực sự, thực sự quên sao chép dự án mới này lắp ráp vào gấc. Kết quả là, Tôi nhận được rằng "FielNotFoundException" lỗi. Thời gian này, Tôi đã nhận nó từ stsadm, không khi tôi cố gắng để kích hoạt tính năng thông qua trình duyệt web. Vì vậy, -lực lượng thực sự chơi hai vai trò. Nó cho phép bạn cài đặt một tính năng sẵn có. Nó cũng cho phép bạn cài đặt một tính năng lỗi mà không thể làm việc tại thời gian chạy của đàn áp lỗi. Nó có thể nói là nhiều trong sự giúp đỡ một nơi nào đó nhưng tôi không bao giờ nhận thấy nó.

</kết thúc>

Nhanh chóng & Dễ dàng: Đổi tên tập tin được tải lên bằng cách sử dụng mô hình đối tượng SharePoint thông qua một bộ tiếp nhận sự kiện

CẬP NHẬT: Điều này làm việc nhưng cũng có những hạn chế quan trọng được mô tả trong các ý kiến. Điều này vẫn có thể hữu ích trong một số cirumstances.

CẬP NHẬT 2: Trong dự án hiện tại của tôi, người dùng luôn luôn tải tài liệu. Kết quả là, Tôi không chạy vào một vấn đề nơi MS Word chạy và nghĩ rằng các tập tin đã được đổi tên vào nó. Tôi đã chạy vào một vấn đề, "các tập tin được sửa đổi lần bởi người khác" và giải quyết điều này thông qua một lá cờ loại đơn giản semaphore. Người dùng cần phải thay đổi một trường dữ liệu meta từ giá trị mặc định của nó để một cái gì đó khác. Itemupdated() nhận sẽ cho một giá trị hợp lệ có trước khi thực sự thực hiện việc đổi tên và kể từ đó, Tôi đã không có bất kỳ vấn đề. Mileage của bạn có thể thay đổi.

Tôi có một yêu cầu của khách hàng để thay đổi tên của tập tin tải lên một thư viện tài liệu cụ thể để phù hợp với một quy ước đặt tên cụ thể. API không cung cấp một "đổi tên()" phương pháp. Thay vào đó, chúng tôi sử dụng "MoveTo(…)". Dưới đây là một chút tối thiểu của mã thực hiện việc này:

 công cộng ghi đè void ItemAdded(SPItemEventProperties thuộc tính)
        {
            SPFile f = thuộc tính.ListItem.File;

            f.MoveTo(bất động sản.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

Chút khôn lanh chỉ là "thuộc tính. ListItem.ParentList.RootFolder.Url". Ổn() phương pháp đòi hỏi một URL. Mà nghiền lên chuỗi điểm tôi vào thư mục gốc của thư viện tài liệu hiện tại của tôi. Điều này cho phép tôi để tránh bất kỳ mã hóa cứng trong nhận sự kiện của tôi.

Đây là một phiên bản hữu dụng hơn mà không cùng một điều, nhưng sẽ gán tên tệp cho "Tiêu đề":

 công cộng ghi đè void ItemAdded(SPItemEventProperties thuộc tính)
        {
            DisableEventFiring();

            // Chỉ định tên của khoản mục này đến tên của tập tin riêng của mình.
 // LƯU Ý: Chuyển nhượng này phải diễn ra trước khi chúng tôi sửa đổi các tập tin riêng của mình.
 // Gọi Cập Nhật() về SPFile có vẻ vô tài sản tại
 // một số ý nghĩa.  Cập Nhật của "tiêu đề" thất bại cho đến khi có thay đổi (và Cập Nhật() cuộc gọi)
 // đã được di chuyển ở phía trước của sự thay đổi để tên tập tin.
            bất động sản.ListItem["Tiêu đề"] = thuộc tính.ListItem.File.Name;

            bất động sản.ListItem.Update();

            SPFile f = thuộc tính.ListItem.File;

            // Có được phần mở rộng của tập tin.  Chúng ta cần mà sau này.
 chuỗi spfileExt = mới FileInfo(f.name).Phần mở rộng;

            // Đổi tên tập tin để mục danh sách ID và sử dụng phần mở rộng file để giữ
 // đó là một phần của nó còn nguyên vẹn.
            f.MoveTo(bất động sản.ListItem.ParentList.RootFolder.Url +
                "/" + bất động sản.ListItem["ID"] + spfileExt);

            // Cam kết việc di chuyển.
            f.Update();

            EnableEventFiring();
        }

Mẹo nhanh: Nội dung truy vấn Web Part, Tra cứu cột giá trị và XSL

Tôi có một tên cột trong một loại nội dung được đặt tên "Bất động sản địa điểm".

Cột là loại "tìm kiếm".

Tôi đã thay đổi <CommonViewFields> và ItemStyle.xsl để hiển thị các cột.

Một đơn giản <XSL:giá trị của chọn =…> trả về một giá trị nội bộ bao gồm tự vị trí dữ liệu trở lại, chẳng hạn như:

1;#Miami

Để có được giá trị con người thân thiện, sử dụng xsl chuỗi con sau, như được hiển thị:

<XSL:( @Real_x005F_x0020_Estate_x005F_x0020_Location, '#') ">< / xsl:giá trị của >(@Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></XSL:giá trị của>

Sử dụng kỹ thuật này bất cứ khi nào bạn đang làm việc với tìm kiếm giá trị trong biến đổi XSL và cần phải nhận được giá trị con người thân thiện.

<kết thúc />

Technorati Tags: , ,

Nhanh chóng và dễ dàng: Xác định nội bộ cột tên của một cột trang web

CẬP NHẬT: Jeremy Thake đã viết blog về việc này và đưa lên một số mã cho một ứng dụng giao diện điều khiển mà cho thấy tên nội bộ.

Tôi đã cố gắng để có được một phần nội dung truy vấn web để hiển thị một ngày đáo hạn từ một nhiệm vụ và bởi vì màn hình nhãn là "Ngày hết hạn", Tôi giả định rằng tên cột để sử dụng trong <CommonViewFields> là "Due_x0020_Date".

Sai!

Tên thật cột trong trường hợp này là "DueDate".

Làm thế nào tôi tìm thấy nó? Tôi tái đọc Heather Solomon của blog entry về cách sửa đổi CQWP để hiển thị các cột bổ sung dữ liệu. Cô mô tả quá trình này tại bước #13. Tin tưởng nó. Nó là chính xác. Tối thiểu, nó đã được chính xác cho tôi. Tôi đã không tin tưởng nó ban đầu cho một cột với một tên dài hơn nhiều.

Tôi nói "tin tưởng nó" bởi vì tôi đã không tin tưởng nó và có thể lãng phí gần hai giờ húc đầu của tôi lên chống lại một bức tường. Sau khi tôi giải quyết "DueDate" Tên, Tôi muốn thêm một lĩnh vực để <CommonViewFields>. Sử dụng kỹ thuật Solomon, Tôi đã nhận được một tên cột giống như "XYZ_x0020_Project_x0020_Due_x00".

Tôi nghĩ đến bản thân mình, đó rõ ràng là một tên cắt ngắn. Tôi đã đi trước và Liên Hiệp Quốc cắt ngắn nó với sự thành công không. Tôi cuối cùng đã sử dụng tên dường như cắt ngắn và nó làm việc.

Tiền thưởng tip: Khi tôi đã làm việc với CQWP, Nếu tôi thêm vào một tên nội bộ xấu để <CommonViewFields>, CQWP sẽ cho tôi biết các truy vấn đã trở lại không có kết quả. Nhưng, Nếu tôi thêm vào một kiểu dữ liệu tên trường, nó sẽ trở lại một kết quả. Thêm dữ liệu loại thực sự ẩn một vấn đề kể từ khi tôi đã tham khảo một lĩnh vực không tồn tại. Tôi có thể thêm nó, nhưng khi tôi đã cố gắng để hiển thị giá trị của nó, Tôi sẽ luôn luôn có được một trống.

Điều này đã không mặt nạ lỗi:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

Điều này đã làm mặt nạ lỗi:

<CommonViewFields>Due_x0020_Date,DateTime;</CommonViewfields>

</kết thúc>