Feuernder Trigger bei erstellten Regeln aus Alfresco Share

cancel
Showing results for 
Search instead for 
Did you mean: 
chris_mas
Member II

Feuernder Trigger bei erstellten Regeln aus Alfresco Share

Hallo liebe Community.
Ich habe zur Zeit ein etwas kompliziertes Problem.
Also:
Ich habe einen Ordner (A).
(A) hat 4 Regeln
- wird neuer Content eingestellt, füge eine Custom LizenzAspekt hinzu
- wird neuer Content eingestellt, pushe diesen auch zu unserer eigenen Datenbank
- wird Content upgedatet, aktualisier den Content in unserer Datenbank
- wird Content gelöscht, lösche diesen auch in unserer Datenbank

Soweit so gut. Bisher habe ich für die 3 letzteren Regeln, jeweils eine Custom Action implementiert, die dann ausgeführt wird.

Jedoch finde ich sollte Alfresco die Möglichkeit bieten, bedingt in einer Action zu unterscheiden anhand der feuernden Bedingung, was genau gemacht werden soll.
Hierzu gibt es ja auch die sogenannten RuleTypes Inbound,Outbound und Update sowie die ganzen RuleTrigger wie "on-content-create-trigger","on-content-update-trigger",… etc.
Jedoch gibt es (oder ich habe keine gefunden) keine Möglichkeit in der Action herauszufinden, was diese ausgelöst hat.
Die Conditions sind leer und es gibt auch keine Propertie die einen Hinweis darauf liefern könnte.
Ich hab mir auch mal den StackTrace im Debug angeschaut, konnte aber auch dort keine Variable finden die diesen RuleTrigger enthällt.
Mein nächster Schritt war die Policies-Propertie zu erkunden. Also habe ich diese in meine Action injectet um zu schauen , was sie enthält:
CustomAction-Defintion in module-context.xml:


        <property name="policyComponent">
                <ref bean="policyComponent" />
        </property>

Jedoch waren dies leider nur generelle Informationen über die möglichen Trigger usw.

Nun meine Frage.
Wie kann ich der Action diese Eigenschaft mitgeben? Gibt es so eine Propertie überhaupt?
Hat wer damit schon Erfahrung?
Für jede Antwort bin ich dankbar (der Alfresco-Support lässt sich leider Zeit -.-)
Mit freundlichen Grüßen
Christian
4 Replies
jpfi_4454
Member II

Re: Feuernder Trigger bei erstellten Regeln aus Alfresco Share

Hallo,

du solltest dir hier eher das Thema Policies/Behaviours angucken.
Einen ersten Einblick bietet dir hierzu dieses schon etwas betagte Tutorial: http://ecmarchitect.com/images/articles/alfresco-behavior/behavior-article.pdf
Ansonsten wird es in einigen Büchern & Schulungen zu alfresco behandelt.

Ferner hörst sich für mich das generelle Szenario etwas ungewöhnlich. Hast du schon evaluiert ob es nicht geschickter wäre dein Alfresco-Repo als (einzige) zentrale Ablage zu verwenden und dort wo du jetzt auf deine Datenbank zugreifts per REST o.ö. auf das Alfresco zuzugreifen?
VG, jan
chris_mas
Member II

Re: Feuernder Trigger bei erstellten Regeln aus Alfresco Share

Hallo jan.
Erstmal danke für deine Antwort Smiley Happy

Also genau dieses Tutorial habe ich mir schon angeschaut, jedoch nicht komplett. Danke für den Hinweis ich werde es mir ganz durchlesen.

Ja das Alfresco Repo, liegt dort quasi als zentrale Datenbank.
Die zweite Datenbank ist für unsere Webanwendung, die auf die Dokumente von Alfresco zugreifen soll.
Hier benötigen wir aber erweiterte Funktionalitäten und die möchte ich nicht unbedingt in Alfresco packen.
Ausserdem soll in dieser Datenbank z.B. unser Usermanagment, aber auch das Lizenzmanagment, abgebildet werden.

Vielleicht habe ich mich am Anfang meines Posts auch etwas unklar ausgedrückt.
Was wir in unserer Datenbank speichern sind z.B. hautpsächlich die Metainformationen aber auch der Content(soweit Möglich) als solches,
sodass wir zum "anschauen" der Dokumente, aber auch beim eventuellen Bearbeiten, die Anfragen an Alfresco minimieren.
Ob es jetzt absolut sinnvoll ist, sei jetzt mal dahingestellt. Wir sind auch erst am Anfang und "klopfen" quasi die Funktionalitäten nacheinander ab, wie und ob wir sie gebrauchen können.

Aber zurück zur eigentlichen Frage. Also weist du nicht, ob es eine Möglichkeit gibt, einer aus der Share-Oberfläche erstellten Regel den RuleTrigger mitzugeben?
mfg Christian
jpfi_4454
Member II

Re: Feuernder Trigger bei erstellten Regeln aus Alfresco Share

Hi,
ich vermute, dass du amn diese Info nicht herankommst, aber ich habe auch - ehrlich gesagt - noch nie im Detail nach der Möglichkeit Ausschau gehalten.
Für sowas gibt es dann Policies/Behaviours, da hast du wesentlich mehr Kontrolle.
VG, Jan
chris_mas
Member II

Re: Feuernder Trigger bei erstellten Regeln aus Alfresco Share

Hallo zusammen.
Nach nun 2 Wochen hin und her mit dem Alfresco Support, ist doch eine Möglichkeit aufgekommen(Danke an Marco Mancuso) und natürlich möchte ich sie euch nicht vorenthalten:

In euere Action:

public class EureCustomAction extends ActionExecuterAbstractBase  {
    protected void executeImpl(Action arg0, NodeRef arg1) {
       …
    }
}
fügt diesen Code ein:

Set<ExecutedRuleData> executedRules =  (Set<ExecutedRuleData>) org.alfresco.repo.transaction.AlfrescoTransactionSupport.getResource("RuleServiceImpl.ExecutedRules");

      Iterator<ExecutedRuleData> it = executedRules.iterator();
      while(it.hasNext()){
                  ExecutedRuleData erd = it.next();
                  NodeRef nodeRef = erd.getActionableNodeRef();
                  if(nodeRef!=null && nodeRef.equals(arg1)){
                      List<String> types = erd.getRule().getRuleTypes();
                      Iterator<String> ruleIt = types.iterator();
                      while(ruleIt.hasNext()) {
                         System.out.println("ExecutedRule: [" + ruleIt.next() + "]");
                      }
                  }
      }
in ruleIt.next steht z.B. sowas wie OUTBOUND,INBOUND oder UPDATE.
Was wird gemacht?

Wir holen uns alle ausgeführten Regeln und überprüfen welche Regel auf unser actionUponNodeRef-Element  arg1 zutrifft.
Nun holen wir uns die RuleTypes dieser Regel.
Ich hoffe das hilft dem einen oder anderen auch weiter Smiley Wink

Edit:
Was mir eben noch aufgefallen ist.
1. 3 Bedingungen in einer Regel funktioniert nicht, da dann in dem Iterator [ruleIt] inbound,outbound und update vorhanden sind.
Also pro Condition eine separate Rule mit der gleichen Action.
2. OUTBOUND Conditions, liefert ein leeres ExecutedRules-Set zurück, also muss hier auf null geprüft werden.

Mfg
Christian