有时候我们需要在Salesforce页面下载存放为Attachment的文件;或者我们需要把存成Attachment的图片显示在页面上。

内部站点

如果我们文件为Attachment,在Salesforce Internal (即使用Salesforce账户登录的,非Digital Experience, Site.com),则可以使用

 <a href="{!URLFOR($Action.Attachment.Download, attachmentId)}">File Name</a>

下载文件。

或者使用

<img src="{!URLFOR($Action.Attachment.Download, attachmentId)}" />

显示图片。

如果是File,则可以使用Url.getFileFieldURL(entityId, fieldName)

Site.com

Site.com上的则不能用上面的方法,使用的话会直接报错。这时可以通过Salesforce提供的文件下载api /servlet/servlet.FileDownload?file=xxxx~18,不过要注意,一定要使用Salesorce Internal Url,使用Site.com的相关url肯定也会报错。

  1. 首先在后台获取 Salesforce Instance Url 或 Org Domain Url。例如:
    String orgUrl = Url.getOrgDomainUrl().toExternalForm()
  2. 将其传到前台,拼接成下载地址:
    <a href="{!orgUrl + '/servlet/servlet.FileDownload?file=' + attachment.Id}">File Name</a>

参考文档

  1. Visualforce Developer Guide: $Action
  2. Apex Reference Guide: URLClass
  3. stackexchange: How to get salesforce instance url
  4. Salesforce Developer Forum: Download Attachment from Sites??
  5. Salesforce Developer Forum: How to get downloadable link for attachment?

升级后打开前后端均显示503,查询nginx日志显示:

PHP message: Adapter Typecho_Db_Adapter_Mysql is not available

由于之前升级过PHP,因此估计是PHP的问题。修改Typecho的config.inc.php相关代码为:

/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_Mysql', 'typecho_');

恢复正常。

Salesforce 未锁定包(Salesforce Unlocked Package)是Salesforce最新推广的基于包的开发最佳实践。通过Salesforce CLI,我们可以很方便的制作和部署未锁定包。本文只是简略的将核心步骤展示出来:

  1. 创建一个 SFDX 项目

    sfdx force:project:create -d demo-workspace -n expenser-app -p force-app
  2. 授权Dev Hub环境,该环境必须启用Dev Hub功能和未锁定包和第二代管控包功能

    sfdx auth:web:login -d -a devHub
  3. 创建一个草稿环境(scratch org)并在其中开发包

    sfdx force:org:create -f config/project-scratch-def.json -u scratchOrg1
  4. 保证所有要打包的组件都已经在当前的项目文件夹内
  5. 从 SFDX 项目文件夹,直接创建未锁定包:

    sfdx force:package:create -n "Demo App" -r force-app -t Unlocked -o [email protected]
  6. 检查项目文件夹中的sfdx-project.json文件,CLI 会自动更新项目文件,使其包含上一步创建的包的信息:

    {
    "packageDirectories": [
       {
          "path": "force-app",
          "default": true,
          "package": "Demo App",
          "versionName": "ver 0.1",
          "versionNumber": "0.1.0.NEXT"
       }
    ],
    "namespace": "",
    "sfdcLoginUrl": "https://login.salesforce.com",
    "sourceApiVersion": "50.0",
    "packageAliases": {
       "Expense Manager": "0Hoxxx"
    }
    }
  7. 创建一个包的版本,Salesforce CLI会自动处理包的版本号等

    sfdx force:package:version:create --package "Demo App" -k lushang.me --wait 10
  8. 在另一个创建好的草稿环境中,安装并测试这个版本的包:

    sfdx force:package:install -p "Demo [email protected]" -y testOrg1 -k lushang.me --wait 10 --publishwait 10
  9. 如果上一步骤没问题,则可以发布这个版本的包:

    sfdx force:package:version:promote -p "Demo [email protected]"

参考:

  1. Salesforce DX Developer Guide
  2. Workflow for Unlocked Packages
  3. Release an Unlocked Package

2019年能源消费总量:4860.0Mtce = 1.42434936e+20J = 48亿吨标准煤

国土面积:960万平方公里 = 9.6e+12 m2

我国属太阳能资源丰富的国家之一,全国总面积2/3以上地区年日照时数大于2000小时,年辐射量在5000MJ/m2以上。据统计资料分析,中国陆地面积每年接收的太阳辐射总量为3.3×103~8.4×103MJ/m2,相当于24,000亿吨标准煤的储量。

太阳能储量/能源消费总量:24000/48 = 500倍。

如果使用20%转化率的太阳能电池,则为满足2018年一次能源消耗量,则需要9.6e+12 48 / (24,000 20%) = 9.6 万平方公里(1.44亿亩),1%的国土面积。

考虑到中国有大片沙漠戈壁(总面积达130.8万平方千米,约占全国土地总面积的13.6%),所以我建议:

给沙漠和戈壁披上太阳能电池!发电,减少沙尘危害,实现碳中和!

Q&A、答疑:

  1. 这事能赚钱么?
    按照目前市面上的太阳能电池价格和年发电量比例,不能赚钱。但是能极大地降低中国碳排放量,极大减少石油依赖,极大保护中国的环境。而且能带动太阳能电池板研发制造、电力输送、终端产品(电动汽车、电动工业机械等)非常多的产业发展。如果我们走在前头,还能把这些先进的产业链出口全球,赚取知识产权和研发设计等高端附加值。
  2. 这事儿技术上可行吗?

    • 目前中国能源消费总量年均增速在3.4%左右,按照国家「十四五」计划中的「到2030年达到碳排放峰值」,预计我们最多耗能应该在4860.0Mtce * (1 + 3.4%) ^ 11 = 7095 Mtce, 71亿吨标准煤,或者说 207937422000000000000 焦耳
    • 目前市面上太阳能天池的功率面积比大约在200 瓦特/平米, 计算成每年产出的电能和面积比应该是2522880000 焦耳,那么很清楚就知道咱们需要207937422000000000000/2522880000 = 82420654966 平方米 = 82420 平方公里 = 1.23569 亿亩土地。小于上面假设的9.6万平方公里,更小于130.8万平方千米的沙漠戈壁。说明有的是地方装。
    • 目前中国光伏产业是少数处于世界领先位置的产业,而且还有点产能过剩,我们自己用没问题!
    • 电池技术突飞猛进,储能电池价格节节下降,在2018年,最低0.8 元/Wh即可买到!
  3. 大概要花多少钱?

    • 太阳能电板: 这么大规模的采购,单价可以降低到0.5元/W(原价在1元/W左右)。按照最高71亿吨标准煤的年发电量,需要2.07937e+20J/3.1536e+07s = 6.59365e+12 W的装机量,也就是需要3.296825e+12元,即3.296825万亿人民币。还不到2008年中国4万亿振兴计划嘛,咱们现在可比十多年前富强多了!
    • 储能电池:目前最低0.8元/Wh单价,咱们集中采购再降低一点,0.4元/Wh!再按照一天4小时发电量做储能,需要6.59365e+12 W * 4 * 0.4 = 1.05498e+13,即10.5498万亿人民币。看起来这个项目跟电动汽车一样,电池是大头!
    • 土地:沙漠戈壁啥的,基本上可以免费,就算1000元/亩象征性收点钱。1.64841e+13 W的装机量,目前市面上太阳能电池功率占面积比大约200 W/平米, 再留一个10%的面积用来固定,那么需要9.06628e+10 平米 = 1.35926e+8亩,粗略需要1.26亿亩地。看来目前转化率不错,不需要1.38亿亩土地了。1.26亿亩土地,需要1260亿买地。
    • 运送安装:厂家包邮,沙漠全是沙子,他们可以就近建厂。沙漠治理+安装费用算1万元/亩,需要1.26万亿
    • 配送运输:国家电网赚钱的事情,给他们2000亿
    • 其他费用: 1000亿
    • 总费用: 15.5326万亿,十五万亿的能源投资计划出炉了!
  4. 那么多的太阳能电池和储能电池,哪里来?
    太阳能电池需要单晶硅,沙漠里面都是沙,就地取材即可。然后招标10-100个太阳能电池厂干活。另外中国是稀土大国,储能电池所需原料都有,请现在做动力电池的老曹出马,也干个10-100个电池厂搞生产。中国集中力量干大事的能力,毋庸置疑!
  5. 这么大的工程规模,怎么铺设电池,怎么输送?
    国家电网的事情,你能发电,他们就能输电,不操心。
  6. 谁掏钱啊?
    15.5万亿,你让国家突然出这么多也不太好,毕竟2019年国家财政收入才19万亿。我建议用财政收入的5%,即1万亿,在加上社会资本1万亿,每年2万亿投入,8年即可完工!
  7. 晚上怎么办?靠月亮吗?
    电池,储能电池。另外晚上基本上工业用电木有了,再加上水能发电、核能发电等的补充,相信能够满足夜晚供电的需求。
  8. 收益?

    • 碳中和!一个几乎只用可持续的绿色能源的国家,子孙后代不愁环境污染
    • 一个基本上没有石油依存的国家,没人随便能源卡脖子
    • 带动国内相关产业发展,少说带动50万亿产业总量,增加相关就业人口1亿人
    • 相关技术出国国外,从产品制造、到技术研发、到设计服务,高低搭配,应有尽有,赚一堆外汇!

参考

  1. 国家数据 - 能源 - 能源消费量

如果你遇到了诸如

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

的错误,说明内存超标。

可以通过下面方法解决:

  1. 直接在node允许的时候加相关参数:

    $ node --max-old-space-size=4096 yourFile.js

    这里将程序可用的最大内存空间增加到了4GB,一般情况下够用了。也可以根据自己的情况更改。

  2. 将相关参数作为环境变量添加进系统;

a. Linux/macOS:

export NODE_OPTIONS=--max-old-space-size=4096

b. Window

$env:NODE_OPTIONS="--max-old-space-size=8192"