Module: NWRFCLib

Extended by:
FFI::Library
Defined in:
lib/nwrfc/nwrfclib.rb

Overview

Library wrapper around NW RFC SDK shared library using RUBY-FFI

Defined Under Namespace

Classes: DATA_CONTAINER_HANDLE, RFCConnParam, RFCConnection, RFCDataContainer, RFCError, RFCFieldDesc, RFCFuncParam, RFC_DECF16, RFC_FUNCTION_DESC_HANDLE, RFC_TYPE_DESC_HANDLE

Constant Summary collapse

Cutf8_to_utf16le =
Iconv.new("UTF-16LE", "UTF-8")
Cutf16le_to_utf8 =
Iconv.new("UTF-8", "UTF-16LE")
B_SIZE =
TODO:

Make platform-dependent size based on RUBY_PLATFORM

Multiplier for providing correct byte size for String passed to RFC library

2
RFC_RC =
enum(
  :RFC_OK,
  :RFC_COMMUNICATION_FAILURE,
  :RFC_LOGON_FAILURE,
  :RFC_ABAP_RUNTIME_FAILURE,
  :RFC_ABAP_MESSAGE,
  :RFC_ABAP_EXCEPTION,
  :RFC_CLOSED,
  :RFC_CANCELED,
  :RFC_TIMEOUT,
  :RFC_MEMORY_INSUFFICIENT,
  :RFC_VERSION_MISMATCH,
  :RFC_INVALID_PROTOCOL,
  :RFC_SERIALIZATION_FAILURE,
  :RFC_INVALID_HANDLE,
  :RFC_RETRY,
  :RFC_EXTERNAL_FAILURE,
  :RFC_EXECUTED,
  :RFC_NOT_FOUND,
  :RFC_NOT_SUPPORTED,
  :RFC_ILLEGAL_STATE,
  :RFC_INVALID_PARAMETER,
  :RFC_CODEPAGE_CONVERSION_FAILURE,
  :RFC_CONVERSION_FAILURE,
  :RFC_BUFFER_TOO_SMALL,
  :RFC_TABLE_MOVE_BOF,
  :RFC_TABLE_MOVE_EOF,
  :RFC_UNKNOWN_ERROR
)
RFC_ERROR_GROUP =
enum(
  :OK,
  :ABAP_APPLICATION_FAILURE,
  :ABAP_RUNTIME_FAILURE,
  :LOGON_FAILURE,
  :COMMUNICATION_FAILURE,
  :EXTERNAL_RUNTIME_FAILURE,
  :EXTERNAL_APPLICATION_FAILURE
)
RFC_DIRECTION =
enum(
  :RFC_IMPORT, 1,
  :RFC_EXPORT, 2,
  :RFC_CHANGING, 3,
  :RFC_TABLES, 7
)
RFC_TYPE =
enum(
  :RFCTYPE_CHAR   , 0,
  :RFCTYPE_DATE   , 1,
  :RFCTYPE_BCD    , 2,
  :RFCTYPE_TIME   , 3,
  :RFCTYPE_BYTE   , 4,
  :RFCTYPE_TABLE   , 5,
  :RFCTYPE_NUM    , 6,
  :RFCTYPE_FLOAT  , 7,
  :RFCTYPE_INT    , 8,
  :RFCTYPE_INT2   , 9,
  :RFCTYPE_INT1   , 10,
  :RFCTYPE_NULL  , 14,
  :RFCTYPE_ABAPOBJECT, 16,
  :RFCTYPE_STRUCTURE , 17,
  :RFCTYPE_DECF16  , 23,
  :RFCTYPE_DECF34  , 24,
  :RFCTYPE_XMLDATA , 28,
  :RFCTYPE_STRING , 29,
  :RFCTYPE_XSTRING , 30,
  :RFCTYPE_BOX, 31,
  :RFCTYPE_GENERIC_BOX, 32,
  :_RFCTYPE_max_value
)

Class Method Summary collapse

Class Method Details

.make_conn_params(params) ⇒ Object

Take Hash of connection parameters and returns FFI pointer to an array for passing to connection


TODO - Ideally, this method should live in nwrfc.rb



419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
# File 'lib/nwrfc/nwrfclib.rb', line 419

def NWRFCLib.make_conn_params(params) #https://github.com/ffi/ffi/wiki/Structs
  par = FFI::MemoryPointer.new(RFCConnParam, params.length)
  pars = params.length.times.collect do |i|
    RFCConnParam.new(par + i * RFCConnParam.size)
  end
  #TODO Optimize this method
  tpar = params.to_a
  params.length.times do |n|
    #      str = (tpar[n][0].to_s + "\0").encode("UTF-16LE")
    pars[n][:name] = FFI::MemoryPointer.from_string(tpar[n][0].to_s.cU)
    #      str = (tpar[n][1].to_s + "\0").encode("UTF-16LE")
    #      str = str.encode("UTF-16LE")
    pars[n][:value] = FFI::MemoryPointer.from_string(tpar[n][1].to_s.cU)
  end
  par
end