所以我一直在与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类?
答案 0 :(得分:2)
ActiveXObject
是一个特定于IE的东西,它在非IE浏览器中不可用,因此在服务器端JavaScript中不可用它就不足为奇了!
据我了解,您编写的JavaScript通常作为规则运行,因此它将在Alfresco Repository层执行。这让生活变得更轻松。您可能想要做的是编写一些Java代码,使用Oracle的Java API(JDBC或类似代码)处理Oracle的连接和查询。
在存储库中运行时,您的JavaScript已经具有访问to a large number of "root" objects,可用于在存储库上执行各种操作。你要做的是将新的Java类作为一个额外的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>