· 9 years ago · Nov 21, 2016, 11:48 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 report "Salesforce - Customer Import"
472 width is 200
473 endif
474 print ws-error-message col 1
475 endif
476
477endprocedure
478
479procedure validate-record
480 returning lr-ok type boolean
481 local field
482 lf-tax-group-ok type boolean
483 lf-tax-group-error-message pic X(256)
484 lf-tax-group-error-title pic X(256)
485
486 set lr-ok = true
487 get deb-master
488 on index accountcode
489 key is accountcode
490 on error
491 //Good. We want a unique new accountcode
492 else //Account exists
493 set ws-error-message = "Account code already exists"
494 set lr-ok = false
495 exit
496 endon
497
498// if deb-status = 'I' and credit-limit between '0' and '9'
499 if deb-status != spaces
500// set ws-error-message = 'WARNING - Can only use limits "A" - "Z" with "Insured Debt" '
501 set deb-status = ws-template-deb-status
502 set ws-error-message = 'deb-status should be blank. Copied from template account.'
503 //set lr-ok = false
504 //exit
505 endif
506 if dr-clearflag != 'O'
507 set dr-clearflag = ws-template-dr-clearflag
508 set ws-error-message = "Clear flag should be O. Copied from template account."
509 //set lr-ok = false
510 //exit
511 endif
512 if warehouse = spaces
513 set warehouse = ws-template-warehouse
514 set ws-error-message = "Warehouse can not be spaces. Copied from template account."
515 //set lr-ok = false
516 //exit
517 endif
518 if warehouse != spaces
519 get system-table
520 on index sys-tbl-type sys-tbl-code
521 key is 'WH' warehouse
522 on error
523 set ws-error-message = "Warehouse not found"
524 set lr-ok = false
525 exit
526 endon
527 endif
528 if rep-code = spaces
529 set rep-code = ws-template-rep-code
530 set ws-error-message = "Rep code can not be spaces. Copied from template account."
531 //set lr-ok = false
532 //exit
533 endif
534 if rep-code != spaces
535 get rep-master
536 key is rep-code
537 on error
538 set ws-error-message = 'Rep code not valid'
539 set lr-ok = false
540 exit
541 endon
542 endif
543 if territory = spaces
544 set territory = ws-template-territory
545 set ws-error-message = "Territory can not be spaces. Copied from template account."
546 //set lr-ok = false
547 //exit
548 endif
549 if territory != spaces
550 get system-table
551 on index sys-tbl-type sys-tbl-code
552 key is 'TC' territory
553 on error
554 set ws-error-message = "Territory not valid"
555 set lr-ok = false
556 exit
557 endon
558 endif
559 if na-tax-group = SPACES
560 set na-tax-group = ws-template-na-tax-group
561 set ws-error-message = "Tax group can not be spaces. Copied from template account."
562 //set lr-ok = false
563 //exit
564 endif
565 if na-tax-group != SPACES
566 do clibtax-validate-tax-group
567 parameters
568 na-tax-group
569 returning
570 lf-tax-group-ok
571 lf-tax-group-error-message
572 lf-tax-group-error-title
573 if not lf-tax-group-ok
574 set ws-error-message = lf-tax-group-error-message
575 set lr-ok = false
576 exit
577 endif
578 endif
579 if dr-industry-code = spaces
580 set dr-industry-code = ws-template-dr-industry-code
581 set ws-error-message = "Industry Code can not be spaces. Copied from template account."
582 //set lr-ok = false
583 //exit
584 endif
585 if dr-industry-code != spaces
586 get system-table
587 on index sys-tbl-type sys-tbl-code
588 key is 'CI' dr-industry-code
589 on error
590 set ws-error-message = "Industry code not valid"
591 set lr-ok = false
592 exit
593 endon
594 endif
595 if dr-cust-type = spaces
596 set dr-cust-type = ws-template-dr-cust-type
597 set ws-error-message = "Cust type can not be spaces. Copied from template account."
598 //set lr-ok = false
599 //exit
600 endif
601 if dr-cust-type != spaces
602 get system-table
603 on index sys-tbl-type sys-tbl-code
604 key is 'CT' dr-cust-type
605 on error
606 set ws-error-message = "Cust type not valid"
607 set lr-ok = false
608 exit
609 endon
610 endif
611 if dr-part-shipment-allowed not in {'Y' 'N'}
612 set dr-part-shipment-allowed = ws-template-dr-part-shipment-allowed
613 set ws-error-message = "Part shipment allowed should be 'Y' or 'N'. Copied from template account."
614 //set lr-ok = false
615 //exit
616 endif
617 if dr-order-priority > 9
618 set dr-order-priority = ws-template-dr-order-priority
619 set ws-error-message = "Order Priority should be between 0-9. Copied from template account."
620 //set lr-ok = false
621 //exit
622 endif
623 if dr-price-disc-by-bill-to not in {'Y' 'N' ' '}
624 set dr-price-disc-by-bill-to = ws-template-dr-price-disc-by-bill-to
625 set ws-error-message = "Price disc by bill-to should be 'Y' , 'N' or blank. Copied from template account."
626 //set lr-ok = false
627 //exit
628 endif
629 if dr-ageing-code = spaces
630 set dr-ageing-code = ws-template-dr-ageing-code
631 set ws-error-message = "Ageing code can not be spaces. Copied from template account."
632 //set lr-ok = false
633 //exit
634 endif
635 if dr-ageing-code != spaces
636 get system-table
637 on index sys-tbl-type sys-tbl-code
638 key is 'DK' dr-ageing-code
639 on error
640 set ws-error-message = "Ageing code not valid"
641 set lr-ok = false
642 exit
643 endon
644 endif
645
646 //Left here in case of future need...
647 // ////////////////// Other field validations///////////////////
648 // //z-terms-disc
649 // if terms-disc != SPACES
650 // get system-table
651 // on index sys-tbl-type sys-tbl-code
652 // key is "DD" terms-disc
653 // on error
654 // set ws-error-code = "0020"
655 // set ws-error-message = "Invalid terms code"
656 // //message "Invalid terms code"
657 // set lr-ok = false
658 // //exit(1)
659 // endon
660 // endif
661 // //z-dr-marketing-flag
662 // if dr-marketing-flag != SPACES
663 // get system-table
664 // key is 'CM' dr-marketing-flag
665 // on error
666 // set ws-error-code = "0021"
667 // set ws-error-message = 'Invalid marketing flag'
668 // //message 'Invalid marketing flag'
669 // set lr-ok = false
670 // //exit(1)
671 // endon
672 // endif
673 // //z-dr-company-mask
674 // if dr-company-mask != SPACES
675 // get system-table
676 // key is 'BC' dr-company-mask
677 // on error
678 // set ws-error-code = "0022"
679 // set ws-error-message = 'Invalid company flag'
680 // //message 'Invalid company flag'
681 // set lr-ok = false
682 // //exit(1)
683 // endon
684 // endif
685 // //z-dr-credit-letter-status
686 // if dr-credit-letter-status not in {'Y' 'N' 'X' ' '}
687 // set ws-error-code = "0023"
688 // set ws-error-message = "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
689 // //message "Cust Sign Ind. should be 'Y' , 'N' or 'X'"
690 // set lr-ok = false
691 // //exit(1)
692 // endif
693 // //z-dr-pricing-category
694 // if dr-pricing-category != SPACES
695 // get system-table
696 // key is 'PE' dr-pricing-category
697 // on error
698 // set ws-error-code = "0024"
699 // set ws-error-message = 'Invalid pricing category '
700 // //message 'Invalid pricing category '
701 // set lr-ok = false
702 // //exit(1)
703 // endon
704 // endif
705 // //z-dr-curr-code
706 // if dr-curr-code != SPACES
707 // // get system-iso4217-currency-codes
708 // // on index si4217cc-currency-code
709 // // key is dr-curr-code
710 // get system-table
711 // key is 'CU' dr-curr-code
712 // on error
713 // set ws-error-code = "0025"
714 // set ws-error-message = 'Invalid currency code'
715 // //message 'Invalid currency code'
716 // set lr-ok = false
717 // //exit(1)
718 // endon
719 // endif
720 // //z-dr-delivery-route-code
721 // if dr-delivery-route-code != SPACES
722 // get system-carrier
723 // key is dr-delivery-route-code
724 // on error
725 // set ws-error-code = "0026"
726 // set ws-error-message = 'Invalid carrier code '
727 // //message 'Invalid carrier code '
728 // set lr-ok = false
729 // //exit(1)
730 // endon
731 // endif
732 // //z-dr-delivery-sequence-no
733 // if dr-delivery-sequence-no != 0
734 // if dr-delivery-route-code = SPACES
735 // set ws-error-code = "0027"
736 // set ws-error-message = 'Carrier code is blank, can not set route sequence no'
737 // //message 'Carrier code is blank, can not set route sequence no'
738 // set lr-ok = false
739 // //exit(1)
740 // else
741 // get system-carrier
742 // key is dr-delivery-route-code
743 // on error
744 // else
745 // if carrier-charge-method in {'R' 'X' 'S'}
746 // get system-carrier-routes
747 // on index car-route-code carrier-code
748 // key is str(z-dr-delivery-sequence-no) dr-delivery-route-code
749 // on error
750 // set ws-error-code = "0028"
751 // set ws-error-message = 'Invalid route sequence code for this carrier'
752 // //message 'Invalid route sequence code for this carrier'
753 // set lr-ok = false
754 // //exit(1)
755 // endon
756 // endif
757 // endon
758 // endif
759 // endif
760 // //z-dr-credit-id-no
761 // if dr-credit-id-no != SPACES
762 // get system-table
763 // key is 'DE' dr-credit-id-no
764 // on error
765 // set ws-error-code = "0029"
766 // set ws-error-message = 'Invalid customer extra code'
767 // //message 'Invalid customer extra code '
768 // set lr-ok = false
769 // //exit(1)
770 // endon
771 // endif
772 // //z-dr-mail-control-code
773 // 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'}
774 // set ws-error-code = "0030"
775 // set ws-error-message = "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
776 // //message "Mailing control should be ' ' ,'N', 'I', 'J', 'S' ,'D' ,'L', '1' to '9', 'C', 'F', 'R' or 'B'"
777 // set lr-ok = false
778 // //exit(1)
779 // endif
780 // //z-dr-industry-sub-group
781 // if dr-industry-sub-group != SPACES
782 // get system-table
783 // key is 'CG' dr-industry-sub-group
784 // on error
785 // set ws-error-code = "0031"
786 // set ws-error-message = 'Invalid industry sub group '
787 // //message 'Invalid industry sub group '
788 // set lr-ok = false
789 // //exit(1)
790 // endon
791 // endif
792endprocedure