Advertisement
Guest User

Untitled

a guest
Feb 11th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. /**
  2. * 帳票テンプレートエンジンのPOC
  3. * 対象レコードのSalesforce IdとExcel Templateのみから、エクセル帳票を出力する。
  4. * @author Satoshi Haga
  5. * @date 2016/02/11
  6. */
  7.  
  8. var ExcelMerge = require('js-merge-xlsx');
  9. var Promise = require('bluebird');
  10. var fs = Promise.promisifyAll(require('fs'));
  11. var JSZip = require('jszip');
  12. var _ = require('underscore');
  13. var jsforce = require('jsforce');
  14. require('dotenv').load();
  15.  
  16. //カスタムフィールドの完全名からカスタムオブジェクトのAPI参照名を取得
  17. _.mixin({
  18. objectNames:(fieldNames)=>{
  19. let objs = [];
  20. _.each(fieldNames, (e)=>{
  21. let objectName = e.match(/(.*)(?:\.([^.]+$))/)[1];
  22. if(!_.contains(objs, objectName)){
  23. objs.push(objectName);
  24. }
  25. });
  26. return objs;
  27. }
  28. });
  29.  
  30. //Salesforce Idは画面上から与えられる
  31. var sfId = 'a0MN0000004aH3mMAE';
  32. //Excel templateは画面上から動的に与えられるがPOCでは固定Template
  33. var templatePath = './Template.xlsx';
  34.  
  35. var conn = new jsforce.Connection({loginUrl : process.env.sf_host});
  36. var excelMerge = new ExcelMerge();
  37.  
  38. Promise.all([
  39. fs.readFileAsync(templatePath).then((excelTemplate)=>(excelMerge.load(new JSZip(excelTemplate)))),
  40. conn.login(process.env.sf_username, process.env.sf_password)
  41. ]).then(()=>{
  42.  
  43. let objectName = _.objectNames(excelMerge.variables())[0];
  44. return conn.sobject(objectName).find({ 'Id' : sfId}).execute();
  45. }).then((records)=>{
  46.  
  47. console.log(records);
  48. }).catch((err)=>{
  49.  
  50. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement