2017-01-05 13 views
2

NopCommerce 3.8を使用しています。NopCommerceタスクプラグインがタスクを開始しない

私は新しいMiscプラグインを作成しました。その目的は、データ用に私の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バックエンドに移動し

管理エリア>システム>私は私のログなステートメントを参照することが期待

を記録そこには何も表示されません。

私はまた、タスクのschedualステータスをチェックします。これは決して開始しませんでした。ブレークポイントは、デバッグモードのタスククラスにも設定され、決してヒットしません。

ここに何か不足していますか?私のインパネレーションは正しいのですか?

注:

私は、非同期呼び出しを削除しているが、それは(そのクラスのレベルに達したことがないとして)何もしませんでした。掃除して再構築し、該当する場合はコピーローカル偽を設定します。 プラグインがインストールされています。マシン上のイベントビューアは、ノーコマールに関する警告やエラーを表示しません。 「今すぐ実行」ボタンを押すとページがリフレッシュされますが、指示タスクは実行されず、クラス・ブレークポイントはデバッグ・モードでヒットしません。

ソースファイル Source

プラグインは、イムは、これまでの流れのその段階になっていないとして、最もすなわち、残りのクライアントなどの冗長化に使用されていない、これまでの私のコードが含まれています。

+0

プラグインがインストールされていることを確認してください。ここには記載されていません。 –

+0

編集された投稿、今すぐプラグインがインストールされていると言われました – lemunk

+1

小修正: 'Type =" Nop.Plugin.Misc.MereSync.ProductSyncTask、... "'は 'Type ="でなければなりませんNop.Plugin.Misc.MereSync.ProductSyncTask、Nop .Plugin.Misc.MereSync.MereSyncPlugin "を実行します。修正やチェックをしてください! –

答えて

2

Typeの最初のパラメータは、ITaskインターフェイスを継承するクラスのフルパスです。 2番目のパラメータはプラグインの名前空間です。

それで、あなたはちょうどここに変更する必要があります。

_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" 

には、この情報がお役に立てば幸い!

+0

は間違ったshedualを見て、まだhasntは走った... – lemunk

+0

Opps ..ログでエラーが発生しましたか? –

+0

私は、システムの下に管理領域に行き、 "application hyas started"以外のものをログに記録したいと考えています – lemunk

1

OK Divが正しいトラックにありましたが、私のファイルシステムを見ることができませんでした。私は1つのフォルダを忘れていました。

ここで学ぶことはできますか?チェックストリング、私は......という素晴らしい別のフォルダを追加するのを忘れました "タスク"。

インストールのフルパス?

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

NOPでの作業は本当に簡単です。私はちょうどやったような一日を無駄にしないでください!

関連する問題