Проблема поиска в БД, Lotus Notes

У меня есть сценарий, в котором есть три поля, на основе выбора первого поля (3 значения в первом поле), следующее поле получает значения (это поле списка диалогов) через столбец DB. а затем на основе выбора второго поля приходит третье поле. Все вышеперечисленные поля являются полями списка диалогов.

Проблема заключается в множественном выборе, когда когда-либо выбираются несколько значений из первого поля, следующие поля появляются, поскольку используется DBColumn (из-за меньших значений), но поскольку второе поле имеет много значений, мы должны использовать поиск в DB и здесь множественный выбор не извлекает данные для соответствующего поля.

Например. У меня есть поле с именем «База данных» (имеющее 3 значения), а два других поля - «Проект» (много значений) и «Бренд».

Я использую DBColumn для получения значений в поле проекта из выбора поля базы данных (множественный выбор), который я получаю правильно (используя @if), но после множественного выбора поля проекта (есть много значений) я не могу получить значения в следующем поле (с использованием DBLookup).

Пожалуйста, дайте мне знать о возможном обходном пути ....


person Himanshu    schedule 22.10.2013    source источник


Ответы (1)


Во-первых: ваш код, вероятно, помог бы в решении этой проблемы, хотя я думаю, что это не связано с кодом:

Проверьте свойство поля «Обновлять поля при изменении ключевого слова» в проекте и свойство «Обновить выбор при обновлении документа» в поле бренда.

Если вы не получаете НИКАКИХ значений при выборе второго проекта, проверьте, правильно ли используется ваш ключ для поиска в качестве значения Multiple для вашего DBLookup и не пытается ли он найти что-то вроде «значение1; значение2» вместо "значение1": "значение2" ...

Практика ставок для отладки чего-то вроде этого состоит в том, чтобы иметь скрытое поле "BrandList", вычисленное для отображения, с DBLookup в нем:

_viw := "YourViewName";
_crit := Project;
_col := 2;
REM "Don't do lookups, if project is empty"; 
@if( _crit = "" ; @Return( "" ) ; "" ); 
_lkp := @DBLookup( "" : "NoCache" ; _viw ; _crit ; _col );
@if( @IsError( _lkp ) ; "" ; _lkp );

И пусть бренд указывает на это поле (просто используйте имя поля как формулу). таким образом вы можете легко отлаживать возвращаемые значения.

Вдобавок: если вы не уверены, что для каждого выбранного вами проекта будут бренды, вам необходимо добавить [FailSilent] в поиск, иначе весь поиск завершится неудачно, если не удастся найти только один из проектов ... _lkp := @DBLookup( "" : "NoCache" ; _viw ; _crit ; _col; [Failsilent] );

НО: Failsilent - это очень плохо при отладке чего-либо, так как вы никогда не получаете сообщение об ошибке ... И: для целей отладки вы, конечно, НЕ используете строку @ IsError- и просто возвращаете _lkp ...

person Torsten Link    schedule 22.10.2013
comment
Спасибо за предложение, Торстен, но проблема в том, что я не уверен, какой ключ следует использовать для поиска, поскольку может быть несколько перестановок и комбинаций, и мы можем записать все Комбинации в первом столбце представления, чтобы получить поиск, Я в основном ищу, что передать здесь ключик от жопы. - person Himanshu; 22.10.2013
comment
Вам не нужно ничего переставлять. Первый столбец представления классифицируется по проекту. И ваш поиск принимает список в качестве ключа. @DBlookup выполняет поиск КАЖДОГО ОДНОГО КЛЮЧА (один за другим) и возвращает результат всех поисков вместе ... - person Torsten Link; 22.10.2013
comment
Это главная сила языка формул: способность работать со списками, как если бы они были отдельными значениями, не думая о перестановках ... - person Torsten Link; 22.10.2013
comment
Одно небольшое исправление: @DbLookup действительно выполняет поиск для каждого ключа в списке, НО ... он останавливается при первом неудачном поиске. Так что лучше убедитесь, что ключи (все еще) в списке. - person D.Bugger; 23.10.2013
comment
@ D.Bugger Очень частая проблема. Безопасный обходной путь - использовать @Transform или @For для выполнения нескольких поисков. - person Frantisek Kossuth; 24.10.2013
comment
Это можно сделать без @For или @Transform. Было бы очень жаль работать вокруг неявных циклических возможностей языка формул ... - person D.Bugger; 25.10.2013
comment
Нет необходимости в безопасном обходном пути ... [Failsilent] выполняет ВСЕ поиски и просто не возвращает обратно те, которые содержат ошибки ... поэтому Full Ack to D.Bugger ... Было бы очень жаль обходного пути .. . - person Torsten Link; 25.10.2013