locked
CRM Service - Retrieve() no devuelve columnas RRS feed

  • Pregunta

  • hola

    he creado un proxy a

    http://<host>/XRMServices/2011/Organization.svc

    el cual funciona la mas bien para recuperar y trabajar entidades, salvo por esta situacion

    resulta que quiero actualizar la info de localizacion de las cuentas, para lo cual uso la funcionalidad de google maps, esto va perfecto

    pero cuando llego al Retrieve() alli el problema

            public static void UpdatePosition(string fetchxml)
            {
                List<Account> account = GetAccounts(fetchxml);
    
                using (OrganizationServiceClient crmService = new OrganizationServiceClient())
                {
                    foreach (var item in account)
                    {
                        GlobalPosition position = GetGeoPosition(item);
    
                        if (position == null)
                            continue;
    
                        Entity entity = crmService.Retrieve("account", item.accountid, new ColumnSet() 
                        {
                            Columns = new string[] { "name", "address1_latitude", "address1_longitude" }
                            
                        });
    
                        entity.Attributes.FirstOrDefault(x => x.key == "address1_latitude").value = position.Latitude;
                        entity.Attributes.FirstOrDefault(x => x.key == "address1_longitude").value = position.Longitude;
    
    
                        crmService.Update(entity);
                    }
                }
    
            }

    como veran en la imagen solo me devuelve dos atributos de la entidad, que paso con "address1_latitude" y "address1_longitude" ?

    es que sino recupero estos no veo como podria actualizarlo para enviar la actualizacion con el Update()

    estos usando .net 3.5

    gracias, saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 30 de abril de 2013 15:05

Respuestas

  • Leandro,

    Cuando un campo del CRM no tiene valor, este no es retornado. Pero, si este campo esta en el metadata puede ser actualizado sin ningún problema 


    Salu2 Atilin | http://www.dexrm.com

    martes, 30 de abril de 2013 15:35
  • Leandro,

    Prueba con la siguiente linea de codigo

    var account = new Entity("account");
                account["address1_latitude"] = "";

    acuerdate de importar 

    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Messages;
    


    Salu2 Atilin | http://www.dexrm.com

    martes, 30 de abril de 2013 16:06

Todas las respuestas

  • Hola Leandro,

    Tienen valores los campos "address1_latitude" y "address1_longitude"  en tu CRM?


    Salu2 Atilin | http://www.dexrm.com

    martes, 30 de abril de 2013 15:25
  • no, no tiene

    quiero recuperarlas para ponerles un valor

    justamente del resultado de la geo localizacion es que asignaria esta info a la entidad


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 30 de abril de 2013 15:29
  • Leandro,

    Cuando un campo del CRM no tiene valor, este no es retornado. Pero, si este campo esta en el metadata puede ser actualizado sin ningún problema 


    Salu2 Atilin | http://www.dexrm.com

    martes, 30 de abril de 2013 15:35
  •  Leandro,

    Me parece que para el Update no es necesario traer el valor de las columnas en el Retrieve. Simplemente que existan esos atributos en la entidad, con eso basta para actualizarlo los mismos.

    Saludos,

    Frank


    Frank Hernández | http://www.elblogcrm.com/http://www.twitter.com/ElBlogCRM | http://www.facebook.com/ElBlogCRM

    If you consider this post as helpful please Vote as Helpful and/or Mark as Answer. Thanks you!

    Si usted considera esta respuesta como útil por favor márquela como Útil y/o márquela como Respuesta. Gracias!

    martes, 30 de abril de 2013 15:37
  • hola Atilio, Frank

    gracias por el dato

    ahora me pregunto, como asignan el atributo?, porque si se utiliza

    entity.Attributes.FirstOrDefault(x => x.key == "address1_latitude").value = position.Latitude;

    al no devolverlo falla porque no lo encuantra y retorna null

    no vi que la entidad tenga un Add() en la propiedad Attributes, es mas solo se puede acceder por index, no se puede asignar un string como key, usar esto

    entity.Attributes["address1_latitude"] = valor;

    no me deja

    ------

    Use the Entity Class for Create, Update and Delete

    la doc me dice que puedo usar

    entity["address1_latitude"] = valor;

    pero a mi eso no me compila

    quizas sea porque ellos usan las dll del sdk, cuando yo estos usando un proxy al servicio de wcf

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 30 de abril de 2013 15:58
  • Leandro,

    Prueba con la siguiente linea de codigo

    var account = new Entity("account");
                account["address1_latitude"] = "";

    acuerdate de importar 

    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Messages;
    


    Salu2 Atilin | http://www.dexrm.com

    martes, 30 de abril de 2013 16:06
  • hola

    pero si o si se debe usar las dll del sdk, no se puede realizar esto mismo desde el servicio de wcf ?

    es que tengo la referencia al

    http://<host>/XRMServices/2011/Organization.svc

    la idea era trabajar solo con el servicio

    en el servicio veo el metod Update() y Create() pero para que estan sino se pueden utilizar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 30 de abril de 2013 17:34
  • hola

    bien al final lo realice con las dll del sdk y funciono lo mas bien, pense que sera mas complicado

    gracias por la ayuda

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 30 de abril de 2013 19:53