2012-10-02 106 views
0

因此,我一直在與Alfresco合作開發一個我正在開發的項目,該項目的最新需求之一是從Oracle數據庫中提取序列號並在Alfresco的空間內填充自定義屬性。如何通過Alfresco Javascript API連接到Oracle數據庫

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)

這讓我認識到露天的JavaScript API不具備的Javascript的全部功能。我曾閱讀過關於創建自己的java類並從Alfresco javascript內部調用它們的一些內容,但我沒有看到任何好的示例。有沒有人有這方面的經驗,或者他們可以演示一個簡單的例子,創建一個Java類的內部調用Alfresco Javascript?

+1

你能不能附加規則到父文件夾,無論是增加了一個方面,帶有強制性的財產,或運行JS代碼片段,增加了財產? – Gagravarr

+0

我想我們已經找到了一種將自定義方面/屬性添加到文件夾的方法。但是,現在我們正試圖找出如何通過Alfresco Javascript API連接到我們的Oracle數據庫,以便我們可以將值插入到我們的自定義屬性字段中。 –

+1

你可能會想寫一個暴露這些信息的java webscript,所以你可以使用oracle java API來進行查詢。大概需要一個新的問題,雖然 – Gagravarr

回答

2

ActiveXObject是一個特定於IE的事物,它在非IE瀏覽器中不可用,所以它在服務器端JavaScript中不可用並不奇怪!

據我瞭解,您正在編寫JavaScript作爲規則運行,因此它將在Alfresco Repository層中執行。這讓生活變得輕鬆一些。你可能想要做的是編寫一些Java代碼來處理Oracle的連接和查詢,使用Oracle的Java API(JDBC或類似的)。

在存儲庫中運行時,您的JavaScript已具有訪問to a large number of "root" objects的權限,該權限可用於在存儲庫上執行各種操作。你想要做的就是注入新的Java類作爲額外的一個,所以它可以讓規則腳本在運行時使用。

(如果你正在寫一個webscript,那麼你可以只安排將提供給您的webscript的JavaScript的模型中的Java對象。然而,當你在做一個規則,這不是一個選項)

要做到這一點,請讓您的新班級延長BaseScopableProcessorExtension。然後,當你爲它定義一個spring bean時,設置extensionName屬性來控制它在JavaScript中顯示的名稱。 Alfresco本身有很多例子,你可以看看這個,ScriptSiteSevice(bean id siteScriptService)是一個值得思考的問題。

如果你是新來的春天和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> 
+0

如果我理解正確,我應該編寫一個擴展此「BaseScopableProcessorExtension」的類,查詢數據庫並返回一個值。然後當你說定義spring bean時,你的意思是位於'C:\ Alfresco \ tomcat \ webapps \ alfresco \ WEB-INF \ classes \ alfresco \ script-services-context.xml'文件中的那個?如果是這樣,那麼我的主要問題是:我需要找到一個特定的jar文件添加到我的構建路徑來擴展BaseScopableProcessorExtension,如果是的話,我在哪裏可以找到它?這與我的班級名稱有什麼關係,我應該在哪裏上課?我將如何定義我的bean? –

+0

當我說你將如何定義bean時,我的意思是,我相信這個bean看起來像這樣:' <屬性名= 「EXTENSIONNAME」> 類SqlQuery '但是,將父值是什麼呢?再次,我需要把我的班級放在什麼地方纔能在班級價值中引用它?我在這個文件中的其他類字段中看到很多'「org.alfresco.repo.jscript.app。」'引用。 –

+0

把它放在你自己的命名空間中,然後把它建立成一個jar,並把它放在tomcat可以找到它的地方,就像你爲你的上下文文件做的一樣。 'BaseScopableProcessorExtension'位於核心Alfresco倉庫jar中 – Gagravarr