Advertisement
vmoench

wf_timers

Mar 14th, 2011
2,399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Funktion wf_timer()
  3.  * Return: Long
  4.  * Arguments: (None)
  5.  */
  6.  
  7. // Wird folgendermaßen aus dem timer() Event aufgerufen:
  8.  
  9. // DK: Test ob Cron-Tabelle Einträge enthält
  10. //SELECT FIRST("it_cron"."bez")
  11. //INTO :ls_taskplaner
  12. //FROM "it_cron"
  13. //USING sqlca;
  14.  
  15. // DK: Wenn nicht wird der neue Taskplaner genutzt
  16. //IF sqlca.sqlcode = 100 THEN
  17.     //wf_timer()
  18.     //RETURN 0
  19. //END IF
  20.  
  21.  
  22. /***
  23.  * Prozesse Zeit gesteuert ausführen
  24.  */
  25.  
  26. i_counter++
  27. st_timer.text = "Timer-Event um: " +  String(now()) + " Uhr"
  28.  
  29. // DK: Falls ein Prozess bereits aktiv ist herausspringen
  30. IF processactive THEN
  31.     st_timer.text = "Prozess aktiv um " +  String(now()) + " Uhr"
  32.     RETURN 0
  33. END IF
  34.  
  35. DECLARE c_task CURSOR FOR  
  36.   SELECT
  37.             /* Tasks */
  38.             COALESCE("it_taskplaner_task"."lfdnr", 0),
  39.          COALESCE("it_taskplaner_task"."text", ''),
  40.          COALESCE("it_taskplaner_task"."status", 20),
  41.             COALESCE("it_taskplaner_task"."kommando_lfdnr", 0),
  42.            
  43.             /* Zeiten */
  44.             COALESCE("it_taskplaner_zeit"."lfdnr", 0),
  45.             COALESCE("it_taskplaner_zeit"."typ", 10),
  46.             COALESCE("it_taskplaner_zeit"."status", 20),
  47.             COALESCE("it_taskplaner_zeit"."startdatum", TODAY()),
  48.             COALESCE("it_taskplaner_zeit"."startzeit", NOW()),
  49.             COALESCE("it_taskplaner_zeit"."stopzeit", NOW()),
  50.             COALESCE("it_taskplaner_zeit"."intervall", 0),
  51.             COALESCE("it_taskplaner_zeit"."einheit_lfdnr", 0),
  52.             COALESCE("it_taskplaner_zeit"."argument", ''),
  53.             COALESCE("it_taskplaner_zeit"."sprache", 0)
  54.            
  55.     FROM "it_taskplaner_task",
  56.             "it_taskplaner_zeit"
  57.            
  58.     WHERE "it_taskplaner_task"."status" = 10 /* 10 = aktiv, 20 = inaktiv */
  59.     AND "it_taskplaner_task"."lfdnr" = "it_taskplaner_zeit"."task_lfdnr"
  60.     ORDER BY "it_taskplaner_zeit"."startdatum", "it_taskplaner_zeit"."startzeit"
  61.     USING sqlcur;
  62.  
  63. OPEN c_task ;
  64.      
  65. IF sqlcur.sqlcode <> 0 then
  66.         Error.of_Intern('w_it_batch','Fehler beim Aktualisieren der Tabelle it_taskplaner_task. (Cursor) ' + String(sqlcur.sqlcode))
  67. END IF
  68.  
  69. mle_status.text = "Prozesscheck " + String( i_counter ) + "~r~n"
  70.  
  71. /***
  72.  * DK: In allen Einträgen in dieser Minute prüfen
  73.  *     ob für aktuelle Zeit ein Auftrag vorliegt
  74.  */
  75.  
  76. STRING ls_task_text, ls_zeit_argument
  77. LONG ll_task_lfdnr, ll_task_status, ll_task_kommando_lfdnr, ll_zeit_lfdnr, ll_zeit_typ, ll_zeit_sprache, ll_zeit_status, ll_einheit_lfdnr
  78. DATE ld_zeit_startdatum
  79. TIME lt_zeit_startzeit, lt_zeit_stopzeit
  80. DOUBLE ld_zeit_intervall
  81.  
  82. LONG weiter
  83. weiter = 1
  84.  
  85. // DK: Fetch der Ergebnisse
  86. DO WHILE weiter > 0
  87.     FETCH NEXT c_task INTO :ll_task_lfdnr, :ls_task_text, :ll_task_status, :ll_task_kommando_lfdnr, :ll_zeit_lfdnr,
  88.                                   :ll_zeit_typ, :ll_zeit_status, :ld_zeit_startdatum, :lt_zeit_startzeit, :lt_zeit_stopzeit,
  89.                                   :ld_zeit_intervall, :ll_einheit_lfdnr, :ls_zeit_argument, :ll_zeit_sprache;
  90.    
  91.     // DK: Fetch in Ordnung
  92.     CHOOSE CASE sqlcur.sqlcode
  93.         CASE 0
  94.             LONG ll_kommando_lfdnr
  95.             STRING ls_kommando_text, ls_kommando_kommando
  96.            
  97.             SELECT "it_taskplaner_kommando"."lfdnr",
  98.                      "it_taskplaner_kommando"."text",
  99.                      "it_taskplaner_kommando"."kommando"
  100.                      
  101.             INTO     :ll_kommando_lfdnr,
  102.                      :ls_kommando_text,
  103.                      :ls_kommando_kommando
  104.                      
  105.             FROM     "it_taskplaner_kommando"
  106.             WHERE    "it_taskplaner_kommando"."lfdnr" = :ll_task_kommando_lfdnr
  107.             USING  sqlca;
  108.            
  109.             IF sqlca.sqlcode < 0 THEN
  110.                 msg.MsgBox("Fehler", "Keine gültige Verknüpfung mit der Tabelle it_taskplaner_kommando vorhanden!")
  111.                 HALT
  112.             END IF
  113.            
  114.             STRING ls_task_einheit_text
  115.             LONG ll_task_einheit_lfdnr, ll_task_einheit_faktor
  116.            
  117.             SELECT "it_taskplaner_zeit_einheit"."lfdnr",
  118.                      "it_taskplaner_zeit_einheit"."text",
  119.                      "it_taskplaner_zeit_einheit"."faktor"
  120.                      
  121.             INTO     :ll_task_einheit_lfdnr,
  122.                      :ls_task_einheit_text,
  123.                      :ll_task_einheit_faktor
  124.                      
  125.             FROM     "it_taskplaner_zeit_einheit"
  126.             WHERE    "it_taskplaner_zeit_einheit"."lfdnr" = :ll_einheit_lfdnr
  127.             USING    sqlca;
  128.            
  129.             IF sqlca.sqlcode < 0 THEN
  130.                 msg.MsgBox("Fehler", "Keine gültige Verknüpfung mit der Tabelle it_taskplaner_zeit_einheit vorhanden!")
  131.                 HALT
  132.             END IF
  133.            
  134.             // DK: Startdatum erreicht / überschritten
  135.             IF ld_zeit_startdatum >= TODAY() THEN
  136.                 CHOOSE CASE ll_zeit_typ
  137.                     // DK: Intervall
  138.                     CASE 10
  139.                         TIME lt_cur_time
  140.                         STRING ls_cur_time, ls_zeit_startzeit, ls_zeit_stopzeit, ls_kalk_zeit
  141.                         LONG ll_multiplikant
  142.                         BOOLEAN lb_intervall, lb_fertig
  143.                        
  144.                         // DK: Aktuelle Zeit
  145.                         lt_cur_time = TIME(STRING(NOW(), "hh:mm"))
  146.                        
  147.                         // DK: Zeiten aus der Tabelle als String
  148.                         ls_cur_time = STRING(NOW(), "hh:mm")
  149.                         ls_zeit_startzeit = STRING(lt_zeit_startzeit, "hh:mm")
  150.                         ls_zeit_stopzeit = STRING(lt_zeit_stopzeit, "hh:mm")
  151.                        
  152.                         // DK: Weitere Hilfsvariablen initialisieren
  153.                         ll_multiplikant = 1
  154.                         lb_intervall = FALSE
  155.                         lb_fertig = FALSE
  156.                        
  157.                         // DK: Kalkulierte Zeit auf Startzeit setzen
  158.                         ls_kalk_zeit = STRING(lt_zeit_startzeit, "hh:mm")
  159.                        
  160.                         // DK: Momentane Zeit kleiner / gleich Stopzeit
  161.                         IF lt_cur_time <= lt_zeit_stopzeit THEN
  162.                            
  163.                             // DK: Solange die kalkulierte Zeit kleiner / gleich der Stoppzeit ist und die Bedingung noch nicht durchlaufen wurde
  164.                             DO WHILE ls_kalk_zeit <= ls_zeit_stopzeit AND lb_fertig = FALSE
  165.                                
  166.                                 // DK: Prüfe ob die aktuelle Zeit der kalkulierten Zeit entspricht
  167.                                 IF ls_cur_time = ls_kalk_zeit THEN
  168.                                     lb_intervall = TRUE
  169.                                    
  170.                                     //-----------------------------------------------------------------------------        
  171.                                     // Transfer
  172.                                     IF POS(ls_kommando_kommando,"transfer") > 0         THEN cbx_transfer.checked = TRUE
  173.                                    
  174.                                     //-----------------------------------------------------------------------------
  175.                                     // Sprache
  176.                                     IF ll_zeit_sprache = 0 THEN rb_sprache1.checked = TRUE
  177.                                     IF ll_zeit_sprache = 1 THEN rb_sprache2.checked = TRUE
  178.                                     IF ll_zeit_sprache = 2 THEN rb_sprache3.checked = TRUE
  179.                                     IF ll_zeit_sprache = 3 THEN rb_sprache4.checked = TRUE
  180.                                     IF ll_zeit_sprache = 4 THEN rb_sprache5.checked = TRUE
  181.                                     IF ll_zeit_sprache = 5 THEN rb_sprache6.checked = TRUE
  182.                        
  183.                                     //-----------------------------------------------------------------------------
  184.                                     // Export
  185.                                     IF POS(ls_kommando_kommando,"exArtikelstamm") > 0   THEN cbx_artikelstamm_ex.checked = TRUE
  186.                                     IF POS(ls_kommando_kommando,"exGrundlagen") > 0         THEN cbx_grundlagen_ex.checked  = TRUE
  187.                                     IF POS(ls_kommando_kommando,"exKundenstamm") > 0    THEN cbx_kundenstamm_ex.checked     = TRUE
  188.                                     IF POS(ls_kommando_kommando,"exKonditionen") > 0    THEN cbx_konditionen_ex.checked     = TRUE
  189.                                     IF POS(ls_kommando_kommando,"exOffenePosten") > 0   THEN cbx_op_ex.checked              = TRUE
  190.                                     IF POS(ls_kommando_kommando,"exDispo") > 0          THEN cbx_dispo_ex.checked           = TRUE
  191.                                     IF POS(ls_kommando_kommando,"exAdressen") > 0       THEN cbx_adressen_ex.checked        = TRUE
  192.                                     IF POS(ls_kommando_kommando,"exBestand") > 0            THEN cbx_bestand_ex.checked         = TRUE
  193.                        
  194.                                     //-----------------------------------------------------------------------------
  195.                                     // Upload
  196.                                     IF POS(ls_kommando_kommando,"ulArtikelstamm") > 0   THEN cbx_artikelstamm_ex.checked = TRUE AND cbx_transfer.checked = TRUE
  197.                                     IF POS(ls_kommando_kommando,"ulBestand") > 0            THEN cbx_bestand_ex.checked         = TRUE AND cbx_transfer.checked = TRUE
  198.                                     IF POS(ls_kommando_kommando,"ulGrundlagen") > 0         THEN cbx_konditionen_ex.checked     = TRUE AND cbx_transfer.checked = TRUE
  199.                                     IF POS(ls_kommando_kommando,"ulKundenstamm") > 0    THEN cbx_kundenstamm_ex.checked     = TRUE AND cbx_transfer.checked = TRUE
  200.                                     IF POS(ls_kommando_kommando,"ulKonditionen") > 0    THEN cbx_konditionen_ex.checked     = TRUE AND cbx_transfer.checked = TRUE
  201.                                     IF POS(ls_kommando_kommando,"ulOffenePosten") > 0   THEN cbx_op_ex.checked              = TRUE AND cbx_transfer.checked = TRUE
  202.                                     IF POS(ls_kommando_kommando,"ulDispo") > 0          THEN cbx_dispo_ex.checked           = TRUE AND cbx_transfer.checked = TRUE
  203.                                     IF POS(ls_kommando_kommando,"ulAdressen") > 0       THEN cbx_adressen_ex.checked        = TRUE AND cbx_transfer.checked = TRUE
  204.                        
  205.                                     //-----------------------------------------------------------------------------
  206.                                     // Download
  207.                                     IF POS(ls_kommando_kommando,"dlKundenstamm") > 0    THEN cbx_kundenstamm_im.checked     = TRUE AND cbx_transfer.checked = TRUE
  208.                                     IF POS(ls_kommando_kommando,"dlAuftraege") > 0      THEN cbx_auftraege_im.checked   = TRUE AND cbx_transfer.checked = TRUE
  209.                                     IF POS(ls_kommando_kommando,"dlStatistik") > 0      THEN cbx_statistik_im.checked   = TRUE AND cbx_transfer.checked = TRUE
  210.                                     IF POS(ls_kommando_kommando,"dlNewsletter") > 0         THEN cbx_newsletter_dl.checked  = TRUE AND cbx_transfer.checked = TRUE  
  211.                                    
  212.                                     //-----------------------------------------------------------------------------
  213.                                     // Import
  214.                                     IF POS(ls_kommando_kommando,"imAuftraege") > 0      THEN cbx_auftraege_im.checked   = TRUE
  215.                                     IF POS(ls_kommando_kommando,"imStatistik") > 0      THEN cbx_statistik_im.checked   = TRUE
  216.                                     IF POS(ls_kommando_kommando,"imKundenstamm") > 0        THEN
  217.                                         cbx_kundenstamm_im.checked  = TRUE
  218.                                         //msg.MsgBox("Info", "Kundenstamm markiert bei Intervall " + STRING(ld_zeit_intervall))
  219.                                     END IF
  220.                                     IF POS(ls_kommando_kommando,"executesql") > 0           THEN cbx_sql.checked                = TRUE
  221.                                     IF POS(ls_kommando_kommando,"imNewsletter") > 0     THEN cbx_newsletter_dl.checked  = TRUE
  222.                                    
  223.                                     //-----------------------------------------------------------------------------
  224.                                     // Export Kundenindividuelle Daten
  225.                                     IF POS(ls_kommando_kommando,"exIndArtikelstamm") > 0 THEN ddlb_genartikel_pers.text  = ls_zeit_argument
  226.                                     IF POS(ls_kommando_kommando,"exIndBestand") > 0      THEN ddlb_syncbestand_pers.text = ls_zeit_argument
  227.                                                    
  228.                                     //-----------------------------------------------------------------------------        
  229.                                     // Media
  230.                                     IF POS(ls_kommando_kommando,"syncmedia") > 0            THEN cbx_media.checked = TRUE
  231.                                    
  232.                                     //-----------------------------------------------------------------------------        
  233.                                     // System
  234.                                     IF POS(ls_kommando_kommando,"shutdown") > 0         THEN
  235.                                         POST close(this)
  236.                                         POST close(w_haupt)
  237.                                     END IF
  238.                                    
  239.                                     lb_fertig = TRUE
  240.                                 END IF
  241.                                 IF NOT lb_intervall THEN ll_multiplikant++
  242.                                 ls_kalk_zeit = STRING(RelativeTime(lt_zeit_startzeit, ll_multiplikant * ld_zeit_intervall * ll_task_einheit_faktor * 60))
  243.                                 ls_kalk_zeit = STRING(TIME(ls_kalk_zeit), "hh:mm")
  244.                             LOOP
  245.                         END IF
  246.                        
  247.                     // DK: Fixzeit
  248.                     CASE 20
  249.                         // DK: Prüfen ob Startzeit der aktuellen Zeit entspricht
  250.                         IF STRING(lt_zeit_startzeit, "hh:mm") = STRING(NOW(), "hh:mm") THEN
  251.                             //-----------------------------------------------------------------------------        
  252.                             // Transfer
  253.                             IF POS(ls_kommando_kommando,"transfer") > 0         THEN cbx_transfer.checked = TRUE
  254.                            
  255.                             //-----------------------------------------------------------------------------
  256.                             // Sprache
  257.                             IF ll_zeit_sprache = 0 THEN rb_sprache1.checked = TRUE
  258.                             IF ll_zeit_sprache = 1 THEN rb_sprache2.checked = TRUE
  259.                             IF ll_zeit_sprache = 2 THEN rb_sprache3.checked = TRUE
  260.                             IF ll_zeit_sprache = 3 THEN rb_sprache4.checked = TRUE
  261.                             IF ll_zeit_sprache = 4 THEN rb_sprache5.checked = TRUE
  262.                             IF ll_zeit_sprache = 5 THEN rb_sprache6.checked = TRUE
  263.                
  264.                             //-----------------------------------------------------------------------------
  265.                             // Export
  266.                             IF POS(ls_kommando_kommando,"exArtikelstamm") > 0   THEN cbx_artikelstamm_ex.checked = TRUE
  267.                             IF POS(ls_kommando_kommando,"exGrundlagen") > 0         THEN cbx_grundlagen_ex.checked  = TRUE
  268.                             IF POS(ls_kommando_kommando,"exKundenstamm") > 0    THEN cbx_kundenstamm_ex.checked     = TRUE
  269.                             IF POS(ls_kommando_kommando,"exKonditionen") > 0    THEN cbx_konditionen_ex.checked     = TRUE
  270.                             IF POS(ls_kommando_kommando,"exOffenePosten") > 0   THEN cbx_op_ex.checked              = TRUE
  271.                             IF POS(ls_kommando_kommando,"exDispo") > 0          THEN cbx_dispo_ex.checked           = TRUE
  272.                             IF POS(ls_kommando_kommando,"exAdressen") > 0       THEN cbx_adressen_ex.checked        = TRUE
  273.                             IF POS(ls_kommando_kommando,"exBestand") > 0            THEN cbx_bestand_ex.checked         = TRUE
  274.                
  275.                             //-----------------------------------------------------------------------------
  276.                             // Upload
  277.                             IF POS(ls_kommando_kommando,"ulArtikelstamm") > 0   THEN cbx_artikelstamm_ex.checked = TRUE AND cbx_transfer.checked = TRUE
  278.                             IF POS(ls_kommando_kommando,"ulBestand") > 0            THEN cbx_bestand_ex.checked         = TRUE AND cbx_transfer.checked = TRUE
  279.                             IF POS(ls_kommando_kommando,"ulGrundlagen") > 0         THEN cbx_konditionen_ex.checked     = TRUE AND cbx_transfer.checked = TRUE
  280.                             IF POS(ls_kommando_kommando,"ulKundenstamm") > 0    THEN cbx_kundenstamm_ex.checked     = TRUE AND cbx_transfer.checked = TRUE
  281.                             IF POS(ls_kommando_kommando,"ulKonditionen") > 0    THEN cbx_konditionen_ex.checked     = TRUE AND cbx_transfer.checked = TRUE
  282.                             IF POS(ls_kommando_kommando,"ulOffenePosten") > 0   THEN cbx_op_ex.checked              = TRUE AND cbx_transfer.checked = TRUE
  283.                             IF POS(ls_kommando_kommando,"ulDispo") > 0          THEN cbx_dispo_ex.checked           = TRUE AND cbx_transfer.checked = TRUE
  284.                             IF POS(ls_kommando_kommando,"ulAdressen") > 0       THEN cbx_adressen_ex.checked        = TRUE AND cbx_transfer.checked = TRUE
  285.                
  286.                             //-----------------------------------------------------------------------------
  287.                             // Download
  288.                             IF POS(ls_kommando_kommando,"dlKundenstamm") > 0    THEN cbx_kundenstamm_im.checked     = TRUE AND cbx_transfer.checked = TRUE
  289.                             IF POS(ls_kommando_kommando,"dlAuftraege") > 0      THEN cbx_auftraege_im.checked   = TRUE AND cbx_transfer.checked = TRUE
  290.                             IF POS(ls_kommando_kommando,"dlStatistik") > 0      THEN cbx_statistik_im.checked   = TRUE AND cbx_transfer.checked = TRUE
  291.                             IF POS(ls_kommando_kommando,"dlNewsletter") > 0         THEN cbx_newsletter_dl.checked  = TRUE AND cbx_transfer.checked = TRUE  
  292.                            
  293.                             //-----------------------------------------------------------------------------
  294.                             // Import
  295.                             IF POS(ls_kommando_kommando,"imAuftraege") > 0      THEN cbx_auftraege_im.checked   = TRUE
  296.                             IF POS(ls_kommando_kommando,"imStatistik") > 0      THEN cbx_statistik_im.checked   = TRUE
  297.                             IF POS(ls_kommando_kommando,"imKundenstamm") > 0        THEN cbx_kundenstamm_im.checked     = TRUE
  298.                             IF POS(ls_kommando_kommando,"executesql") > 0           THEN cbx_sql.checked                = TRUE
  299.                             IF POS(ls_kommando_kommando,"imNewsletter") > 0     THEN cbx_newsletter_dl.checked  = TRUE
  300.                            
  301.                             //-----------------------------------------------------------------------------
  302.                             // Export Kundenindividuelle Daten
  303.                             IF POS(ls_kommando_kommando,"exIndArtikelstamm") > 0 THEN ddlb_genartikel_pers.text  = ls_zeit_argument
  304.                             IF POS(ls_kommando_kommando,"exIndBestand") > 0      THEN ddlb_syncbestand_pers.text = ls_zeit_argument
  305.                                            
  306.                             //-----------------------------------------------------------------------------        
  307.                             // Media
  308.                             IF POS(ls_kommando_kommando,"syncmedia") > 0            THEN cbx_media.checked = TRUE
  309.                            
  310.                             //-----------------------------------------------------------------------------        
  311.                             // System
  312.                             IF POS(ls_kommando_kommando,"shutdown") > 0         THEN
  313.                                 POST close(this)
  314.                                 POST close(w_haupt)
  315.                             END IF
  316.                         END IF
  317.                        
  318.                 END CHOOSE
  319.             END IF
  320.            
  321.         // DK: Keinen weiteren Datensatz gefunden
  322.         CASE 100
  323.             weiter = 0
  324.            
  325.         // DK: Es ist ein Fehler im Cursor aufgetreten
  326.         CASE ELSE
  327.             msg.MsgBox("Fehler", "Es ist ein Fehler im Cursor c_task aufgetreten!")
  328.             RETURN 0
  329.            
  330.     END CHOOSE
  331. LOOP
  332.  
  333. CLOSE c_task;
  334.  
  335. //-----------------------------------------------------------------------------
  336. // Nun Prozesse ausführen
  337.  
  338. this.PostEvent ( "ue_startbat" )
  339.  
  340. RETURN 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement