2017-01-05 5 views
2

Verwenden von NopCommerce 3.8.NopCommerce Aufgaben-Plugin startet nicht

Ich habe ein neues Misc-Plugin erstellt. Der Zweck ist, eine Aufgabe auszuführen, die meine Web-API für Daten aufrichtig aufruft.

Das folgende ist mein Code:

Plugin Klasse

public class MereSyncPlugin : BasePlugin, IMiscPlugin 
{ 
    private MereSyncObjectContext _context; 
    private IScheduleTaskService _schedualTaskService; 

    public MereSyncPlugin(MereSyncObjectContext context, IScheduleTaskService schedualTaskService) 
    { 
     _context = context; 
     _schedualTaskService = schedualTaskService; 
    } 

    public void GetConfigurationRoute(out string actionName, out string controllerName, out RouteValueDictionary routeValues) 
    { 
     actionName = ""; 
     controllerName = ""; 
     routeValues = new RouteValueDictionary() 
     { 
      { "Namespaces", "Nop.plugin.Misc.MereSync.Controllers" }, 
      { "area", null } 
     }; 
    } 

    public override void Install() 
    { 
     //TODO: add more 
     _schedualTaskService.InsertTask(new Nop.Core.Domain.Tasks.ScheduleTask() 
     { 
      Enabled = true, 
      Name = "Product Sync", 
      Seconds = 3600, 
      StopOnError = false, 
      Type = "Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop.Plugin.Misc.MereSync" 
     }); 

     //_context.Install(); 
     base.Install(); 
    } 

    public override void Uninstall() 
    { 
     Nop.Core.Domain.Tasks.ScheduleTask task = _schedualTaskService.GetTaskByType("Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop.Plugin.Misc.MereSync"); 

     if (task != null) 
      _schedualTaskService.DeleteTask(task); 

     //_context.Uninstall(); 
     base.Uninstall(); 
    } 
} 

Objektkontextklasse (wenn auch nicht so an dieser Stelle eingerichtet, einige Teile auf Kommentar)

public class MereSyncObjectContext : DbContext, IDbContext 
{ 
    public bool ProxyCreationEnabled 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 

     set 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public bool AutoDetectChangesEnabled 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 

     set 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public MereSyncObjectContext(string nameOrConnectionString) : base(nameOrConnectionString) 
    { 

    } 

    /*protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //TODO: insert ALL model MAPPINGS!!!! 
     //modelBuilder.Configurations.Add(new insertnewmap()); 
     base.OnModelCreating(modelBuilder); 
    }*/ 

    public string CreateDatabaseInstallationScript() 
    { 
     return ((IObjectContextAdapter)this).ObjectContext.CreateDatabaseScript(); 
    } 

    public void Install() 
    { 
     Database.SetInitializer<MereSyncObjectContext>(null); 
     Database.ExecuteSqlCommand(CreateDatabaseInstallationScript()); 
     SaveChanges(); 
    } 

    public void Uninstall() 
    { 
     //this.DropPluginTable("MereSys_TableName"); 
    } 

    IDbSet<TEntity> IDbContext.Set<TEntity>() 
    { 
     return base.Set<TEntity>(); 
    } 

    public IList<TEntity> ExecuteStoredProcedureList<TEntity>(string commandText, params object[] parameters) where TEntity : BaseEntity, new() 
    { 
     throw new NotImplementedException(); 
    } 

    public IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters) 
    { 
     throw new NotImplementedException(); 
    } 

    public int ExecuteSqlCommand(string sql, bool doNotEnsureTransaction = false, int? timeout = default(int?), params object[] parameters) 
    { 
     throw new NotImplementedException(); 
    } 

    public void Detach(object entity) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Aufgabenklasse

public class ProductSyncTask : ITask 
{ 
    private readonly ILogger _logger; 
    public ProductSyncTask(ILogger logger) 
    { 
     this._logger = logger; 
    } 
    public async void Execute() 
    { 
     //TODO: Call My method, USE BEST PRACTICE, IoC DI 
     //throw new NotImplementedException(); 
     _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Information, "Start", "Product sync has started"); 
     ProductSyncService test = new ProductSyncService(); 
     await test.GetProductsAsync(); 
    } 
} 

Frage

Wenn ich im nopCommerce Backend in die Protokolldatei Navigieren

Admin-Bereich> System> log

Ich erwartete mein log statment zu sehen da, aber nichts zeigt.

Also überprüfe ich auch den Zeitplan der Aufgabe, es hat nie gestartet. Breakpoints werden auch für meine Task-Klasse im Debug-Modus eingerichtet und werden nie getroffen.

Also, fehlt mir hier etwas? Ist meine Implementierung korrekt?

Hinweise:

ich den Asynchron-Anruf entfernt haben, aber es hat nichts (als nie die Klassenstufe zu erreichen). Bereinigt und neu erstellt, setzen Sie gegebenenfalls die lokale Kopie false. Das Plugin ist installiert. Die Ereignisanzeige auf dem Computer zeigt keine Warnungen oder Fehler in Bezug auf NOPCommerce an. Die "Jetzt ausführen" -Schaltfläche, wenn sie gedrückt wird, aktualisiert die Seite, aber es werden weder ein Hinweis-Task ausgeführt, noch meine Klassen-Breakpoints im Debug-Modus.

Quelldatei Source

Plugin enthält meinen Code so weit, die meisten überflüssig ist nicht d.h Rest Client usw. verwendet wie im haupt nicht zu diesem Zeitpunkt der Strömung zu bekommen.

+0

Vergewissern Sie sich, dass Sie Ihr Plugin installiert haben, das Sie hier nicht erwähnt haben! –

+0

bearbeitet Post, jetzt sagt Das Plugin ist installiert – lemunk

+1

Kleine Lösung: 'Type =" Nop.Plugin.Misc.MereSync.ProductSyncTask, ... "' sollte 'Type =" Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop sein .Plugin.Misc.MereSync.MereSyncPlugin "auf' Install'. Modifizieren und prüfen! –

Antwort

2

Der erste Parameter der Type Eigenschaft ist der vollständige Pfad der Klasse, die die ITask Schnittstelle erbt. Und der zweite Parameter ist der Namespace des Plugins.

So müssen Sie nur noch ändern:

_schedualTaskService.InsertTask(new Nop.Core.Domain.Tasks.ScheduleTask() 
{ 
    Enabled = true, 
    Name = "Product Sync", 
    Seconds = 3600, 
    StopOnError = false, 
    Type = "Nop.Plugin.Misc.MereSync.ProductSyncTask, Nop.Plugin.Misc.MereSync" 
}); 

Um

Type = "Nop.Plugin.Misc.MereSync.ProductSyncTask.MereSyncPlugin, Nop.Plugin.Misc.MereSync" 

hoffe, das hilft!

+0

sah auf die falsche shedual, noch hasnt ran ... – lemunk

+0

Opps .. jetzt erhalten Sie einen Fehler bei den Protokollen? –

+0

Ich wünsche, gehe in den Admin-Bereich unter System und protokolliert nichts anderes als "Anwendung hyas gestartet" – lemunk

1

OK Div war auf der richtigen Spur, konnte aber mein Dateisystem nicht sehen, ich habe 1 Ordner vergessen.

Lektion zu lernen hier? Überprüfen Sie Strings, ich habe vergessen, dass ich einen schönen zusätzlichen Ordner namens ...... "Aufgaben" hinzugefügt.

vollständiger Pfad für die Installation?

"Nop.Plugin.Misc.MereSync.Tasks.ProductSyncTask, Nop.Plugin.Misc.MereSync.MereSyncPlugin"

Aufgabe in nop ist wirklich so einfach. Verschwenden Sie keinen Tag wie ich es gerade getan habe!