数据传输中的条件监控

时间:2014-03-14 05:12:47

标签: xslt ibm-datapower

我有以下请求

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>

我做错了什么?

2 个答案:

答案 0 :(得分:1)

嗯,不确定整个脚本,但由于if语句不正确,这里应该是一个起点:

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

使用的转化函数为this

SQL变量不正确。请检查有关如何定义查询以及如何测试SQL操作结果的语法。 Datapower info center上有很多很好的例子。

答案 1 :(得分:0)

"$dateDifference" < '180'

两个三件事情跳出来了:

  1. 您不能将<用作比较运算符;您需要使用&lt;代替。

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

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