我有以下请求
URI: /IP/{Version}/Account/Payment
HTTP Method: POST
Custom Headers:
X-account-number
X- account-type
X-user-initials,
X-dda-number
X-dda-account-type
X-number-of-days-gap
X-send-ch-letter-flag
X-payment-date
X-payment-option
现在我要做的是我必须从请求中获取付款日期,然后我必须检查以下条件
如果付款日期不为空且是未来日期且在180之内 从今天开始的几天如果是这样,那么首先进行查找以确保没有 计划在此日期支付的未来付款
如果没有按预定日期付款,请将付款插入 表
最后再次执行第一个选择查询并检索值
我正在尝试使用XSLT和datapower
但我的逻辑不正确。
这是我试过的
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dp="http://www.datapower.com/extensions"
xmlns:dpconfig="http://www.datapower.com/param/config"
xmlns:date="http://exslt.org/dates-and-times"
extension-element-prefixes="dp date"
exclude-result-prefixes="dp dpconfig"
version="1.0" >
<xsl:template match="/">
<AccountNumber><xsl:value-of select="dp:http-request-header('X-account-number')"/></AccountNumber>
<PaymentDate><xsl:value-of select="dp:http-request-header('X-payment-date')"/></PaymentDate>
<PaymentOption><xsl:value-of select="dp:http-request-header('X-payment-option')"/></PaymentOption>
<Amount><xsl:value-of select="dp:http-request-header('X-amount')"/></Amount>
<AccountType><xsl:value-of select="dp:http-request-header('X-dda-account-type')"/></AccountType>
<xsl:variable name="timestamp" select="date:date-time()"/>
<xsl:variable name="dateDifference" select="date:difference($timestamp,$PaymentDate)"/>
<xsl:if "$dateDifference" < '180' AND "$PaymentDate" != NULL>
<xsl:variable name="LookUp" Select PAYMENT_STATUS_CODE FROM TABLE WHERE WHERE ACCT_NBR ='$ACCOUNTNUMBER' AND AND PMT_DATE = '$PaymentDate'/>
<xsl:variable name ="RunQuery1">
<dp:sql-execute
source="'XXXXX'"
statement="$Lookup">
</dp:sql-execute>
<xsl:variable name="test" copy-of select ="$RunQuery1"/>
<xsl:if test = NULL>
<xsl:variable name="InsertQuery" Insert into TABLE(CREATED_DATE,ACCT_NBR,PMT_AMT_OPTION_CODE,AMOUNT,PMT_DATE,ACCOUNT_TYPE_CODE,PAYMENT_STATUS_CODE)
VALUES('$timestamp','$ACCOUNTNUMBER','$PaymentOption','$Amount','$PaymentDate','$AccountType','P'/>
<xsl:variable name="RunQuery2">
<dp:sql-execute
source="'XXXXX'"
statement="$InsertQuery">
</dp:sql-execute>
</xsl:variable>
</xsl:if>
<xsl:variable name="RetrieveQuery" SELECT PAYMENT_STATUS_CODE from TABLE/>
<xsl:variable name="RunQuery3">
<dp:sql-execute
source="'XXXXX'"
statement="$RetrieveQuery">
</dp:sql-execute>
</xsl:variable>
<xsl:copy-of select="$RunQuery3"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我做错了什么?
答案 0 :(得分:1)
嗯,不确定整个脚本,但由于if语句不正确,这里应该是一个起点:
<xsl:if test="fn:days-from-duration($dateDifference) < 180 and $PaymentDate != null">
使用的转化函数为this。
SQL变量不正确。请检查有关如何定义查询以及如何测试SQL操作结果的语法。 Datapower info center上有很多很好的例子。
答案 1 :(得分:0)
"$dateDifference" < '180'
两个三件事情跳出来了:
您不能将<
用作比较运算符;您需要使用<
代替。
date:difference()的结果不是数字。
<xsl:if>
语句的语法完全错误。