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 usado.
| Tipo de item de ação | Configurar |
|---|---|
| Novo ou Atualizar | Certifique-se de que as entradas de data/hora estejam 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 para o Tempo Universal Coordenado (UTC/GMT) antes de salvá-lo no banco de dados. |
| Script | Você deve converter o valor de entrada de data/hora para 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 tipo GlideDateTime.
/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, os campos
opened_starteopened_endsão editados com base nos valores das entradas de data/horacorrespondentesdeopened_end_início_e_end. - Como o atributo IncludeTimezone está definido como verdadeiro, a variável
parm_input.expectedstartretorna uma cadeia de caracteres de data/hora no formato AAAA-MM-DDThh:mm:ss.sssTZD. Para habilitar o sistema a lidar com este formato de data/hora, inicialize um objeto GlideDateTime passando a cadeia de caracteres para o construtor. - Como
opened_starteopened_endsão colunas de data e hora no banco de dados, você pode chamar GlideRecord.setValue() diretamente e passar o objetoGlideDateTimecomo o valor.
Exemplo de script GlideScheduleDateTime
O exemplo a seguir define campos do tipo GlideScheduleDateTime.
/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, os campos
start_date_timeeend_date_timede uma entrada de programação são definidos com base nos valores das entradas de data/hora correspondentes destart_timeeend_time. - Como o atributo IncludeTimezone está definido como verdadeiro, a variável
parm_input.start_timeretorna uma cadeia de caracteres de data/hora no formato AAAA-MM-DDThh:mm:ss.sssTZD. Para habilitar o sistema a lidar com este formato de data/hora, inicialize um objetoGlideDateTimepassando a cadeia de caracteres para o construtor. - Como
start_date_timeeend_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 = {date_time_value}.Nota:Espera-se que odate_time_valueesteja no fuso horário do perfil de usuário (o valor fornecido deve ser ovalor de exibiçãode umGlideDateTime). Essa configuração torna possível chamar o método GlideDateTime.getDisplayValueInternal(), 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 de usuário.