Skip to content

Commit 672e820

Browse files
committed
Initial SAP commits
Sample code from SAP demos.
1 parent bd064ac commit 672e820

7 files changed

Lines changed: 410 additions & 0 deletions

File tree

SAP/Forms/Code.gs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
function onFormSubmit(e) {
2+
var myObject = {};
3+
var itemResponses = e.response.getItemResponses();
4+
for (var j = 0; j < itemResponses.length; j++) {
5+
var itemResponse = itemResponses[j];
6+
myObject[itemResponse.getItem().getTitle()] = itemResponse.getResponse();
7+
//Logger.log('"%s" was "%s"',itemResponse.getItem().getTitle(), itemResponse.getResponse());
8+
}
9+
10+
Logger.log(myObject);
11+
12+
var t = HtmlService.createTemplateFromFile('product_template');
13+
t.data = myObject;
14+
var postPayload = t.evaluate().getContent();
15+
16+
Logger.log(postPayload);
17+
18+
var base_url = "https://sapes1.sapdevcenter.com/sap/opu/odata/IWBEP/GWDEMO/ProductCollection";
19+
var additionParams = "$format=json";
20+
var user = 'YOUR_USERNAME';
21+
var password = 'YOUR_PASSWORD';
22+
var header = 'Basic '+Utilities.base64Encode(user+':'+password);
23+
24+
var headers = {
25+
Authorization: header,
26+
'X-CSRF-Token' : 'Fetch',
27+
"Content-Type": "application/atom+xml"
28+
}
29+
30+
31+
//Logger.log(headers);
32+
var response = UrlFetchApp.fetch(base_url,{headers: headers, muteHttpExceptions: true});
33+
var csrf_token = response.getAllHeaders()['x-csrf-token'];
34+
var cookie = response.getAllHeaders()['set-cookie'];
35+
36+
//Logger.log(response.getAllHeaders());
37+
38+
headers['X-CSRF-Token'] = csrf_token;
39+
headers['Cookie'] = cookie.join('; ');
40+
41+
42+
43+
Logger.log(headers);
44+
45+
//var deleteResponse = UrlFetchApp.fetch(id,{headers: headers, method : 'DELETE', muteHttpExceptions: true});
46+
47+
48+
var createResponse = UrlFetchApp.fetch(base_url,{headers: headers, method : 'POST', contentType : "application/atom+xml", payload: postPayload, muteHttpExceptions: true});
49+
50+
Logger.log(createResponse.getContentText());
51+
}

SAP/Forms/product_template.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="https://sapes1.sapdevcenter.com:443/sap/opu/odata/IWBEP/GWDEMO/">
2+
<atom:content type="application/xml">
3+
<m:properties>
4+
<d:ProductName><?=data['Product Name']?></d:ProductName>
5+
<d:TaxTariffText>Regular VAT</d:TaxTariffText>
6+
<d:ProductID>ARUN-<?=Math.random().toString(36).substring(2, 4)?></d:ProductID>
7+
<d:DimensionUnit>MTR</d:DimensionUnit>
8+
<d:UnitPrice>500.00</d:UnitPrice>
9+
<d:WeightMeasure>4.200</d:WeightMeasure>
10+
<d:ProductWidth>0.320</d:ProductWidth>
11+
<d:SupplierID>0100000000</d:SupplierID>
12+
<d:ProductDescription><?=data['Product Description']?></d:ProductDescription>
13+
<d:ProductCategory>Notebooks</d:ProductCategory>
14+
<d:TaxTariffCode>1</d:TaxTariffCode>
15+
<d:QuantityUnit>EA</d:QuantityUnit>
16+
<d:ProductTypeCode>PR</d:ProductTypeCode>
17+
<d:WeightUnitCode>KGM</d:WeightUnitCode>
18+
<d:SupplierName>SAP</d:SupplierName>
19+
<d:CurrencyCode>EUR</d:CurrencyCode>
20+
<d:ProductHeight>0.040</d:ProductHeight>
21+
<d:ProductDepth>0.210</d:ProductDepth>
22+
</m:properties>
23+
</atom:content>
24+
</atom:entry>

SAP/Gmail Schemas/Code.gs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
function testSchemas() {
2+
var htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent();
3+
4+
GmailApp.sendEmail(Session.getEffectiveUser().getEmail(),'Alert for SAP - ' + new Date(),'',
5+
{htmlBody: htmlBody});
6+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<html>
2+
<head>
3+
<script type="application/ld+json">
4+
{
5+
"@context": "http://schema.org",
6+
"@type": "ParcelDelivery",
7+
"deliveryAddress": {
8+
"@type": "PostalAddress",
9+
"streetAddress": "24 Willie Mays Plaza",
10+
"addressLocality": "San Francisco",
11+
"addressRegion": "CA",
12+
"addressCountry": "US",
13+
"postalCode": "94107"
14+
},
15+
"expectedArrival": "2013-03-12T12:00:00-08:00",
16+
"carrier": {
17+
"@type": "Organization",
18+
"name": "SAP"
19+
},
20+
"itemShipped": {
21+
"@type": "Product",
22+
"name": "iPod Mini"
23+
},
24+
"partOfOrder": {
25+
"@type": "Order",
26+
"orderNumber": "176057",
27+
"seller": {
28+
"@type": "Person",
29+
"name": "Bob Dole"
30+
}
31+
},
32+
"action": {
33+
"@type": "TrackAction",
34+
"name": "Track Order in SAP",
35+
"url": "https://www.package-shipments.com/track?package=abc"
36+
}
37+
}
38+
</script>
39+
</head>
40+
<body>
41+
<p>
42+
This a test for a Go-To action in Gmail.
43+
</p>
44+
</body>
45+
</html>

SAP/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
SAP Demos
2+
================
3+
4+
Sample SAP integrations. You'll need to create a [sample SAP account](http://scn.sap.com/docs/DOC-40986) at the SCN.
5+
6+
You can watch the video of the [sample demos here](http://www.slideshare.net/SAPAppsPartner/tehcnical-webinar-technical-webinar-building-mashups-with-google-apps-and-sap-using-sap-netweaver-gateway) (start at about 1 hr in for Google Apps demos)
7+
8+
These are not official Google samples. These are more of proof of concepts to support demos and other presentations.
9+
10+
Please use this code as a guidline and not as production ready code.
11+
12+
http://developers.google.com/apps-script
13+
14+
http://script.google.com
15+
16+
All code in this folder released under [Apache 2.0 license](http://www.apache.org/licenses/LICENSE-2.0).

SAP/Sheets/Code.gs

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
//sample instance
2+
//http://scn.sap.com/docs/DOC-40986
3+
4+
5+
function onOpen(){
6+
SpreadsheetApp.getActiveSpreadsheet()
7+
.addMenu('SAP NetWeaver',[{name:'SAP Data Wizard', functionName:'showUI'},
8+
null,
9+
{name:'Load Business Partners', functionName:'getBusinessPartnerData'},
10+
{name:'Load Sales Orders', functionName:'getSalesOrderData'},
11+
null,
12+
{name:'Load Items for Sales Order', functionName:'loadSalesItems'},
13+
null,
14+
{name: 'Post to Google+', functionName:'googleplus'}]);//future ideas
15+
}
16+
17+
function showUI(){
18+
var ui = HtmlService.createTemplateFromFile('ui').evaluate().setSandboxMode(HtmlService.SandboxMode.NATIVE).setHeight(550);
19+
20+
SpreadsheetApp.getActiveSpreadsheet().show(ui);
21+
}
22+
23+
function returnDate(unix_timestamp){
24+
//var unix_timestamp = '1370025951';
25+
var date = new Date(unix_timestamp*1000);
26+
//Logger.log(date);
27+
return date;
28+
}
29+
30+
function returnUnixtimestamp(dateString){
31+
//var dateString = '2013-04-01';
32+
var parts = dateString.match(/(\d+)/g);
33+
var date = new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
34+
var timestamp = date.getTime()/1000 + '';
35+
return timestamp;
36+
}
37+
38+
39+
function createOrSetActiveSheet(sheetName){
40+
var ss = SpreadsheetApp.getActiveSpreadsheet();
41+
var sheets = ss.getSheets();
42+
var sheet;
43+
for(var i = 0;i<sheets.length;i++){
44+
sheet = sheets[i];
45+
var currentSheetName = sheet.getSheetName();
46+
if(sheetName===currentSheetName){
47+
ss.setActiveSheet(sheet);
48+
sheet.clear();
49+
return sheet;
50+
}
51+
}
52+
sheet = ss.insertSheet();
53+
sheet.setName(sheetName);
54+
ss.setActiveSheet(sheet);
55+
return sheet;
56+
}
57+
58+
//future ideas
59+
function sendNightlyEmail(){
60+
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Published Dashboard');
61+
var chart = sheet.getCharts()[0];
62+
MailApp.sendEmail(Session.getActiveUser().getEmail(), 'Daily petition report', 'See attached image', {name:'Sharing chart',attachments:[chart.getBlob()]});
63+
}
64+
65+
66+
function getBusinessPartnerData(){
67+
var ss = SpreadsheetApp.getActiveSpreadsheet();
68+
var sheet = ss.getActiveSheet();
69+
sheet.clear();
70+
71+
72+
var base_url = "https://sapes1.sapdevcenter.com/sap/opu/odata/IWBEP/GWDEMO/BusinessPartnerCollection/?";
73+
var additionParams = "$format=json";
74+
var user = 'YOUR_USERNAME';
75+
var password = 'YOUR_PASSWORD';
76+
var header = 'Basic '+Utilities.base64Encode(user+':'+password);
77+
78+
79+
var getDataURL = base_url + additionParams;
80+
Logger.log(getDataURL);
81+
82+
var dataResponse = UrlFetchApp.fetch(getDataURL,{headers: {Authorization: header}, muteHttpExceptions: true}).getContentText();
83+
var dataObj = JSON.parse(dataResponse);
84+
var headers = ['Key','Name','Role','Website','Email','Address'];
85+
86+
var maxLetter = String.fromCharCode(64 + headers.length);
87+
88+
sheet.appendRow(headers);
89+
90+
sheet.getRange('A1:'+maxLetter+'1').setBackground('Grey').setFontStyle('oblique');
91+
92+
ss.setColumnWidth(2, 220);
93+
ss.setColumnWidth(3, 89);
94+
95+
var rows = [];
96+
for(var i = 0;dataObj.d.results && i<dataObj.d.results.length;i++){
97+
var row = dataObj.d.results[i];
98+
99+
rows.push([row.BusinessPartnerKey,row.Company,row.BusinessPartnerRoleText,row.WebAddress, row.EmailAddress, 'street address']);
100+
}
101+
var rowsCount = rows.length+1;
102+
ss.getRange('A2:'+maxLetter+rowsCount).setValues(rows);
103+
}
104+
105+
106+
function getSalesOrderData(){
107+
var ss = SpreadsheetApp.getActiveSpreadsheet();
108+
var sheet = ss.getActiveSheet();
109+
sheet.clear();
110+
111+
112+
var base_url = "https://sapes1.sapdevcenter.com/sap/opu/odata/IWBEP/GWDEMO/SalesOrderCollection/?";
113+
var additionParams = "$format=json";
114+
var user = 'YOUR_USERNAME';
115+
var password = 'YOUR_PASSWORD';
116+
var header = 'Basic '+Utilities.base64Encode(user+':'+password);
117+
118+
119+
var getDataURL = base_url + additionParams;
120+
Logger.log(getDataURL);
121+
122+
var dataResponse = UrlFetchApp.fetch(getDataURL,{headers: {Authorization: header}, muteHttpExceptions: true}).getContentText();
123+
var dataObj = JSON.parse(dataResponse);
124+
var headers = ['Sales Order Key','Customer Name','Status','Currency','Total Amt','Tax Amt','Note','Created By','Changed By'];
125+
126+
var maxLetter = String.fromCharCode(64 + headers.length);
127+
128+
sheet.appendRow(headers);
129+
130+
sheet.getRange('A1:'+maxLetter+'1').setBackground('Grey').setFontStyle('oblique');
131+
132+
ss.setColumnWidth(2, 220);
133+
ss.setColumnWidth(3, 89);
134+
135+
var rows = [];
136+
for(var i = 0;dataObj.d.results && i<dataObj.d.results.length;i++){
137+
var row = dataObj.d.results[i];
138+
139+
rows.push([row.SalesOrderKey,row.CustomerName,row.StatusDescription,row.Currency,row.TotalSum,row.Tax,row.Note,row.CreatedByEmployeeLastName,row.ChangedByEmployeeLastName]);
140+
}
141+
var rowsCount = rows.length+1;
142+
ss.getRange('A2:'+maxLetter+rowsCount).setValues(rows);
143+
}
144+
145+
146+
function loadSalesItems(){
147+
var salesOrderKey = SpreadsheetApp.getActiveRange().getValue();
148+
var initialPageCount = 99; //because a default sheet has only 100 rows to start
149+
150+
var sheet = createOrSetActiveSheet(salesOrderKey);
151+
var base_url = "https://sapes1.sapdevcenter.com/sap/opu/odata/IWBEP/GWDEMO/SalesOrderCollection('"+salesOrderKey+"')/salesorderlineitems?";
152+
var getDataURL = base_url + '$format=json';
153+
154+
var user = 'YOUR_USERNAME';
155+
var password = 'YOUR_PASSWORD';
156+
var header = 'Basic '+Utilities.base64Encode(user+':'+password);
157+
Logger.log(getDataURL);
158+
159+
var dataResponse = UrlFetchApp.fetch(getDataURL,{headers: {Authorization: header}, muteHttpExceptions: true}).getContentText();
160+
Logger.log(dataResponse);
161+
var dataObj = JSON.parse(dataResponse);
162+
var headers = ['SalesOrderItemKey','ProductName','Availability','Note','Currency','NetSum','Tax','TotalSum'];
163+
var maxLetter = String.fromCharCode(64 + headers.length);
164+
165+
sheet.appendRow(headers);
166+
sheet.getRange('A1:'+maxLetter+'1').setBackground('Grey').setFontStyle('oblique');
167+
var rows = [];
168+
for(var i = 0;dataObj.d.results && i<dataObj.d.results.length;i++){
169+
var row = dataObj.d.results[i];
170+
rows.push([row.SalesOrderItemKey,row.ProductName,row.Availability,row.Note,row.Currency,row.NetSum,row.Tax,row.TotalSum]);
171+
}
172+
var rowsCount = rows.length+1;
173+
sheet.getRange('A2:'+maxLetter+rowsCount).setValues(rows);
174+
}

0 commit comments

Comments
 (0)