2013-10-02 1 views
0
описание

вопрос и код был обновленчтении значения свойства документа внутри поведения

Вопрос 1: будет с тем, что я заменить в коде фиктивную int attachmentid = 123; ниже, чтобы прочитать пользовательское СБН свойства: OpenERPattachmentID1, чтобы получить значение id в нем? (Вопрос 1 был Ответил alfrescian!)

package com.openerp.behavior; 



import java.util.List; 
import java.net.*; 
import java.io.*; 


import org.alfresco.repo.node.NodeServicePolicies; 

import org.alfresco.repo.policy.Behaviour; 

import org.alfresco.repo.policy.JavaBehaviour; 

import org.alfresco.repo.policy.PolicyComponent; 

import org.alfresco.repo.policy.Behaviour.NotificationFrequency; 

import org.alfresco.repo.security.authentication.AuthenticationUtil; 

import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; 

import org.alfresco.service.cmr.repository.ChildAssociationRef; 

import org.alfresco.service.cmr.repository.NodeRef; 

import org.alfresco.service.cmr.repository.NodeService; 

import org.alfresco.service.namespace.NamespaceService; 

import org.alfresco.service.namespace.QName; 

import org.alfresco.service.transaction.TransactionService; 

import org.apache.log4j.Logger; 



//import com.openerp.model.scOpenERPModel; 

public class DeleteAsset implements NodeServicePolicies.BeforeDeleteNodePolicy { 



    private PolicyComponent policyComponent; 

    private Behaviour beforeDeleteNode; 
    private NodeService nodeService; 



    public void init() { 

     this.beforeDeleteNode = new JavaBehaviour(this,"beforeDeleteNode",NotificationFrequency.EVERY_EVENT); 

     this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI,"beforeDeleteNode"), 

       QName.createQName(scOpenERPModel.NAMESPACE,scOpenERPModel.ASSET_CONTENT_TYPE), this.beforeDeleteNode); 

    } 
    public setNodeService(NodeService nodeService){ 
      this.nodeService = nodeService; 
     } 




    @Override 

    public void beforeDeleteNode(NodeRef node) { 

     System.out.println("beforeDeleteNode!"); 

     try { 
      QName attachmentID1= QName.createQName("http://www.someco.com/model/content/1.0", "OpenERPattachmentID1"); // this could/shoul be defined in your OpenERPModel-class 
      int attachmentid = (Integer)nodeService.getProperty(node, attachmentID1); 
      //int attachmentid = 123; 
      URL oracle = new URL("http://0.0.0.0:1885/delete/%20?attachmentid=" + attachmentid); 
      URLConnection yc = oracle.openConnection(); 
      BufferedReader in = new BufferedReader(new InputStreamReader(
         yc.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) 
      //System.out.println(inputLine); 
       in.close(); 

     } catch(Exception e) { 

      e.printStackTrace(); 

     } 



    } 

} 

Вопрос 2: где я поставил DeleteAsset.class?

Я новичок в Java и Alfresco, мне было бы здорово, если бы кто-нибудь мог сказать мне, если alfresco-4.2.c/tomcat/webapps/alfresco/WEB-INF/classes/com/openerp/behavior/is правую папку для размещения скомпилированного DeleteAsset.class

Вопрос 3: Что нужно положить в NAMESPACE и ASSET_CONTENT_TYPE? Я бы хотел работать без класса модели, поскольку у меня еще не было учебника по этому вопросу, что я могу заменить scOpenERPModel.NAMESPACE,scOpenERPModel.ASSET_CONTENT_TYPE?

Это мой полный заказ веб-файл контекста:

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 
'http://www.springframework.org/dtd/spring-beans.dtd'> 

<beans> 
<!-- Registration of new models --> 
<bean id="smartsolution.dictionaryBootstrap" parent="dictionaryModelBootstrap" 
depends-on="dictionaryBootstrap"> 
    <property name="models"> 
     <list> 
       <value>alfresco/extension/scOpenERPModel.xml</value> 
     </list> 
    </property> 
</bean> 

<!-- deletion of attachments within openERP when delete is initiated in Alfresco--> 
<bean id="deletionBehavior" class="com.openerp.behavior.DeleteAsset" init-method="init"> 
    <property name="nodeService"> 
     <ref bean="nodeService" /> 
    </property> 
    <property name="policyComponent"> 
     <ref bean="policyComponent" /> 
    </property> 
</bean> 

+0

Когда должно срабатывать ваше поведение? На данный момент привязан к MyModel.ASSET_CONTENT_TYPE - это то, что вам нравится? – alfrescian

+0

@alfrescian он должен быть запущен в момент, когда документ удаляется из alfresco, поэтому идентификационный номер, хранящийся в одном из его свойств, может быть прочитан и передан через URL-адрес веб-службы на локальном хосте. – MrHappy

+0

Я имею в виду, какой тип узла вас интересует -> Какой тип контента имеет ваш документ? – alfrescian

ответ

3

Ну, у вас есть длинный путь ... что вы хотите достичь с помощью соединения «Оракул» ?

Чтобы ответить на главные вопросы: Как прочитать свойство:

  1. Не помещайте XML модель в COM/OpenERP/модель/scOpenERPModel - он должен быть класс Java, который определяет константы для доступа ваши пользовательские типы, аспекты & реквизиты (пример: https://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/data-model/source/java/org/alfresco/model/ContentModel.java) Но это необязательно - это просто помогает вам.

  2. при чтении свойства

    1. INJECT NodeService:

      private NodeService nodeService; 
      public setNodeService(NodeService nodeService){ 
          this.nodeService = nodeService; 
      } 
      
    2. в вашем beforeDeleteNode

      QName attachmentID1= QName.createQName("your sc NS uri", "OpenERPattachmentID1"); // this could/shoul be defined in your OpenERPModel-class 
      int attachmentid = (Integer) nodeService.getProperty(node, attachmentID1); 
      
+0

я посещаю в URL, который подключен к веб-сервису web.py. Этот веб-сервис использует этот идентификатор для удаления ссылки на удаленный документ во внешней базе данных. Эта часть работает с давних времен btw xD Я не мог найти хороший учебник/документацию о том, как сделать выше, хотя – MrHappy

+0

Я готовлю прямо сейчас, но сегодня я воспользуюсь вашими предложениями. Не могли бы вы сказать мне, нужно ли мне затем удалить из моего кода 'import com.openerp.model.scOpenERPModel'? Кроме того, я не уверен, что вы имеете в виду с 'your sc NS uri' = S – MrHappy

+0

, вы должны определить модель uri в своем содержании scOpenERPModel.xml - это URI, который вам нужен – alfrescian