Temos uma rotina escrita em Delphi que emite notas fiscais de serviço para as prefeituras. Esta rotina utiliza um container de itens como base para quase tudo. Como cada prefeitura tem suas regras específicas, acontece com muita frequência de uma correção feita para um determinado município acabar estragando o funcionamento de outro município e sério... estamos nesse loop há mais de ano!
Para evitar este tipo de problema, definimos que o caminho é criar testes automatizados e assim eles servirão como requisitos de negócio, que mudam de cidade para cidade, evitando essa quebra constante nos clientes, mesmo que várias pessoas trabalhem na rotina sem conhecer os detalhes de cada prefeitura.
Identificamos que seria suficiente refatorar apenas um trecho da rotina para possibilitar a criação de testes unitários e para isso pensamos em criá-la em C#, possibilitando que estes testes rodem no build.
Tentamos utilizar a interface IDContainerToEntitiesProxy (documentação:
http://wiki.benner.com.br/wiki/index.php?title=IDContainerToEntitiesProxy) para transformar o container do Delphi em um Entities<EntityBase> no C#. Mas tivemos algumas dificuldades porque o Entities não tem FieldDefinitions e com isso não conseguimos dar GetAsString, GetAsInteger, etc. Fica tudo string e tem que usar parse direto, o que não é muito legal.
Por esta razão, há um tempo atrás foi criado aqui no corporativo um cara que lê o XML obtido pelo método TDContainer.GetXML() e transforma num IList<IEntityBase>. Com isso, a vinda do container para o C# está funcionando. Aí trabalhamos com esses valores do container no C# e agora gostaríamos de devolver o container atualizado.
Tentamos utilizar o IEntityToDelphiDataSetProxy (documentação:
http://wiki.benner.com.br/wiki/index.php?title=TEntityDataSet), mas ele se torna um IDispatch no Delphi e tornou-se difícil repassar essas informações ao container que já estava criado e sendo utilizado antes de chegar na chamada do C#.
Essas dificuldades com a interoperabilidade do Container entre Delphi e C#, estão nos limitando com relação à refatoração de código e migração para C#.
Existe uma forma "correta" de se fazer isso?
Resumo da necessidade: Enviar um container já instanciado do Delphi para o C#, trabalhar com os dados no C# e receber o container com os dados já atualizados no Delphi.