[RuntimeLevel(MinLevel = RuntimeLevel.Run)]
public class SubscribeComposer : IUserComposer {
public void Compose(Composition composition) {
composition.Components().Append<TaskExecutingComponent>();
}
}
TaskExecuting class
public class TaskExecutingComponent : IComponent
{
...
public TaskExecutingComponent(IProfilingLogger logger, IMacroRenderer macroRenderer, IUmbracoDatabaseService dataBaseService, IScopeProvider scopeProvider, UmbracoMapper umbracoMapper, SubscribeConfiguration config, IMacroService macroService, IPublishedSnapshotAccessor publishedSnapshotAccessor) {
...
}
public void Initialize() {
int delayBeforeWeStart = 60000;
int howOftenWeRepeat = 60000;
var task = new Task(_sharePriceRunnerRunner,
delayBeforeWeStart,
howOftenWeRepeat,
_logger,
_dataBaseService,
_scopeProvider,
_macroRenderer,
_umbracoMapper,
_config,
_macroService,
_publishedSnapshotAccessor);
_sharePriceRunnerRunner.TryAdd(task);
}
public void Terminate()
{
}
}
And with problem moment
public class Task : RecurringTaskBase {
...
public Task(IBackgroundTaskRunner<RecurringTaskBase> runner, int delayBeforeWeStart, int howOftenWeRepeat, IProfilingLogger logger, IUmbracoDatabaseService dataBaseService, IScopeProvider scopeProvider, IMacroRenderer macroRenderer, UmbracoMapper umbracoMapper, SubscribeConfiguration config, IMacroService macroService, IPublishedSnapshotAccessor publishedSnapshotAccessor)
: base(runner, delayBeforeWeStart, howOftenWeRepeat) {
_...
}
public override bool PerformRun() {
var PageId = 999; // This page is present
var macro = _macroService.GetById(task.MacrosId);
var macro_params = _umbracoMapper.Map<IEnumerable<MacroParameter>>(macro);
var maxro_param_val = new Dictionary<string, object>();
maxro_param_val.Add("getFrom", DateTime.Now.Date());
var content_val = _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(PageId);
var macro_props = maxro_param_val.ToDictionary(
x => x.Key,
i => i.Value is string ? HttpUtility.HtmlDecode(i.Value.ToString()) : i.Value);
var result = _macroRenderer.Render(macro.Alias, content_val, macro_props).GetAsText();
return true;
}
And Exception
System.NullReferenceException:
in _publishedSnapshotAccessor.PublishedSnapshot.Content.GetById(_config.SubscribeMessage.SubscribePageId.Value);
if i use other methods for recive Content i have problem with content in _macroRenderer.Render
using (var umbracoContextReference = _umbracoContextFactory.EnsureUmbracoContext()) {
var content = umbracoContextReference.UmbracoContext.Content.GetById(999);
using (var controller = new MyPartialViewMacroController(macro_model, content)) {
var route_vals = new RouteData();
route_vals.Values.Add("controller", "PartialViewMacro");
route_vals.Values.Add("action", "Index");
//routeVals.DataTokens.Add(Core.UmbracoContextDataToken, umbCtx); //required for UmbracoViewPage
if (umbracoContextReference.UmbracoContext.HttpContext == null)
throw new NullReferenceException("HttpContext is null");
var request = new RequestContext(umbracoContextReference.UmbracoContext.HttpContext, route_vals);
//controller.ViewData = viewContext.ViewData;
controller.ControllerContext = new ControllerContext(request, controller);
//call the action to render
result = controller.RenderViewResultAsString(controller.Index());
}
}
Ok and incapsulate umbraco class PartialViewMacroController and rename to MyPartialViewMacroController
Nullreference exception IComponent IMacroRenderer
Hello i have a problem..
my code
Initialize TaskExecuting
TaskExecuting class
And with problem moment
And Exception
if i use other methods for recive Content i have problem with content in _macroRenderer.Render
I solved my problem, now I have a new problem)
Solved how render macro in background task
first im use
when redid standard methods
}
Ok and incapsulate umbraco class PartialViewMacroController and rename to MyPartialViewMacroController
))
Ok now i have problem in cshtml....
var startnode = Umbraco.Content(startnode_id);
Ok i solved all my probmels ....
in schtml need use it for
not
is working on a reply...
This forum is in read-only mode while we transition to the new forum.
You can continue this topic on the new forum by tapping the "Continue discussion" link below.