wiki
Benvenuto Ospite, sei in: Login
RSS RSS

Navigazione (Tech)





Ricerca wiki
»
I Business Objects di Tustena CRM presentano 8 eventi che permettono di integrare una dll esterna alle logiche di business del CRM.

Attraverso questi eventi, si può interagire direttamente con il Logic-Tier e accedere ai dati nelle varie fasi di lavorazione.

Ogni qualvolta un'entità (azienda, contatto, lead, attività, ecc.) viene caricato o salvato, agganciando uno o più di questi eventi, uno sviluppatore può realizzare delle personalizzazioni che agiscono sui dati senza disporre dei sorgenti dell'applicazione.

Elenco eventi:

  • OnPreLoad - Viene invocato prima del caricamento dell'entità, restituisce l'id dell'oggetto
  • OnLoadComplete - Viene invocato quando l'entità è in memoria, restituisce la classe CrmBusinessObjects
  • OnPreRuleEngine - Viene invocato prima dell'esecuzione delle Business Rules sull'entità caricata, restituisce la classe CrmBusinessObjects e permette di abortire il salvataggio attraverso il CrmBusinessObjects
    portando Abort a false.
  • OnPostRuleEngine - Viene invocato dopo l'esecuzione delle Business Rules sull'entità caricata, restituisce la classe CrmBusinessObjects
  • OnPreSave - Viene invocato prima di salvare l'oggetto, restituisce la classe CrmBusinessObjects
    e permette di abortire il salvataggio attraverso il BusinessObjectEventArgs portando Abort a false.
  • OnSaveComplete - Viene invocato quando l'entità è stata salvata, restituisce la classe CrmBusinessObjects
  • OnDelete - Viene invocato in caso di cancellazione dell'entità, restituisce un array con gli id degli oggetti cancellati
  • OnError - Viene invocato quando si verifica un errore, restituisce la classe CrmBusinessObjects

Per attivare questi eventi è necessario quindi creare una dll con NomeDllQualuque.dll ed inserirla all'interno della cartella bin di Tustena.

Successivamente per attivare l'esecuzione di questi eventi bisogna andare nella cartella App_Data\Custom\XML\plugins.custom.xml e modificare la riga xml relativa al BusinessObject al quale si vuole agganciare l'evento.

<?xml version="1.0" encoding="utf-8"?>
<businessObjectsEvents>
  <businessObject ID="Company" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="Contact" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="Lead" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="Activity" codeFile="plugin.cs" Active="true">
  </businessObject>
  <businessObject ID="Quote" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="Order" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="DDT" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="Invoice" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="Catalog" dllName="EventPlugins.dll" Active="false">
  </businessObject>
  <businessObject ID="CatalogMovements" dllName="EventPlugins.dll" Active="false">
  </businessObject>
</businessObjectsEvents>

E' anche possibile rinomiare il file plugins.custom.xml in events.*.xml, così non verrà sovrascritto con gli aggiornamenti.

qui sotto un esempio di come potrebbe essere scritta la nostra dll di eventi

 
using System;
using System.Collections.Generic;
using System.Text;
using Digita.Tustena.Base;
using Digita.Tustena.Core;
using Digita.Tustena.BusinessObjects;

namespace NomeDllQualuque
{
    public class NomeDllQualuque: IPlugin
    {
        #region IPlugin Membri di

        public void Init(CrmBusinessObjects bo)
        {
            bo.OnPreSave += new OnPreSave(bo_OnPreSave);
            bo.OnDelete += new OnDelete(bo_OnDelete);
            bo.OnLoadComplete += new OnLoadComplete(bo_OnLoadComplete);
        }

        void bo_OnPreSave(CrmBusinessObjects crmBO, BusinessObjectEventArgs e)
        {
            
            switch (crmBO.BusinessObject)
            { 
                case Digita.Tustena.BusinessObjectType.Activity:
                    throw new NotImplementedException();
                    break;
            }
        }

        void bo_OnLoadComplete(CrmBusinessObjects crmBO)
        {
            throw new NotImplementedException();
        }

        void bo_OnDelete(CrmBusinessObjects crmBO, long[] al, BusinessObjectEventArgs e)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}


In caso si usi la dichiarazione codeFile, non è necesssario compilare la dll ma basta semplicemente copiare il file .cs in App_Data\Custom\Code