10

Tôi làm việc trên một dự án mà chúng tôi đang xem xét sử dụng Orchard CMS.Cách thay đổi kho lưu trữ hồ sơ Orchard

Tuy nhiên, chúng tôi muốn sử dụng dịch vụ web làm nguồn dữ liệu cho một số mục nội dung. Tôi đoán chúng ta phải thay đổi việc triển khai kho lưu trữ để thực hiện điều này, nhưng tôi không chắc chắn về điều đó.

Vì vậy, câu hỏi của tôi là: Tôi đoán chính xác hay phức tạp hơn? Và làm thế nào nó có thể được thực hiện sau đó?

Cảm ơn!

Cập nhật: Tôi thấy giao diện IRepository của Orchard yêu cầu nhà cung cấp LINQ phải được triển khai. Điều đó là không thể trong kịch bản này vì các dịch vụ web được cung cấp thông qua SOAP.

tôi sẽ tốt hơn tiếp tục mô tả kịch bản:

Trang web chúng tôi mong muốn xây dựng có sử dụng dịch vụ web để có được thông tin về một thành viên tổ chức và đơn vị. Chúng tôi muốn hiển thị các thành viên của một số đơn vị tổ chức, ví dụ, trên trang web. Chúng tôi cũng muốn tạo kiểu nội dung "Sự kiện" của chính chúng ta cần có mối quan hệ M: N (Người tham dự) với "Thành viên" (từ WS).

+0

Cố gắng làm rất nhiều điều tương tự. Đưa nội dung vào một phần - cũng tìm cách tích hợp quản lý người dùng vào hỗn hợp. – justSteve

Trả lời

16

Bạn không phải triển khai IRepository trong trường hợp bạn không muốn hoàn toàn trực tiếp bộ nhớ một phần ở một nơi khác. Tôi hiện đang sử dụng dịch vụ WCF tại một trong những dự án dựa trên Orchard của tôi, vì vậy kịch bản của bạn là tương tự.

Bạn có thể làm theo cách này:

  1. Quấn dịch vụ proxy web của bạn trong một lớp học thực hiện IDependency, vì vậy bạn sẽ có thể tiêm nó vào trình điều khiển/xử lý/điều khiển, vv Đối với dễ dàng kiểm tra đơn vị và chế nhạo bạn nên tạo một giao diện riêng biệt, ví dụ. IMyWebServiceWrapper: IDependency và thực hiện nó sau đó.
  2. Tạo các phần và bản ghi nội dung phù hợp. Trong các bản ghi lưu trữ chỉ thông tin cần thiết để định vị và tìm nạp dữ liệu từ WS. Trong các phần nội dung tạo ra tất cả các thuộc tính cần thiết - chúng sẽ được tải từ WS.
  3. Tiêm lớp của bạn từ điểm 1. thành nhà thầu xử lý nội dung phù hợp
  4. Bên trong xử lý nội dung một cái gì đó sử dụng constructor như thế này:

OnLoaded<MyPart>((ctx, part) => { part.MyProperty = myService.GetMyProperty(part.SomeIdToLookup); });

  • MyPart là một phần của bạn trên Phía Orchard.
  • MyProperty là một số thuộc tính mà bạn sẽ tải từ WS.
  • myService là gói WS proxy được gói của bạn, được truyền dưới dạng tham số hàm tạo.
  • GetMyProperty là một phương thức trong trình bao bọc gọi WS và truy xuất dữ liệu cần thiết.

Tất nhiên bạn có thể sử dụng các sự kiện xử lý khác (như OnInitialized, OnCreated, OnPublished etc). Bạn có thể đọc thêm về trình xử lý nội dung here.

Tôi cũng khuyên bạn nên nhận được dev startup module từ Codeplex để phát triển nhanh chóng.

3

Thực tế bạn không cần để sử dụng kho lưu trữ hoặc thậm chí là bản ghi. Tùy thuộc vào những gì bạn đang cố gắng làm, kích hoạt logic tìm nạp từ trình xử lý có thể hoạt động.

+0

Và bạn có lời khuyên nào để sử dụng? Ghi đè chủ yếu chỉ là các phương thức "BuildDisplay" và "BuildEditor" trong IContentHandler? Đủ chưa? (xem cập nhật) –

Các vấn đề liên quan