أي شخص يمكن أن توفر ردود الفعل على LotusScript العميل ؟

StackOverflow https://stackoverflow.com/questions/647198

سؤال

مرحبا هناك أنا لست المطور و أنا على علم أفضل الممارسات.أنا خلقت هذا إلى تجاوز البيانات يدويا نسخ من بيانات السجل.هذا العامل هو واحد العلف الذي سوف نسخ وضبط كل واحدة إضافية.المحدد تغذية يقرأ سجل للمرة الأخيرة معالجة عدد من الملفات معالجتها حتى اليوم و أمس.وتعول أيضا الملفات في إدخال مجلد يقرأ ملقم التوقيت.كل بند من بنود البيانات مفصولة بفاصلة csv و البريد التي يتم استضافتها على الموقع.شكرا على أي نقد بناء.

Sub Initialize
    Dim customername As String
    Dim servername As String
    Dim feedname As String
    Dim alertthresholdinhours As Integer
    Dim inputfeedpath As String

    ' Set for each feed
    customername = "gRrhio"
    servername = "gRrhioEdge2"
    feedname = "FF Thompson ADT"
    alertthresholdinhours = 6
    inputfeedpath = "\\mhinec\elycon\data\adt\*.*"

    ' Counts files in input folder
    Dim pathName As String, fileName As String
    Dim inputfeedcounter As Integer
    inputfeedcounter = 0
    pathName$ = inputfeedpath
    fileName$ = Dir$(pathName$, 0)
    Do While fileName$ <> ""
        inputfeedcounter = inputfeedcounter + 1
        fileName$ = Dir$()
    Loop

    Dim entry As NotesViewEntry   
    Dim vc As NotesViewEntryCollection
    Dim filesprocessed As Integer
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim newDoc As NotesDocument
    Dim rtitem As NotesRichTextItem
    Set db = session.CurrentDatabase
    Dim view As NotesView
    Set view = db.GetView( "Sessions\by Feed" )
    Set newDoc = New NotesDocument( db )
    Set rtitem = New NotesRichTextItem( newDoc, "Body" )
    Dim todaysdate As New NotesDateTime("Today")
    Dim flag As Integer
    Dim counter As Integer
    Dim files As Integer
    Dim errors As Integer
    Dim lastdate As String
    Dim lastdayran As String
    Dim lasttime As String
    Dim lasttimeran As String
    Dim filesp As Integer
    Dim lastdayfiles As Integer
    Dim lastdaysfiles2 As Integer
    Dim terrors As Integer
    Dim lastdayerrors As Integer
    lastdate = ""
    lastdayran = ""
    counter = 0
    flag = 0
    filesp = 0
    lastdayfiles = 0
    lastdaysfiles2 = 0
    terrors = 0
    lastdayerrors = 0

    ' Finds date for last time processed, counts files processed and errors
    While flag = 0
        Dim dateTime As New NotesDateTime(todaysdate.DateOnly)
        Dim keyarray(1) As Variant
        keyarray(0) = feedname
        Set keyarray(1) = dateTime

        Set vc = view.GetAllEntriesByKey(keyarray, False)   
        Set entry = vc.GetFirstEntry

        If entry Is Nothing Then
            Call todaysdate.AdjustDay(-1)
        End If

        While Not entry Is Nothing
            files = 0
            Forall colval In entry.ColumnValues
                If counter = 9 Then
                    counter = 0
                Elseif counter = 8 Then
                    counter = 9
                Elseif counter = 7 Then
                    counter = 8
                Elseif counter = 6 Then
                    errors = Cint(colval)
                    counter = 7
                Elseif counter = 5 Then
                    counter = 6
                Elseif counter = 4 Then
                    files = Cint(colval)               
                    counter = 5
                Elseif counter = 3 Then
                    counter = 4
                Elseif counter = 2 Then
                    counter = 3
                    lasttime = colval
                Elseif counter = 1 Then
                    counter = 2
                    lastdate = colval
                Elseif counter = 0 Then
                    counter =  1
                End If           
            End Forall
            filesp = filesp + files
            terrors = terrors + errors
            Set entry=vc.GetNextEntry (entry)
            flag = 1
        Wend
    Wend
    lastdayfiles = filesp
    lastdayerrors = terrors
    lastdayran = lastdate
    lasttimeran = lasttime

    'Counts previous files processed
    filesp = 0
    terrors = 0
    lastdate = ""
    flag = 0
    Call todaysdate.AdjustDay(-1)   
    While flag = 0
        Dim dateTime2 As New NotesDateTime(todaysdate.DateOnly)
        Dim keyarray2(1) As Variant
        keyarray2(0) = feedname
        Set keyarray2(1) = dateTime2
        Set vc = view.GetAllEntriesByKey(keyarray2, False)   
        Set entry = vc.GetFirstEntry

        If entry Is Nothing Then
            Call todaysdate.AdjustDay(-1)
        End If

        While Not entry Is Nothing
            files = 0
            Forall colval In entry.ColumnValues
                If counter = 9 Then
                    counter = 0
                Elseif counter = 8 Then
                    counter = 9
                Elseif counter = 7 Then
                    counter = 8
                Elseif counter = 6 Then
                    counter = 7
                Elseif counter = 5 Then
                    counter = 6
                Elseif counter = 4 Then
                    files = Cint(colval)               
                    counter = 5
                Elseif counter = 3 Then
                    counter = 4
                Elseif counter = 2 Then
                    counter = 3
                Elseif counter = 1 Then
                    counter = 2
                Elseif counter = 0 Then
                    counter =  1
                End If           
            End Forall
            filesp = filesp + files
            Set entry=vc.GetNextEntry (entry)
            flag = 1
        Wend
    Wend
    lastdaysfiles2 = filesp

    ' Prints line of CSV into body of email
    Call rtitem.AppendText ( customername )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( servername )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( datetime.timezone )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( lastdayran )
    Call rtitem.AppendText ( " " )
    Call rtitem.AppendText ( lasttimeran )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( lastdayfiles )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( lastdayerrors )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( lastdaysfiles2 )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( inputfeedcounter )
    Call rtitem.AppendText ( ", " )
    Call rtitem.AppendText ( alertthresholdinhours )
    Call newDoc.Save( False, True )
    newDoc.Subject = feedname
    ' Running from server line should be
    'newDoc.SendTo = "Ecmon Feedcheck/Ecmonitor@ECMONITOR"
    newDoc.SendTo = "AX1Forward Feedcheck/ACHQ@company.com"
    newDoc.Send( False )
End Sub
هل كانت مفيدة؟

المحلول

لعدم مطور، يمكنك كتابة الكثير من التعليمات البرمجية:)

إذا كنت تبحث عن بعض الدروس لبدء تصبح مطور جيدة، ثم تأخذ المشورة ميتش (من تعليق) وتفريق هذا إلى الوظائف الفرعية. الدرس 1: هناك بالتأكيد بعض التعليمات البرمجية repetitve هنا، وانها دائما فكرة جيدة لوضع التعليمات البرمجية المتكررة إلى أسلوب (وظيفة أو روتين) لذلك لا يوجد إلا مرة واحدة. المقطع الذي يهم تجهيز الملفات والملفات السابقة المجهزة مشابها وربما يكون من الممكن وضع في روتين مثل:

Function GetCountFilesProcessed() As Integer

    'code here

End Function

ولكن، حتى أنك قد تكون قادرة على انقاذ الحاجة لذلك إذا أنا فهم التعليمات البرمجية بشكل صحيح. بدلا من القيام بذلك حلقة غريبة في الوسط، يبدو أنك تحاول ببساطة الحصول على قيمة من عمود viewentry. يقولون ان interetsed لكم في قيمة العمود 4 ل. يمكنك ببساطة الحصول على قيمة العمود الذي تريد عن طريق الوصول إليه بواسطة مؤشر. على سبيل المثال، يمكن وضع ملفات متغير مباشرة إلى قيمة العمود 4 عن طريق هذا الخط

files = Cint(entry.ColumnValues(4))  'check this, it might be 3 if the array is zero based.

وعلى أي حال، خلاصة القول إذا كان يعمل هذا الكود ثم كنت خارج لبداية جيدة!

نصائح أخرى

على أكثر من نمط الجانب من الأمور, لطالما وجدت أنه من الأسهل للحفاظ على رمز الآخرين عندما

  1. أعلن Option 'Explicit' في مقطع Declarations
  2. المتغيرات من ما يقرب من أعلى إلى أسفل (على سبيل المثال ، قبل db قبل عرض قبل doc)
  3. مسبوقة الملاحظات الكائنات مع نوع (docMail, dbMyDatabase, viewOutstandingInvoices)
  4. وضع كل من الإعلانات في أعلى قبل (يساعد على إيجاد الإعلان عندما كنت تأتي عبر متغير)
  5. كما ذكر آخرون ، تقسيمها إلى وظائف/subs حيثما ينطبق ذلك.

تعليقك حول نسخ هذا وكيل حالات أخرى من نفس المشكلة أيضا يرفع العلم.في محاولة للعمل على ما هو مشترك بين هذه العوامل تدفع تلك الوظائف في مكتبة البرنامج النصي.هذا النوع من الشيء يوفر الكثير من الوقت عند صيانة الكود كما أنت لا تحتاج إلى التفكير في ما هي الطريقة كل عميل مختلفة (على سبيل المثال.لا تغيير تنطبق على جميع الحالات من هذا العامل ، أو فقط بعض منهم؟)

وأنت تريد أن تتحلل التعليمات البرمجية الخاصة بك أكثر من ذلك بكثير و... شيء واحد صغير. بدلا من

while not item is nothing

والذي هو نفي مزدوج وبندر الدماغ شعبية .. الكتابة:

do until item is nothing
  ...
loop

وهذا أيضا يسمح لك للخروج من الحلقة مع خروج تفعل

ويمكنك تحسين كل من الحلقات فورال الخاص بك. هذه هي الطريقة التي تعد الأولى من نوعها ستبحث:

Forall colval In entry.ColumnValues
    Select Case (counter)
        Case 1: lastdate = colval
        Case 2: lasttime = colval
        Case 4: files = Cint(colval) 
        Case 6: errors = Cint(colval)
    End Select
    counter = (counter + 1) Mod 10    
End Forall

وهذه هي الطريقة الثانية يمكن للمرء ستبدو:

Forall colval In entry.ColumnValues
    if (counter = 4) Then files = Cint(colval)
    counter = (counter + 1) Mod 10
End Forall

فقط ملاحظة بخصوص هذا الشيء

    While Not entry Is Nothing
        files = 0            
        Forall colval In entry.ColumnValues
            If counter = 9 Then
                counter = 0
            Elseif counter = 8 Then
                counter = 9
    ....

كما يقول كين يمكنك الحصول على columnValues باستخدام الإدخال.ColumnValues(x) طريقة لذلك interating من خلال القيم الامم المتحدة الحاجة.ولكن ؛ كنت قد فعلت هذا

    While Not entry Is Nothing
        files = 0            
        counter = 0
        Forall colval In entry.ColumnValues
            counter = counter + 1
            Select case counter
                case 6
                    errors = Cint(colval)
      .....
            end select

وبعض النقاط الجيدة بالفعل. لإضافة لهم إذا كان لديك المتغيرات التي تشترك في موضوع مشترك ثم إنشاء فئة. إضافة المتغيرات الخاصة بك لتلك الفئة.

وذلك بدلا من القول:

Dim userFullName as String
Dim age as Integer
Dim addressLine1 as String
' ... etc.

هل يمكن أن يكون:

Class UserDetails 
  Dim fullName as String
  Dim age as Integer
  Dim addressLine1 as String
  ' ... etc
End Class

ووالمرجعية:

Dim u as new UserDetails
u.fullName = "full name"
u.age = 22
u.addressLine1 = "1 main street"

وميزة هذا هو يمكنك إضافة أساليب لمعالجة تلك البيانات وكنت تعرف رمز يتعلق هذا الكائن بدلا من الصيد من خلال التطبيق الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top