10

Lavoro su un progetto in cui stiamo considerando l'utilizzo di Orchard CMS.Come modificare il repository di record di frutteto

Tuttavia, vogliamo utilizzare i servizi Web come origini dati per alcuni degli elementi di contenuto. Suppongo che dobbiamo cambiare l'implementazione del repository per renderlo possibile, ma non ne sono sicuro.

Quindi la mia domanda è: La mia ipotesi è corretta o è più complessa? E come può essere fatto allora?

Grazie!

Aggiornamento: vedo che l'interfaccia IRepository di Orchard richiede fornitore di LINQ da attuare. Questo è impossibile in questo scenario poiché i servizi web sono offerti tramite SOAP.

sarò meglio descrivere ulteriormente lo scenario:

Il sito che vogliamo costruire deve utilizzare servizi web per ottenere informazioni su un membri dell'organizzazione e unità. Vorremmo mostrare membri di alcune unità organizzative, ad esempio, sul sito web. Vogliamo anche creare il nostro tipo di contenuto "Evento" che dovrebbe avere una relazione M: N (Partecipanti) con "Membro" (dal WS).

+0

Cercando di fare molto la stessa cosa. WS alimenta il contenuto a una parte, cercando anche di integrare la gestione degli utenti al mix. – justSteve

risposta

16

Non è necessario implementare un IRepository nel caso in cui non si vuole pienamente diretta lo stoccaggio parte da qualche altra parte. Attualmente sto utilizzando il servizio WCF in uno dei miei progetti basati su Orchard, quindi il tuo scenario è simile.

Si può fare in questo modo:

  1. Avvolgete il vostro proxy del servizio Web in una classe che implementa IDependency, quindi si sarebbe in grado di iniettare in drivers/telescopici/controller ecc Per il facilità di test delle unità e di derisione si dovrebbe creare un'interfaccia separata, ad es. IMyWebServiceWrapper: IDependency e implementarlo quindi.
  2. Creare parti e record di contenuto appropriati. Nel negozio di dischi solo le informazioni necessarie per individuare e recuperare i dati da WS. Nelle parti del contenuto crea tutte le proprietà necessarie: verranno caricate dal WS.
  3. Iniettare la classe dal punto 1. in costruttori appropriati gestori dei contenuti
  4. All'interno del gestore dei contenuti uso costruttore qualcosa di simile:

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

  • MyPart è la tua parte in Lato frutteto
  • MyProperty è una proprietà da parte dell'utente che verrà caricata da WS.
  • myService è il proxy WS spostato, passato come parametro costruttore.
  • GetMyProperty è un metodo nel wrapper che chiama WS e recupera i dati necessari.

Ovviamente è possibile utilizzare altri eventi di gestione (come OnInitialized, OnCreated, OnPublished ecc.). Puoi leggere ulteriori informazioni sui gestori di contenuti here.

Inoltre, consiglierei di procurarsi uno dev startup module da Codeplex per uno sviluppo rapido.

3

In realtà non è necessario utilizzare un repository o anche un record. A seconda di cosa si sta tentando di fare, l'attivazione della logica di recupero da un gestore potrebbe funzionare.

+0

E quale esatto punto di estensibilità si consiglia di utilizzare? Sovrascrivere principalmente i metodi "BuildDisplay" e "BuildEditor" in IContentHandler? È abbastanza? (vedi aggiornamento) –

Problemi correlati