Цикл не учитывает пустое поле ввода пользователя - PullRequest
0 голосов
/ 05 июля 2019

У меня есть пакетный файл, который содержит форму HTML, в которой пользователи имеют 3 поля ввода для 1. Идентификатор клиента 2. Имя 3. последнее имя

Если я оставляю поле «Первое поле / идентификатор клиента» пустым, оно переносит значение «Второе поле / имя» в ячейку «Первые поля».

Это тогда делает значение переменной Customer ID = значением переменной Fist Name, что приводит к сбою моей программы.

<!-- :
:: textSubmitter.bat
@echo off
for /f "tokens=1-3 delims=," %%a in ('mshta.exe "%~f0"') do (
    set "CustomerID=%%a"
    set "FirstName=%%b"
    set "LastName=%%c"
)

echo Your Customer ID is %CustomerID%
echo Your First Name is %FirstName%
echo Your Last Name is %LastName%
pause

IF "%CustomerID%"=="" (
    @echo
    echo.>"C:\Users\C28\Documents\RoboticProcessAutomation(RPA)\TestingStuff\%FirstName%%LastName%.csv"
    sqlcmd -S IX.COM -d GlblTransprncy -E -Q " EXEC dbo.GetSimilarCustIDs18 '%CustomerID%', '%FirstName%', '%LastName%' " -s "," -o "C:\Users\C283050\Documents\RoboticProcessAutomation(RPA)\TestingStuff\%FirstName%%LastName%.csv"
    pause
)  ELSE (
    @echo
    echo.>"C:\Users\C28\Documents\RoboticProcessAutomation(RPA)\TestingStuff\%CustomerID%.csv"
    echo Results for Customer ID will be returned shortly, Please check folder for the entered Customer ID results
    sqlcmd -S IX.COM -d GlblTransprncy -E -Q " EXEC dbo.GetSimilarCustIDs18 '%CustomerID%', '%@FirstName%', '%LastName%' " -s "," -o "C:\Users\C283050\Documents\RoboticProcessAutomation(RPA)\TestingStuff\%CustomerID%.csv"
)
goto :EOF

-->

<html>
    <head>
        <title>COI Request</title>
    </head>
    <body>

        <script language='javascript' >
            function pipeText() {
                var CustomerID=document.getElementById('CustomerID').value;
                var FirstName=document.getElementById('FirstName').value;
                var LastName=document.getElementById('LastName').value;

                var Batch = new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
                close(Batch.WriteLine(CustomerID+','+FirstName+','+LastName));
            }
        </script>

        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> 
            <label for="Student">CustomerID:</label>
            <input type='text' name='CustomerID' size='25'></input><br>
        </div>

        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> 
            <label for="Student">First Name:</label>
            <input type='text' name='FirstName' size='25'></input><br>
        </div>

        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> 
            <label for="Student">Last Name:</label>
            <input type='text' name='LastName' size='25'></input><br>
        </div>
        <hr>
        <button onclick='pipeText()'>Submit</button>
    </body>
</html>

Если поле ввода «Идентификатор клиента / первое поле» оставить пустым, то цикл должен оставить это значение переменной для идентификатора клиента как пустое, а не принимать следующее значение в строке, то есть значение «Имя»

1 Ответ

0 голосов
/ 05 июля 2019

Ваш цикл For определяет свое значение в виде строки до первой возвращенной запятой вывода, однако начальные разделители игнорируются, поэтому, если ничего не введено, первая запятая игнорируется, устанавливая FirstName как %%a. %CustomerID% не будет иметь значения, только если ни один из входов не был введен.

Я бы предложил изменить код JavaScript на:

close(Batch.WriteLine('"'+CustomerID+'","'+FirstName+'","'+LastName+'"'));

и ваши Set команды для этого синтаксиса, чтобы сохранить любые пустые позиции строки:

Set "CustomerID=%%~a"
Set "FirstName=%%~b"
Set "LastName=%%~c" 

Пример:

<!-- ::textSubmitter.bat
@Echo Off
For /F "Tokens=1-3Delims=," %%A In ('mshta.exe "%~f0"')Do (Set "CustomerID=%%~A"
    Set "FirstName=%%~B"
    Set "LastName=%%~C")

Echo Your Customer ID is %CustomerID%
Echo Your First Name is %FirstName%
Echo Your Last Name is %LastName%
Timeout 3 /NoBreak>Nul

If "%CustomerID%"=="" (
    Do Something
)Else (
    Do something else
)
GoTo :EOF

-->

<html>
    <head>
        <title>COI Request</title>
    </head>
    <body>

        <script language='javascript' >
            function pipeText() {
                var CustomerID=document.getElementById('CustomerID').value;
                var FirstName=document.getElementById('FirstName').value;
                var LastName=document.getElementById('LastName').value;

                var Batch = new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
                close(Batch.WriteLine('"'+CustomerID+'","'+FirstName+'","'+LastName+'"'));
            }
        </script>

        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> 
            <label for="Student">CustomerID:</label>
            <input type='text' name='CustomerID' size='25'></input><br>
        </div>

        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> 
            <label for="Student">First Name:</label>
            <input type='text' name='FirstName' size='25'></input><br>
        </div>

        <div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> 
            <label for="Student">Last Name:</label>
            <input type='text' name='LastName' size='25'></input><br>
        </div>
        <hr>
        <button onclick='pipeText()'>Submit</button>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...