rnsap 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/rnsap.rb +110 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c994f925948decacaeceb5a8aed06dc8c4de7316455e438f6dcfb5ce481a46aa
|
4
|
+
data.tar.gz: 77e7fdcae6a5d19ebcc8ec39067b5f78a8089bdaf55fa1bc9c78a9eb8fbb8cbe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ee051496fccf066f70914a00d162ee7791a92beb1effb248651b22ebc2f43d63837b3619d3b3b6c7bd06fd4df5ff916c30b67f86dd0177c0e4d29a3cc07c5209
|
7
|
+
data.tar.gz: 438b966fd2628cadc850712f3e9877d9bcb12c11d7f30a2e97c6b16d490cfdcc923b9fe9910e37d24b9c919bc6345ac90f11695856f50b2fc4e561c25eab8598
|
data/lib/rnsap.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'nwrfc'
|
4
|
+
require 'json'
|
5
|
+
require 'yaml'
|
6
|
+
|
7
|
+
include NWRFC
|
8
|
+
|
9
|
+
module RnSap
|
10
|
+
class RnSap
|
11
|
+
attr_accessor conn
|
12
|
+
|
13
|
+
def initialize(_conn_parms)
|
14
|
+
conn = Connection.new(logon_info)
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_table(name, fields, _clause)
|
18
|
+
klass_name = name.capitalize
|
19
|
+
fields_up = []
|
20
|
+
fields_down = []
|
21
|
+
fields.each do |field|
|
22
|
+
fields_up << field.upcase
|
23
|
+
fields_down << field.downcase
|
24
|
+
end
|
25
|
+
base_obj = get_class_instance(klass_name, fields_down)
|
26
|
+
|
27
|
+
#-- Read Table
|
28
|
+
# logon_info = { 'user' => 'user',
|
29
|
+
# 'passwd' => 'password',
|
30
|
+
# # 'trace' => 2,
|
31
|
+
# 'client' => '100',
|
32
|
+
# 'ashost' => 'server.com',
|
33
|
+
# 'sysnr' => '00' }
|
34
|
+
fn_read_table = conn.get_function('RFC_READ_TABLE')
|
35
|
+
fc_read_table = fn_read_table.get_function_call
|
36
|
+
|
37
|
+
fc_read_table[:QUERY_TABLE] = name.upcase
|
38
|
+
fields_up.each do |field|
|
39
|
+
row = fc_read_table[:FIELDS].new_row
|
40
|
+
row[:FIELDNAME] = field
|
41
|
+
end
|
42
|
+
|
43
|
+
fc_read_table.invoke
|
44
|
+
|
45
|
+
# columns = []
|
46
|
+
columns_hash = {}
|
47
|
+
fc_read_table[:FIELDS].each do |row|
|
48
|
+
column = TableColumn.new
|
49
|
+
column.field_name = row[:FIELDNAME]
|
50
|
+
column.offset = row[:OFFSET]
|
51
|
+
column.length = row[:LENGTH]
|
52
|
+
column.type = row[:TYPE]
|
53
|
+
column.description = row[:FIELDTEXT]
|
54
|
+
# dump_instance_variables(column)
|
55
|
+
# columns << column
|
56
|
+
columns_hash[column.field_name] = column
|
57
|
+
end
|
58
|
+
|
59
|
+
# dump_instance_variables(columns_hash)
|
60
|
+
|
61
|
+
list = []
|
62
|
+
fc_read_table[:DATA].each do |row|
|
63
|
+
obj = Object.const_set(klass_name, base_obj.class).new
|
64
|
+
wa = row[:WA]
|
65
|
+
fields_down.each do |field|
|
66
|
+
column = columns_hash[field.upcase]
|
67
|
+
value = wa[column.offset.to_i, column.length.to_i]
|
68
|
+
eval("obj.#{field} = '#{value}'")
|
69
|
+
end
|
70
|
+
list << obj
|
71
|
+
end
|
72
|
+
|
73
|
+
# dump_instance_variables(list)
|
74
|
+
|
75
|
+
# obj2 = Object.const_set(klass_name, obj.class).new
|
76
|
+
# eval "obj2.#{fields.first.downcase} = 'A'"
|
77
|
+
# eval "obj2.#{fields.second.downcase} = 'B'"
|
78
|
+
# dump_instance_variables(obj2)
|
79
|
+
# fields.each do |field|
|
80
|
+
# field = field.downcase
|
81
|
+
# eval("puts obj.#{field}")
|
82
|
+
# end
|
83
|
+
|
84
|
+
# obj2.instance_variables.map do |var|
|
85
|
+
# puts " ..#{[var, obj2.instance_variable_get(var)].join(':')}"
|
86
|
+
# end
|
87
|
+
list
|
88
|
+
end
|
89
|
+
|
90
|
+
def dump_instance_variables(obj)
|
91
|
+
puts "Class: #{obj.class} -> #{obj}"
|
92
|
+
obj.instance_variables.map do |var|
|
93
|
+
puts " ..#{[var, obj.instance_variable_get(var)].join(':')}"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_class_instance(name, fields)
|
98
|
+
# puts "Class name: #{name}"
|
99
|
+
klass = Object.const_set(name, Class.new).new # , Struct.new(*attributes)
|
100
|
+
fields.each do |field|
|
101
|
+
klass.class.module_eval { attr_accessor field.downcase }
|
102
|
+
end
|
103
|
+
klass
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class TableColumn
|
108
|
+
attr_accessor :field_name, :offset, :length, :type, :description
|
109
|
+
end
|
110
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rnsap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rogerio Nascimento
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-04-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nwrfc
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.9
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.9
|
27
|
+
description: ''
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/rnsap.rb
|
34
|
+
homepage: https://github.com/rnasc/rnsap
|
35
|
+
licenses:
|
36
|
+
- MIT
|
37
|
+
metadata:
|
38
|
+
source_code_uri: https://github.com/rnasc/rnsap
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubygems_version: 3.0.1
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Facilitates SAP RFC calls in Ruby
|
58
|
+
test_files: []
|