Creating a new record with an invalid time value, there is no error indication on the form, and the record is not added.
The log indicates the value "8:00 xx" is rejected at the server.
This is true, even if a 'valid' value "8:00" is entered.
But, works when the value "08:00" is entered.
Form validation is done before saving. Here is the SAVE button code.
And, here is the form.
I am puzzled.
If the TimeItem validation fails on the server, why not at the client on the form, first?
Why does the server accept '08:00' as input, but not '8:00'?
Interesting, yes?
Rick
P.S. I am running SmartClient Version: v8.3p_2014-06-27/EVAL on Mozilla Firefox 20.0 with Firebug using Windows 7 Premium 64 bit.
The log indicates the value "8:00 xx" is rejected at the server.
Quote:
|
=== 2014-08-15 19:18:48,468 [sor2] DEBUG RPCManager - Request #1 (DSRequest) payload: { values:{ DueReminderDate:new Date(1408060800000), DueReminderTime:"8:00 xx", CommunityID:101, ProjectID:102, TaskID:101, StatusChangeOption:true, AnyChangeOption:false, DueReminderOption:false, TeamMemberID:104 }, operationConfig:{ dataSource:"TaskSubscriber", operationType:"add" }, componentId:"TaskSubscriberForm", appID:"builtinApplication", operation:"TaskSubscriber_add", oldValues:{ }, criteria:{ } } === 2014-08-15 19:18:48,483 [sor2] INFO IDACall - Performing 1 operation(s) === 2014-08-15 19:18:48,483 [sor2] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null === 2014-08-15 19:18:48,483 [sor2] DEBUG DeclarativeSecurity - DataSource TaskSubscriber is not in the pre-checked list, processing... === 2014-08-15 19:18:48,483 [sor2] DEBUG AppBase - [builtinApplication.TaskSubscriber_add] No userTypes defined, allowing anyone access to all operatio ns for this application === 2014-08-15 19:18:48,483 [sor2] DEBUG AppBase - [builtinApplication.TaskSubscriber_add] No public zero-argument method named '_TaskSubscriber_add' f ound, performing generic datasource operation === 2014-08-15 19:18:48,483 [sor2] DEBUG ValidationContext - [builtinApplication.TaskSubscriber_add] Adding validation errors at path '/TaskSubscriber/ DueReminderTime': {errorMessage=Must be a time.} === 2014-08-15 19:18:48,483 [sor2] INFO Validation - [builtinApplication.TaskSubscriber_add] Validation error: [ { DueReminderTime:{ errorMessage:"Must be a time." } } ] |
Quote:
|
=== 2014-08-15 19:22:12,953 [sor3] DEBUG RPCManager - Request #1 (DSRequest) payload: { values:{ DueReminderDate:new Date(1408060800000), DueReminderTime:"08:00 AM", CommunityID:101, ProjectID:102, TaskID:101, StatusChangeOption:true, AnyChangeOption:false, DueReminderOption:false, TeamMemberID:102 }, operationConfig:{ dataSource:"TaskSubscriber", operationType:"add" }, componentId:"TaskSubscriberForm", appID:"builtinApplication", operation:"TaskSubscriber_add", oldValues:{ }, criteria:{ } } === 2014-08-15 19:22:12,968 [sor3] INFO IDACall - Performing 1 operation(s) === 2014-08-15 19:22:12,969 [sor3] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null === 2014-08-15 19:22:12,969 [sor3] DEBUG DeclarativeSecurity - DataSource TaskSubscriber is not in the pre-checked list, processing... === 2014-08-15 19:22:12,969 [sor3] DEBUG AppBase - [builtinApplication.TaskSubscriber_add] No userTypes defined, allowing anyone access to all operatio ns for this application === 2014-08-15 19:22:12,969 [sor3] DEBUG AppBase - [builtinApplication.TaskSubscriber_add] No public zero-argument method named '_TaskSubscriber_add' f ound, performing generic datasource operation === 2014-08-15 19:22:12,969 [sor3] DEBUG ValidationContext - [builtinApplication.TaskSubscriber_add] Adding validation errors at path '/TaskSubscriber/ DueReminderTime': {errorMessage=Must be a time.} === 2014-08-15 19:22:12,969 [sor3] INFO Validation - [builtinApplication.TaskSubscriber_add] Validation error: [ { DueReminderTime:{ errorMessage:"Must be a time." } } ] |
Quote:
|
=== 2014-08-15 19:24:01,842 [sor7] DEBUG RPCManager - Request #1 (DSRequest) payload: { values:{ DueReminderDate:new Date(1408060800000), DueReminderTime:new Date(28800000), CommunityID:101, ProjectID:102, TaskID:101, StatusChangeOption:true, AnyChangeOption:false, DueReminderOption:false, TeamMemberID:102 }, operationConfig:{ dataSource:"TaskSubscriber", operationType:"add" }, componentId:"TaskSubscriberForm", appID:"builtinApplication", operation:"TaskSubscriber_add", oldValues:{ }, criteria:{ } } |
Code:
if (form.validate(false)) { // alert("validation succeeded."); /**/
form.saveData();
if (!form.hasErrors()) {
oldValues = null;
newValues = null;
form.rememberValues();
form.newLogEntry = null;
//form.setValue("Notes", null);
form.getItem("SaveButton").setDisabled(true);
form.getItem("UndoButton").setDisabled(true);
form.changesPending = false;
TaskSubscriberWindow.closeClick();
} else { alert("errors during save.");
}
} else { alert("validation failed."); /**/
}Code:
isc.DynamicForm.create({ ID:"TaskSubscriberForm",
autoDraw:false,
dataSource:"TaskSubscriber",
numCols:6,
overflow:"hidden",
fields:[
{
name:"TaskID",
_constructor:"HiddenItem"
},
{
name:"ProjectID",
visible:false,
disabled:false,
_constructor:"TextItem"
},
{
name:"CommunityID",
endRow:true,
visible:false,
disabled:false,
_constructor:"TextItem"
},
{
name:"TeamMemberID",
title:"Team Member",
visible:false,
width:300,
colSpan:3,
required:true,
valueField:"TeamMemberID",
displayField:"TeamMemberName",
optionDataSource:TeamMember,
optionOperationId:"excludeCurrentTaskSubscribers",
autoFetchData:false,
cachePickListResults:"false",
_constructor:"SelectItem"
},
{
canEdit:false,
name:"TeamMemberName",
title:"Team Member",
width:300,
colSpan:3,
visible:false,
shouldSaveValue:false,
disabled:false,
_constructor:"TextItem"
},
{
name:"UndoButton",
title:"UNDO",
startRow:false,
endRow:false,
disabled:true,
click:"Log.setPriority(\"Log\", 5);\nLog.logDebug(\"********************** TaskSubscribersForm.UndoButton.Click\");\n\n var form = this.form;\n form.reset();\n form.changesPending = false;\n form.newLogEntry = null;\n form.getItem(\"SaveButton\").setDisabled(true);\n form.getItem(\"UndoButton\").setDisabled(true);\n form.clearErrors(true);\n\nLog.logDebug(\"***END***END***END*** TaskSubscribersForm.UndoButton.Click\");",
_constructor:"ButtonItem"
},
{
name:"SaveButton",
title:"SAVE",
startRow:false,
disabled:true,
click:"TaskSubscriberForm_SaveButton_click(this.form);",
_constructor:"ButtonItem"
},
{
name:"AnyChangeOption",
title:"Any Change Option",
titleOrientation:"top",
_constructor:"CheckboxItem"
},
{
name:"StatusChangeOption",
title:"StatusChangeOption",
titleOrientation:"top",
prompt:"Select to be alerted on changes in status, due date or owner.",
_constructor:"CheckboxItem"
},
{
name:"DueReminderOption",
title:"Due Reminder Option",
titleOrientation:"top",
startRow:false,
_constructor:"CheckboxItem"
},
{
name:"DueReminderDate",
title:"Due Reminder Date",
titleOrientation:"top",
_constructor:"DateItem"
},
{
name:"DueReminderTime",
title:"Due Reminder Time",
titleOrientation:"top",
defaultValue:"08:00 am",
_constructor:"TimeItem"
}
],
width:"100%",
height:"100%",
visibilityChanged:"",
itemChanged:"Log.setPriority(\"Log\", 5);\nLog.logDebug(\"********************** TaskSubscribersForm.itemChanged\");\n\n this.getItem(\"SaveButton\").setDisabled(false);\n this.getItem(\"UndoButton\").setDisabled(false);\n\nLog.logDebug(\"***END***END***END*** TaskSubscribersForm.itemChanged\"); "
})If the TimeItem validation fails on the server, why not at the client on the form, first?
Why does the server accept '08:00' as input, but not '8:00'?
Interesting, yes?
Rick
P.S. I am running SmartClient Version: v8.3p_2014-06-27/EVAL on Mozilla Firefox 20.0 with Firebug using Windows 7 Premium 64 bit.