none
Erro request XML RRS feed

  • Pergunta

  • AMigos , esou tentando carregar um valor através de XML, porem quando realiza o REquest dá o seguinte erro:

    Server was unable to process request.

    meu codigo esta assim:

    CRMServiceManager manager = new CRMServiceManager();

    string xmlbusca = @"<fetch mapping=""logical"">
    <entity name=""Annotation"">
    <attribute name=""DocumentBody""/>
    <filter type=""and"">
    <condition attribute=""objectid"" operator=""eq"" value=""1""/>
    </filter>
    </entity>
    </fetch>"
    ;

     

    string result = manager.Service.Fetch(xmlbusca);

    Muito obrigada


    Programadora ASP.NET
    quinta-feira, 26 de fevereiro de 2009 15:28

Respostas

Todas as Respostas

  • Olá Amanda,

    O nome da entidade e os campos no Fetch XML precisam estar em [Minúsculo].

    Dica: Sempre utilize uma estrutura de Try/Catch para poder capturar erros detalhados ao executar o WS do CRM:

    try
    {
     string result = manager.Service.Fetch(xmlbusca);
    }
    catch (System.Web.Services.Protocols.SoapException ex)
    {
     string err = ex.Detail.InnerText;
    }


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 15:50
  • Alterei conforme vocÊ mencionou, e agora aparece o seguinte erro:

    The request failed with HTTP status 401: Unauthorized.


    Grata
    Programadora ASP.NET
    quinta-feira, 26 de fevereiro de 2009 16:09
  • Amanda,

    [Unauthorized], significa que você está executando o WS do CRM no contexto de um usuário que não tem permissão para o Fetch.

    Seguindo o modelo do SDK do CRM, execute o WS no contexto de um usuário do CRM com permissões.

    Por exemplo:

    CrmAuthenticationToken token = new CrmAuthenticationToken();
    token.AuthenticationType = 0;
    token.OrganizationName = "Nome Organizacao";

    CrmService service = new CrmService();
    service.Url = "
    http://localhost:5555/mscrmservices/2007/crmservice.asmx";
    service.CrmAuthenticationTokenValue = token;
    service.Credentials = new System.Net.NetworkCredential("nome usr CRM", "SENHA", "");

    Através da classe System.Net.NetworkCredential você especifica um usuário para o contexto do Web Services que será executado.


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 16:45
  • Giberto, por favor;
    Eu coloquei o exemplo que você deu, na minha pagina porem deu erro dizendo que namespace 

    CrmAuthenticationToken não pode ser encontrado, esse exemplo deve ser colocado na mesma pagina ou numa classe?

    Como faço pra fazer essa referencia?

    Obrigada


    Programadora ASP.NET
    quinta-feira, 26 de fevereiro de 2009 17:04
  •  

    Amanda,

    Notei que vc instancia uma classe chamada [CRMServiceManager]. Você a criou?

    É nesta classe que tem que existir o código de exemplo que te passei (para a autenticação do usuário).


    As linhas

    CrmAuthenticationToken token = new CrmAuthenticationToken();

    e

    CrmService service = new CrmService();

    se referem ao uso das classes do WebServices do CRM.

    Para usá-las, basta vc adicionar uma [Web Reference] do CRM no seu projeto da seguinte forma:

    - No Visual Studio -> Add Web Reference;
       - Por exemplo, http://localhost:5555/mscrmservices/2007/crmservice.asmx.

    - E dar um nome para a referência criada (por exemplo - dynamicsCrmSDK).


    E no início do seu código adicionar o namespace:

    using <nome do seu projeto>.dynamicsCrmSDK;


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 17:38
  • Isso, essa clase CRMServiceManager, já estava ja está no meu projeto , agora eu crie a seguinte, dentro dessa classe

    public dynamicsCrmSDK()
    {

    CrmAuthenticationToken token = new CrmAuthenticationToken();

    token.AuthenticationType = 0;

    token.OrganizationName = "Nome Organizacao";


    }

    Mas está dando erro dizendo que esta classe deve ter um return type.


    Programadora ASP.NET
    quinta-feira, 26 de fevereiro de 2009 18:21
  • Amanda,

    O interessante seria vc postar o conteúdo da classe [CRMServiceManager], que aí podemos ajudá-la, adicionando corretamente o código de autenticação.
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 18:32
  •  Segue a classe, obrigada


    Amanda

    using
    System;

    using System.Data;

    using System.Configuration;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    using CRMSdk;

    using System.Net.NetworkInformation;

    /// <summary>

    /// Summary description for CRMServiceManager

    /// </summary>

    public class CRMServiceManager

    {

    private CrmService service = null;

    System.Net.NetworkCredential oCredencial = null;

    private WhoAmIResponse user = null;



    //private static CRMServiceManager singleManager;

    public CRMServiceManager()

    {

    service = new CrmService();

    oCredencial = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["CRMUrlUser"].ToString(), ConfigurationManager.AppSettings["CRMUrlPass"].ToString(), ConfigurationManager.AppSettings["CRMDomain"].ToString());

    }

    public CrmService Service

    {

    get {

    if (user == null)

    authenticateUser();

    return this.service;

    }

    }

    public WhoAmIResponse User

    {

    get

    {

    return this.user;

    }

    }

    //valida usuario logado no CRM

    #region CRM AUTHENTICATION

    public bool authenticateUser()

    {

    return authenticateUser(bool.Parse(ConfigurationManager.AppSettings["CRMCredencialDefault"]));

    }

    public bool authenticateUser(string user, string password, string domain)

    {

    oCredencial = new System.Net.NetworkCredential(user, password, domain);

    return authenticateUser(false);

    }

    public bool authenticateUser(bool defaultCredencial)

    {

    bool retorno = false;

    // if (defaultCredencial)

    service.Credentials = (defaultCredencial) ? System.Net.CredentialCache.DefaultCredentials : oCredencial;

    // else



    try

    {

    WhoAmIRequest userRequest = new WhoAmIRequest();



    this.user = (WhoAmIResponse)service.Execute(userRequest);

    }

    catch (Exception erro)

    {

    throw new Exception(erro.Message);

     

    }

    service.PreAuthenticate = true;

    service.Timeout = -1;

    if (user != null)

    {

    // this.userId = user.UserId.ToString();

    retorno = true;

    }

    return retorno;

    }

    #endregion

    //Singleton pattern instance

    //public static CRMServiceManager Instance

    //{

    // get

    // {

    // if (singleManager == null)

    // singleManager = new CRMServiceManager();

    // return singleManager;

    // }

    //}





    }


    Programadora ASP.NET
    quinta-feira, 26 de fevereiro de 2009 18:37
  • Olá Amanda,

    No código que você me passou está faltando somente um detalhe para funcionar 100%! O TOKEN de autenticação para o CRM.

    A alteração é pequena. Faça o seguinte:

    Procure na classe, a frase "public CRMServiceManager()"

    Note que a primeira linha é:

    service = new CrmService();

    Note também que já existe o código para autenticação do usuário, que inclusive está buscando de seu arquivo APP.CONFIG (CRMUrlUser, CRMUrlPass e CRMDomain).

    Basta então adicionar o seguinte código:

    CrmAuthenticationToken token = new CrmAuthenticationToken();
    token.AuthenticationType = 0;
    token.OrganizationName = "ORGNAME";
    service.CrmAuthenticationTokenValue = token;

    P.S.: Note que em, [token.OrganizationName = "ORGNAME"], [ORGNAME] Deve ser Substituído pelo [Nome da Sua Organização] no CRM, OK.

    []


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    quinta-feira, 26 de fevereiro de 2009 20:10
  •  Olá Gilberto, eu alterei segue abaixo a alteração, porém as linhas:

    CrmAuthenticationToken token = new CrmAuthenticationToken();

    service.CrmAuthenticationTokenValue = token;

    Estão exibindo a mesagem, quando posiciono o mouse em cima.

    The type namespace name "CrmAuthenticationToken" could be found (are you missing a using directive or an assembly reference?

     

    O que deve estar faltando agora?

     

     

    Obrigada pela paciencia.

     

    Amanda

     

     

     

    service = new CrmService();

    oCredencial = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["CRMUrlUser"].ToString(), ConfigurationManager.AppSettings["CRMUrlPass"].ToString(), ConfigurationManager.AppSettings["CRMDomain"].ToString());

    CrmAuthenticationToken token = new CrmAuthenticationToken();

    token.AuthenticationType = 0;

    token.OrganizationName = "ORGNAME";

    service.CrmAuthenticationTokenValue = token;


    Programadora ASP.NET
    sexta-feira, 27 de fevereiro de 2009 02:24
  • Amanda,

    1 - Você está usando o CRM 3 ou 4?

    2 - Você tem certeza que os parâmetros CRMUrlUser, CRMUrlPass e CRMDomain estão corretos? Está configurado com um usuário do CRM com permissões?

    Confere qual a URL do CRM que está adicionada no seu projeto.

    Está como:

    MSCRMServices/2007/CrmService.asmx

    ou

    MSCRMServices/2006/CrmService.asmx

    Como sua classe não reconhece o método [CrmAuthenticationToken], parece que vc está usando a referência para o CRM 3.


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    sexta-feira, 27 de fevereiro de 2009 13:01
  • Sim Gilberto, meu CRM é o 3.

     O problema não são os parametros, e sim o método CrmAuthenticationToken que não é reconhecido pela minha classe.

     Você teria um exemplo de como requisitar por XML um campo de uma tabela do CRM.

    É isso que estou tentando fazer a dias, e não consigo, só consigo fazer por select normal no meu asp.net, porém o campo que estou precisando não consigo ler pois dá menssagem de que minhas permissões não podem visualizar esse campo, então por esse motivo é que eu preciso por XML, ler o campo documentBody da tabela Annotation, passando um parametro que é o ID do registro.


    Me ajude!

     

    Ficarei muito grata..

    Amanda.

     

     


    Programadora ASP.NET
    sexta-feira, 27 de fevereiro de 2009 13:32
  • Amanda,

    Como vc utiliza o CRM 3.0, realmente não vai conseguir usar a classe [CrmAuthenticationToken], pois é da versão 4.0.

    Pelo que eu entendi, vc está trabalhando em um projeto do tipo [Web Site] no Visual Studio. Não há problema nisto.

    Você quer mostrar o conteúdo do campo [documentBody] em uma página ASP.NET?

    Antes de te passar outras formas de recuperar o que quer do CRM, faça outro teste:

    Abra seu Web.Config, e adicione a seguinte linha, dentro da TAG <system.web>:

    <identity impersonate="true" />

    e no seu IIS, certifique-se de que seu [projeto Web] está rodando com [Integrated Windows Authentication] habilitado (IIS-> Web Sites -> clicar em propriedades do seu site -> pasta [directory security] -> botão [edit]).


    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    sexta-feira, 27 de fevereiro de 2009 14:17
  • Oi Gilberto, eu fiz a alteração no web config e no IIS, como vc sugeriu, porem o erro continua.

     

     

     Poderia me ajudar com o plano B?

     

    Grata

     Amanda

     


    Programadora ASP.NET
    sexta-feira, 27 de fevereiro de 2009 20:30
  • Amanda,

    Só para tentar ajudá-la mais, informe-nos como está montado seu ambiente de desenvolvimento:

    - Como funciona seu ambiente de desenvolvimento com o CRM? Vc tem instalado em sua máquina de desenvolvimento o VS.NET e acessa o CRM em outra máquina? O CRM está instalado em uma [Virtual Machine]?

    De qq forma, como vc pediu, segue exemplos de acesso ao WebServices do CRM, via JavaScript:

    http://www.stunnware.com/crm2/topic.aspx?id=JSWebService
    http://blog.customereffective.com/blog/2008/02/calling-the-crm.html

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    • Marcado como Resposta AmandaSP terça-feira, 10 de março de 2009 14:09
    segunda-feira, 2 de março de 2009 12:20
  • Olá Amanda,

    Alguma novidade?!

    Conseguiu verificar meu último post?!

    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    sexta-feira, 6 de março de 2009 16:04
  • Olá Gilberto, eu consegui resolver o problema de outra forma, porém estou analisando os exemplos que você me passou, caso eu tenha que fazer isso denovo.

    Lhe agradeço muito


    Amanda.


    Programadora ASP.NET
    terça-feira, 10 de março de 2009 14:09
  • Que bom que conseguiu!
    Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)
    terça-feira, 10 de março de 2009 14:16