rnsap 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|