Olavo's profileEspaço de OlavoPhotosBlogListsMore Tools Help

Blog


    October 15

    Trabalhando com Relacionamentos N:N no Microsoft Dynamics CRM 4.0

    Umas das novidades mais legais do Microsoft Dynamics CRM 4.0 é a possibilidade de criar relacionamento N:N (Many to Many) entre as entidades, este tipo de relacionamento me possibilita por exemplo dizer que um contato contem vários contatos e que vários contatos participam de vários contratos diferentes.

    Claro que, para quem conhece, não existe relacionamento N:N dentro do banco de dados, ou é N:1 ou 1:N, então como isto é possível....a resposta é tão simples, ao solicitarmos a criação de um relacionamento do tipo Many to Many entre duas entidades, o CRM, de forma implícita, cria uma tabela intermediaria no banco de dados que contem apenas 4 atributos sendo dois deles as chaves primarias das entidades relacionadas

    image 
    Abstraindo todas as colunas das entidades laterais, a figura acima mostra a tabela de referencia para o relacionamento N:N.

    Legal, vamos para o divertido, como trabalhar com está novidade via SDK...primeiro vem a noticia chata, as tabelas intermediarias não são visualizadas como entidades então não podemos trabalhar com o Retrieve nem com o RetrieveMultiple para poder Capturar os dados, o mesmo vale para a gravação de dados, não podemos usar os métodos comuns para este procedimento, porem não é difícil realizar tais operações.

    1. Criando Dados em entidades N:N
    O processo de gravação é bem simples, para isto contamos com a classe AssociateEntitiesRequest que junto com a classe Moniker serão os responsaveis por gravar os dados no nosso BD.

      1. Para iniciar, deve-se adicionar a Referencia ao endereço http://ENDEREÇO_crm/mscrmservices/2007/CrmService.asmx sob o nome de CrmSdk.
      2. No topo da classe, vamos instanciar as bibliotecas do CRM através do comando Using CrmSdk; 

    image

    2. Capturando Dados da tabela de interseção

    Capturar os dados contidos nas tabelas de interseção(intermediarias) é um processo simples, porém bem diferente do usual Retrieve e do RetrieveMultiple. Por se tratar de tabelas de interseção e não de entidades propriamente ditas, o CRM não consegue realizar consultas diretas dentro dela, tanto que se você tentar pesquisar o nome da tabela através do Enum Entityname, verá que não consta o nome da tabela de interseção.

    A partir de agora, para realizarmos este tipo de consulta, teremos de usar o método Fetch da classe CrmService trabalha com consulta em XML e que retorna o resultado também em XML.

    O xml de consulta é bem simples, segue o modelo:

                <fetch mapping='logical'>
                    <entity name='servicecontractcontacts'>
                        <all-attributes/>
                            <filter>
                                <condition attribute='contractid' operator='eq'  value='EC1864D0-40B9-DE11-A3AF-00155D013108' />
                            </filter>
                    </entity>
                 </fetch>

    O código para realizar a consulta fica mais ou menos assim:

    image

    É isto pessoal. Nada de muito complicado, porem extremamente útil quando se tem entidades se relacionamento de N:N no Microsoft Dynamics CRM 4.0

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://olavo-neto.spaces.live.com/blog/cns!3E0D90592A8FB0E7!2870.trak
    Weblogs that reference this entry
    • None