Как получить состав узла дерева

Автор Bender, 15.06.09, 12:57:40

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

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

Bender

 
  Как получить полный состав выбранного узла в дереве ЛОЦМАН 9 в
режиме базы данных?

Методы GetFullTree и GetAllLinkedObjects возвращают ошибку с сообщением,
что объект должен быть взят на редактирование.

Black_Walker

Ну надо думать, что для начала перевести еденицу в чекаут нужно. Это первое что пришло в голову.

Bender

Цитата: tarsv83 от 15.06.09, 13:56:40
Ну надо думать, что для начала перевести еденицу в чекаут нужно. Это первое что пришло в голову.

В чекаут переводить еденицу нельзя (сработают блокировки узла). 
Нужен элементарный (рекурсивный) обход элементов узла в режиме базы данных
без блокировки объекта.

teplinskiy

Методы GetFullTree и GetAllLinkedObjects не вносят изменений в объект (группу объектов) для которого вызываются, следовательно прекрасно используются в режиме базы данных.

Обратите внимание также на метод GetLinkedObjects и  его  вариации:

Возвращает список связанных объектов
Variant GetLinkedObjects(
BSTR stTypeName,        // название типа
BSTR stProductName,        // ключевой атрибут
BSTR stVersionNumber,        // версия объекта
BSTR stLinkType,        // тип связи
WordBool boInverse,        // направление
WordBool boFullLink,        // признак полной разузловки
WordBool boGroupByProduct, // признак группировки по изделиям (для случая полной разузловки)
WordBool boForTree,        // признак вывода для "дерева"
Variant inReturnCode,        // код возврата
Variant stErrorMessage,        // сообщение об ошибке
);

Возвращаемое значение:

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


Может Вам необходим пример реализации...???
Вот:
function TVersion.GetLinkedObjects(stLinkName: string; boDirection, boFullParse, boGroupByProduct, boForTree : boolean): Variant;
var cdsLocal: TClientDataSet;
begin
  cdsLocal := TClientDataSet.Create(nil);
  try
    cdsLocal.Data := RunMethod('GetLinkedObjects', [
      Self.stType, Self.stProduct, Self.stVersion,
      stLinkName, boDirection, boFullParse, boGroupByProduct, boForTree]);
  except
    cdsLocal.Data := null;
  end;
  GetLinkedObjects := cdsLocal.Data;
  cdsLocal.Free;
end;