У меня проблема с переменными View Scope в Lotus Notes 9.0.1.
Пользователь сообщил об ошибке в моем приложении, когда переменные видимости могут стать нулевыми при загрузке страницы - переменная является массивом, к которому пытается получить доступ вычисленное значение метки в пользовательском элементе управления, вызывая исключение времени выполнения. Переменная должна быть загружена с помощью библиотечного метода, вызываемого скриптом вычисленного заголовка для панели аккордеона, которая содержит пользовательский элемент управления, который пытается ее прочитать.
Все это работает каждый раз, насколько я тестировал, но один пользователь приложения сообщил об исключительной ситуации во время выполнения. Следуя дальнейшим исследованиям, я убедился, что ошибку можно воспроизвести, выполнив сборку приложения и нажав на ссылку на открытой странице. Читая о таких проблемах и журнале сервера, я узнал, что это может быть вызвано потерей переменных в области видимости, что может быть вызвано тайм-аутом сеанса, но наше приложение должно иметь возможность справляться с тайм-аутами сеанса, используя keepsessionalive элемент управления из библиотеки расширений XPages - но, похоже, он работает не так, как задумано.
Я хотел бы получить информацию о других возможных причинах / триггерах для проблемы (я не смог воспроизвести проблему, о которой сообщал пользователь до сих пор), и альтернативы, чтобы поддерживать сеанс в течение длительных периодов времени. без потери переменных области действия.
Вот код:
Название аккордеона (где переменные загружены, остальные названия похожи):
viewScope.contadorParecer=carregaContadoresParecer(); //Where the variable should be loaded
if(viewScope.contadorParecer.total>0)
return "Pareceres ("+viewScope.contadorParecer.total+")";
else
return "Pareceres"
Script library method (similar code for the others):
function carregaContadoresProposta() {
try {
contadoresProposta = {};
try {
if (arguments[0])
var totalizar = arguments[0];
else
var totalizar = compositeData.totalizarUnidade;
} catch (e) {
var totalizar = false;
}
if (!totalizar) {
var strView = "vw_proposta_contador";
var filtro = sessionScope.usuarioLogado.nome;
} else {
var strView = "vw_proposta_unidade_contador";
var filtro = sessionScope.usuarioLogado.fk_entidade_funcional;
}
//cria navegador
var nav: NotesViewNavigator = database.getView(strView).createViewNavFromCategory(filtro);
var entry: NotesViewEntry = nav.getFirst();
var total = 0;
while (entry != null) {
var categoria = entry.getColumnValues()[1];
categoria = @UpperCase(categoria);
contadoresProposta[categoria] = entry.getColumnValues()[entry.getColumnValues().size() - 1];
if (!categoria.isEmpty())
total += contadoresProposta[categoria];
var tmpentry: NotesViewEntry = nav.getNextCategory();
entry.recycle();
entry = tmpentry;
}
contadoresProposta["total"] = total;
return contadoresProposta.clone();
} catch (e) {
printError(e, "carregaContadoresProposta", "Script Library ContextualProposta");
}
}
Пользовательский элемент управления (contadorAcompanhamento, contadorProposta и contadorParecer обнуляется перед чтением):
var label=item.split("|")[0];
label=label.indexOf("{")!=-1?label.split("{")[0]:label;
var parecer=compositeData.parecer[0];
var acompanhamento=compositeData.acompanhamento;
if(!parecer){
if(acompanhamento){
var total=viewScope.contadorAcompanhamento[@UpperCase(label)];
}else{
var total=viewScope.contadorProposta[@UpperCase(label)];
}
}else{
var total=viewScope.contadorParecer[@UpperCase(label)];
}
if(total!=undefined)
return label+" ("+ total +")"
else
return label;
Ошибка времени выполнения:
Error while executing JavaScript computed expression
Script interpreter error, line=11, col=37: 'viewScope.contadorProposta' is null and cannot be accessed as an array
Первая ошибка, обнаруженная в журнале сервера пользователя: (вероятно, вызвана установкой tmpEntry в библиотеке сценариев)
Возникла исключительная ситуация при вызове метода NotesViewNavigator.getNextCategory ()