asp.net создавайте ежемесячные отчеты за 30 минут и обновляйте ярлык браузера со статусом

#javascript #asp.net #onclientclick

#javascript #asp.net #onclientclick

Вопрос:

Использование VS-Express-Web-2012 ASP.NET WebForms и Reportviewer управляют созданием отчетов. Существует список клиентов (выбранных пользователем), список получателей электронной почты для каждого клиента и список отчетов, которые будут созданы для каждого получателя. Данные для каждого отчета основаны на клиенте, получателе и отчете. Для каждого получателя создается электронное письмо (текст и PDF-вложения).

Проблема в том, что этот процесс может занять много минут — до 30 минут. Мы хотели бы, чтобы процесс помещал текст статуса в ярлык в браузере на разных этапах процесса (клиент: 001, Получатель: 001, сгенерированное электронное письмо.)

Мы исследовали это и, похоже, не можем получить текст на ярлыке во время этапов процесса — асинхронной и потоковой передачи, и не можем заставить это работать, главным образом потому, что эти стратегии несовместимы с веб-приложением ASP.

Мы пытались использовать javascript для вызова нажатия кнопки, которое возобновило бы процесс, но мы не можем заставить процесс запускаться сам по себе, как указано здесь …

1) Нажатие кнопки запускает процесс для клиента = 1, получателя = 1.

2) После создания электронного письма для ответа подготавливается следующее, продвигая получателя и, возможно, Клиента, для следующей итерации, возвращающейся при последующей обратной передаче на сервер ПОСЛЕ ответа.

Процесс представляет собой набор вложенных циклов For (один для клиента, один для получателя и один для отчета), который выполняется один раз для каждой обратной отправки…

 ASPX:

<div hidden="hidden">
  <asp:Button  ID="hidCmdDoPostBack" runat="server" Text="Button" 
      CommandArgument="commandargument" CommandName="commandname" />
</div>

<script type="text/javascript">
  function DoStart(p_sCommand, p_sCommandArgument) {
     var oCtrlButton      = document.getElementById('<%=hidCmdDoPostBack.ClientID%>');
     var hidPassedArgument = document.getElementById('<%=hidPassedArgument.ClientID%>');
     alert("DoStart() : hidPassedArgument.value = "   hidPassedArgument.value   " , "   p_sCommandArgument);
     if ((oCtrlButton != null)) {  // amp;amp; (p_sCommand != 'STOP')) {
        oCtrlButton.click();
     }
  }
</script>

SERVER-CODE: (VB.NET)

...
  For iLoopCust As Int16 = iNdxCustomer To iNdxCustomer
    ...
     For iLoopContact As Int16 = iNdxContact To iNdxContact
        ...
        For iloopReport As Int16 = 0 To iNdxReportLast
           ...
        Next iLoopReport
     Next iLoopContact
  Next iLoopCust

     ScriptManager.RegisterStartupScript(hidCmdDoPostBack, cmdStart.GetType(), "KDoCommand", Nothing, True)
     ScriptManager.RegisterStartupScript(hidCmdDoPostBack, cmdStart.GetType(), "KDoCommand", String.Format("DoStart('RESUME', '{0},{1},{2}');", iNdxCustomer, iNdxContact, iNdxReportLast), True)
 

3) Однако функция javascript ‘DoStart’ не вызывается при ответе обратно клиенту.

Ваши комментарии и решения приветствуются. Спасибо … Джон

Комментарии:

1. Возможно ли, что ваш сценарий запуска отображается до метода DoStart? Если это так, DoStart не будет выполняться, поскольку он не существует при запуске зарегистрированного сценария запуска.

2. Спасибо за ваш ответ. Как я могу гарантировать, что сценарий запуска отображается до метода DoStart? (Я не настолько хорошо осведомлен о местоположении и сроках выполнения клиентских скриптов и их регистрации на стороне сервера) — образец??? Спасибо…

3. Ну, во-первых, проверьте, так ли это. Просмотр источника отображаемого HTML. Если сценарий запуска появляется перед функцией DoStart, то, вероятно, это оно. Если нет, это что-то другое.

4. Просмотр источника показывает, что раздел javascript находится в заголовке страницы. Следующее отображается чуть выше предложений HTML страницы. <тип сценария=»текст / javascript»> //<! [CDATA[ Sys.WebForms. PageRequestManager._initialize(‘ctl00 $ScriptManager1’, ‘form1’, [], [], [], 180, ‘ ctl00’); //]]> </ сценарий>

5. Консоль показывает какие-либо ошибки javascript? Можете ли вы установить точку останова в начале DoStart и посмотреть, вызывается ли она?