none
CRM 2011 - Workflow su tutti i record di un'entità

    Domanda

  • Buongiorno a tutti, chiedo il vostro aiuto per un'esigenza particolare di cui non riesco a trovare una soluzione.

    Ho un'entità (es. clienti) in cui vengono inseriti nuovi record da un software esterno, che sincronizza i suoi dati con quelli del CRM.
    L'esigenza è quella di far partire un workflow all'inserimento di un nuovo record, ma non posso farlo con la procedura normale perchè l'inserimento dei dati dall'esterno non fa partire il workflow (penso sia normale).

    La domanda è: come posso far agire un WF facenfogli leggere tutti i record presenti nell'entità e partire solo quando trova una determinata condizione (es. data creazione record OGGI) ?

    Grazie in anticipo del vostdro interessamento

    Saluti

    venerdì 10 maggio 2013 16:34

Risposte

  • so che sembrerò rompiballe ma devo ricordare che un inserimento di record direttamente in SQL è altamente sconsigliato e può comportare danneggiamenti al DB.

    Un workflow che va a controllare i record creati e aggiornare quelli nuovi è fattibile, ma richiede lo sviluppo di custom action particolari e c'è la possibilità di timeout che comporterebbe l'interruzione dell'operazione.

    Ti posso consigliare due strade:

    la prima è quella di far inserire al programma esterno i record tramite i webservices del crm e non tramite sql, in questo modo i wf possono essere agganciati senza nessun problema.

    la seconda è quella di aggiungere un nuovo campo sull'entità (o le entità) di tipo booleano che fa da trigger al workflow, creare poi una console application (schedulata sul server del crm) che va a controllare quali record hanno questo campo impostato a No (che è il valore di default e i record creati tramite sql avranno questo valore) e poi impostarlo a Si. In questo modo tutta la logica la puoi mettere nel workflow, unica cosa che tutti i record devono essere impostati a Si prima di lanciare definitivamente questa schedulazione.

    Non hai indicato se è un CRM 4.0 o 2011, comunque le opzioni a disposizione sono queste.


    My blog: www.crmanswers.net

    lunedì 13 maggio 2013 17:19

Tutte le risposte

  • Ciao Silvio,
    è possibile far partire un workflow automaticamente alla creazione di un nuovo record, non importa se creato manualmente nel CRM o attraverso un software esterno. ecco una immagine di esempio (purtroppo posso fare solo screenshot di un crm in lingua inglese)

    come vedi c'è l'opzione "Record is created" che esegue il workflow quando il record viene creato (anche se tramite un sistema esterno)

    Inoltre c'è l'opzione "As on-demand process" che permette di eseguire il workflow su richiesta, ad esempio nella vista dei contatti puoi selezionare i record (massimo 250 alla volta) e lanciare il workflow su quelli selezionati (nel ribbon c'è l'icona per lanciare il workflow)

    poi ci sono altre opzioni come far eseguire il workflow quando il valore di un campo viene modificato e nelle condizioni del workflow puoi controllare anche la data di creazione del record e confrontarla se è uguale alla data odierna (cioè a quella di quando il workflow viene eseguito)


    My blog: www.crmanswers.net

    domenica 12 maggio 2013 11:07
  • Grazie per la risposta, ma il problema non si risolve perchè il programma esterno va a scrivere i record direttamente in SQL, e quindi così facendo sembra che non parta la "chiamata" del CRM ai WF.  In pratica è come se il CRM non si accorgesse che è stato creato un nuovo record. Far partire il WF manualmente (su richiesta) è impensabile, perchè dovrei selezionare a mano tutti i record ogni giorno. Inoltre questa esigenza ce l'ho su più entità ....

    Vorrei capire allora se c'è un metodo per dire ai WF di partire ad una certa ora ogni giorno e applicare le istruzioni a tutti i record presenti nell'entità, magari solo attivi, oppure se c'è un modo di far capire al CRM che questi record scritti nella tabella SQL sono nuovi, consentendogli di avvisare i WF di questo evento.


    Silvio Trotolo OA Point Group S.r.l.

    lunedì 13 maggio 2013 09:13
  • so che sembrerò rompiballe ma devo ricordare che un inserimento di record direttamente in SQL è altamente sconsigliato e può comportare danneggiamenti al DB.

    Un workflow che va a controllare i record creati e aggiornare quelli nuovi è fattibile, ma richiede lo sviluppo di custom action particolari e c'è la possibilità di timeout che comporterebbe l'interruzione dell'operazione.

    Ti posso consigliare due strade:

    la prima è quella di far inserire al programma esterno i record tramite i webservices del crm e non tramite sql, in questo modo i wf possono essere agganciati senza nessun problema.

    la seconda è quella di aggiungere un nuovo campo sull'entità (o le entità) di tipo booleano che fa da trigger al workflow, creare poi una console application (schedulata sul server del crm) che va a controllare quali record hanno questo campo impostato a No (che è il valore di default e i record creati tramite sql avranno questo valore) e poi impostarlo a Si. In questo modo tutta la logica la puoi mettere nel workflow, unica cosa che tutti i record devono essere impostati a Si prima di lanciare definitivamente questa schedulazione.

    Non hai indicato se è un CRM 4.0 o 2011, comunque le opzioni a disposizione sono queste.


    My blog: www.crmanswers.net

    lunedì 13 maggio 2013 17:19
  • Grazie Guido, non ti preoccupare, hai perfettamente ragione sul fatto che un import del genere è sconsigliato. Purtroppo non sapevo si potesse fare con i webservices, ed è oramai tutto pronto per la prima sincronia. Il programamtore mi ha detto che rifare tutto non è pensabile, sia in termini di tempo che economici, ma mi rassicurato che non accadrà nulla di problematico (spero....)

    Considerato che l'unica relazione toccata sarà quella con la tabella clienti (che non verrà sincronizzata) non ci dovrebbero essere problemi, in quanto le tabelle che saranno sincronizzate sono praticamente a se stanti.

    Per vari motivi purtroppo o facevo così o abbandonavo lo sviluppo del CRM in azienda .... :-(

    La tua soluzione per il workflow mi sembra interessante, ed abbastanza fattibile .... non so cos'è una console application, ma il nostro amministratore di sistema saprà sicuramente cavarsela.

    Abbiamo CRM 2011.

    Ti ringrazio molto per le risposte. Ti faccio sapere come andrà.


    Silvio Trotolo OA Point Group S.r.l.

    venerdì 17 maggio 2013 13:20
  • Concordo e sottoscrivo pienamente con quanto ha affermato Guido.

    Sottolineo il fatto che l'approccio di un DEV che non conosca CRM è estremamente "pericoloso", come dimostra il tuo caso. Purtroppo di storie come queste se ne incontrano ogni giorno. E purtroppo aggiungo che nessuno potrà mai garantirti che non ci saranno problemi, potrebbe bastare un Update Rollup a modificare "qualcosa" nello schema del DB (aggiunta di campi, modifica di relazioni o chiavi) che il tuo aggiornamento diretto sulle tabelle comporterà un disastro di proporzioni galattiche (mi è già successo di intervenire varie volte in casi come questi). Tralasciando poi il fatto che sei potenzialmente BLOCCATO per qualsiasi tipo di futuro upgrade di versione. Forse val la pena di spendere qualche soldino in più per standardizzarsi ora piuttosto che avere un sistema bloccante e bloccato nel futuro.

    E' solo un suggerimento ;)

    Giorgio


    Giorgio Garcia-Agreda MVP Microsoft Dynamics CRM

    venerdì 24 maggio 2013 16:27
    Moderatore
  • Grazie per i tuoi commenti. Purtroppo al momento non potevamo fare altrimenti, e ci faremo carico dei rischi eventuali.
    In ogni caso il DEV è sempre a disposizione e quindi in caso di problemi potremo comunque intervenire.

    Lo terremo presente però per la prossima volta.

    Grazie ancora a tutti


    Silvio Trotolo OA Point Group S.r.l.

    mercoledì 29 maggio 2013 10:16
  • Ciao Guido, scusami se ritorno sull'argomento, ma ho suggerito la tua proposta (la seconda) al nostro amministratore di sistema, e mi ha risposto dicendo che per fare quello che tu proponi i workflow devono esser fatti in visual (programmati).

    E' corretto o è lui che non ha capito il suggerimento ?


    Silvio Trotolo OA Point Group S.r.l.

    martedì 11 giugno 2013 10:32
  • Ciao Silvio, ricopio qui la seconda opzione:

    la seconda è quella di aggiungere un nuovo campo sull'entità (o le entità) di tipo booleano che fa da trigger al workflow, creare poi una console application (schedulata sul server del crm) che va a controllare quali record hanno questo campo impostato a No (che è il valore di default e i record creati tramite sql avranno questo valore) e poi impostarlo a Si. In questo modo tutta la logica la puoi mettere nel workflow, unica cosa che tutti i record devono essere impostati a Si prima di lanciare definitivamente questa schedulazione.

    La tua necessità è quella di lanciare un workflow ogni volta che un record dell'entità clienti viene creato
    Poniamo ad esempio che il tuo workflow sia quello di inviare una mail a un certo indirizzo per avvisare di questo nuovo cliente (e tutta la logica può essere realizzata utilizzando gli step disponibili nell'interfaccia di creazione del workflow)
    Il problema è che essendo i record creati tramite sql il workflow attualmente non viene lanciato anche se è flaggata l'opzione di far partire il workflow alla creazione del record.

    La soluzione che avevo suggerito è la seguente:
    1) creare un nuovo campo nell'entità clienti di nome new_sincronizzato (oppure new_controllato) e con valore di default No.
    2) modificare tutti i record presenti nel CRM impostando il valore di questo nuovo campo a Si. (questo può essere fatto tramite un semplice workflow che viene lanciato a domanda, 250 record alla volta)
    3) A questo punto ogni nuovo record inserito dalla sincronizzazione avrà il valore del campo impostato a No (perché è il valore di default)
    4) Modificare il tuo workflow (quello che nel nostro esempio invia una mail) in modo che venga lanciato quando il campo new_sincronizzato è stato modificato
    5) Creare una console application (in pratica un file exe eseguibile) che controlli la presenza di nuovi clienti che hanno il campo impostato a No e impostarlo a Si (per fare in modo che il tuo workflow venga lanciato)
    6) Schedulare questo eseguibile sul server che ospita il crm (o su un altro server che può raggiungere il server del crm) ad intervalli regolari (ad esempio 15 minuti)

    in questo modo il tuo workflow viene lanciato con un massimo ritardo di 15 minuti rispetto alla creazione.

    Nota: per il punto 2 può essere utilizzata anche l'eseguibile creato nel punto 5 se programmato correttamente per fare la prima inizializzazione dei dati.


    My blog: www.crmanswers.net


    martedì 11 giugno 2013 11:00
  • Allora era come avevo capito io, non vedo nulla da programmare se non la console application, ma non credo sia complicato per un admin di sistema....

    Grazie mille per la chiarezza della spiegazione, penso che così risolverò davvero questa esigenza.

    A presto, Silvio


    Silvio Trotolo OA Point Group S.r.l.

    martedì 11 giugno 2013 13:38