10

Pracuję nad projektem, w którym rozważamy użycie Orchard CMS.Jak zmienić repozytorium rekordu Orchard

Chcemy jednak korzystać z usług internetowych jako źródeł danych dla niektórych elementów treści. Sądzę, że musimy zmienić implementację repozytorium, aby było to możliwe, ale nie jestem tego pewien.

Moje pytanie brzmi: Czy moje przypuszczenie jest poprawne, czy jest bardziej złożone? I jak można to zrobić?

Dzięki!

Aktualizacja: Widzę, że interfejs IRepository Orchard wymaga wdrożenia dostawcy LINQ. To niemożliwe w tym scenariuszu, ponieważ usługi sieciowe są oferowane za pośrednictwem protokołu SOAP.

będę lepiej dalej opisać scenariusz:

Witryna chcemy budować musi korzystać z usług internetowych, aby uzyskać informacje dotyczącej członków i jednostek organizacyjnych. Chcielibyśmy wyświetlić członków jakiejś jednostki organizacyjnej, na przykład na stronie internetowej. Chcemy również stworzyć nasz własny typ treści "Event", który powinien mieć relację M: N (Uczestnicy) z "Członkiem" (z WS).

+0

Próba zrobienia tego samego. WS przekazuje zawartość do części - również w celu zintegrowania zarządzania użytkownikami z miksem. – justSteve

Odpowiedz

16

Nie trzeba wdrożyć IRepository w przypadku, gdy nie chcesz pełni bezpośredniego składowania części gdzieś indziej. Obecnie korzystam z usługi WCF w jednym z moich projektów opartych na Orchard, więc Twój scenariusz jest podobny.

Można zrobić to w ten sposób:

  1. Owiń serwera proxy usługi internetowej w klasie wykonawczego IDependency, więc byłbyś w stanie wstrzyknąć go do złomu/drivers/kontrolerów itp dla łatwość testowania jednostkowego i szyderstwa powinieneś stworzyć osobny interfejs, np. IMyWebServiceWrapper: IDependency i zaimplementuj go.
  2. Utwórz odpowiednie treści i zapisy. W magazynie rekordów tylko informacje niezbędne do zlokalizowania i pobrania danych z WS. W części treści utwórz wszystkie niezbędne właściwości - zostaną one załadowane z WS.
  3. wstrzyknąć swoją klasę z punktu 1. do konstruktorów stosowne Wozy Content
  4. Wewnątrz procedury obsługi zawartości używają konstruktor coś takiego:

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

  • MyPart to część na Strona sadu.
  • MyProperty to jakaś właściwość z Twojej strony, która zostanie załadowana z WS.
  • myService jest twoim opakowanym serwerem proxy WS, przekazanym jako parametr konstruktora.
  • GetMyProperty to metoda w opakowaniu, która wywołuje WS i pobiera niezbędne dane.

Oczywiście można używać innych zdarzeń obsługi (takich jak OnInitialized, OnCreated, OnPublished itp.). Możesz przeczytać więcej o procedurach obsługi treści here.

Polecam również uzyskanie dev startup module z Codeplex dla szybkiego rozwoju.

3

W rzeczywistości nie potrzebujesz potrzebujesz do korzystania z repozytorium, a nawet rekordu. W zależności od tego, co próbujesz zrobić, wyzwalanie logiki pobierania z programu obsługi może działać.

+0

Jakiej dokładności zaleca się używać? Zastępuje głównie metody "BuildDisplay" i "BuildEditor" w IContentHandler? Wystarczy? (patrz aktualizacja) –

Powiązane problemy