Вам нужно указать строку даты как дату xs: date, чтобы иметь возможность сравнивать их таким образом. Форматирование с использованием fn:format-date()
просто создает строку, а fn:current-date()
возвращает xs: date. Этот фрагмент выполняет то, что вы хотите, но вы можете также рассмотреть сохраняющиеся данные в своем документе в формате xs: date, то есть <date>2016-12-31</date>
.
let $doc :=
<root>
<date>12/31/2016</date>
</root>
let $date-string := $doc/date/text()
let $date-parts := fn:tokenize($date-string,"/")
(: rearrange date parts into yyyy-mm-dd string and cast as xs:date :)
let $date := xs:date(fn:concat($date-parts[3],"-",$date-parts[1],"-",$date-parts[2]))
let $today := fn:current-date()
return $date le $today
=> false
Если дата сохраняется в формате xs: date, ее можно упростить следующим образом:
let $doc :=
<root>
<date>2016-12-31</date>
</root>
return xs:date($doc/date/text()) le fn:current-date()
Затем вы также можете использовать индекс диапазона на дату элемент, чтобы использовать cts:element-range-query()
для выбора документов, соответствующих вашим критериям и т. д., когда дата сохраняется таким образом.
MessageBox
, который вы видите, исходит из вашего собственного кода в вашей функции onAbort
!
Тот факт, что вы делаете
!define MUI_PAGE_CUSTOMFUNCTION_SHOW AbruptShow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE AbruptLeave
, показывает, что вы не понять, как работают пользовательские страницы.
Чтобы ваша специальная страница прерывания завершилась без дальнейших действий, вам просто ничего не нужно делать в функции onAbort
, когда вы находитесь на этой странице:
Var PageId
var IsOnAbruptPage
!define MUI_CUSTOMFUNCTION_ABORT onAbort
!include "MUI2.nsh"
!include LogicLib.nsh
Name "MyApp"
#OutFile "MyApp.exe"
InstallDir "$temp\MyApp"
#RequestExecutionLevel admin
OutFile Test.exe
RequestExecutionLevel user
;--------------------------------
Page Custom MyInfoPage
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelShow
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyLicenseShowCallback
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW MyDirectoryShowCallback
!insertmacro MUI_PAGE_DIRECTORY
Page Custom MyAbruptPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------
!insertmacro MUI_LANGUAGE "English"
Function MyDirectoryShowCallback
StrCpy $PageId 3
GetDlgItem [111] $hwndparent 1 ;
SendMessage [111] ${WM_SETTEXT} 0 `STR:$(^NextBtn)`
FunctionEnd
Function MyLicenseShowCallback
StrCpy $PageId 2
FunctionEnd
Function WelShow
StrCpy $PageId 1
GetDlgItem [111] $HWNDPARENT 3
ShowWindow [111] 0
FunctionEnd
Function MyInfoPage
${IfThen} $PageId == "" ${|} Abort ${|}
StrCpy $PageId 0
GetDlgItem [111] $HWNDPARENT 1
ShowWindow [111] 0
GetDlgItem [111] $HWNDPARENT 2
${NSD_SetText} [111] "Finish"
nsDialogs::Create 1044
Pop [111]
${NSD_CreateLabel} 120u 10u 195u 28u "Setup Wizard was interrupted"
Pop [111]
nsDialogs::Show
FunctionEnd
Function onAbort
${If} $IsOnAbruptPage <> 0 ; If on aborted page
Return ; allow simple exit
${EndIf}
${If} $PageId <> 0
${If} ${Cmd} ` MessageBox MB_YESNO "Are you sure you want to CANCEL" IDYES `
SendMessage $HWNDPARENT 0x408 -$PageId ""
${EndIf}
Abort
${EndIf}
FunctionEnd
Function GoToAbruptPage
StrCpy $IsOnAbruptPage 1
SendMessage $HWNDPARENT 0x408 -1 ""
Abort
FunctionEnd
Function MyAbruptPage
${IfThen} $IsOnAbruptPage == "" ${|} Abort ${|}
GetDlgItem [111] $HWNDPARENT 1
ShowWindow [111] 0
GetDlgItem [111] $HWNDPARENT 3
ShowWindow [111] 0
GetDlgItem [111] $HWNDPARENT 2
${NSD_SetText} [111] "Finish"
nsDialogs::Create 1044
Pop [111]
${NSD_CreateLabel} 120u 10u 195u 20u "Setup Wizard ended prematurely"
Pop [111]
${NSD_CreateLabel} 120u 120u 195u 20u "Setup Wizard ended prematurely"
Pop [111]
nsDialogs::Show
FunctionEnd
;--------------------------------
Section "$(^Name) (required)"
SectionIn RO
SetOutPath $INSTDIR
MessageBox MB_OK|MB_ICONEXCLAMATION "There is an installation failure. Aborting the installation process" IDOK
Call GoToAbruptPage
SectionEnd