簡體   English   中英

NopCommerce任務插件未啟動任務

[英]NopCommerce Task Plugin not starting task

使用NopCommerce 3.8。

我創建了一個新的雜項插件。 目的是運行一個任務,該任務徹底調用我的Web api來獲取數據。

以下是我的代碼:

插件類

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();
    }
}

對象上下文類(盡管此時尚未設置,因此注釋掉了某些部分)

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();
    }
}

任務班

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();
    }
}

當我在Nopcommerce后端中導航到日志文件時

管理區域>系統>日志

我希望在那里看到我的日志語句,但是什么也沒顯示。

因此,我還檢查了任務的計划狀態,它從未啟動。 斷點也在調試模式下在我的任務類上設置,並且永遠不會命中。

所以,我在這里想念什么嗎? 我的暗示正確嗎?

筆記:

我刪除了異步調用,但是它什么也沒做(因為它從未達到類級別)。 清理並重建,在適用的情況下將copy local設置為false。 插件已安裝。 機器上的事件查看器不顯示與nopcommerce相關的任何警告或錯誤。 當按下“立即運行”按鈕時,刷新頁面,但沒有運行指示任務,也沒有在調試模式下擊中我的類斷點。

源文件

到目前為止,插件包含我的代碼,大多數是多余的,沒有使用過,例如,其余客戶端等,因為我從未進入流程的那個階段。

Type屬性的第一個參數是Type的完整路徑,該類繼承了ITask接口。 第二個參數是插件的名稱空間。

因此,您只需要在此處進行更改:

_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"
});

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

希望這可以幫助!

好的Div是在正確的軌道上,但是看不到我的文件系統,我忘記了1個文件夾。

要在這里學習的課程? 檢查字符串,我忘了我添加了一個名為...“ Tasks”的好文件夾。

完整的安裝路徑?

“ Nop.Plugin.Misc.MereSync.Tasks.ProductSyncTask,Nop.Plugin.Misc.MereSync.MereSyncPlugin”

nop的任務實際上就是這么簡單。 不要像我一樣浪費一天!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM