none
dynamics crm Custom Workflow no se ejecuta RRS feed

  • Pregunta

  • Estimad@s:

     

    Estoy realizando un custom workflow en dynamics crm, que me calcula los dias laborales para el vencimiento de una incidencia, lo compilo, y lo registro en crm, sin embargo, al querer ejecutarse, este se queda eternamente en espera.

    using System;

    using System.ComponentModel;

    using System.ComponentModel.Design;

    using System.Workflow.ComponentModel.Compiler;

    using System.Workflow.ComponentModel.Serialization;

    using System.Workflow.ComponentModel;

    using System.Workflow.ComponentModel.Design;

    using System.Workflow.Runtime;

    using System.Workflow.Activities;

    using System.Workflow.Activities.Rules;

     

    // Microsoft Dynamics CRM namespaces

    //using Microsoft.Crm.Sdk;

    //using Microsoft.Crm.SdkTypeProxy;

    //using Microsoft.Crm.Workflow;

    //using Microsoft.Crm.Workflow.Activities;

     

    using Microsoft.Crm.SdkTypeProxy;

    using Microsoft.Crm.Workflow;

    using Microsoft.Crm.Workflow.Activities;

    using System.Net;

    using System.Xml;

     

    using Microsoft.Crm.Sdk;

    using Microsoft.Crm.Sdk.Query;

    using WorkCalculoVencimiento.WS_DiasHabiles;

    using System.Data;

    using System.Web.Services.Protocols;

     

     

    namespace CustomWorkflowActivity

    {

        [CrmWorkflowActivity("Calculo de dias habiles2", "LOF WORKFLOW")]

     

        public class MyCustomWorkflowNew : SequenceActivity

        {

     

     

            private WorkCalculoVencimiento.WS_DiasHabiles.WB_DiasHabiles WSERVICE;

     

     

            protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)

            {

     

                try

                {

     

                    IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));

                    IWorkflowContext context = contextService.Context;

     

     

                    string orgName = "SENADIS";

                    // Create the CRM service

                    ICrmService crmService = context.CreateCrmService();

     

     

                    /**test**/

     

     

                    //incident currentIncident = (incident)crmService.Retrieve(EntityName.incident.ToString(), context.PrimaryEntityId, new AllColumns());

     

     

                    Microsoft.Crm.Sdk.CrmAuthenticationToken token = new CrmAuthenticationToken();

                    token.AuthenticationType = 0; // Use Active Directory authentication.

                    token.OrganizationName = orgName;

     

                    // Use the global user ID of the system user that is to be impersonated.

                    //token.CallerId = new Guid("71d98de8-28eb-de11-a52a-00155dc84111");

                    token.CallerId = new Guid("f4c7594c-7d12-df11-9421-00155da8e700");

                    CrmService crmServices = new CrmService();

                    crmServices.Url = "http://192.168.168.225:5555/MSCRMServices/2007/CrmService.asmx";

                    crmServices.CrmAuthenticationTokenValue = token;

                    //crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;

                    crmServices.Credentials = new NetworkCredential("lof", "Passw0rd6", "FONADIS.LOCAL");

     

     

                    //DateTime fecha_recepcion = new DateTime();

                    //string fechaingreso = Convert.ToString(fechaentrada.UniversalTime.Date);

                    //fecha_recepcion = Convert.ToDateTime(fechaentrada.date);

                    CrmDateTime fechaRecepcion = new CrmDateTime();

                    CrmDateTime fechaCalculada = new CrmDateTime();

     

     

                    fechaRecepcion = fechaentrada;

     

                    if (fechaRecepcion != null)

                    {

     

     

                        WSERVICE = new WB_DiasHabiles();

     

                        WSERVICE.Credentials = crmServices.Credentials;

     

                        //string fechaingreso = currentIncident.followupby.date;

                        DateTime fecha_recepcion = new DateTime();

     

                        fecha_recepcion = Convert.ToDateTime(fechaRecepcion.date);

     

                        DateTime vencimientodate = new DateTime();

                        ////DateTime createdOn = new DateTime();

     

                        ////createdOn = Convert.ToDateTime(fechaingreso);

     

     

                        ////vencimientodate = vencimientodate.AddDays(numeroDias.Value);

     

                        string fechainicio = fecha_recepcion.Day + "/" + fecha_recepcion.Month + "/" + fecha_recepcion.Year;

     

     

                        vencimientodate = WSERVICE.CalcularDias(fechainicio, numeroDias.Value);

     

                        //fechasalida = "" + vencimientodate.Day + "/" + vencimientodate.Month + "/" + vencimientodate.Year + "";

     

                        //CrmDateTime dateTime = new CrmDateTime();

     

                        //dateTime.Value = "" + vencimientodate.Day + "/" + vencimientodate.Month + "/" + vencimientodate.Year + "T00:00:00" + "";

     

                        //fechasalida.Value  = dateTime.Value;

     

                        //fechasalida.Value = vencimientodate.ToString("s");

     

                        //dateTime.Value = "" + vencimientodate.Year + "-" + vencimientodate.Month + "-" + vencimientodate.Day + "T00:00:00" + "";

                        //fechasalida.Value  = dateTime.Value;

                        //Result = ""+vencimientodate.Date.ToString()+"";

                        //fechaCalculada.Value = vencimientodate.ToString("s");

     

                        //fechasalida = fechaCalculada;

     

                        //Result = fechaRecepcion.date;

                        //Result = fechaCalculada.date;

                        CrmDateTime dateTime = new CrmDateTime();

                        //dateTime.Value = "" + vencimientodate.Year + "/" + vencimientodate.Month + "/" + vencimientodate.Day + "T00:00:00" + "";

     

                        Result = fechainicio;

                        fechasalida = new CrmDateTime(vencimientodate.ToString("s"));

     

                        executionContext.CloseActivity();

                        return base.Execute(executionContext);

                    }

                }

                catch (SoapException Ex)

                {

                    Console.Write(Ex.Detail.InnerText.ToString());

                }

     

                return base.Execute(executionContext);

     

            }

     

     

            public static DependencyProperty numeroDiasProperty =

                DependencyProperty.Register("numeroDias", typeof(CrmNumber), typeof(MyCustomWorkflowNew));

            [CrmInput("Cantidad de Dias ")]

            [CrmDefault("2")]

            public CrmNumber numeroDias

            {

                get

                {

                    return (CrmNumber)base.GetValue(numeroDiasProperty);

     

                }

                set

                {

                    base.SetValue(numeroDiasProperty, value);

                }

            }

     

            public static DependencyProperty fechasalidaProperty =

                DependencyProperty.Register("fechasalida", typeof(CrmDateTime), typeof(MyCustomWorkflowNew));

            [CrmOutput("Fecha salida")]

            public CrmDateTime fechasalida

            {

                get

                {

                    return (CrmDateTime)base.GetValue(fechasalidaProperty);

     

                }

                set

                {

                    base.SetValue(fechasalidaProperty, value);

                }

            }

     

     

            public static DependencyProperty ResultProperty =

                DependencyProperty.Register("Result", typeof(string), typeof(MyCustomWorkflowNew));

     

            [CrmOutput("Result")]

            public string Result

            {

                get

                {

                    return (string)base.GetValue(ResultProperty);

                }

                set

                {

                    base.SetValue(ResultProperty, value);

                }

            }

     

            public static DependencyProperty fechaentradaProperty =

                DependencyProperty.Register("fechaentrada", typeof(CrmDateTime), typeof(MyCustomWorkflowNew));

            [CrmInput("Fecha entrada")]

            public CrmDateTime fechaentrada

            {

                get

                {

                    return (CrmDateTime)base.GetValue(fechaentradaProperty);

     

                }

                set

                {

                    base.SetValue(fechaentradaProperty, value);

                }

            }

     

     

        }

    }


    martes, 9 de noviembre de 2010 15:17

Respuestas

  • Hola arrox, eso puede deberse a varios temas te propongo algunas ideas que pueden ayudarte a diagnosticar donde está el problema:

    - Revisa si el servicio asíncrono de CRM está en ejecución.

    - La dll que generas está firmada? sino es posible que de algun error en el visor de sucesos.

    - Revisa si hay algún error en el visor de sucesos del servidor de CRM. es posible que haya algún error allí.

    - Intenta depurar el Workflow (mira esta url para ver como: http://msdn.microsoft.com/en-us/library/cc151088.aspx) así podrás ver si aunque sea entra en tu workflow.

    - Habilita las trazas de CRM para ver el seguimiento de lo que ocurre con tu workflow (http://support.microsoft.com/kb/907490/en-us)

    espero te pueda servir, un saludo


    Demian Adolfo Raschkovan Blog: http://crmtoall.blogspot.com
    martes, 9 de noviembre de 2010 15:35
    Moderador