-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathucopy.go
129 lines (102 loc) · 3.25 KB
/
ucopy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package main
import (
"flag"
"fmt"
"time"
"simonwaldherr.de/go/golibs/csv"
"simonwaldherr.de/go/saprfc"
)
// BAPI calls log
func printLog(bapi_return interface{}) {
for _, line := range bapi_return.([]interface{}) {
fmt.Printf("%s: %s\n",
line.(map[string]interface{})["TYPE"],
line.(map[string]interface{})["MESSAGE"])
}
}
var sapConnPara *saprfc.Connection
func main() {
// SAP Host connection settings
var user string
var pwd string
var host string
var router string
var sysnr string
var client string
var trace string
var lang string
flag.StringVar(&user, "user", "username", "sap rfc username")
flag.StringVar(&pwd, "pwd", "password", "sap rfc password")
flag.StringVar(&host, "host", "10.11.12.13", "sap host")
flag.StringVar(&router, "router", "/H/123.12.123.12/E/yt6ntx/H/123.14.131.111/H/", "sap router")
flag.StringVar(&sysnr, "sysnr", "200", "system number")
flag.StringVar(&client, "client", "300", "client")
flag.StringVar(&trace, "trace", "3", "trace")
flag.StringVar(&lang, "lang", "EN", "language")
// csv file with input data
var csvfile string
flag.StringVar(&csvfile, "csv", "", "user data csv file")
// csv file with input data
var fromuser string
flag.StringVar(&fromuser, "fromuser", "", "username of the source user")
// load flag input arguments
flag.Parse()
sapConnPara := saprfc.ConnectionParameter{
User: user,
Passwd: pwd,
Ashost: host,
Saprouter: router,
Sysnr: sysnr,
Client: client,
Trace: trace,
Lang: lang,
}
conn, _ := saprfc.ConnectionFromParams(sapConnPara)
// The source user, to be copied
unameFrom := "UNAMEFROM"
// Defaults if source user validity not maintained (undefined)
validFrom := time.Date(2018, time.January, 19, 0, 0, 0, 0, time.UTC)
validTo := time.Date(2023, time.December, 31, 0, 0, 0, 0, time.UTC)
// Get source user details
r, _ := conn.Call("BAPI_USER_GET_DETAIL", map[string]interface{}{"USERNAME": unameFrom, "CACHE_RESULTS": " "})
// Set new users" defaults
logonData := r["LOGONDATA"].(map[string]interface{})
if logonData["GLTGV"] == nil {
logonData["GLTGV"] = validFrom
}
if logonData["GLTGB"] == nil {
logonData["GLTGB"] = validTo
}
// Create new users
address := r["ADDRESS"].(map[string]interface{})
csvmap, k := csv.LoadCSVfromFile(csvfile)
for _, user := range csvmap {
fmt.Println(user[k["username"]])
address["LASTNAME"] = user[k["lastname"]]
address["FULLNAME"] = user[k["firstname"]] + user[k["lastname"]]
x, _ := conn.Call("BAPI_USER_CREATE1", map[string]interface{}{
"USERNAME": user[k["username"]],
"LOGONDATA": logonData,
"PASSWORD": user[k["password"]],
"DEFAULTS": r["DEFAULTS"],
"ADDRESS": address,
"COMPANY": r["COMPANY"],
"REF_USER": r["REF_USER"],
"PARAMETER": r["PARAMETER"],
"GROUPS": r["GROUPS"],
})
printLog(x["RETURN"])
x, _ = conn.Call("BAPI_USER_PROFILES_ASSIGN", map[string]interface{}{
"USERNAME": user[k["username"]],
"PROFILES": r["PROFILES"],
})
printLog(x["RETURN"])
x, _ = conn.Call("BAPI_USER_ACTGROUPS_ASSIGN", map[string]interface{}{
"USERNAME": user[k["username"]],
"ACTIVITYGROUPS": r["ACTIVITYGROUPS"],
})
printLog(x["RETURN"])
}
// Finished
fmt.Printf("%s copied to %d new users.\nBye!", unameFrom, len(csvmap))
}