因此,我一直在与 Alfresco 合作开展我目前正在进行的一个项目,该项目的最新要求之一是我从 Oracle 数据库中提取序列号,并在 Alfresco 的空间内填充自定义属性.
var conObj = new ActiveXObject('ADODB.Connection');
var connectionString = "Provider=OraOLEDB.Oracle;Data Source=(DESCRIPTION=(CID=GTU_APP)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IP ADDRESS)(PORT=XXXX)))(CONNECT_DATA=(SID=your_SID)(SERVER=DEDICATED)));User Id=username;Password=pwd;"
conObj.Open(connectionString);
var rs = new ActiveXObject("ADODB.Recordset");
var caseID;
sql = "INSERT INTO case(mod_dt,mod_user) values(sysdate,’user’) RETURNING id"
rs.Open(sql, conObj);
caseID = rs(0);
logger.log("The new case id is: " + caseID);
rs.close;
然而,这返回说:
由以下原因引起:org.mozilla.javascript.EcmaError:ReferenceError:“ActiveXObject”未定义。 (工作空间://SpacesStore/b3145512-e54d-4d9e-9655-0b6ae678e39b#141)
这让我意识到 Alfresco 的 Javascript API 并不具备 Javascript 的全部功能。我读过一些关于创建自己的 java 类并从 Alfresco javascript 中调用它们的内容,但我还没有看到任何好的例子。有没有人有这方面的经验,或者他们可以演示一个创建 java 类以从 Alfresco Javascript 中调用的简单示例吗?
最佳答案
ActiveXObject
是 IE 特定的东西,它在非 IE 浏览器中不可用,因此它在服务器端 JavaScript 中不可用也就不足为奇了!
据我了解,您正在编写要按规则运行的 JavaScript,因此它将在 Alfresco 存储库层中执行。这让生活稍微轻松一些。您可能想要做的是使用 Oracle 的 Java API(JDBC 或类似的)编写一些 Java 代码来处理 Oracle 的连接和查询。
在存储库中运行时,您的 JavaScript 已经具有访问权限 to a large number of "root" objects ,可用于对存储库执行各种操作。您需要做的是将新的 Java 类作为附加类注入(inject),以便您的规则脚本在运行时可以使用它。
(如果您正在编写网页脚本,那么您可以安排让 java 对象可用于网页脚本的 JavaScript 模型。但是,当您执行规则时,这不是一个选项)
为此,请让您的新类扩展 BaseScopableProcessorExtension 。然后,当您为其定义 spring bean 时,设置 extensionName
属性来控制它在 JavaScript 中显示的名称。 Alfresco 本身有很多示例,您可以查看一下,ScriptSiteSevice
(bean id siteScriptService
)是您想到的一个。
如果您是 spring 和 Alfresco 的新手,我建议您要么将整个内容打包为一个模块(AMP),要么稍微作弊,将上下文文件放入新的 alfresco/中Tomcat 共享类下的 extensions
目录。您的文件将类似于:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="myOracleQueryBean" parent="baseJavaScriptExtension"
class="com.my.comany.namespace.alfresco.OracleScriptQuery">
<!-- What it should be called in JS -->
<property name="extensionName">
<value>oracleQuery</value>
</property>
<!-- Inject any other things that your bean needs here -->
<!-- eg some Oracle stuff from Spring -->
</bean>
关于java - 如何通过 Alfresco Javascript API 连接到 Oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12698265/