Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Jacky_Liu
Product and Topic Expert
Product and Topic Expert

Digital document platform can be used to handle the following requirements:



  1. Generate  PDF documents base on predefined formate with business data .

  2. Sign the PDF documents with own certificate.

  3. Send the PDF documents by Email .

  4. Store the PDF document into document management system .

  5. Print the PDF document to a specific local printer .


We can build Digital Document Platform Backend Service On BTP with BTP SAP Forms Service by Adobe (ADS) SAP Document Service(SDM)  SAP Print Service .

The blog is based on the following blogs:



Prerequisite:



  1. You have finished ADS initial setup

  2. You have finished Print Service initial setup

  3. You have finished  Initial Setup for Document Management Service, Integration Option.

  4. You have finished Onboarding Repository.


Steps:

1, Create destination for  ADS,  SDM, Print Service.


ADS destination


Print Service destination


SDM destination


 

2, Adapt variant of ADS, SDM Print service destination and SDM repository id. Adapt sending email account and password .



The following is the code of server.js
const {ServiceApi} = require( './service');
const express = require('express');
const app = express();
const xsenv = require('@sap/xsenv');
const fs = require('fs');

const base64 = require('base64topdf');

xsenv.loadEnv();
const services = xsenv.getServices({
uaa: { label: 'xsuaa' }
});

const xssec = require('@sap/xssec');
const passport = require('passport');
passport.use('JWT', new xssec.JWTStrategy(services.uaa));
app.use(passport.initialize());
app.use(passport.authenticate('JWT', {
session: false
}));

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.get('/srv', function (req, res) {
if (req.authInfo.checkScope('$XSAPPNAME.User')) {
res.status(200).send('adsUnify');
} else {
res.status(403).send('Forbidden');
}
});

app.post('/srv/pdfplatform', function (req, res) {
ServiceApi.render(req.body.render).then( pdf=>{
if(req.body.sign){
req.body.sign.pdf = pdf;
ServiceApi.sign(req.body.sign).then(spdf=>{
base64.base64Decode(spdf,'render.pdf');
const content = fs.readFileSync('render.pdf');
const blob = new Blob([content], {type: 'application/pdf'});

if(req.body.email){
ServiceApi.semail(content,req.body.email.attachname,req.body.email.sendto,req.body.email.subject,req.body.email.ebody).then((info=>{
console.log('email sent successfully');
})).catch(err=>{console.log(err)});
};

if(req.body.cmis){

ServiceApi.createDoc(blob,req.body.cmis.name,req.body.cmis.path).then(cmisresp=>{
console.log(cmisresp.succinctProperties);
}).catch(err=>{
console.log(err);
});
};


if(req.body.print){
// fs.close();
ServiceApi.print(content, req.body.print).then(result=>{
console.log('uploaded into print queue ' + req.body.print.qname)
}).catch(err=>{
console.log(err);
});
};

let raw = fs.createReadStream('render.pdf');
res.writeHead(200, 'ok');
raw.pipe(res);
fs.rm('render.pdf',()=>{
console.log('file deleted successfully');
});


}).catch(err=>{
console.log(err);
res.status(500).send(err);
});
}else{
base64.base64Decode(pdf,'render.pdf');
const content = fs.readFileSync('render.pdf');

if(req.body.print){
ServiceApi.print(content, req.body.print).then(result=>{
console.log('uploaded into print queue ' + req.body.print.qname)
}).catch(err=>{
console.log(err);
});
}

if(req.body.cmis){

const blob = new Blob([content], {type: 'application/pdf'});
ServiceApi.createDoc(blob,req.body.cmis.name,req.body.cmis.path).then(cmisresp=>{
console.log(cmisresp.succinctProperties);
}).catch(err=>{
console.log(err);
})
};
if(req.body.email){
ServiceApi.semail(content,req.body.email.attachname,req.body.email.sendto,req.body.email.subject,req.body.email.ebody).then((info=>{
console.log('email sent successfully');
})).catch(err=>{console.log(err)});
};
let raw = fs.createReadStream('render.pdf');
res.writeHead(200, 'ok');
raw.pipe(res);
fs.rm('render.pdf',()=>{
console.log('file deleted successfully');
});
}
}).catch(err=>{
console.log(err);
res.status(500).send(err);
});

});

app.get('/srv/user', function (req, res) {
if (req.authInfo.checkScope('$XSAPPNAME.User')) {
res.status(200).json(req.user);
} else {
res.status(403).send('Forbidden');
}
});
const port = process.env.PORT || 5001;
app.listen(port, function () {
console.info('Listening on http://localhost:' + port);
});

 

3, Build and deploy application .







4, Test with postman:


We use the following JSON as request body:
{"render":{
"embedFont": 0,
"formLocale": "en_US",
"formType": "interactive",
"taggedPdf": 1,
"xdpTemplate": "labelprint3/labelprint3",
"xmlData": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGZvcm0xPgogICA8TGFiZWxGb3JtPgogICAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDE8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMjwvRGVsaXZlcnlJZD4KICAgICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KICAgPC9MYWJlbEZvcm0+CiAgIDxMYWJlbEZvcm0+CiAgICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMzwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMzwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTE8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAxPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1Ni4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTI8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1OC4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMjwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTM8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMzwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTM8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMTwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTE8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzEyPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMjwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMzwvRGVsaXZlcnlJZD4KICAgIDxQb3NpdGlvbj4wMDEzPC9Qb3NpdGlvbj4KICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICA8UGFja2FnZT5QMTExMTEzPC9QYWNrYWdlPgogICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogPC9MYWJlbEZvcm0+CjwvZm9ybTE+"
} ,
"sign":{"credentialAlias": "jackysignature",
"signatureFieldName": "signature",
"reasonInfo": "approval",
"locationInfo": "Shanghai",
"contactInfo": "email@sap.com",
"pdf":""}
,

"print":{
"numberOfCopies": 1,
"username": "test user",
"qname": "plant2",
"metadata": {
"business_metadata": {
"business_user": "user1",
"object_node_type": "object_node_1"
},
"version": 1.2
},
"printContents": [
{
"objectKey": "",
"documentName": "dn80000095"
}
]
},
"cmis": {
"name": "dn80000095",
"path": "adobeservice"

},
"email":{
"sendto": "email@sap.com",
"subject": "Digital Document Platform",
"ebody": "Digital Document Platform body",
"attachname": "dn80000095.pdf"
}

}

Check result in email:


check result in document management service:


check result in print service:



Note:


You can combine the following 5 abilities base on real requirements


1,  Generate  PDF documents base on predefined formate with business data .(required)

2,  Sign the PDF documents with own certificate. (optional)

3,  Send the PDF documents by Email .(optional)

4,  Store the PDF document into document management system .(optional)

5,  Print the PDF document to a specific local printer .(optional)

For example, we only need 1, 2, 3, we can use the following JSON
{"render":{
"embedFont": 0,
"formLocale": "en_US",
"formType": "interactive",
"taggedPdf": 1,
"xdpTemplate": "labelprint3/labelprint3",
"xmlData": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGZvcm0xPgogICA8TGFiZWxGb3JtPgogICAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDE8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMjwvRGVsaXZlcnlJZD4KICAgICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KICAgPC9MYWJlbEZvcm0+CiAgIDxMYWJlbEZvcm0+CiAgICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgICA8UG9zaXRpb24+MDAxMzwvUG9zaXRpb24+CiAgICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgICAgPFBhY2thZ2U+UDExMTExMzwvUGFja2FnZT4KICAgICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogICA8L0xhYmVsRm9ybT4KICAgPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTE8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAxPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1Ni4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMTwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgIDxEZWxpdmVyeUlkPjgwMDAzMTI8L0RlbGl2ZXJ5SWQ+CiAgICA8UG9zaXRpb24+MDAxMDwvUG9zaXRpb24+CiAgICA8TWF0ZXJpYWxObz5NMTAwMDAyPC9NYXRlcmlhbE5vPgogICAgPFF1YW50aXR5PjEyMzQ1OC4zMjE8L1F1YW50aXR5PgogICAgPFBhY2thZ2U+UDExMTExMjwvUGFja2FnZT4KICAgIDxRUkNvZGU+MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk8L1FSQ29kZT4KIDwvTGFiZWxGb3JtPgogPExhYmVsRm9ybT4KICAgICA8RGVsaXZlcnlJZD44MDAwMzEzPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTM8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMzwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTM8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzExPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMTwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTYuMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTE8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICA8RGVsaXZlcnlJZD44MDAwMzEyPC9EZWxpdmVyeUlkPgogICAgPFBvc2l0aW9uPjAwMTA8L1Bvc2l0aW9uPgogICAgPE1hdGVyaWFsTm8+TTEwMDAwMjwvTWF0ZXJpYWxObz4KICAgIDxRdWFudGl0eT4xMjM0NTguMzIxPC9RdWFudGl0eT4KICAgIDxQYWNrYWdlPlAxMTExMTI8L1BhY2thZ2U+CiAgICA8UVJDb2RlPjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5PC9RUkNvZGU+CiA8L0xhYmVsRm9ybT4KIDxMYWJlbEZvcm0+CiAgICAgPERlbGl2ZXJ5SWQ+ODAwMDMxMzwvRGVsaXZlcnlJZD4KICAgIDxQb3NpdGlvbj4wMDEzPC9Qb3NpdGlvbj4KICAgIDxNYXRlcmlhbE5vPk0xMDAwMDM8L01hdGVyaWFsTm8+CiAgICA8UXVhbnRpdHk+MTIzNDU4LjMyMTwvUXVhbnRpdHk+CiAgICA8UGFja2FnZT5QMTExMTEzPC9QYWNrYWdlPgogICAgPFFSQ29kZT4wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTwvUVJDb2RlPgogPC9MYWJlbEZvcm0+CjwvZm9ybTE+"
} ,
"sign":{"credentialAlias": "jackysignature",
"signatureFieldName": "signature",
"reasonInfo": "approval",
"locationInfo": "Shanghai",
"contactInfo": "email@sap.com",
"pdf":""},
"email":{
"sendto": "email@sap.com",
"subject": "Digital Document Platform",
"ebody": "Digital Document Platform body",
"attachname": "dn80000095.pdf"
}

}

 

If you are interested in this , please contact your BTP Customer success manager with this blog. We will provide futher support .

 

The Ends!

Thank you for your time!

 

Best regards!

 

Jacky Liu