0

因此,我一直在与 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;

然而,这返回说:

Caused by: org.mozilla.javascript.EcmaError: ReferenceError: "ActiveXObject" is not defined. (workspace://SpacesStore/b3145512-e54d-4d9e-9655-0b6ae678e39b#141)

这让我意识到 Alfresco 的 Javascript API 不具备 Javascript 的全部功能。我读过一些关于创建自己的 java 类并从 Alfresco javascript 中调用它们的内容,但我没有看到任何好的示例。有没有人有这方面的经验,或者他们可以演示一个简单的例子来创建一个从 Alfresco Javascript 中调用的 java 类?

4

1 回答 1

2

ActiveXObject是 IE 特有的东西,它在非 IE 浏览器中不可用,因此它在服务器端 JavaScript 中不可用也就不足为奇了!

据我了解,您正在编写要作为规则运行的 JavaScript,因此它将在 Alfresco 存储库层中执行。这让生活稍微轻松一些。您可能想要做的是编写一些 Java 代码来处理 Oracle 的连接和查询,使用 Oracle 的 Java API(JDBC 或类似的)。

在存储库中运行时,您的 JavaScript 已经可以访问大量的“根”对象,这些对象可用于对存储库执行各种操作。您要做的是将您的新 Java 类作为附加类注入,以便您的规则脚本在运行时可以使用它。

(如果您正在编写 webscript,那么您可以安排让 java 对象可用于 webscript 的 JavaScript 模型。但是,由于您正在执行规则,这不是一个选项)

为此,请让您的新类扩展BaseScopableProcessorExtension。然后,当您为它定义一个 spring bean 时,设置该extensionName属性以控制它在 JavaScript 中出现的名称。您可以在 Alfresco 本身中查看很多示例,ScriptSiteSevice(bean id siteScriptService)是一个浮现在脑海中的示例。

如果您是 spring 和 Alfresco 的新手,我建议您将整个东西包装为一个模块 (AMP),或者稍微作弊,然后将上下文文件放到alfresco/extensions您的 tomcat 共享类下的新目录中。您的文件将类似于:

<?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>
于 2012-10-03T21:17:31.513 回答