· 9 years ago · Nov 21, 2016, 11:20 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 elseif pattern(lf-file-name,"ack") = 1 //Dont pick up "ack"nowledge files
214 else
215 set lf-ic-filename = concat(get-env("SF_EXPORTDIR"),"/import/in/",lf-file-name)
216
217 open tmp-customer-object
218 file is lf-ic-filename
219
220 set lf-first-record = true
221
222 extract tmp-customer-object all
223 detail
224 //The first record contains only the session id, which is in the first column
225 if lf-first-record = true
226 set lf-session-id = sd-salesforce-account-id
227 set lf-first-record = false
228 continue
229 endif
230 do validate-lines
231 returning lf-ok
232 if lf-ok
233 open deb-master no-triggers
234 //The tables we are using already have the correct fields defined
235 set terms-disc = tco-terms-disc
236 set dr-cust-type = tco-cust-type
237 insert deb-master
238 on error
239 endon
240
241 open z-salesforce-data no-triggers
242 set sd-accountcode = accountcode
243 insert z-salesforce-data
244 on error
245 endon
246
247 open name-and-address-master no-triggers
248 insert name-and-address-master
249 on error
250 endon
251 endif
252 endextract
253
254 do get-counter
255 returning lf-counter
256 set lf-ack-filename = concat(get-env("SF_EXPORTDIR"),"/import/in/ack-",str(lf-counter),".csv.wip")
257
258 open tmp-acknowledge create
259 file is lf-ack-filename
260
261 set ta-data = lf-session-id
262 insert tmp-acknowledge
263 on error
264 endon
265 set ta-data = "true"
266 insert tmp-acknowledge
267 on error
268 endon
269
270 command 'sh'
271 parameter "-c" concat("cd $SF_EXPORTDIR/import/in; mv ack-",str(lf-counter),".csv.wip ack-",str(lf-counter),".csv")
272
273 endif
274 end-while
275
276 if ws-report-started = true
277 report finished
278 endif
279endprocedure
280
281procedure salesforce-change-dm export
282 parameters are
283 lp-old.* like deb-master.*
284 lp-new.* like deb-master.*
285 lp-trigger-type pic 9(4)
286 local field
287 lf-change-type pic X
288
289 if pattern(lp-new.accountcode,"SF_") = 1
290 if lp-trigger-type = TRIGGER_AFTER_INSERT
291 set lf-change-type = "I"
292 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
293 set lf-change-type = "U"
294 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
295 set lf-change-type = "D"
296 endif
297 do salesforce-change
298 parameters are "D" //deb-master
299 lp-new.accountcode
300 spaces
301 lf-change-type
302 endif
303endprocedure
304
305procedure salesforce-change-naam export
306 parameters are
307 lp-old.* like name-and-address-master.*
308 lp-new.* like name-and-address-master.*
309 lp-trigger-type pic 9(4)
310 local field
311 lf-change-type pic X
312
313 if pattern(lp-new.accountcode,"SF_") = 1 or
314 pattern(lp-old.accountcode,"SF_") = 1
315 if lp-trigger-type = TRIGGER_AFTER_INSERT
316 set lf-change-type = "I"
317 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
318 set lf-change-type = "U"
319 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
320 set lf-change-type = "D"
321 endif
322 do salesforce-change
323 parameters are "N" //name-and-address-master
324 lp-new.accountcode
325 lp-new.na-type
326 lf-change-type
327 endif
328
329endprocedure
330
331procedure salesforce-change-st export
332 parameters are
333 lp-old.* like system-table.*
334 lp-new.* like system-table.*
335 lp-trigger-type pic 9(4)
336 local field
337 lf-change-type pic X
338
339 if lp-trigger-type = TRIGGER_AFTER_INSERT
340 set lf-change-type = "I"
341 elseif lp-trigger-type = TRIGGER_AFTER_UPDATE
342 set lf-change-type = "U"
343 elseif lp-trigger-type = TRIGGER_AFTER_DELETE
344 set lf-change-type = "D"
345 endif
346 do salesforce-change
347 parameters are "S" //system-table
348 lp-new.sys-tbl-code
349 lp-new.sys-tbl-type
350 lf-change-type
351
352endprocedure
353
354procedure salesforce-change export
355 parameters are lp-type like scl-type
356 lp-key-1 like scl-key-1
357 lp-key-2 like scl-key-2
358 lp-change-type like scl-change-type
359
360 set scl-type = lp-type
361 set scl-date = today()
362 set scl-time = tod()
363 set scl-processed = false
364 set scl-key-1 = lp-key-1
365 set scl-key-2 = lp-key-2
366 set scl-change-type = lp-change-type
367 insert z-salesforce-change-log
368 on error
369 endon
370
371endprocedure
372
373
374procedure export-customer
375 local field
376 lf-filename pic X(256)
377 lf-counter like sys-money-value
378
379 do get-counter
380 returning lf-counter
381 set lf-filename = concat(get-env("SF_EXPORTDIR"),"/export/out/pronto-sf-export-",str(lf-counter),".csv.wip")
382
383 open tmp-customer-object create permanent
384 file is lf-filename
385
386 extract z-salesforce-change-log all
387 on index scl-type scl-date scl-time
388 where scl-processed = false
389 detail
390 get deb-master
391 on index accountcode
392 key is scl-key-1
393 on error
394 else
395 endon
396 get name-and-address-master
397 on index accountcode na-type
398 key is scl-key-1 "C"
399 on error
400 else
401 endon
402 get z-salesforce-data
403 on index sd-accountcode
404 key is scl-key-1
405 on error
406 else
407 endon
408 //We also need to find the territory description
409 get system-table
410 on index sys-tbl-type sys-tbl-code
411 key is "TC" territory
412 on error
413 else
414 set tco-territory-description = sys-description
415 endon
416 get system-table
417 on index sys-tbl-type sys-tbl-code
418 key is "CT" tco-cust-type
419 on error
420 else
421 set tco-cust-type = sys-description
422 endon
423 get system-table
424 on index sys-tbl-type sys-tbl-code
425 key is "DD" tco-terms-disc
426 on error
427 else
428 set tco-terms-disc = sys-description
429 endon
430 insert tmp-customer-object
431 on error
432 else
433 set scl-processed = true
434 update z-salesforce-change-log
435 on error
436 endon
437 endon
438 endextract
439
440 command 'sh'
441 parameter "-c" concat("cd $SF_EXPORTDIR/export/out; mv pronto-sf-export-",str(lf-counter),".csv.wip pronto-sf-export-",str(lf-counter),".csv")
442 command 'sh'
443 parameter "-c" concat("cd $SF_EXPORTDIR/export/out; cp pronto-sf-export-",str(lf-counter),".csv processed/pronto-sf-export-",str(lf-counter),".csv")
444
445endprocedure
446
447procedure validate-lines
448 returning lr-ok type boolean
449
450 do validate-record
451 returning lr-ok
452
453 if lr-ok = false
454 //ws-error-message has the current error
455 if ws-report-started = false
456 report "Salesforce - Customer Import"
457 width is 200
458 endif
459 print ws-error-message col 1
460 endif
461
462endprocedure
463
464procedure validate-record
465 returning lr-ok type boolean
466 local field
467 lf-tax-group-ok type boolean
468 lf-tax-group-error-message pic X(256)
469 lf-tax-group-error-title pic X(256)
470
471 set lr-ok = true
472 get deb-master
473 on index accountcode
474 key is accountcode
475 on error
476 //Good. We want a unique new accountcode
477 else //Account exists
478 set ws-error-message = "Account code already exists"
479 set lr-ok = false
480 exit
481 endon
482
483// if deb-status = 'I' and credit-limit between '0' and '9'
484 if deb-status != spaces
485// set ws-error-message = 'WARNING - Can only use limits "A" - "Z" with "Insured Debt" '
486 set deb-status = ws-template-deb-status
487 set ws-error-message = 'deb-status should be blank. Copied from template account.'
488 //set lr-ok = false
489 //exit
490 endif
491 if dr-clearflag != 'O'
492 set dr-clearflag = ws-template-dr-clearflag
493 set ws-error-message = "Clear flag should be O. Copied from template account."
494 //set lr-ok = false
495 //exit
496 endif
497 if warehouse = spaces
498 set warehouse = ws-template-warehouse
499 set ws-error-message = "Warehouse can not be spaces. Copied from template account."
500 //set lr-ok = false
501 //exit
502 endif
503 if warehouse != spaces
504 get system-table
505 on index sys-tbl-type sys-tbl-code
506 key is 'WH' warehouse
507 on error
508 set ws-error-message = "Warehouse not found"
509 set lr-ok = false
510 exit
511 endon
512 endif
513 if rep-code = spaces
514 set rep-code = ws-template-rep-code
515 set ws-error-message = "Rep code can not be spaces. Copied from template account."
516 //set lr-ok = false
517 //exit
518 endif
519 if rep-code != spaces
520 get rep-master
521 key is rep-code
522 on error
523 set ws-error-message = 'Rep code not valid'
524 set lr-ok = false
525 exit
526 endon
527 endif
528 if territory = spaces
529 set territory = ws-template-territory
530 set ws-error-message = "Territory can not be spaces. Copied from template account."
531 //set lr-ok = false
532 //exit
533 endif
534 if territory != spaces
535 get system-table
536 on index sys-tbl-type sys-tbl-code
537 key is 'TC' territory
538 on error
539 set ws-error-message = "Territory not valid"
540 set lr-ok = false
541 exit
542 endon
543 endif
544 if na-tax-group = SPACES
545 set na-tax-group = ws-template-na-tax-group
546 set ws-error-message = "Tax group can not be spaces. Copied from template account."
547 //set lr-ok = false
548 //exit
549 endif
550 if na-tax-group != SPACES
551 do clibtax-validate-tax-group
552 parameters
553 na-tax-group
554 returning
555 lf-tax-group-ok
556 lf-tax-group-error-message
557 lf-tax-group-error-title
558 if not lf-tax-group-ok
559 set ws-error-message = lf-tax-group-error-message
560 set lr-ok = false
561 exit
562 endif
563 endif
564 if dr-industry-code = spaces
565 set dr-industry-code = ws-template-dr-industry-code
566 set ws-error-message = "Industry Code can not be spaces. Copied from template account."
567 //set lr-ok = false
568 //exit
569 endif
570 if dr-industry-code != spaces
571 get system-table
572 on index sys-tbl-type sys-tbl-code
573 key is 'CI' dr-industry-code
574 on error
575 set ws-error-message = "Industry code not valid"
576 set lr-ok = false
577 exit
578 endon
579 endif
580 if dr-cust-type = spaces
581 set dr-cust-type = ws-template-dr-cust-type
582 set ws-error-message = "Cust type can not be spaces. Copied from template account."
583 //set lr-ok = false
584 //exit
585 endif
586 if dr-cust-type != spaces
587 get system-table
588 on index sys-tbl-type sys-tbl-code
589 key is 'CT' dr-cust-type
590 on error
591 set ws-error-message = "Cust type not valid"
592 set lr-ok = false
593 exit
594 endon
595 endif
596 if dr-part-shipment-allowed not in {'Y' 'N'}
597 set dr-part-shipment-allowed = ws-template-dr-part-shipment-allowed
598 set ws-error-message = "Part shipment allowed should be 'Y' or 'N'. Copied from template account."
599 //set lr-ok = false
600 //exit
601 endif
602 if dr-order-priority > 9
603 set dr-order-priority = ws-template-dr-order-priority
604 set ws-error-message = "Order Priority should be between 0-9. Copied from template account."
605 //set lr-ok = false
606 //exit
607 endif
608 if dr-price-disc-by-bill-to not in {'Y' 'N' ' '}
609 set dr-price-disc-by-bill-to = ws-template-dr-price-disc-by-bill-to
610 set ws-error-message = "Price disc by bill-to should be 'Y' , 'N' or blank. Copied from template account."
611 //set lr-ok = false
612 //exit
613 endif
614 if dr-ageing-code = spaces
615 set dr-ageing-code = ws-template-dr-ageing-code
616 set ws-error-message = "Ageing code can not be spaces. Copied from template account."
617 //set lr-ok = false
618 //exit
619 endif
620 if dr-ageing-code != spaces
621 get system-table
622 on index sys-tbl-type sys-tbl-code
623 key is 'DK' dr-ageing-code
624 on error
625 set ws-error-message = "Ageing code not valid"
626 set lr-ok = false
627 exit
628 endon
629 endif
630
631 //Left here in case of future need...
632 // ////////////////// Other field validations///////////////////
633 // //z-terms-disc
634 // if terms-disc != SPACES
635 // get system-table
636 // on index sys-tbl-type sys-tbl-code
637 // key is "DD" terms-disc
638 // on error
639 // set ws-error-code = "0020"
640 // set ws-error-message = "Invalid terms code"
641 // //message "Invalid terms code"
642 // set lr-ok = false
643 // //exit(1)
644 // endon
645 // endif
646 // //z-dr-marketing-flag
647 // if dr-marketing-flag != SPACES
648 // get system-table
649 // key is 'CM' dr-marketing-flag
650 // on error
651 // set ws-error-code = "0021"
652 // set ws-error-message = 'Invalid marketing flag'
653 // //message 'Invalid marketing flag'
654 // set lr-ok = false
655 // //exit(1)
656 // endon
657 // endif
658 // //z-dr-company-mask
659 // if dr-company-mask != SPACES
660 // get system-table
661 // key is 'BC' dr-company-mask
662 // on error
663 // set ws-error-code = "0022"
664 // set ws-error-message = 'Invalid company flag'
665 // //message 'Invalid company flag'
666 // set lr-ok = false
667 // //exit(1)
668 // endon
669 // endif
670 // //z-dr-credit-letter-status
671 // if dr-credit-letter-status not in {'Y' 'N' 'X' ' '}
672 // set ws-error-code = "0023"
673 // set ws-error-message = "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
674 // //message "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
675 // set lr-ok = false
676 // //exit(1)
677 // endif
678 // //z-dr-pricing-category
679 // if dr-pricing-category != SPACES
680 // get system-table
681 // key is 'PE' dr-pricing-category
682 // on error
683 // set ws-error-code = "0024"
684 // set ws-error-message = 'Invalid pricing category '
685 // //message 'Invalid pricing category '
686 // set lr-ok = false
687 // //exit(1)
688 // endon
689 // endif
690 // //z-dr-curr-code
691 // if dr-curr-code != SPACES
692 // // get system-iso4217-currency-codes
693 // // on index si4217cc-currency-code
694 // // key is dr-curr-code
695 // get system-table
696 // key is 'CU' dr-curr-code
697 // on error
698 // set ws-error-code = "0025"
699 // set ws-error-message = 'Invalid currency code'
700 // //message 'Invalid currency code'
701 // set lr-ok = false
702 // //exit(1)
703 // endon
704 // endif
705 // //z-dr-delivery-route-code
706 // if dr-delivery-route-code != SPACES
707 // get system-carrier
708 // key is dr-delivery-route-code
709 // on error
710 // set ws-error-code = "0026"
711 // set ws-error-message = 'Invalid carrier code '
712 // //message 'Invalid carrier code '
713 // set lr-ok = false
714 // //exit(1)
715 // endon
716 // endif
717 // //z-dr-delivery-sequence-no
718 // if dr-delivery-sequence-no != 0
719 // if dr-delivery-route-code = SPACES
720 // set ws-error-code = "0027"
721 // set ws-error-message = 'Carrier code is blank, can not set route sequence no'
722 // //message 'Carrier code is blank, can not set route sequence no'
723 // set lr-ok = false
724 // //exit(1)
725 // else
726 // get system-carrier
727 // key is dr-delivery-route-code
728 // on error
729 // else
730 // if carrier-charge-method in {'R' 'X' 'S'}
731 // get system-carrier-routes
732 // on index car-route-code carrier-code
733 // key is str(z-dr-delivery-sequence-no) dr-delivery-route-code
734 // on error
735 // set ws-error-code = "0028"
736 // set ws-error-message = 'Invalid route sequence code for this carrier'
737 // //message 'Invalid route sequence code for this carrier'
738 // set lr-ok = false
739 // //exit(1)
740 // endon
741 // endif
742 // endon
743 // endif
744 // endif
745 // //z-dr-credit-id-no
746 // if dr-credit-id-no != SPACES
747 // get system-table
748 // key is 'DE' dr-credit-id-no
749 // on error
750 // set ws-error-code = "0029"
751 // set ws-error-message = 'Invalid customer extra code'
752 // //message 'Invalid customer extra code '
753 // set lr-ok = false
754 // //exit(1)
755 // endon
756 // endif
757 // //z-dr-mail-control-code
758 // 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'}
759 // set ws-error-code = "0030"
760 // set ws-error-message = "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
761 // //message "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
762 // set lr-ok = false
763 // //exit(1)
764 // endif
765 // //z-dr-industry-sub-group
766 // if dr-industry-sub-group != SPACES
767 // get system-table
768 // key is 'CG' dr-industry-sub-group
769 // on error
770 // set ws-error-code = "0031"
771 // set ws-error-message = 'Invalid industry sub group '
772 // //message 'Invalid industry sub group '
773 // set lr-ok = false
774 // //exit(1)
775 // endon
776 // endif
777endprocedure