Histórico da Página
...
Em função da nova estrutura adotada (classes Wrapper) existem algumas pequenas mudanças na criação de uma integração com a plataforma Office que devem ser observadas e ajustadas caso necessário:
Excel
...
Na criação do objeto OLE deve ser alterado para atribuir uma instância da classe wrapper Excel. A include inicializa a variável passada como parâmetro com base na configuração dos Parâmetros Globais (CD0101).
Bloco de código language ruby title Modelo antigo linenumbers true CREATE "Excel.Application" chExcel.
Bloco de código language ruby title Modelo novo linenumbers true {office/office.i Excel chExcel}
Informações title OBS Caso a include esteja em uma procedure interna, deve ser desfeita a definição da variável global OFFICE_WRAPPERS para correta definição das variáveis de verificação (microsoft/libre)
Bloco de código language ruby title Exemplo linenumbers true {office/office.i Excel chExcel} PROCEDURE sample: &IF DEFINED(OFFICE_WRAPPERS) &THEN &UNDEFINE OFFICE_WRAPPERS &ENDIF {office/office.i Excel chExcel} END PROCEDURE.
Na definição das variáveis que serão utilizadas na integração devem ser alteradas do tipo COMPONENT-HANDLE para o tipo CLASS apontando para a interface responsável pela implantação da funcionalidade nas classes Wrapper.
Bloco de código language ruby title Modelo antigo linenumbers true DEFINE VAR chExcel AS COM-HANDLE NO-UNDO. DEFINE VAR chWorkbook AS COM-HANDLE NO-UNDO. DEFINE VAR chRange AS COM-HANDLE NO-UNDO.
Bloco de código language ruby title Modelo novo linenumbers true DEFINE VAR chExcel AS office.iface.excel.ExcelWrapper NO-UNDO. DEFINE VAR chWorkbook AS office.iface.excel.Workbook NO-UNDO. DEFINE VAR chRange AS office.iface.excel.Range NO-UNDO.
Alterar métodos que não passam parâmetros adicionando “?” ou utilizando um método correspondente sem os mesmos, quando existir.
Bloco de código language ruby title Modelo antigo linenumbers true chWorkbook:SaveAs(tt-param.arquivo,"56",,,,,,,,,,).
Bloco de código language ruby title Modelo novo linenumbers true chWorkbook:SaveAs(tt-param.arquivo,"56",?,?,?,?,?,?,?,?,?,?). ou chWorkbook:SaveAs(tt-param.arquivo,"56").
Alterar atribuição à métodos por propriedades com extent.
Bloco de código language ruby title Modelo antigo linenumbers true chChart:HasAxis({&xlCategory}) = false.
Bloco de código language ruby title Modelo novo linenumbers true chChart:HasAxis({&xlCategory}, false).
Alterar métodos que recebem como parâmetro a propriedade de outro objeto.
Bloco de código language ruby title Modelo antigo linenumbers true chWorksheet = chWorkbook:Sheets(chWorkbook:Sheets:COUNT).
Bloco de código language ruby title Modelo novo linenumbers true iWorkSheets = chWorkbook:Sheets:COUNT. chWorksheet = chWorkbook:Sheets(iWorkSheets).
Alterar a atribuição da propriedade VALUE, que é CHARACTER, pela correspondente de acordo com o tipo (DATE, INTEGER, DECIMAL ou LOGICAL) em questão.
Bloco de código language ruby title Modelo antigo linenumbers true chWorksheet:Range('A1'):Value = da-conversao. /* Variável com o tipo data */
Bloco de código language ruby title Modelo novo linenumbers true chWorksheet:Range('A1'):DateValue = da-conversao. ou chWorksheet:Range('A1'):SetValue(da-conversao).
Informações O método SetValue() recebe qualquer tipo de valor, independente da tipagem, porem não por ser utilizado dentro de um bloco de ASSIGN. Exemplo:
chWorksheet:Range('A1'):SetValue('Valor da célula'). ou chWorksheet:Range('A1'):SetValue(10000).
Alterar os RELEASEs de objetos OLE por DELETEs de objetos ABL, e caso seja a variável principal da API, o Excel, adicionar a chamada ao método "Release", para que o OLE automation na DLL seja liberado. Caso seja feita a verificação com VALID-HANDLE alterar para uma comparação com o valor desconhecido (?).
Bloco de código language ruby title Modelo antigo linenumbers true IF VALID-HANDLE(chExcel) THEN RELEASE OBJECT chExcel NO-ERROR.
Bloco de código language ruby title Modelo novo linenumbers true IF chExcel <> ? THEN DELETE OBJECT chExcel NO-ERROR.
Word
...
Na criação do objeto OLE deve ser alterado para atribuir uma instância da classe wrapper Word, similar ao processo do Excel.
Bloco de código language ruby title Modelo antigo linenumbers true CREATE "Word.Application" chWord.
Bloco de código language ruby title Modelo novo linenumbers true {office/office.i Word chWord}
Informações title OBS Caso a include esteja em uma procedure interna, deve ser desfeita a definição da variável global OFFICE_WRAPPERS para correta definição das variáveis de verificação (microsoft/libre)
Bloco de código language ruby title Exemplo linenumbers true {office/office.i Word chWord} PROCEURE sample: &IF DEFINED(OFFICE_WRAPPERS) &THEN &UNDEFINE OFFICE_WRAPPERS &ENDIF {office/office.i Word chWord} END PROCEDURE.
- Na definição das variáveis que serão utilizadas na integração devem ser alteradas do tipo COMPONENT-HANDLE para o tipo CLASS apontando para a interface responsável pela implantação da funcionalidade nas classes Wrapper.
Bloco de código language ruby title Modelo antigo linenumbers true DEFINE VARIABLE chWord AS COM-HANDLE NO-UNDO. DEFINE VARIABLE chDocument AS COM-HANDLE NO-UNDO.
Bloco de código language ruby title Modelo novo linenumbers true DEFINE VARIABLE chWord AS office.iface.word.WordWrapper NO-UNDO. DEFINE VARIABLE chDocument AS office.iface.word.Document NO-UNDO.
Alterar métodos que recebem como parâmetro a propriedade de outro objeto. Seguir a mesma recomendação especificada no item 5 para o Excel.
Alterar os RELEASEs de objetos OLE por DELETEs de objetos ABL, e caso seja a variável principal da API, o Excel, adicionar a chamada ao método "Release", para que o OLE automation na DLL seja liberado. Caso seja feita a verificação com VALID-HANDLE alterar para uma comparação com o valor desconhecido (?).
Bloco de código language ruby title Modelo antigo linenumbers true IF VALID-HANDLE(chWord) THEN RELEASE OBJECT chWord NO-ERROR.
Bloco de código language ruby title Modelo novo linenumbers true IF chWord <> ? THEN DELETE OBJECT chWord NO-ERROR.
...