none
Alterar atributo somente leitura e alterar proprietário do registro? RRS feed

  • Pergunta

  • Bom dia..

    Estou trabalhando em uma integração e tenho que passar algumas informações do sistema origem para o Dynamics, na entidade invoice(Fatura).

    Nesta entidade, tenho o campo "Valor Total" que é justamente o valor total da fatura, mas este é um atributo de sistema e é tratado

    somente como leitura no Dynamics.

    Estou trabalhando com o SQL Server Business Intelligence utilizando os Packages para fazer esse tipo de integração.

    Neste Package eu utilizo a linguagem C# para transferir os dados do sistema origem.

    Até aí blz, os campos que eu passo os valores vão para o Dynamics certinho, o registro é incluído...

    Só estou com o problema de passar valores para o campo "Valor da Fatura" pelo fato dele ser somente leitura e também

    para atribuir um proprietário do registro..

     Estou fazendo da seguinte forma:

    Alterando campo totalamount(Valor Total):

     if (!Row.totalamount_IsNull)

    {

    invoice.totalamount =

    new CrmMoney();

    invoice.totalamount.Value = 110;

    //Seto um valor para o Total da Fatura(Coloquei 110 como teste)

     

    }

    Dado que, fazendo este mesmo processo com o campo "Desconto da Fatura" que não é somente leitura, o valor é atualizado normalmente.

     

    Atualizando o proprietário do registro:

     

    if (!Row.userid_IsNull)

    {

     

    Owner own = new Owner();

    own.type =

    EntityName.systemuser.ToString();

    own.Value = new Guid(Convert.ToString(Row.userid));

     

     

    }

    Gostaria de saber se há alguma forma de atualizar campos somente leitura através do C# e se

    estou passando o proprietário de forma errada..

     

    Obrigado desde já ;)

    sexta-feira, 27 de agosto de 2010 13:26

Respostas

Todas as Respostas

  • Olá Klibor,

     

    Sobre o campo totalamount, ele é read-only não somente no formulário com na camada de negócio da aplicação. Esse tipo de campo não é possível atualizar de forma suportada.

    http://msdn.microsoft.com/en-us/library/cc153060.aspx

     

    Agora sobre o proprietário, você está fazendo corretamente. O formato do Guid que está correto? Está gerando alguma exceção? 

    Exemplo:

    Owner proprietario = new Owner("systemuser", new Guid("556E49E6-581B-4B61-91E4-6A7E7E8E6A9E"));
    

     

    Ou faça a atribuição do registro após a criação:

    http://msdn.microsoft.com/en-us/library/bb959372.aspx

     

    Abraço,

     

     


    Ricardo Alves
    www.ricardoalves.me
    • Sugerido como Resposta RicardoAlves sexta-feira, 27 de agosto de 2010 18:28
    • Marcado como Resposta Klibor terça-feira, 31 de agosto de 2010 13:56
    sexta-feira, 27 de agosto de 2010 14:05
  • Olá Ricardo, tudo bem?

    Obrigado por responder..

     

    Bom, então no caso do campo "totalamount" terei de criar um novo campo na entidade para passar essa informação.

    Estava lendo novamente sobre a classe Owner, e identifiquei que ela é utilizada para atribuir um proprietário para uma entidade, talvez

    esteja utilizando de forma errada, pois, o que eu preciso é alterar o proprietário do registro.

     

    Eu conhecia essa segunda forma, de executar um update depois do create para atualizar o proprietário, mas não sei como passar o PrincipalId(ID do registro que acabou de ser gerado pelo método Create) da classe SecurityPrincipal..

    A única forma que pensei, foi em usar um RetrieveMultiple logo após o Create para conseguir obter o registro..

    Tem alguma forma de passar essa informação para o PrincipalId sem precisar usar um RetrieveMultiple?

     

    Obrigado

    sexta-feira, 27 de agosto de 2010 14:23
  • Klibor,

     

    O método Create retorna o id após a criação:

    Guid id = service.Create(entity);

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me
    • Sugerido como Resposta RicardoAlves sexta-feira, 27 de agosto de 2010 18:28
    • Marcado como Resposta Klibor terça-feira, 31 de agosto de 2010 13:56
    sexta-feira, 27 de agosto de 2010 14:33
  • Obrigado.. funcionou =)

     

    Só mais uma dúvida Ricardo..

    Estou tentando criar uma Invoice com vários 3 itens..

     

    Como que eu faço para criar esses 3 itens dentro da Invoice que eu acabei de criar?

    terça-feira, 31 de agosto de 2010 13:54
  • Opá,

     

    É só você criar um invoicedetail (Produto da Fatura)...

    http://msdn.microsoft.com/en-us/library/bb928267.aspx

    http://msdn.microsoft.com/en-us/library/dd903958.aspx

     

    Na criação desta entidade você passar o invoiceid (id da fatura que você quer relacionar):

    invoicedetail produtoFatura = new invoicedetail();
    
    //... campos do produto da fatura
    
    produtoFatura.invoiceid = new Lookup();
    produtoFatura.invoiceid.Value = idFatura;
    
    service.Create(produtoFatura);
    
    

     

    Espero ter ajudado... Qualquer coisa...

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me
    • Sugerido como Resposta RicardoAlves terça-feira, 31 de agosto de 2010 14:16
    terça-feira, 31 de agosto de 2010 14:15
  • Huum... blz, consegui fazer aqui..

    Obrigado mesmo, vlw..

    É que eu estava tentando utilizar o CompoundCreate, como no exemplo no MSDN:

    http://msdn.microsoft.com/en-us/library/aa680974.aspx

    Mas quando eu tinha mais de 1 item para mandar, era criada mais de uma invoice.. ficando

    com dados repetidos e errados...


    Obrigado mais uma vez ;

    • Editado Klibor terça-feira, 31 de agosto de 2010 20:50
    terça-feira, 31 de agosto de 2010 20:43
  • Por nada ;)

     


    Ricardo Alves
    www.ricardoalves.me
    terça-feira, 31 de agosto de 2010 20:49