Как я могу использовать флажок в HTA, где, если проверено, он будет запускать раздел vbscript? - PullRequest
2 голосов
/ 06 февраля 2020

Мне интересно, может ли кто-нибудь помочь мне ...

У меня есть раздел кода, в котором я использую HTA как GUI, чтобы определить все переменные, а затем запустить ряд подпрограмм на основе на ответы, предоставленные в GUI.

Мне удалось получить текстовые значения для ввода и запустить подпрограмму "ValidateSelectionCreateFolders". Теперь я хочу использовать флажки, чтобы решить, следует ли запускать другие подпрограммы, я включил пример моего кода ниже:

<!DOCTYPE HTML>
<html>
<head>
<title>Market Risk BAU Reporting</title>

<HTA:APPLICATION
APPLICATIONNAME="Market Risk BAU Reporting"
ID="MRiskBAUReport"
VERSION="1.0"
SINGLEINSTANCE="yes"
SCROLL="no"/>


<style type="text/css">
body {
background-color: #DCDCDC;
color: #192272;
font-family: Calibri;
font-size: 12pt;
margin: 4em 3em;
}
</style>
</head>

<script language="VBScript">

Sub ValidateSelectionCreateFolders()
'Other Code Here
End Sub 

Sub ProcessGapRun()
LogFile.WriteLine(Now() & " ProcessGapRunning")
End Sub

Sub RunReportingCycle ()

ValidateSelectionCreateFolders

If ProcessGap.Checked Then
    ProcessGapRun
  Else
    MsgBox "ProcessGap is Unchecked"
  End if

End Sub

<body>
<FORM name="RunSettings">
<p>Staff ID: <input name="StaffID" type="text"></P>
<p>Current Portfolio Date: <input name="InputPortfolio" type="text"></P>
<p>Current Market Date: <input name="InputMarket" type="text"></P>
<p>Previous Portfolio Date: <input name="InputPrevPortfolio" type="text"></P>
<p>2nd Previous Portfolio Date: <input name="InputPrev2Portfolio" type="text"></P>
Which processes do you want to run?
<p>Process Gap Report <input name="ProcessGap" type="checkbox" id="ProcessGap"></P>
<p>Export Gap Report <input name="ExportGap" type="checkbox" id="ExportGap"></P>
<p>Process EuroGap Report <input name="ProcessEURGap" type="checkbox" id="ProcessEURGap"></P>
<p>Export EuroGap Report <input name="ExportEURGap" type="checkbox" id="ExportEURGap"></P>
<p>Process Basis Risk Report <input name="ProcessBasis" type="checkbox" id="ProcessBasis"></P>
<p>Export Basis Risk Report <input name="ExportBasis" type="checkbox" id="ExportBasis"></P>

<input type="button" value="Confirm Above Selection" onclick="RunReportingCycle" /></p>

</body>
</html>

Если я установил флажок, когда нажимаю нужную кнопку сначала нужно запустить код, который уже работает «ValidateSelectionCreateFolders», а затем узнать, что флажок установлен, и запустить другую подпрограмму «ProcessGapRun». Я был бы очень признателен за любую помощь, поскольку мой текущий код просто продолжает падать с ошибкой Требуемый объект: 'ProcessGap'

Затем я намереваюсь добавить ряд дополнительных флажков, которые затем будут запускать другие код, но я хочу, чтобы это происходило индивидуально, поскольку каждый флажок зависит от предыдущего запуска, как я могу это сделать?

Спасибо

Адам

1 Ответ

0 голосов
/ 06 февраля 2020

У вас почти было это.

<script language="VBScript">
Sub ValidateSelectionCreateFolders()
  MsgBox "ValidateSelectionCreateFolders() runs"
End Sub 

Sub ProcessGapRun()
  MsgBox "ProcessGapRun() runs"
End Sub

Sub RunReportingCycle ()
  ValidateSelectionCreateFolders
  If Document.all.ProcessGap.Checked Then
    ProcessGapRun
  Else
    MsgBox "ProcessGap is Unchecked"
  End if
End Sub
</script>

HTML элементы с идентификатором доступны в коллекции Document.all.


Кстати, вы можете комбинировать JavaScript и код VBScript в HTA. Может быть, вы хотите написать хотя бы часть кода на языке, который лучше работает с веб-страницами и имеет больше примеров (вы даже можете использовать jQuery):

<!-- add JSON and jQuery support -->
<script language="JScript" src="https://cdnjs.cloudflare.com/ajax/libs/json2/20160511/json2.min.js"></script>
<script language="JScript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script language="VBScript">
  ' VBScript functions ...
</script>

<script language="JScript">
$(function () {
  $("#btnConfirm").click(function () {       // use jQuery
    ValidateSelectionCreateFolders();        // call VBScript function from JS
    if ($("#ProcessGap").is(":checked")) {   
      ProcessGapRun();
    } else {
      alert("ProcessGap is Unchecked");
    }
  });
});
</script>

<!-- ... other HTML elements -->

<input id="btnConfirm" type="button" value="Confirm Above Selection" /></p>
...