Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 

In this iflow, We are creating the Report on the KeyStore Certificates where we create attachment files of one is Valid Certificates and other is Expired Certificates one.

Step1: Create the iflow with the desired iflow name.

 


Step2: Connect the Sender and Integration process with the HTTP Adapter, give the desired endpoint in the address field like as below(/Keystore_Certificates_monitoring).


Step3:Now Add one Request reply and Receiver, then connect them with the OData V2 Adapter as shown below.


Do the following configurations in the Connection and Processing tab in OData Adapter.

Follow the below configuration to fetch the KeystoreEntries by using SAP CPI OData API in OData  Adapter.

In Connection tab:    Address: https://<<TenentURL>>/api/v1

Authentication: Basic

Credential Name:  (Deploy the CPI login Credentials with a particular name in the security Material in monitoring section as User credentials type).Give that particular name in the Credential Name field.


In Processing Tab:

Resource Path: KeystoreEntries

Query Option: $select=Alias,ValidNotAfter.


Step4: Add Content Modifier to the iflow for set the Content-Type in the Header.

Name: Content-Type     Source-Type: Constant    Source Value: application/xml


Step5: Now add the message mapping element to the flow and create one Mapping.


After creating the Message Mapping add the Source and Target XSD's.

Source XSD:



 

<?xml version="1.0" encoding="utf-8"?>

<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="KeystoreEntries">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="KeystoreEntry">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Alias" type="xs:string" />
              <xs:element name="ValidNotAfter" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

 


Target XSD:



 

<?xml version="1.0" encoding="utf-8"?>

<!-- Created with Liquid Technologies Online Tools 1.0 (https://www.liquid-technologies.com) -->

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="KeystoreEntries">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="KeystoreEntry">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" />
              <xs:element name="ExpiryDate" type="xs:string" />
	      <xs:element name="ExpiryStatus" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

 


Do the following Mappings as shown below for KeyStore Entries.


Do the following Mappings as shown below for KeyStore Entry.


Create one script to find the difference between dates by clicking on the highlighted icon.


After creating the script add the below script.



 

import com.sap.it.api.mapping.*;



//import java.text.SimpleDateFormat // importing class SimpleDateFormat

import java.util.Date // import class Date

 

def String dayDiff(String date1, String date2){
    Date d1 = Date.parse("yyyy-MM-dd", date1)
    Date d2 = Date.parse("yyyy-MM-dd", date2)
    def timeDiffer = Math.abs(d1.time - d2.time) // gives time difference in milliseconds
    def dayDiffer = timeDiffer/(1000*60*60*24) // 1day = 1000*60*60*24 milliseconds
	if(d1.time<d2.time){
	    return "Certificate is already expired"
		}
	else if(dayDiffer<32){
	    return "Certificate is going to expire in " + dayDiffer + " Days"
	    }
    else{
        return "Valid till " +  date1
    }
}

 


Now take the dayDiff(Custom element) from left side panel and the join the substring to date1, current_date to date2.


After joining the dates do following mapping to the flow.


Now do the following mapping to Name by using Alias and ValidNotAfter.


Do the following mapping to Expiry Date by using ValidNotAfter.


Do the following mapping to ExpiryStatus by using ValidNotAfter.


Step6: After the Message Mapping add parallel Multicast to the iflow as shown below.


Step7: After adding the Multicast create two branches and add two filters one to each branch.

And give the below conditions in the filter1.

Xpath Expression field: /KeystoreEntries/KeystoreEntry[ExpiryStatus/text()="Certificate is already expired"]


Give the below conditions in the filter2

Xpath Expression field: /KeystoreEntries/KeystoreEntry[ExpiryStatus/text()!="Certificate is already expired"]


Step8: Now Add one content modifiers to each of the branches to the structure the body of the payload.

<KeyStoreEnteries>

${in.body}

</KeyStoreEnteries>

 


Step9: Add one XML to CSV convertor to each of the branches of the flow as shown below and give the below given string in the Xsd field

Path to source Element in XSD: /KeyStoreEnteries/KeystoreEntry

And the check the include the field name as Headers as shown below.

 


Step10: Add one content modifier to each branch of the iflow to save the payload of each branch in the property.

Name: PayLoad1     Source-Type: Expression    Source Value: ${in.body}  DateType: java.lang.String


Step11: After that use join element to join the both the branches of the flow.


Step12: After joining the both the branches of flow add the gather by given the below parameters as shown in the picture.


Step13: After the gather step save and deploy the iflow and fetch the iflow endpoint URL for testing the iflow

After fetching the endpoint use postman to the iflow as shown below.


Click on the send and observe the output.


Step14: To create the Attachments add one groovy script after the Gather step and write the below given script in it.



 

import com.sap.gateway.ip.core.customdev.util.Message

import org.apache.camel.impl.DefaultAttachment

import javax.mail.util.ByteArrayDataSource

 

def Message processData(Message message) {
    // 1: initailizing the variable to get the body from sent message
    def properties = message.getProperties()

    def payload1 = properties.get("PayLoad1");
    def payload2 = properties.get("PayLoad2");

    // 3: Construct a ByteArrayDataSource object with the byte array and the content's MIME type
    def dataSource1 = new ByteArrayDataSource(payload1, 'application/csv')
    def dataSource2 = new ByteArrayDataSource(payload2, 'application/csv')

    // 4: Construct a DefaultAttachment object
    def attachment1 = new DefaultAttachment(dataSource1)
    def attachment2 = new DefaultAttachment(dataSource2)

    // 5: Add the attachment to the message
    message.addAttachmentObject('Expired_Certificates', attachment1)
    message.addAttachmentObject('Valid_Certificates', attachment2)
    return message
}

 


By this groovy script two attachments will be created for the expired and valid Certificates separately.

 

 

 

 

Labels in this area