Поиск по определенным критериям

Автор Daiver, 07.02.12, 08:59:43

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Daiver

Здравствуйте! Нужна помощь.
Как найти все объекты в Лоцмане, но с определенным типом (пример: сборочная единица) и состоянием (пример: на утверждение).
Заранее спасибо.

l2qwe

Variant FindObjects(
BSTR stTypeName,        // список типов
BSTR stProductName,        // шаблон поиска для ключевого атрибута
BSTR stVersionNumber,        // шаблон поиска по версиям
BSTR stStateName,        // список состояний
BSTR stAttrCondition,        // шаблон поиска по атрибутам
BSTR stProjects,        // зарезервирован
BSTR stLinkType,        // зарезервирован         
Variant inReturnCode,        // код возврата
Variant stErrorMessage,        // сообщение об ошибке
);

Параметры

stTypeName
[in] Список типов, объекты которых участвуют в поиске.
Список задается в виде: <тип1>#1<тип2>#1<тип3>, где #1 - это ASCII-код 1.
Например: Детали#1Комплекты#1Механообработка.

stProductName
[in] Шаблон поиска для ключевого атрибута объектов.
Может задаваться при помощи стандартного SQL-выражения. Например: Болт%.
stVersionNumber
[in] Шаблон поиска для версий объектов
Может задаваться при помощи стандартного SQL-выражения. Например: 1.%.
stStateName
[in] Список состояний, в которых должны находится объекты, которые участвуют в поиске.
Список задается в виде: <состояние1>#1<состояние2>#1<состояние3>, где #1 - это ASCII код 1.
Например: Аннулирован#1Доработка#1Серия.
stAttrCondition
[in] Шаблон поиска по значениям атрибутов объекта.
Шаблон выглядит так:<условие поиска1>#1<условие поиска2>#1<условие поиска3>.
где: <условие поиска> = <название атрибута>#2<условие для атрибута>
причем <условие для атрибута> = E или !E или <SQL-выражение>
E - условие существования атрибута
!E - условие отсутствия атрибута
<SQL-выражение> - правильное SQL-условие, в котором вместо значения атрибута подставлено его название.
Например: Наименование#2Наименование Like '%черпалка%'#1Масса#2!E#1Описание#2E.
stProject
[in] Зарезервирован.
stLinkType
[in] Зарезервирован.
inReturnCode
[out] Код возврата. Если  0, то метод отработал без ошибок.
stErrorMessage
[out] Сообщение об ошибке. Инициализировано только в случае если inReturnCode <> 0.

Возвращаемое значение
Возвращает набор данных с полями:
[_ID_VERSION] int - уникальный идентификатор версии;
[_TYPE] string - тип объекта;
[_PRODUCT] string - ключевой атрибут объекта;
[_VERSION] string - номер версии объекта;
[_STATE] string - текущее состояние объекта;
[_DOCUMENT] int - является ли документом (1 - является/0 - не является);
[_ACCESSLEVEL] int -  уровень доступа к объекту (1-чтение|2-чтение\запись|3-администрирование) ;
[_LOCKED] int - уровень блокировки объекта (0 - не блокирован/1 - блокирован текущим пользователем/2 - блокирован другим пользователем).




l2qwe

В плагине как то вот так:

DataSet := TClientDataSet.Create(nil);
try
    DataSet.Data := RunMethod('FindObjects',
                                 ['сборочная единица',// список типов
                                 '', // шаблон поиска для ключевого атрибута
                                 '', // шаблон поиска по версиям
                                 'на утверждение',  // список состояний
                                 '',  // шаблон поиска по атрибутам
                                 '',  // зарезервирован
                                 '']);  // зарезервирован
    while not DataSet.Eof do begin
        /////////////////////////////////////////
        //Перебираем найденное
        /////////////////////////////////////////
        DataSet.Next;
    end; 
finally
    DataSet.Free;
end;

Daiver

Получаеться, создаем массив и ищем объекты, которые имеют тип сборочная единица и состоянием на утверждение. Все найденные объекты помещаем в массив. Это так?

l2qwe

Не, в DataSet уже найдены объекты с нужным типом и нужным состоянием.


    while not DataSet.Eof do begin
        /////////////////////////////////////////
        //Перебираем найденное
        /////////////////////////////////////////
        DataSet.Next;
    end; 

Этот цикл пробегается только по объектам типа который мы указали в методе FindObjects, то есть "сборочная единица" в  "на утверждение".
И в этом цикле уже производите нужные вам операции с объектами