我想执行一些服务器端 JavaScript(来操作存储库节点)。
我通过 Alfresco Share 拥有管理员访问权限,但没有 Alfresco Explorer 或 SSH 访问权限。
- 最好的是一种控制台,我可以在其中输入命令,例如Javascript控制台但如果不使用 SSH 访问,则无法安装。我认为没有这样的事情,但也许有一些涉及规则的技巧?
- 编写一次性的网络脚本听起来有些过度且不方便。
是否可以?
(Alfresco 5.0)
答案1
如果您无权访问存储库机器,我认为最简单的选择是数据字典 + 虚拟规则选项
首先,在本地机器上创建 javascript 代码。接下来,将其上传到数据字典中。选择存储库,然后选择数据字典,然后选择脚本,因此完整路径为Repository > Data Dictionary > Scripts
。上传时,请确保将内容/mime 类型设置为Mimetype: Java Script
,如果需要,请在编辑属性中更改它
现在,在某处创建一个虚拟文件夹。在该文件夹中,选择Manage Rules
,创建一个新规则。将其设置为在...上运行Items are created or enter this folder
并执行...的操作Execute Script
,然后选择新上传的脚本作为要运行的脚本
最后,每次运行脚本时,请在文件夹中创建一个随机文件!
编辑:如果您的脚本有任何问题,那么这些问题只会记录在 repo 端,您将无法看到。因此,最好的办法可能是将整个脚本包装在一个巨大的 try/catch 块中,并让它将异常记录到另一个文件中,即非规则文件夹中!
答案2
我认为一次性 Web 脚本比规则方法更好。这可以通过两个文件部署在数据字典/Web 脚本扩展中:
描述符(例如,output-data.get.desc.xml):
<webscript kind="org.alfresco.repository.content.stream">
<shortname>Output metadata</shortname>
<description>Output data on content files</description>
<url>/output-data.txt</url>
<format default="">extension</format>
<family>Eric</family>
<authentication>user</authentication>
<transaction>required</transaction>
</webscript>
用 JavaScript 编写控制器,输出到存储库中的内容节点,并将内容节点作为最后一行放入 webscript 模型中,以便它可以传输到浏览器(“kind”属性的用途):
控制器(例如,output-data.get.js):
// just some text to output for demonstration purposes
var contentString = "Output";
// create a text document in company home
var outputDoc = companyhome.createNode('output-data.txt', 'cm:content');
outputDoc.content = contentString;
outputDoc.save();
//stream the document
model.contentNode = outputDoc;
快速“刷新 Web 脚本”(底部的按钮http://localhost:8080/alfresco/s/index),您的 webscript 现在可以轻松运行。您甚至可以更改 JavaScript 代码,而不必再次刷新 webscript。
可以像在其他答案中一样处理日志记录问题,通过将代码核心包装在 try/catch 中并将错误消息写入输出文件。