none
Como gerar um serviceappointment no CRM, através de uma aplicação C#? RRS feed

  • Pergunta

  • Olá,

    Estou tentando criar um serviceappointment relacionado com um contrato, no CRM 3.0, mas estou tendo o erro abaixo.

    Server was unable to process request.
    An unespected error ocurred.

    Meu código está abaixo:

                    crmServiceManager.authenticateUser(false);
                    CrmService service = crmServiceManager.Service;

                    CRMContract objContract = new CRMContract();
                    List<contract> selectedContract = objContract.GetContractById(contratoId);
                    string pacienteId = selectedContract[0].customerid.Value.ToString().ToLower();

                    serviceappointment objAtividade = new serviceappointment();
                    objAtividade.ownerid = new Owner();
                    objAtividade.ownerid.type = EntityName.systemuser.ToString();
                    objAtividade.ownerid.Value = new Guid(proprietarioId);

                    // Relaciona com o contrato
                    objAtividade.regardingobjectid = new Lookup();
                    objAtividade.regardingobjectid.type = EntityName.contract.ToString();
                    objAtividade.regardingobjectid.Value = new Guid(contratoId.ToString());

                    // Coloca o paciente
                    activityparty activitypartyCustomer = new activityparty();
                    activitypartyCustomer.partyid = new Lookup();
                    activitypartyCustomer.partyid.type = EntityName.contact.ToString();
                    activitypartyCustomer.partyid.Value = new Guid(pacienteId);
                    objAtividade.customers = new activityparty[] { activitypartyCustomer };

                    objAtividade.subject = "[TopDentSys] Agendamento de Consulta";
                    CrmDateTime data = new CrmDateTime();
                    data.date = dtAgendamento;
                    data.time = horaAgendamento;
                    data.Value = Convert.ToDateTime(dtAgendamento + " " + horaAgendamento).ToString("yyyy-MM-ddTHH:mmsZ");
                    //    DateTime.Parse(dtAgendamento).Year + "-" + DateTime.Parse(dtAgendamento).Month + "-" + DateTime.Parse(dtAgendamento).Day + "T00:00:00";
                    objAtividade.scheduledstart = data;
                    objAtividade.scheduledend = data;

                    List<service> listaServicos = this.getService("Atendimentos Gerais");
                    Lookup serviceId = new Lookup();
                    serviceId.Value = new Guid(listaServicos[0].serviceid.Value.ToString().ToLower());
                    serviceId.name = listaServicos[0].name.ToString();
                    objAtividade.serviceid = serviceId;

                    Guid ActivityId = service.Create(objAtividade);

    Obrigada.

    sexta-feira, 22 de maio de 2009 14:44

Respostas

  • Simone,

    Teste com este código:

    P.S.: Eu coloquei os valores de Lookup fixos para teste. Verifique em Debug se seus valores de Lookup estão corretos. Também troque as duas primeiras linhas do seu código pelas linhas do exemplo deste post, que instancia o WS do CRM, adicionando a [Web References] no seu projeto e nomeando esta referência como [wsCrmService] (coloque o namespace no seu código como [ using <seu_projeto>.wsCrmService; ] ).

                CrmService service = new CrmService();
                service.Credentials = System.Net.CredentialCache.DefaultCredentials;

                serviceappointment objAtividade = new serviceappointment();
                objAtividade.ownerid = new Owner();
                objAtividade.ownerid.type = EntityName.systemuser.ToString();
                objAtividade.ownerid.Value = new Guid("939E329C-9300-DB11-8860-0003FFFE96CF");

                // Relaciona com o contrato
                objAtividade.regardingobjectid = new Lookup();
                objAtividade.regardingobjectid.type = EntityName.contract.ToString();
                objAtividade.regardingobjectid.Value = new Guid("A01F500F-E646-DE11-ADEE-0003FF02CF56");

                // Coloca o paciente
                activityparty activitypartyCustomer = new activityparty();
                activitypartyCustomer.partyid = new Lookup();
                activitypartyCustomer.partyid.type = EntityName.contact.ToString();
                activitypartyCustomer.partyid.Value = new Guid("6066F8B6-E9E3-DD11-BA10-0003FF44D03C");
                objAtividade.customers = new activityparty[] { activitypartyCustomer };

                string dtAgendamento = System.DateTime.Now.Date.ToString();

                objAtividade.subject = "[TopDentSys] Agendamento de Consulta";

                CrmDateTime data = new CrmDateTime();
                data.Value = Convert.ToDateTime(dtAgendamento).ToString("yyyy-MM-ddTHH:mm:ss");
                objAtividade.scheduledstart = data;
                objAtividade.scheduledend = data;

                Lookup serviceId = new Lookup();
                serviceId.Value = new Guid("82462F32-E746-DE11-ADEE-0003FF02CF56");
                serviceId.type = EntityName.service.ToString();
                objAtividade.serviceid = serviceId;

                try
                {
                    Guid ActivityId = service.Create(objAtividade);
                }
                catch (System.Web.Services.Protocols.SoapException ex)
                {
                    string x = ex.Detail.InnerText;
                }


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta Simone Laborda sexta-feira, 22 de maio de 2009 17:53
    sexta-feira, 22 de maio de 2009 17:13

Todas as Respostas

  • Simone,

    Obtenha o detalhe do erro, da seguinte forma:

    No lugar de:

             Guid ActivityId = service.Create(objAtividade);


    Troque por:

            try
            {
                Guid ActivityId = service.Create(objAtividade);
            }
            catch (System.Web.Services.Protocols.SoapException ex)
            {
                string x = ex.Detail.InnerText;
            }

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    sexta-feira, 22 de maio de 2009 14:51
  • Olá Gilberto,

    O detalhe do erro é:

    <error>
    <code>0x80040216</code>
    <description>An unexpected error occurred.</description>
    <type>Platform</type>
    </error>

    []´s
    sexta-feira, 22 de maio de 2009 14:53
  • Olá Simone,

    Executei o seu código e notei o seguinte erro:

    ToString("yyyy-MM-ddTHH:mmsZ");

    Troque por:

    ToString("yyyy-MM-ddTHH:mm:ss");


    P.S.: Vc pode tb comentar as linhas que funciona:

    data.date = dtAgendamento;
    data.time = horaAgendamento;
     
    []
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    sexta-feira, 22 de maio de 2009 16:01
  • Olá Gilberto,

    Ainda assim não resolveu.
    Continua dando o mesmo erro....

    []´s
    sexta-feira, 22 de maio de 2009 16:47
  • Simone,

    Teste com este código:

    P.S.: Eu coloquei os valores de Lookup fixos para teste. Verifique em Debug se seus valores de Lookup estão corretos. Também troque as duas primeiras linhas do seu código pelas linhas do exemplo deste post, que instancia o WS do CRM, adicionando a [Web References] no seu projeto e nomeando esta referência como [wsCrmService] (coloque o namespace no seu código como [ using <seu_projeto>.wsCrmService; ] ).

                CrmService service = new CrmService();
                service.Credentials = System.Net.CredentialCache.DefaultCredentials;

                serviceappointment objAtividade = new serviceappointment();
                objAtividade.ownerid = new Owner();
                objAtividade.ownerid.type = EntityName.systemuser.ToString();
                objAtividade.ownerid.Value = new Guid("939E329C-9300-DB11-8860-0003FFFE96CF");

                // Relaciona com o contrato
                objAtividade.regardingobjectid = new Lookup();
                objAtividade.regardingobjectid.type = EntityName.contract.ToString();
                objAtividade.regardingobjectid.Value = new Guid("A01F500F-E646-DE11-ADEE-0003FF02CF56");

                // Coloca o paciente
                activityparty activitypartyCustomer = new activityparty();
                activitypartyCustomer.partyid = new Lookup();
                activitypartyCustomer.partyid.type = EntityName.contact.ToString();
                activitypartyCustomer.partyid.Value = new Guid("6066F8B6-E9E3-DD11-BA10-0003FF44D03C");
                objAtividade.customers = new activityparty[] { activitypartyCustomer };

                string dtAgendamento = System.DateTime.Now.Date.ToString();

                objAtividade.subject = "[TopDentSys] Agendamento de Consulta";

                CrmDateTime data = new CrmDateTime();
                data.Value = Convert.ToDateTime(dtAgendamento).ToString("yyyy-MM-ddTHH:mm:ss");
                objAtividade.scheduledstart = data;
                objAtividade.scheduledend = data;

                Lookup serviceId = new Lookup();
                serviceId.Value = new Guid("82462F32-E746-DE11-ADEE-0003FF02CF56");
                serviceId.type = EntityName.service.ToString();
                objAtividade.serviceid = serviceId;

                try
                {
                    Guid ActivityId = service.Create(objAtividade);
                }
                catch (System.Web.Services.Protocols.SoapException ex)
                {
                    string x = ex.Detail.InnerText;
                }


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta Simone Laborda sexta-feira, 22 de maio de 2009 17:53
    sexta-feira, 22 de maio de 2009 17:13
  • Olá Gilberto,

    Funcionou! O problema era que faltava

    serviceId.type = EntityName.service.ToString();

    Muito obrigada !!

    []´s

    sexta-feira, 22 de maio de 2009 17:53