Domino 9 und frühere Versionen > ND7: Entwicklung

Textfeld - auf Zahleneingabe prüfen

<< < (2/3) > >>

Demian:
Hinzu kommt, dass die betroffene Maske eine Größe von knapp 150.000 Byte hat und bereits von Teamstudio Best Practice Filter bemängelt wird (Notes Form Must Not Be Greater than 76,000 Bytes), da möchte ich ungern noch 3 Felder mit Hide-When Formeln usw. dazu nehmen.

Hat das eigentlich irgendwelche fatalen Auswirkungen, wenn Masken doch größer sind? Bis jetzt funktioniert noch alles.
 

Demian:
der Vollständigkeithalber noch die entsprechende Stelle aus dem Exportagenten:


--- Zitat ---Function DataSetKOSTT(docCO As NotesDocument,strClient As String) As String
   '*********************************************************************************************************************************
   'create data set for each line in file to return it as string
   '*********************************************************************************************************************************
   'Parameters:         docCO      = CostObject to transfer
   '                     strClient   = Client of time management to which costobject must transfered
   '*********************************************************************************************************************************
   On Error Goto ErrHandle   
   '*********************************************************************************************************************************
   Const EventName = "DataSetKOSTT" 'for reports
   '*********************************************************************************************************************************   
   
   Call ReportWrite(Eventname & " - erstelle Datensatz für Nummer " & docCO.ID(0) &" für Mandant " & strClient)   
   
   NewDataSetKOSTT.TransferType = docCO.InterfaceIndicator(0)
   NewDataSetKOSTT.ID = Cstr(docCO.ID(0))
   NewDataSetKOSTT.ShortProject = docCO.ShortProject(0)
   
   'Status
   If docCO.Status(0) = "0" Then
      NewDataSetKOSTT.Status = "no"
   Else
      NewDataSetKOSTT.Status = "yes"
   End If
   
   NewDataSetKOSTT.Client = strClient      
   NewDataSetKOSTT.Trade = ""   
   NewDataSetKOSTT.CostCenter = ""   
   NewDataSetKOSTT.Project = ""
   NewDataSetKOSTT.Allowance = ""
   NewDataSetKOSTT.Vehicle = ""
   
   'CostObjectType
   If docCO.CostObjectType(0) = "1" Then
      'CostObjectType = "Firmenfahrzeug"
      If docCO.TimeRating(0) = "0" Then
         'TimeRating = "Fahrer"
         NewDataSetKOSTT.CostObjectType = "F"
         NewDataSetKOSTT.StandardTime = SalaryType("F","N")
         NewDataSetKOSTT.ExtraWork = SalaryType("F","M")
         NewDataSetKOSTT.ExtraHours = SalaryType("F","UE")
      Else
         'TimeRating = "Beifahrer"
         NewDataSetKOSTT.CostObjectType = "B"
         NewDataSetKOSTT.StandardTime = SalaryType("B","N")
         NewDataSetKOSTT.ExtraWork = SalaryType("B","M")
         NewDataSetKOSTT.ExtraHours = SalaryType("B","UE")
      End If
      'Commision not needed if CostObjectType = "Firmenfahrzeug"
      NewDataSetKOSTT.Commission = ""
      NewDataSetKOSTT.MinDrivingTime = "no"
      NewDataSetKOSTT.Description = docCO.Project(0)
   Elseif docCO.CostObjectType(0) = "0" Then
      'CostObjectType = Standard
      If Len(NewDataSetKOSTT.ID) = 7 Then
         'Commission only  must be edited if Cost Objects has seven digits
         NewDataSetKOSTT.Commission = Left(NewDataSetKOSTT.ID,5)
      Else
         'Commission only  needed if Cost Objects seven digit
         NewDataSetKOSTT.Commission = NewDataSetKOSTT.ID
      End If
      
      NewDataSetKOSTT.Description = Left$(docCO.City(0),20) 'not docCO.Project, because Perso needs the city for tax certificate
      NewDataSetKOSTT.CostObjectType = "N"
      NewDataSetKOSTT.StandardTime = ""
      NewDataSetKOSTT.ExtraWork = ""
      NewDataSetKOSTT.ExtraHours = ""
      NewDataSetKOSTT.MinDrivingTime = "yes"
      
   Elseif docCO.CostObjectType(0) = "2" Then
      'CostObjectType = "Tätigkeit"
      NewDataSetKOSTT.Description = docCO.Project(0)
      NewDataSetKOSTT.CostObjectType = "T"
      NewDataSetKOSTT.Commission = NewDataSetKOSTT.ID
      NewDataSetKOSTT.MinDrivingTime = "no"
   Elseif docCO.CostObjectType(0) = "3" Then
      'CostObjectType = "Sonstiges"
      NewDataSetKOSTT.Description = docCO.Project(0)
      NewDataSetKOSTT.CostObjectType = "N"
      NewDataSetKOSTT.MinDrivingTime = "yes"
   End If
   
   NewDataSetKOSTT.TimeFunction = "O"
   NewDataSetKOSTT.Modus =  ""
   NewDataSetKOSTT.AllocatedTime = "000000"
   
   DataSetKOSTT = Cstr(NewDataSetKOSTT.TransferType) & ";" & Cstr(NewDataSetKOSTT.ID) & ";" & Cstr(NewDataSetKOSTT.ShortProject)  & ";" & _
   Cstr(NewDataSetKOSTT.Status) & ";" & Cstr(NewDataSetKOSTT.Client) & ";" & Cstr(NewDataSetKOSTT.Description) & ";" & _
   Cstr(NewDataSetKOSTT.Trade) & ";" & Cstr(NewDataSetKOSTT.CostCenter) & ";" & Cstr(NewDataSetKOSTT.Project)  & ";"    & _
   Cstr(NewDataSetKOSTT.Commission) & ";" & Cstr(NewDataSetKOSTT.Allowance) & ";" & Cstr(NewDataSetKOSTT.Vehicle) & ";" & _
   Cstr(NewDataSetKOSTT.CostObjectType) & ";" & Cstr(NewDataSetKOSTT.TimeFunction) & ";" & Cstr(NewDataSetKOSTT.Modus) & ";" & _
   Cstr(NewDataSetKOSTT.StandardTime) & ";" & Cstr(NewDataSetKOSTT.ExtraWork) & ";" & Cstr(NewDataSetKOSTT.ExtraHours) & ";" & _
   Cstr(NewDataSetKOSTT.AllocatedTime & ";" & NewDataSetKOSTT.MinDrivingTime)
   
   Call ReportWrite(Eventname & " - Datensatz: " & DataSetKOSTT)
   
Leave:
   Exit Function
   
ErrHandle:
   Call ReportWriteError(EventName & " - Error" & Str(Err) & ": " & Error$ & " in Zeile " & Erl)
   Resume Leave   
End Function
--- Ende Zitat ---

Wenn ich jetzt mit 4 Feldern arbeite muss ich das für die Zeile NewDataSetKOSTT.ID = Cstr(docCO.ID(0)) ja entsprechend bei If docCO.CostObjectType(0) = "1" Then.... umsetzen, was den Code noch unübersichtlicher macht.

Glombi:
Ein sachdienlicher Hinweis: Man kann einfach mit @Matches(<Feld>;"+{0-9}") abfragen, ob ein Textfeld nur Zahlen beinhaltet.

Bsp:
@If(
   @Matches(Feld;"+{0-9}");
      @Success;
   @Failure("Bitte nur Zahlen eingeben.")
)

Und ja, es gibt Fälle, wo man ein Textfeld braucht - bspw. für Postleitzahlen. Es soll ja welche mit führenden Nullen geben und in einem Zahlfeld werden die armen Dinger einfach von Notes gekillt.

Edit: In Script gibts dazu die Like Funktion.

Andreas

Demian:

--- Zitat von: Glombi am 05.10.10 - 09:55:54 ---Edit: In Script gibts dazu die Like Funktion.
--- Ende Zitat ---

Genau das meinte ich mit "elegantere" Methoden. Like kannte ich bisher nicht, habe es aber gerade getestet stellt einen optimalen Schleifenersatz dar. Werde es später entsprechend ändern. Vielen, vielen Dank.

Gruß
Demian

Demian:
so wird letzlich aus:


--- Zitat ---...
If Not Isnumeric(strCO_ID) Then
   boolNotNumeric = true
Else
   'be sure ID is not hexadecimal
   For intChar = 65 To 90
      If Instr(Ucase(strCO_ID),Chr(intChar)) > 0 Then
         boolNotNumeric = true
      End If ' Instr(strTest,Chr(intChar)) > 0
   Next intChar
End If 'Not Isnumeric(strCO_ID)
...
--- Ende Zitat ---


jenes:


--- Zitat ---...
If Not (Isnumeric(strCO_ID)) Then
   boolNotNumeric = True
Else
   'be sure ID is not hexadecimal
   If strCO_ID Like "*[a-z,A-Z]*" Then boolNotNumeric = True
End If 'Not (Isnumeric(strCO_ID))
...
--- Ende Zitat ---


Damit sollte es doch eigentlich nicht mehr dazu kommen, dass was anderes außer Zahlen eingegeben wird, oder?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln