Configuração de entrada de data/hora para diferentes tipos de item de ação
Depois de criar uma tela de formulário de entrada e definir seu atributo IncludeTimezone para entradas de data/hora, você deve associar a tela do formulário de entrada a um item de ação. A forma como você configura as entradas de data/hora depende do tipo de item de ação que você usa.
| Tipo de item de ação | Configurar |
|---|---|
| Novo ou Atualização | Certifique-se de que as entradas de data/hora sejam mapeadas para campos de data/hora na instância de back-end. A instância de back-end usa as informações de Fuso horário do dispositivo enviadas pela tela do formulário de entrada. Em seguida, a instância de back-end converte o valor de data/hora em Tempo universal coordenado (UTC/GMT) antes de salvá-lo no banco de dados. |
| Script | Você deve converter o valor de entrada de data/hora em UTC/GMT. Consulte os exemplos de script a seguir para obter mais informações. Para obter mais informações sobre scripts em geral para ServiceNow, consulte Script Nota: Personalizações podem ser necessárias dependendo do caso de uso envolvido. |
Exemplo de script GlideDateTime
O exemplo a seguir define campos do GlideDateTime tipo.
/sys_sg_write_back_action_step.do?sys_id=b390e6a7c1120110fa9b5abd6a7dbb64
(function WriteBackAction(parm_input, parm_variable, actionResult) {
var shortDescription = parm_input.shortdescription;
var scheduledStart = parm_input.expectedstart;
var estimatedEnd = parm_input.estimatedend;
var description = parm_input.description;
var wotSysId = parm_variable['sys_id'];
var wotGr = new GlideRecord("wm_task");
wotGr.get(wotSysId);
wotGr.setValue("description", description);
wotGr.setValue("short_description", shortDescription);
var newEnd = new GlideDateTime(estimatedEnd);
var endMS = newEnd.getNumericValue();
var newStart = new GlideDateTime(scheduledStart);
var startMS = newStart.getNumericValue();
if (endMS - startMS < 0) {
gs.addErrorMessage(gs.getMessage("The start date should come before the end date"));
} else {
//set the time on screen all the time
wotGr.setValue("expected_start", newStart);
wotGr.setValue("estimated_end", newEnd);
var duration = endMS - startMS;
var newDur = new GlideDuration();
newDur.setValue(duration);
wotGr.setValue("estimated_work_duration", newDur);
//check double booking no matter which field is changed. set needs_attention so that dispatcher can review it.
var info = new global.FSMAgentInfo(gs.getUserID());
var doubleBooking = info.allowAgentDoubleBookingTask();
if (doubleBooking){
var conflict = !(new global.SMDDateValidation().checkSchedulingConflictSimple(wotGr));
if (conflict) {
//BR Date Checks will display conflict message as Warning: {0} has been scheduled for a time the assigned
//only when time change.
wot.Gr.setValue("needs_attention", true);
}
}
- Neste exemplo,
expected_starte.estimated_endos campos são editados com base nos valores de suas entradas de data/hora correspondentes deesperadoinícioe.estimatoend. - Porque o atributo IncludeTimezone está definido como verdadeiro .
parm_input.expectedstartA variável retorna uma cadeia de caracteres de data/hora no formato AAAA-MM-DDThh:mm:ss.sssTZD. Para permitir que o sistema manipule este formato de data/hora, inicialize um objeto GlideDateTime passando a cadeia de caracteres para o construtor. - Porque
expected_starte.estimated_endSão colunas de data e hora no banco de dados, você pode chamar diretamente GlideRecord.setValue() e passar o.GlideDateTimeobjeto como o valor.
Exemplo de script GlideScheduleDateTime
O exemplo a seguir define campos do GlideScheduleDateTime tipo.
/sys_sg_write_back_action_item.do?sys_id=539b20d6b72120107be0e34e9e11a971
(function WriteBackAction(parm_input,parm_variable,actionResult) {
var personalSchedule = new global.FSMMobileUtil().getUserSchedule(parm_variable.user);
if (gs.nil(personalSchedule)) {
gs.error("create_event: personal schedule id is not found.");
gs.addErrorMessage(gs.getMessage("Create Event Failed"));
return;
}
if(gs.nil(parm_input.type))
parm_input.type = "";
var scheduleEntryGR = new GlideRecord("cmn_schedule_span");
scheduleEntryGR.initialize();
scheduleEntryGR.setValue("name", parm_input.name);
var start_time = new GlideDateTime(parm_input.start_time);
scheduleEntryGR.start_date_time = start_time.getDisplayValueInternal();
var end_time = new GlideDateTime(parm_input.end_time);
scheduleEntryGR.end_date_time = end_time.getDisplayValueInternal();
scheduleEntryGR.setValue("show_as", parm_input.show_as);
scheduleEntryGR.setValue("type", parm_input.type);
scheduleEntryGR.setValue("user", parm_variable.user);
scheduleEntryGR.setValue("schedule", personalSchedule);
scheduleEntryGR.setValue("repeat_type", parm_input.repeats);
if(parm_input.repeats!=""){
scheduleEntryGR.setValue("repeat_count", parm_input.repeat_every);
scheduleEntryGR.repeat_until = parm_input.repeat_until;
}
scheduleEntryGR.insert();
})(parm_input,parm_variable,actionResult);
- Neste exemplo,
start_date_timee.end_date_timeos campos de uma entrada de programação são definidos com base nos valores de suas entradas de data/hora correspondentes destart_timee.end_time. - . IncludeTimezoneo atributo está definido como verdadeiro .
parm_input.start_timeA variável retorna uma cadeia de caracteres de data/hora no formato AAAA-MM-DDThh:mm:ss.sssTZD. Para permitir que o sistema manipule este formato de data/hora, inicialize umGlideDateTimepassando a cadeia de caracteres para o construtor. - Porque
start_date_timee.end_date_timeNão são colunas de data e hora no banco de dados (em vez disso, são colunas de data/hora de programação), seus valores são definidos comgr.start_date_time_time_value.Nota:.date_time_valueEspera-se que esteja no Fuso horário do perfil do usuário (o valor fornecido deve serValor de exibiçãode umGlideDateTime). Esta configuração torna possível chamar o. GlideDateTime.getDisplayValueInternal() Método, que retorna uma cadeia de caracteres de data/hora no formato interno de AAAA-MM-DD hh:mm:ss e no Fuso horário do perfil do usuário.