Usuário com melhor resposta
Erro request XML

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.
CRMServiceManager manager = new CRMServiceManager(); string xmlbusca = @"<fetch mapping=""logical"">
meu codigo esta assim:
<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
Respostas
-
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
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) -
-
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) -
Giberto, por favor;
Eu coloquei o exemplo que você deu, na minha pagina porem deu erro dizendo que namespaceCrmAuthenticationToken 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 -
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) -
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 -
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) -
Segue a classe, obrigada
System;
Amanda
usingusing
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 -
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) -
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 -
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) -
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 -
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) -
-
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
-
-
-