Skip to Content
Technical Articles
Author's profile photo Jacky Liu

Build Digital Document Platform Backend Service On BTP with BTP Ads Sdm Print Service

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

 

 

 

 

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.