Google app maker AppMaker:每个部署的环境变量?获取部署名称?

Google app maker AppMaker:每个部署的环境变量?获取部署名称?,google-app-maker,Google App Maker,前几次我问: 因为我想在我的代码中有不同的逻辑,无论它是否是预览模式 答案是“预览模式只是另一个部署,每个部署都有自己的驱动器表,在那里存储一些环境变量”。这是真的,并且成功了 问题:驾驶台 过去几个月我没有与AppMaker合作,因此可能错过了新功能: 如何设置每个部署的环境变量?(这样我就可以做一个 我的产品部署和我的产品部署前的差异) 有没有办法从代码中获取当前部署名称 感谢您的回答这是一个未记录的解决方案。它不是最好的,也不建议长期使用,因为它在将来可能会更改。但是,要直接回答您的问

前几次我问:

因为我想在我的代码中有不同的逻辑,无论它是否是预览模式

答案是“预览模式只是另一个部署,每个部署都有自己的驱动器表,在那里存储一些环境变量”。这是真的,并且成功了

问题:驾驶台

过去几个月我没有与AppMaker合作,因此可能错过了新功能:

  • 如何设置每个部署的环境变量?(这样我就可以做一个 我的产品部署和我的产品部署前的差异)

  • 有没有办法从代码中获取当前部署名称


感谢您的回答

这是一个未记录的解决方案。它不是最好的,也不建议长期使用,因为它在将来可能会更改。但是,要直接回答您的问题,您可以通过服务器脚本获取部署名称。将以下内容放在服务器脚本上:

function getDeployment() {
  var deploymentName = app.a.a.a[13].name;
  return deploymentName;
}
然后在UI中插入一个按钮,将以下内容添加到按钮的onClick事件处理程序中:

google.script.run.withSuccessHandler(function(result){
  console.log(result);  
}).getDeployment();

预览应用程序,对其进行测试,您将获得预览。将应用程序发布到部署并对其进行测试,您应该获得部署名称。我希望有帮助

SQL没有任何变化。预览和部署使用单独的数据集。在一个表中放置一条设置记录并分别分配部署或预览值就足够了。每个新预览将使用预览数据,每个新部署将使用寿命数据。

部署唯一的环境变量可以使用存储

我认为Appmaker中没有任何方法会返回您当前的部署名称,实现这一点的一种可能方法是检查URL,因为所有部署/预览实例都将具有不同的URL(使用
ScriptApp.getService().getUrl()
)。但是,您有一个有效的问题,我将寻找更合适的答案。您可以尝试使用,它在每个部署中也是唯一的(预览也有自己的属性集)。您可以将预览模式标志存储在那里。@Rherma对帖子做出正确的回复,我会接受;-)有这方面的文件吗?因为这似乎是一个我们不应该使用的变量,我倾向于同意瓦伦丁的观点。这些变量似乎是由GWT的编译过程生成的,因为它们没有记录在App Maker规范中,所以它们可能会更改(从而破坏应用程序)。不过,如果部署名称可以作为
app
对象的官方属性使用,这会很有帮助。@Rherma我也同意,但是如果您知道如何使用这些属性,那么这不会是问题。这只是一个问题,如果你不知道如何处理它。不管怎样,OP要求一个解决方案,这里有一个。如果OP喜欢的话,如果不喜欢就好。希望我没有表现得粗鲁。但是,您的解决方案没有文档记录,行为可能会在没有任何通知的情况下更改。这一事实与这些属性如何工作的知识无关。谷歌有一天可能会决定更新或重新编译AppMaker,而该属性将通过GWT的编译过程发生变化。我同意目前您可以通过这些特定属性访问部署。@Rherma我不想粗鲁或任何类似的行为。我想说的是,OP要求获取部署名称?这个解决方案直接回答了他的要求。很明显,如果将来这种情况发生变化,我会删除这个答案,但现在,它正是他所要求的。我看不到任何其他解决方案能完全满足OP的要求。尽管如此,我也必须同意你的看法,这不是最好的解决方案,因为它没有文档记录,而且很可能在将来会发生变化。我相信只有使用默认的云SQL服务,这才是正确的。如果您使用自定义的google云实例,您的表将在部署中共享。我认为更好的解决方案(更接近环境变量的概念)是使用脚本属性服务。每个部署都是唯一的,因为预览技术上只是另一个部署,所以它也有一组唯一的属性
PropertiesService.getScriptProperties()
提供对键值存储的访问,该键值存储对于每个部署都是不同的(在预览模式下也是如此不同),这只是一个旁注-如果您经常获取这些属性,您可能会发现在客户端缓存这些属性很有用。在这种情况下,由于部署类型在整个会话中保持不变,因此可以将其缓存为自定义页面属性。我经常将此属性存储在页面标题中,因为它存在于大多数页面中。然后,您可以编写一些具有指数回退功能的简单计时器函数,以继续查询该头中的非null属性(如果属性为null,则设置onAttach事件以从服务器加载该属性)。另一种选择是使用一个计算模型,该模型包含您需要的每个环境变量的字段,然后将它们加载到该模型的一行中。然后,您可以将该数据源用于任何可能需要它们的页面(尽管这要求每次连接使用该计算模型的小部件时都要调用一次服务器端脚本)。@Valentincudert我在尝试做类似的事情时偶然发现了这一点,我想,您是如何填充属性值以设置每个不同部署所需的值的?@Christina我必须从我制作的“管理”屏幕手动完成此操作