Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision dfb76ebf

Von Moritz Bunkus vor etwa 13 Jahren hinzugefügt

Beispielscript für CSV-Import über die Kommandozeile

Unterschiede anzeigen:

scripts/csv-import-from-shell.sh
1
#!/bin/bash
2

  
3
# Ein Script, das demonstriert, wie sich CSV-Dateien über die
4
# Kommandozeile importieren lassen. Dabei gibt es zwei Orte, an denen
5
# das Script angepasst werden muss. Diese sind entsprechend mit
6
# Kommentaren versehen.
7
#
8
# Der Aufruf erfolgt mit einem Parameter: dem Dateinamen der
9
# CSV-Datei. Als Ausgabe erscheint bei Erfolg gar nichts (und
10
# Exit-Code 0). Im Fehlerfall werden eine Meldung und der Name einer
11
# temporären Datei ausgegeben, in der der HTML-Code der Fehlermeldung
12
# sichtbar ist. Exit-Code ist dann 2.
13

  
14
# ---- Logindaten und URL anpassen: ----
15
login=MyLxOfficeUserName
16
password=MySecretPassword
17
url='https://localhost/lx-office-erp/controller.pl'
18

  
19
function fail {
20
  echo "$@"
21
  exit 1
22
}
23

  
24
test -z $1 && fail "Kein CSV-Dateiname angegeben."
25
test -f $1 || fail "Datei '$1' nicht gefunden."
26
file="$1"
27

  
28
function do_curl {
29
  local action="$1"
30

  
31
  # ---- Hier ebenfalls die Parameter anpassen, falls notwendig. ----
32
  # Die anpassbaren Parameter und ihre Werte sind:
33

  
34
  # Allgemeine Parameter für alle importierbaren Sachen:
35

  
36
  #   "profile.type": zu importierende Objekte: "parts": Artikel;
37
  #   "customers_vendors": Kunden/Lieferanten; "contacts":
38
  #   Ansprechpersonen; "addresses": Lieferanschriften
39

  
40
  #   "escape_char": "quote", "singlequote" oder das Escape-Zeichen
41
  #   selber
42

  
43
  #   "quote_char": die gleichen Optionen wie "escape_char"
44

  
45
  #   "sep_char": "comma", "semicolon", "space", "tab" oder das
46
  #   Trennzeichen selber
47

  
48
  #   "settings.numberformat": "1.000,00", "1000,00", "1,000.00",
49
  #   "1000.00"
50

  
51
  #   "settings.charset": Name eines Zeichensatzes. Meist "CP850" oder
52
  #   "UTF-8".
53

  
54
  #   "settings.duplicates": Doublettencheck; "no_check", "check_csv",
55
  #   "check_db"
56

  
57
  # Parameter für Artikel:
58

  
59
  #   "settings.default_buchungsgruppe": Standard-Buchungsgruppe;
60
  #   Datenbank-ID einer Buchungsgruppe
61

  
62
  #   "settings.apply_buchungsgruppe": Buchungsgruppe wo anwenden:
63
  #   "never", "all", "missing"
64

  
65
  #   "settings.parts_type": Artikeltyp: "part", "service", "mixed"
66

  
67
  #   "settings.article_number_policy": Artikel mit existierender
68
  #   Artikelnummer: "update_prices", "insert_new"
69

  
70
  #   "settings.sellprice_places": Anzahl Nachkommastellen
71
  #   Verkaufspreise
72

  
73
  #   "settings.sellprice_adjustment": Wert für Verkaufspreisanpassung
74

  
75
  #   "settings.sellprice_adjustment_type": Art der
76
  #   Verkaufspreisanpassung; "percent", "absolute"
77

  
78
  #   "settings.shoparticle_if_missing": Shopartikel setzen falls
79
  #   fehlt: "1", "0"
80

  
81
  # Parameter für Kunden/Lieferanten:
82

  
83
  #   "settings.table": Zieltabelle: "customer", "vendor"
84

  
85
  # Parameter für Ansprechpartner:
86
  #   Nur die Standard-Parameter von oben
87

  
88
  # Parameter für Lieferanschriten:
89
  #   Nur die Standard-Parameter von oben
90

  
91
  curl \
92
    --silent --insecure \
93
    -F 'action=CsvImport/dispatch' \
94
    -F "${action}=1" \
95
    -F 'escape_char=quote' \
96
    -F 'profile.type=parts' \
97
    -F 'quote_char=quote' \
98
    -F 'sep_char=semicolon' \
99
    -F 'settings.apply_buchungsgruppe=all' \
100
    -F 'settings.article_number_policy=update_prices' \
101
    -F 'settings.charset=CP850' \
102
    -F 'settings.default_buchungsgruppe=395' \
103
    -F 'settings.duplicates=no_check' \
104
    -F 'settings.numberformat=1.000,00' \
105
    -F 'settings.parts_type=part' \
106
    -F 'settings.sellprice_adjustment=0' \
107
    -F 'settings.sellprice_adjustment_type=percent' \
108
    -F 'settings.sellprice_places=2' \
109
    -F 'settings.shoparticle_if_missing=0' \
110
    -F "login=${login}" \
111
    -F "password=${password}" \
112
    -F "file=@${file}" \
113
    ${url}
114
}
115

  
116
tmpf=$(mktemp)
117
do_curl 'action_test'  > $tmpf
118

  
119
if grep -q -i 'es wurden.*objekte gefunden, von denen.*' $tmpf; then
120
  rm $tmpf
121
  do_curl 'action_import' > $tmpf
122
  if grep -i 'von.*objekten wurden importiert' $tmpf ; then
123
    rm $tmpf
124
  else
125
    echo "Import schlug fehl. Ausgabe befindet sich in ${tmpf}"
126
    exit 2
127
  fi
128
else
129
  echo "Test-Import nicht OK. Ausgabe befindet sich in ${tmpf}"
130
  exit 2
131
fi

Auch abrufbar als: Unified diff