Date Comparison in Groovy SAP CPI

2.2k Views Asked by At

We are trying to compare dates using the below if-else condition. If we use constant values, the conditions are evaluated correctly. However when we use the references of array values the code doesn't work as expected. Request your guidance here.

last Execution date you can take todays date.

input payload:

<items>
    <row>
        <id>1</id>
        <status__v>Approved</status__v>
        <approved_date__c>2021-06-17</approved_date__c>
        <major_version_number__v>1</major_version_number__v>
    </row>
    <row>
        <id>2</id>
        <status__v>Approved</status__v>
        <approved_date__c>2021-08-30</approved_date__c>
        <major_version_number__v>1</major_version_number__v>
    </row>
    <row>
        <id>3</id>
        <status__v>Approved</status__v>
        <approved_date__c>2021-10-01</approved_date__c>
        <major_version_number__v>1</major_version_number__v>
    </row>
</items>

Groovy Code:

import com.sap.it.api.mapping.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.*
import java.lang.*;
import java.util.*;

def void Itemstatus(String[] ApprovedDt,String[] status,String[] version,String[] propertyName, Output output,MappingContext context)
{
    String lets = context.getProperty(propertyName[0]); // "lets" will get value "2021-09-30"
    SimpleDateFormat formatter1=new SimpleDateFormat("yyyy-MM-dd");
    datelets=formatter1.parse(lets);
    
   
    Date date = new Date();
    String CurrentDate = date.format("yyyy-MM-dd");  // "currentDate" value "2021-09-30"
    
    
    
     def status1 = ["Active","Inactive"];
    
     for(int i=0; i<status.size(); i++)
     {
        dateApprovedDt = formatter1.parse(ApprovedDt[i]);  // "dateApprovedDt" value "2021-06-17"
       
       if (status == "Approved" && dateApprovedDt > datelets)
       {
            output.addValue(status1[0])
       }
       
       else if(status == "Approved" && dateApprovedDt > datelets && version[i] > "1")  //version value "1"
       {
           output.addValue(status1[0])
       }
       else if (status == "Approved" && dateApprovedDt < CurrentDate)
       {
            output.addValue(status1[1])
       }
       else
       {
            output.addValue(status1[2])
       
        } 
     }
}
   
1

There are 1 best solutions below

0
On

You are trying to compare a Date with a String in this line:

else if (status == "Approved" && dateApprovedDt < CurrentDate)

You'd rather want to compare like so: dateApprovedDt < date