Usuário com melhor resposta
Alterar atributo somente leitura e alterar proprietário do registro?

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á ;)
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
-
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
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
-
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
-
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
-
-
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
-
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
-