Domino 9 und frühere Versionen > ND7: Entwicklung
Textfeld - auf Zahleneingabe prüfen
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