1

我有以下要求

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>

我做错了什么?

4

2 回答 2

1

好吧,不确定整个脚本,但由于 if 语句不正确,因此应该从这里开始:

<xsl:if test="fn:days-from-duration($dateDifference) &lt; 180 and $PaymentDate != null">

使用的转换函数是this

SQL 变量不正确。请检查有关如何定义查询和如何测试 SQL 操作结果的语法。Datapower 信息中心有很多很好的例子。

于 2014-03-16T12:28:01.193 回答
0
"$dateDifference" < '180'

两三件事跳出来:

  1. 您不能<用作比较运算符;你需要&lt;改用。

  2. date:difference()的结果不是数字。

  3. <xsl:if>语句的语法完全错误。

于 2014-03-14T12:04:09.367 回答