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のJavascriptAPIにはJavascriptの全機能が備わっていないことに気づきました。独自のJavaクラスを作成し、Alfresco javascript内からそれらを呼び出すことについて何か読んだことがありますが、良い例は見当たりませんでした。誰かがこれを経験したことがありますか、またはAlfresco Javascript内から呼び出すJavaクラスを作成する簡単な例を示すことができますか?

4

1 に答える 1

2

ActiveXObjectこれはIE固有のものであり、IE以外のブラウザーでは使用できないため、サーバー側のJavaScriptで使用できないことは驚くことではありません。

私が理解しているように、JavaScriptは原則として実行されるように記述しているため、Alfrescoリポジトリ層で実行されます。それは人生を少し楽にします。おそらくやりたいことは、OracleのJava API(JDBCなど)を使用して、Oracleの接続とクエリを処理するJavaコードを作成することです。

リポジトリで実行している場合、JavaScriptはすでに多数の「ルート」オブジェクトにアクセスできます。これらのオブジェクトを使用して、リポジトリでさまざまな操作を実行できます。新しいJavaクラスを追加のクラスとして挿入することで、ルールスクリプトの実行時に使用できるようになります。

(Webスクリプトを作成している場合は、JavaオブジェクトをWebスクリプトのJavaScriptモデルで使用できるようにするだけで済みます。ただし、ルールを実行しているため、これはオプションではありません)

これを行うには、新しいクラスでBaseScopableProcessorExtensionを拡張します。次に、そのSpring Beanを定義するときにextensionName、JavaScriptで表示される名前を制御するようにプロパティを設定します。Alfresco自体には、これを確認できる例がかなりあります。ScriptSiteSevice(bean id siteScriptService)は頭に浮かぶものです。

SpringとAlfrescoを初めて使用する場合は、すべてをモジュール(AMP)としてまとめるか、少しごまかして、alfresco/extensionstomcat共有クラスの下の新しいディレクトリにコンテキストファイルをドロップすることをお勧めします。ファイルは次のようになります。

<?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 に答える