Zmiany pomiędzy wersją początkową i wersją 1 dla DeployerGuide/Customization/Forte/ForteOnTimer

Pokaż
Ignoruj:
Data i czas:
11/13/12 11:12:48 (12 years temu)
Autor:
jachtelik (IP: 213.227.67.33)
Komentarz:

--

Legend:

Bez zmian
Dodane
Usunięte
Zmienione
  • DeployerGuide/Customization/Forte/ForteOnTimer

    v1 v1  
     1= [wiki:DeployerGuide Przewodnik wdrożeniowca] > Integracja z Forte HM przy pomocy procedury !OnTimer = #ontimer 
     2 
     3 
     4W systemie Forte (HM) dostępny jest mechanizm wywoływania procedur. Jest to zestaw różnych procedur. Jedną z nich jest '''!OnTimer()'''. Jest to swego rodzaju Raport, który jest uruchamiany w określonych interwałach czasu. 
     5 
     6=== Włączanie działania !OnTimer() === #ontimer_on 
     7 
     8 * Mając odpowiednie uprawnienia administratora w systemie Forte HM Z lewego panelu wybieramy menu Ustawienia.  
     9 * Po otwarciu się w prawym panelu okna z danymi Ustawień przechodzimy do ''Ustawienia > Firma > Parametry pracy''.  
     10 * W prawym panelu przechodzimy do ''Wykonywanie procedur > !OnTimer''. 
     11 * Po zaznaczeniu !OnTimer wybieramy edytuj i wybieramy TAK, a następnie zapisujemy. 
     12 
     13=== Informacje o możliwościach wykorzystania procedury !OnTimer() === #wykorzystanie_ontimer 
     14Mając już włączony mechanizm wykonywania raportu !OnTimer musimy wykonać raport. 
     15Raport jest opcjonalny, gdyż wszystkie niezbędne instrukcje można oczywiście ująć w !OnTimerze. 
     16 
     17HMF ofertuje wiele możliwości wykonania procedur. Są to: 
     18 * język raportów '''!AmBasic''' - język skryptowy własny dostępny w Handlu Forte, który umieszczamy bezpośrednio w raporcie, jest kombinacją języka VB oraz C, nie posiada dobrej dokumentacji (ta co jest, to załączam do niniejszej instrukcji). 
     19 * język '''VBA''', czyli Visual Basic For Applications - produkt wykorzystywany przez Microsoft m.in. w produktach pakietu Office. Jest dość okrojona wersja Visual Basic-a, ale do tych potrzeb jest po prostu rewelacyjna. 
     20 
     21 
     22Na potrzeby integracji sugeruje się wykorzystać język VBA. Import danych do Forte HM (na przykładzie generowania dokumentu '''Zamówienia Obcego''' przedstawiam poniżej. 
     23 1. W systemie Forte Handel uruchamiamy z menu VBA > VBA IDE. Uruchamia się środowisko programowania VBA, w którym utworzymy skrypt integracyjny. 
     24 2. Otwieramy UserElement z lewego Panelu >> pokazuje się okno kodu VBA. 
     25 3. Wprowadzamy kod VBA skryptu: 
     26{{{ 
     27Private Sub GenerateZO() 
     28 
     29 
     30' Deklaracje zmiennych 
     31Dim oFactory As Object 
     32Dim oRec As Object 'Rekord danych 
     33Dim nError 
     34 
     35Dim sDocumentType As String ' Typ dokumentu 
     36Dim sDesc As String ' Opis dokumentu 
     37Dim sClientCode As String 'Nazwa kontrahenta 
     38Dim sProductCode As String 'Kod produktu 
     39Dim sQuantity As String ' Ilosc 
     40Dim sPrice As String ' Cena netto 
     41 
     42Dim sPath As String ' ścieżka katalogu z plikami wyeksportowanymi z eDokumentów 
     43Dim sBkpPath As String  ' ścieżka katalogu, do którego odczytane i przetworzone pliki 
     44                        ' zostaną przeniesione po zakończonym procesie 
     45Dim sName As String ' nazwa pliku 
     46Dim sFileName As String ' kompletna ścieżka do pliku 
     47Dim iFileNum As Integer ' znacznik pliku do operacji Input, Line Input 
     48Dim sBuf As String ' Bofor stringu odczytanego z pliku 
     49Dim iCounter As Integer ' Licznik przebiegu po liniach pliku 
     50Dim iNumber As Integer ' Licznik przebiegu po liniach pozycji produktu w pliku 
     51Dim oFileSystem As Object ' Obiekt do operacji na plikach 
     52 
     53Set oFileSystem = CreateObject("Scripting.FileSystemObject") 
     54 
     55sPath = "C:\Users\ztestowy\dane\" 
     56sBkpPath = "C:\Users\ztestowy\dane\done\" 
     57sName = Dir$(sPath & "*.txt") ' Pobranie listy plików w katalogu 
     58 
     59Do While sName <> "" ' Jeżeli/dopóki istnieją pliki w katalogu to wykonaj dalsze operacje 
     60        sFileName = sPath & sName ' Ustawienie pełnej ścieżki dokumentu 
     61         
     62        iFileNum = FreeFile() 
     63 
     64        iCounter = 1 ' Licznik przebiegu po liniach pliku 
     65        iNumber = 0 ' Licznik przebiegu po pozycjach dokumentu. 
     66                    ' Dopuszczalne wartości dla jednej pozycji dokumentu to 0-2 
     67                    ' 0 - symbol produktu 
     68                    ' 1 - ilość 
     69                    ' 2 - cena netto 
     70        Open sFileName For Input As iFileNum 
     71 
     72        ' Tworzenie obiektów deklaracji danych 
     73        Set oFactory = Application.PropertyAp("HFactory") 
     74        Set oRec = oFactory.NewObject("BIORec") ' Rekord danych, który zostanie wstawiony do systemu 
     75 
     76        sDocumentType = "ZMO" ' Typ dokumentu: Zamówienie obce 
     77        nError = oRec.SetField("typDk", Trim(sDocumentType)) ' Ustawienie typu dokumentu 
     78 
     79        Do While Not EOF(iFileNum) 
     80                        Line Input #iFileNum, sBuf 
     81                         
     82                        Select Case iCounter 
     83                                Case Is = 1 ' Wywołanie identyfikatora kontrahenta 
     84                                         
     85                                        sClientCode = "" & Trim(sBuf) 
     86                                        nError = oRec.BeginSection("danekh") 
     87                                                nError = oRec.SetField("KhKod", Trim(sClientCode)) 
     88                                        nError = oRec.EndSection() 
     89                                Case Is = 2 ' Opis dokumentu 
     90                                        sDesc = Trim(sBuf) 
     91                                        nError = oRec.SetField("opis", Trim(sDesc)) 
     92                                Case Is > 2 ' Pozycje dokumentu 
     93                                         
     94                                         
     95                                        Select Case iNumber 
     96                                                Case Is = 0 ' Kod produktu 
     97                                                        sProductCode = Trim(sBuf) 
     98                                                        nError = oRec.BeginSection("Pozycja dokumentu") 
     99                                                        nError = oRec.SetField("kod", Trim(sProductCode)) 
     100                                                         
     101                                                Case Is = 1 ' Ilość 
     102                                                        sQuantity = Trim(sBuf) 
     103                                                        nError = oRec.SetField("ilosc", Trim(sQuantity)) 
     104                                                         
     105                                                Case Is = 2 ' Cena netto 
     106                                                        sPrice = Trim(sBuf) 
     107                                                        nError = oRec.SetField("cena", Trim(sPrice)) 
     108                                                        nError = oRec.EndSection() 
     109                                    
     110                                        End Select 
     111                                         
     112                                        iNumber = iNumber + 1 ' Inkrementacja licznika 
     113                                        If iNumber > 2 Then 
     114                                                iNumber = 0 ' Resetowanie wartości licznika 
     115                                        End If 
     116                                 
     117                                 
     118                        End Select 
     119                         
     120                        iCounter = iCounter + 1 
     121                         
     122            Loop 
     123 
     124                Dim oFunction As Object 
     125                Set oFunction = oFactory.NewObject("BFunkcja") 
     126                 
     127                ' Wywołanie generowania dokumentu 
     128                Dim DocumentID As Long 
     129                DocumentID = oFunction.ImportZO(oRec) ' GENEROWANIE DOKUMENTU ZAMÓWIENIA OBCEGO 
     130 
     131                Close iFileNum ' Zamykanie pliku 
     132                 
     133                oFileSystem.MoveFile sFileName, sBkpPath & sName ' Przeniesienie pliku do katalogu bkp 
     134                 
     135                sName = Dir() 
     136Loop 
     137 
     138End Sub 
     139 
     140}}} 
     141 4. Aby wywołać powyższy skrypt dodajemy w tym samym module metodę: 
     142{{{ 
     143Private Sub MainDoc_TryToOpen(ByVal Category As String, ByVal Group As String, Name As String, ByVal ActionType As AmOpenAction, Cancel As Boolean) 
     144 'Procedura ta wykonywana jest w momencie uruchamiania okna bądź raportu 
     145  
     146 If Name = "OnTimer" Then GenerateZO 
     147End Sub 
     148}}} 
     149 
     150W takim przypadku w momencie każdorazowego uruchomienia procedury !OnTimer uruchomi się metoda GenerateZO i pliki w katalogu zostaną wczytane do bufora systemu HMF.