<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Access Violation - Perguntas recentes com a tag tdcontainer</title>
<link>https://desenv.benner.com.br/accessviolation/?qa=tag/tdcontainer</link>
<description>Powered by Question2Answer</description>
<item>
<title>Qual a forma &quot;correta&quot; de enviar/receber um DContainer entre Delphi e C#?</title>
<link>https://desenv.benner.com.br/accessviolation/?qa=898/qual-forma-correta-enviar-receber-dcontainer-entre-delphi</link>
<description>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!&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Tentamos utilizar a interface IDContainerToEntitiesProxy (documentação: &lt;a href=&quot;http://wiki.benner.com.br/wiki/index.php?title=IDContainerToEntitiesProxy&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://wiki.benner.com.br/wiki/index.php?title=IDContainerToEntitiesProxy&lt;/a&gt;) para transformar o container do Delphi em um Entities&amp;lt;EntityBase&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
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&amp;lt;IEntityBase&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
Tentamos utilizar o IEntityToDelphiDataSetProxy (documentação: &lt;a href=&quot;http://wiki.benner.com.br/wiki/index.php?title=TEntityDataSet),&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://wiki.benner.com.br/wiki/index.php?title=TEntityDataSet),&lt;/a&gt; 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#.&lt;br /&gt;
&lt;br /&gt;
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#.&lt;br /&gt;
&lt;br /&gt;
Existe uma forma &amp;quot;correta&amp;quot; de se fazer isso?&lt;br /&gt;
&lt;br /&gt;
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.</description>
<guid isPermaLink="true">https://desenv.benner.com.br/accessviolation/?qa=898/qual-forma-correta-enviar-receber-dcontainer-entre-delphi</guid>
<pubDate>Wed, 28 Aug 2019 17:07:19 +0000</pubDate>
</item>
<item>
<title>Xml zLog para Container</title>
<link>https://desenv.benner.com.br/accessviolation/?qa=704/xml-zlog-para-container</link>
<description>&lt;p&gt;Como faço para converter o xml gravado na tabela Z_LOG para um container. Estou utilizando a função SetXml, mas sem sucesso.&lt;/p&gt;

&lt;p&gt;select dados from z_log where datahora &amp;gt; to_date('25-01-2016','DD-MM-YYYY') and rownum &amp;lt;=1&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Preciso demonstrar as alterações realizadas na base, ora poderá ser em 1 campo, ora em mais, essas informações ficam gravadas no XML da Z_LOG.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim query As Object&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set query = NewQuery&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;query.Add(&quot;select dados from z_log where datahora &amp;gt; to_date('25-01-2016','DD-MM-YYYY')&quot;)&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;query.Active = True&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim container As CSDContainer&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set container = NewContainer&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Dim S As String&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;S = query.FieldByName(&quot;DADOS&quot;).AsString&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;line-height:1.6&quot;&gt;&amp;nbsp; &amp;nbsp; container.SetXML(S,True,True, True )&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp; &amp;nbsp; For i = 0 To container.FieldCount - 1&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;MsgBox (container.Fields(i).AsString)&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Next i&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Set query = Nothing&lt;br&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Set container = Nothing&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<guid isPermaLink="true">https://desenv.benner.com.br/accessviolation/?qa=704/xml-zlog-para-container</guid>
<pubDate>Mon, 25 Jan 2016 12:31:28 +0000</pubDate>
</item>
<item>
<title>O que é mais rápido: TDContainer.Locate, TDContainer.LocateWhere ou Linq no C#?</title>
<link>https://desenv.benner.com.br/accessviolation/?qa=131/mais-rapido-tdcontainer-locate-tdcontainer-locatewhere-linq</link>
<description>Das três opções informadas, qual é mais performatica? Ou seja, executará mais rápido?</description>
<guid isPermaLink="true">https://desenv.benner.com.br/accessviolation/?qa=131/mais-rapido-tdcontainer-locate-tdcontainer-locatewhere-linq</guid>
<pubDate>Fri, 23 May 2014 14:18:57 +0000</pubDate>
</item>
</channel>
</rss>