segunda-feira, 3 de maio de 2010

Para os fãs de csharp

A grande pergunta é como referenciar uma classe da biblioteca .NET C#, ou outra fornecida por terceiros, dentro de um código diretamente escrito com csharp, visto que não existe a opção de usar o import. Isso ocorre porque ao incluir csharp você está programando um método, não uma classe, e está no meio do programa fonte, e claro, a documentação sobre esse assunto é escasso em GeneXus, visto que esse conceito foge totalmente da filosofia GeneXus de gerar produtos em diversas linguagens a partir de uma única KB.

Mas na prática, de vez em quando, e em casos muito específicos, temos que recorrer a esse recurso, mas nunca é demais recomendar cautela ao usá-lo. Opte sempre em usar o External Object, se estiver no GeneXus X ou EV. Se você precisa utilizar muito esse recurso em programa GeneXus, com certeza não está no caminho correto.

Para os corajosos, então ai vai! primeiramente deve-se instalar a DLL na pasta BIN da aplicação, por exemplo, algo como a classe IBM.Data.DB2.iSeries.dll, para conexão no DB2.

Em seguida a opção para incluir a classe no projeto, para isso utilizar o recurso de inclusão via compilador C#. Para isso Nas preferências do projeto voce encontrará a opção Compiler Flags, que deverá conter /lib:bin  /r:IBM.Data.DB2.iSeries.dll.  Esse recurso indica a pasta lib e o nome da referência que será adicionada pelo compilador.

Agora fica fácil! brincadeirinha... É programar em csharp, referenciando as classes com o nome da DLL, como a seguir:


        csharp  using (IBM.Data.DB2.iSeries.DB2Connection myConnection = new IBM.Data.DB2.iSeries.DB2Connection(myConnString))
        csharp  {
        csharp      IBM.Data.DB2.iSeries.DB2Command myCommand = new IBM.Data.DB2.iSeries.DB2Command(mySelectQuery, myConnection);
        csharp         myConnection.Open();   
        csharp        IBM.Data.DB2.iSeries.DB2DataReader myReader = myCommand.ExecuteReader();
        csharp         while (myReader.Read())
        csharp        {
        csharp         ...
        csharp       }
        csharp       myReader.Close();
        csharp       myConnection.Close();
        csharp  }
Agora é só adaptar pra sua necessidade.