· 9 years ago · Nov 21, 2016, 11:52 AM
1// Modification History
2// Date Who SDR What
3// 25oct16 nb Initial Version
4
5
6//TODO
7//Are all incoming records INSERT functions in Pronto?
8
9//DONE
10//have a copy of exports in processed
11//Go through all files that are *.csv and NOT ack*.csv
12//GUID for the first line and true to send something back
13//1 record is exported, not 3
14//If new record from biztalk creates an insert, DO NOT EXPORT
15//Change to export and import
16
17
18//Setup
19//1. Create dictionary triggers that track the deb-master, name-and-address-master, and system-table tables. They should call the salesforce-change procedure below
20//2. Setup module function codes for exporting the data
21//3. Setup the SF_EXPORTDIR environment variable
22//4. Create the template account. Dont forget to set deb-status = "N" and accountcode to be "Z_SF_TEMP"
23//5. Create the z-salesforce-change-log table in the dictionary according to commented out schema code below
24//6. Create the ZSF system table entry in the YY table for a counter for the export files
25//7. Create the salesforce-data table in the dictionary according to the commented out schema code below
26
27//object z-salesforce-change-log
28// type is memory
29// record is
30// scl-type pic X //'D'eb-master, 'N'ame-and-address-master, 'S'ystem-table
31// scl-date type date
32// scl-time type time
33// scl-processed type boolean
34// scl-key-1 like accountcode
35// scl-key-2 like sys-tbl-code
36// scl-change-type pic X //'I'nsert, 'U'pdate, 'D'elete
37// endrecord
38// key is scl-type scl-date scl-time unique
39
40// object z-salesforce-data
41// type is memory
42// record is
43// sd-accountcode pic X(10)
44// sd-salesforce-account-id pic X(20)
45// sd-salesforce-user-id pic X(20)
46// endrecord
47// key is sd-accountcode unique
48
49link 'clib/clibtax'
50
51#include "../include/bmsdef.spl"
52#include "../include/i8trigtags.spl"
53
54object tmp-customer-object
55 type is csv
56 separator is "|"
57 record is
58 sd-salesforce-account-id //AccountID
59 shortname //AccountName
60 accountcode //ProntoID
61 sd-salesforce-user-id //AccountOwner
62 tco-account-source pic X //Not stored in Pronto
63 na-street //BillingStreet
64 na-country //BillingCity
65 na-address-6 //BillingState
66 postcode //BillingPostalCode
67 na-address-7 //BillingCountry
68 na-fax-no //Fax
69 dr-marketing-flag //Parent
70 na-phone //Phone
71 tco-cust-type like sys-description //dr-cust-type //CustomerType
72 tco-terms-disc like sys-description //terms-disc //PaymentType
73 tco-first-name pic X //Not stored in Pronto
74 tco-last-name pic X //Not stored in Pronto
75 territory //TerritoryCode
76 tco-territory-description like sys-description //TerritoryDescription
77 tco-region-code like sys-tbl-code //RegionCode
78 tco-region-description like sys-description //RegionDescription
79 endrecord
80
81object tmp-acknowledge
82 type is csv
83 record is
84 ta-data pic X(256)
85 endrecord
86
87
88field
89 ws-template-deb-status like deb-status
90 ws-template-dr-clearflag like dr-clearflag
91 ws-template-price-code like price-code
92 ws-template-warehouse like warehouse
93 ws-template-rep-code like rep-code
94 ws-template-territory like territory
95 ws-template-na-tax-group like na-tax-group
96 ws-template-dr-industry-code like dr-industry-code
97 ws-template-dr-cust-type like dr-cust-type
98 ws-template-dr-part-shipment-allowed like dr-part-shipment-allowed
99 ws-template-dr-order-priority like dr-order-priority
100 ws-template-dr-price-disc-by-bill-to like dr-price-disc-by-bill-to
101 ws-template-dr-ageing-code like dr-ageing-code
102 ws-report-started type boolean
103 ws-error-message pic X(256)
104
105procedure library-init
106 get system-control
107 first
108endprocedure
109
110
111procedure main export
112
113 get system-control
114 first
115
116 get deb-master
117 on index accountcode
118 key is "S_SF_TEMP"
119 on error
120 message "The S_SF_TEMP customer template account does not exist. Please create it."
121 else
122 set ws-template-deb-status = deb-status
123 set ws-template-dr-clearflag = dr-clearflag
124 set ws-template-price-code = price-code
125 set ws-template-warehouse = warehouse
126 set ws-template-rep-code = rep-code
127 set ws-template-territory = territory
128 get name-and-address-master
129 on index accountcode na-type
130 key is "S_SF_TEMP" "C"
131 on error
132 set ws-template-na-tax-group = spaces
133 else
134 set ws-template-na-tax-group = na-tax-group
135 endon
136 set ws-template-dr-industry-code = dr-industry-code
137 set ws-template-dr-cust-type = dr-cust-type
138 set ws-template-dr-part-shipment-allowed = dr-part-shipment-allowed
139 set ws-template-dr-order-priority = dr-order-priority
140 set ws-template-dr-price-disc-by-bill-to = dr-price-disc-by-bill-to
141 set ws-template-dr-ageing-code = dr-ageing-code
142 endon
143
144 command 'sh'
145 parameter "-c" concat("mkdir $SF_EXPORTDIR > /dev/null 2>&1")
146 command 'sh'
147 parameter "-c" concat("mkdir $SF_EXPORTDIR/export > /dev/null 2>&1")
148 command 'sh'
149 parameter "-c" concat("mkdir $SF_EXPORTDIR/export/out > /dev/null 2>&1")
150 command 'sh'
151 parameter "-c" concat("mkdir $SF_EXPORTDIR/export/out/processed > /dev/null 2>&1")
152 command 'sh'
153 parameter "-c" concat("mkdir $SF_EXPORTDIR/import > /dev/null 2>&1")
154 command 'sh'
155 parameter "-c" concat("mkdir $SF_EXPORTDIR/import/in > /dev/null 2>&1")
156 command 'sh'
157 parameter "-c" concat("mkdir $SF_EXPORTDIR/import/out > /dev/null 2>&1")
158 command 'sh'
159 parameter "-c" concat("mkdir $SF_EXPORTDIR/import/in/processed > /dev/null 2>&1")
160
161
162 if get-param(1) = 'export' //Export Customer
163 do export-customer
164 elseif get-param(1) = "import" //Import Customer
165 do import-customer
166 endif
167
168endprocedure
169
170
171procedure get-counter
172 returning lr-counter like sys-money-value
173
174 get system-table
175 on index sys-tbl-type sys-tbl-code
176 key is "YY" "ZSF"
177 on error
178 message "Please initialize the YY/ZSF system table entry with 0"
179 set lr-counter = 0
180 else
181 serial system-table sys-money-value
182 on index sys-tbl-type sys-tbl-code
183 key is "YY" "ZSF"
184 set lr-counter = sys-money-value
185 endon
186
187endprocedure
188
189procedure import-customer export
190 local field
191 lf-ic-filename pic X(256)
192 lf-ack-filename like lf-ic-filename
193 lf-ok type boolean
194 lf-first-record type boolean
195 lf-session-id pic X(256)
196 lf-counter like sys-money-value
197 lf-dir pic X(300)
198 lf-search-pattern pic X(5)
199 lf-file-name pic X(300)
200 lf-dir-ok type boolean
201
202 set lf-dir = concat(get-env("SF_EXPORTDIR"),"/import/in/")
203 set lf-search-pattern = '*.csv' // Find Report files whose names contain
204
205 if start-dir-search(lf-dir, lf-search-pattern)
206 set lf-dir-ok = TRUE
207 else
208 set lf-dir-ok = FALSE
209 endif
210 while lf-dir-ok
211 set lf-file-name = next-dir-entry()
212 if lf-file-name = SPACES // Search exhausted - No more files
213 set lf-dir-ok = false
214 elseif pattern(lf-file-name,"ack") = 1 //Dont pick up "ack"nowledge files
215 else
216 set lf-ic-filename = concat(get-env("SF_EXPORTDIR"),"/import/in/",lf-file-name)
217
218 open tmp-customer-object
219 file is lf-ic-filename
220
221 set lf-first-record = true
222
223 extract tmp-customer-object all
224 detail
225 //The first record contains only the session id, which is in the first column
226 if lf-first-record = true
227 set lf-session-id = sd-salesforce-account-id
228 set lf-first-record = false
229 continue
230 endif
231 do validate-lines
232 returning lf-ok
233 if lf-ok
234 open deb-master no-triggers
235 //The tables we are using already have the correct fields defined
236 set terms-disc = tco-terms-disc
237 set dr-cust-type = tco-cust-type
238 insert deb-master
239 on error
240 endon
241
242 open z-salesforce-data no-triggers
243 set sd-accountcode = accountcode
244 insert z-salesforce-data
245 on error
246 endon
247
248 open name-and-address-master no-triggers
249 insert name-and-address-master
250 on error
251 endon
252 endif
253 endextract
254
255 do get-counter
256 returning lf-counter
257 set lf-ack-filename = concat(get-env("SF_EXPORTDIR"),"/import/in/ack-",str(lf-counter),".csv.wip")
258
259 open tmp-acknowledge create
260 file is lf-ack-filename
261
262 set ta-data = lf-session-id
263 insert tmp-acknowledge
264 on error
265 endon
266 set ta-data = "true"
267 insert tmp-acknowledge
268 on error
269 endon
270
271 command 'sh'
272 parameter "-c" concat("cd $SF_EXPORTDIR/import/in; mv ack-",str(lf-counter),".csv.wip ack-",str(lf-counter),".csv")
273
274 endif
275 end-while
276
277 if ws-report-started = true
278 report finished
279 endif
280endprocedure
281
282procedure salesforce-change-dm export
283 parameters are
284 lp-old.* like deb-master.*
285 lp-new.* like deb-master.*
286 lp-trigger-type pic 9(4)
287 local field
288 lf-change-type pic X
289
290 if pattern(lp-new.accountcode,"SF_") = 1
291 if lp-trigger-type = TRIGGER_AFTER_INSERT
292 set lf-change-type = "I"
293 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
294 set lf-change-type = "U"
295 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
296 set lf-change-type = "D"
297 endif
298 do salesforce-change
299 parameters are "D" //deb-master
300 lp-new.accountcode
301 spaces
302 lf-change-type
303 endif
304endprocedure
305
306procedure salesforce-change-naam export
307 parameters are
308 lp-old.* like name-and-address-master.*
309 lp-new.* like name-and-address-master.*
310 lp-trigger-type pic 9(4)
311 local field
312 lf-change-type pic X
313
314 if lp-new.na-type != "C"
315 exit
316 endif
317
318 if pattern(lp-new.accountcode,"SF_") = 1 or
319 pattern(lp-old.accountcode,"SF_") = 1
320 if lp-trigger-type = TRIGGER_AFTER_INSERT
321 set lf-change-type = "I"
322 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
323 set lf-change-type = "U"
324 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
325 set lf-change-type = "D"
326 endif
327 do salesforce-change
328 parameters are "N" //name-and-address-master
329 lp-new.accountcode
330 lp-new.na-type
331 lf-change-type
332 endif
333
334endprocedure
335
336procedure salesforce-change-st export
337 parameters are
338 lp-old.* like system-table.*
339 lp-new.* like system-table.*
340 lp-trigger-type pic 9(4)
341 local field
342 lf-change-type pic X
343
344 exit
345
346 if lp-new.sys-tbl-type in { 'TC' 'CT' 'DD' }
347 else
348 exit
349 endif
350
351 if lp-trigger-type = TRIGGER_AFTER_INSERT
352 set lf-change-type = "I"
353 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
354 set lf-change-type = "U"
355 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
356 set lf-change-type = "D"
357 endif
358 do salesforce-change
359 parameters are "S" //system-table
360 lp-new.sys-tbl-type
361 lp-new.sys-tbl-code
362 lf-change-type
363
364endprocedure
365
366procedure salesforce-change export
367 parameters are lp-type like scl-type
368 lp-key-1 like scl-key-1
369 lp-key-2 like scl-key-2
370 lp-change-type like scl-change-type
371
372 set scl-type = lp-type
373 set scl-date = today()
374 set scl-time = tod()
375 set scl-processed = false
376 set scl-key-1 = lp-key-1
377 set scl-key-2 = lp-key-2
378 set scl-change-type = lp-change-type
379 insert z-salesforce-change-log
380 on error
381 endon
382
383endprocedure
384
385
386procedure export-customer
387 local field
388 lf-filename pic X(256)
389 lf-counter like sys-money-value
390
391 do get-counter
392 returning lf-counter
393 set lf-filename = concat(get-env("SF_EXPORTDIR"),"/export/out/pronto-sf-export-",str(lf-counter),".csv.wip")
394
395 open tmp-customer-object create permanent
396 file is lf-filename
397
398 extract z-salesforce-change-log all
399 on index scl-type scl-date scl-time
400 where scl-processed = false
401 detail
402 if scl-type in { "D" "N" }
403 get deb-master
404 on index accountcode
405 key is scl-key-1
406 on error
407 else
408 endon
409 get name-and-address-master
410 on index accountcode na-type
411 key is accountcode "C"
412 on error
413 else
414 endon
415 get z-salesforce-data
416 on index sd-accountcode
417 key is accountcode
418 on error
419 else
420 endon
421 elseif scl-type = "S"
422 endif
423 //We also need to find the territory description
424 get system-table
425 on index sys-tbl-type sys-tbl-code
426 key is "TC" territory
427 on error
428 else
429 set tco-territory-description = sys-description
430 endon
431 get system-table
432 on index sys-tbl-type sys-tbl-code
433 key is "CT" tco-cust-type
434 on error
435 else
436 set tco-cust-type = sys-description
437 endon
438 get system-table
439 on index sys-tbl-type sys-tbl-code
440 key is "DD" tco-terms-disc
441 on error
442 else
443 set tco-terms-disc = sys-description
444 endon
445 insert tmp-customer-object
446 on error
447 else
448 set scl-processed = true
449 update z-salesforce-change-log
450 on error
451 endon
452 endon
453 endextract
454
455 command 'sh'
456 parameter "-c" concat("cd $SF_EXPORTDIR/export/out; mv pronto-sf-export-",str(lf-counter),".csv.wip pronto-sf-export-",str(lf-counter),".csv")
457 command 'sh'
458 parameter "-c" concat("cd $SF_EXPORTDIR/export/out; cp pronto-sf-export-",str(lf-counter),".csv processed/pronto-sf-export-",str(lf-counter),".csv")
459
460endprocedure
461
462procedure validate-lines
463 returning lr-ok type boolean
464
465 do validate-record
466 returning lr-ok
467
468 if lr-ok = false
469 //ws-error-message has the current error
470 if ws-report-started = false
471 set ws-report-started = true
472 report "Salesforce - Customer Import"
473 width is 200
474 endif
475 print ws-error-message col 1
476 endif
477
478endprocedure
479
480procedure validate-record
481 returning lr-ok type boolean
482 local field
483 lf-tax-group-ok type boolean
484 lf-tax-group-error-message pic X(256)
485 lf-tax-group-error-title pic X(256)
486
487 set lr-ok = true
488 get deb-master
489 on index accountcode
490 key is accountcode
491 on error
492 //Good. We want a unique new accountcode
493 else //Account exists
494 set ws-error-message = "Account code already exists"
495 set lr-ok = false
496 exit
497 endon
498
499// if deb-status = 'I' and credit-limit between '0' and '9'
500 if deb-status != spaces
501// set ws-error-message = 'WARNING - Can only use limits "A" - "Z" with "Insured Debt" '
502 set deb-status = ws-template-deb-status
503 set ws-error-message = 'deb-status should be blank. Copied from template account.'
504 //set lr-ok = false
505 //exit
506 endif
507 if dr-clearflag != 'O'
508 set dr-clearflag = ws-template-dr-clearflag
509 set ws-error-message = "Clear flag should be O. Copied from template account."
510 //set lr-ok = false
511 //exit
512 endif
513 if warehouse = spaces
514 set warehouse = ws-template-warehouse
515 set ws-error-message = "Warehouse can not be spaces. Copied from template account."
516 //set lr-ok = false
517 //exit
518 endif
519 if warehouse != spaces
520 get system-table
521 on index sys-tbl-type sys-tbl-code
522 key is 'WH' warehouse
523 on error
524 set ws-error-message = "Warehouse not found"
525 set lr-ok = false
526 exit
527 endon
528 endif
529 if rep-code = spaces
530 set rep-code = ws-template-rep-code
531 set ws-error-message = "Rep code can not be spaces. Copied from template account."
532 //set lr-ok = false
533 //exit
534 endif
535 if rep-code != spaces
536 get rep-master
537 key is rep-code
538 on error
539 set ws-error-message = 'Rep code not valid'
540 set lr-ok = false
541 exit
542 endon
543 endif
544 if territory = spaces
545 set territory = ws-template-territory
546 set ws-error-message = "Territory can not be spaces. Copied from template account."
547 //set lr-ok = false
548 //exit
549 endif
550 if territory != spaces
551 get system-table
552 on index sys-tbl-type sys-tbl-code
553 key is 'TC' territory
554 on error
555 set ws-error-message = "Territory not valid"
556 set lr-ok = false
557 exit
558 endon
559 endif
560 if na-tax-group = SPACES
561 set na-tax-group = ws-template-na-tax-group
562 set ws-error-message = "Tax group can not be spaces. Copied from template account."
563 //set lr-ok = false
564 //exit
565 endif
566 if na-tax-group != SPACES
567 do clibtax-validate-tax-group
568 parameters
569 na-tax-group
570 returning
571 lf-tax-group-ok
572 lf-tax-group-error-message
573 lf-tax-group-error-title
574 if not lf-tax-group-ok
575 set ws-error-message = lf-tax-group-error-message
576 set lr-ok = false
577 exit
578 endif
579 endif
580 if dr-industry-code = spaces
581 set dr-industry-code = ws-template-dr-industry-code
582 set ws-error-message = "Industry Code can not be spaces. Copied from template account."
583 //set lr-ok = false
584 //exit
585 endif
586 if dr-industry-code != spaces
587 get system-table
588 on index sys-tbl-type sys-tbl-code
589 key is 'CI' dr-industry-code
590 on error
591 set ws-error-message = "Industry code not valid"
592 set lr-ok = false
593 exit
594 endon
595 endif
596 if dr-cust-type = spaces
597 set dr-cust-type = ws-template-dr-cust-type
598 set ws-error-message = "Cust type can not be spaces. Copied from template account."
599 //set lr-ok = false
600 //exit
601 endif
602 if dr-cust-type != spaces
603 get system-table
604 on index sys-tbl-type sys-tbl-code
605 key is 'CT' dr-cust-type
606 on error
607 set ws-error-message = "Cust type not valid"
608 set lr-ok = false
609 exit
610 endon
611 endif
612 if dr-part-shipment-allowed not in {'Y' 'N'}
613 set dr-part-shipment-allowed = ws-template-dr-part-shipment-allowed
614 set ws-error-message = "Part shipment allowed should be 'Y' or 'N'. Copied from template account."
615 //set lr-ok = false
616 //exit
617 endif
618 if dr-order-priority > 9
619 set dr-order-priority = ws-template-dr-order-priority
620 set ws-error-message = "Order Priority should be between 0-9. Copied from template account."
621 //set lr-ok = false
622 //exit
623 endif
624 if dr-price-disc-by-bill-to not in {'Y' 'N' ' '}
625 set dr-price-disc-by-bill-to = ws-template-dr-price-disc-by-bill-to
626 set ws-error-message = "Price disc by bill-to should be 'Y' , 'N' or blank. Copied from template account."
627 //set lr-ok = false
628 //exit
629 endif
630 if dr-ageing-code = spaces
631 set dr-ageing-code = ws-template-dr-ageing-code
632 set ws-error-message = "Ageing code can not be spaces. Copied from template account."
633 //set lr-ok = false
634 //exit
635 endif
636 if dr-ageing-code != spaces
637 get system-table
638 on index sys-tbl-type sys-tbl-code
639 key is 'DK' dr-ageing-code
640 on error
641 set ws-error-message = "Ageing code not valid"
642 set lr-ok = false
643 exit
644 endon
645 endif
646
647 //Left here in case of future need...
648 // ////////////////// Other field validations///////////////////
649 // //z-terms-disc
650 // if terms-disc != SPACES
651 // get system-table
652 // on index sys-tbl-type sys-tbl-code
653 // key is "DD" terms-disc
654 // on error
655 // set ws-error-code = "0020"
656 // set ws-error-message = "Invalid terms code"
657 // //message "Invalid terms code"
658 // set lr-ok = false
659 // //exit(1)
660 // endon
661 // endif
662 // //z-dr-marketing-flag
663 // if dr-marketing-flag != SPACES
664 // get system-table
665 // key is 'CM' dr-marketing-flag
666 // on error
667 // set ws-error-code = "0021"
668 // set ws-error-message = 'Invalid marketing flag'
669 // //message 'Invalid marketing flag'
670 // set lr-ok = false
671 // //exit(1)
672 // endon
673 // endif
674 // //z-dr-company-mask
675 // if dr-company-mask != SPACES
676 // get system-table
677 // key is 'BC' dr-company-mask
678 // on error
679 // set ws-error-code = "0022"
680 // set ws-error-message = 'Invalid company flag'
681 // //message 'Invalid company flag'
682 // set lr-ok = false
683 // //exit(1)
684 // endon
685 // endif
686 // //z-dr-credit-letter-status
687 // if dr-credit-letter-status not in {'Y' 'N' 'X' ' '}
688 // set ws-error-code = "0023"
689 // set ws-error-message = "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
690 // //message "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
691 // set lr-ok = false
692 // //exit(1)
693 // endif
694 // //z-dr-pricing-category
695 // if dr-pricing-category != SPACES
696 // get system-table
697 // key is 'PE' dr-pricing-category
698 // on error
699 // set ws-error-code = "0024"
700 // set ws-error-message = 'Invalid pricing category '
701 // //message 'Invalid pricing category '
702 // set lr-ok = false
703 // //exit(1)
704 // endon
705 // endif
706 // //z-dr-curr-code
707 // if dr-curr-code != SPACES
708 // // get system-iso4217-currency-codes
709 // // on index si4217cc-currency-code
710 // // key is dr-curr-code
711 // get system-table
712 // key is 'CU' dr-curr-code
713 // on error
714 // set ws-error-code = "0025"
715 // set ws-error-message = 'Invalid currency code'
716 // //message 'Invalid currency code'
717 // set lr-ok = false
718 // //exit(1)
719 // endon
720 // endif
721 // //z-dr-delivery-route-code
722 // if dr-delivery-route-code != SPACES
723 // get system-carrier
724 // key is dr-delivery-route-code
725 // on error
726 // set ws-error-code = "0026"
727 // set ws-error-message = 'Invalid carrier code '
728 // //message 'Invalid carrier code '
729 // set lr-ok = false
730 // //exit(1)
731 // endon
732 // endif
733 // //z-dr-delivery-sequence-no
734 // if dr-delivery-sequence-no != 0
735 // if dr-delivery-route-code = SPACES
736 // set ws-error-code = "0027"
737 // set ws-error-message = 'Carrier code is blank, can not set route sequence no'
738 // //message 'Carrier code is blank, can not set route sequence no'
739 // set lr-ok = false
740 // //exit(1)
741 // else
742 // get system-carrier
743 // key is dr-delivery-route-code
744 // on error
745 // else
746 // if carrier-charge-method in {'R' 'X' 'S'}
747 // get system-carrier-routes
748 // on index car-route-code carrier-code
749 // key is str(z-dr-delivery-sequence-no) dr-delivery-route-code
750 // on error
751 // set ws-error-code = "0028"
752 // set ws-error-message = 'Invalid route sequence code for this carrier'
753 // //message 'Invalid route sequence code for this carrier'
754 // set lr-ok = false
755 // //exit(1)
756 // endon
757 // endif
758 // endon
759 // endif
760 // endif
761 // //z-dr-credit-id-no
762 // if dr-credit-id-no != SPACES
763 // get system-table
764 // key is 'DE' dr-credit-id-no
765 // on error
766 // set ws-error-code = "0029"
767 // set ws-error-message = 'Invalid customer extra code'
768 // //message 'Invalid customer extra code '
769 // set lr-ok = false
770 // //exit(1)
771 // endon
772 // endif
773 // //z-dr-mail-control-code
774 // if dr-mail-control-code not in {' ' 'N' 'I' 'J' 'S' 'D' 'L' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'C' 'F' 'R' 'B'}
775 // set ws-error-code = "0030"
776 // set ws-error-message = "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
777 // //message "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
778 // set lr-ok = false
779 // //exit(1)
780 // endif
781 // //z-dr-industry-sub-group
782 // if dr-industry-sub-group != SPACES
783 // get system-table
784 // key is 'CG' dr-industry-sub-group
785 // on error
786 // set ws-error-code = "0031"
787 // set ws-error-message = 'Invalid industry sub group '
788 // //message 'Invalid industry sub group '
789 // set lr-ok = false
790 // //exit(1)
791 // endon
792 // endif
793endprocedure