• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Добавление файла (развитие темы)

Автор bvr, 11.05.11, 11:42:20

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

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

bvr

Добрый день
Делаю так
IPC->RunMethod(CComBSTR(L"CheckOut"), CComVariant(methodParams22), &vaResult);
IPC->RunMethod(CComBSTR(L"ConnectToCheckOut"), CComVariant(methodParams_ConnectToCheckOut), &vaResult);
IPC->RunMethod(CComBSTR(L"NewObject"), CComVariant(methodParams32), &vaResult); //methodParams32[0] = L"Чертеж детали";
IPC->RunMethod(CComBSTR(L"RegistrationOfFile"), CComVariant(methodParams33), &vaResult);

Файл не регистрируется, нахожу вручную объект, созданный "NewObject", беру его в работу, у него иконка серого цвета, а галочка зеленого, вручную не дает добавить файл - в чем причина?

Спасибо

Chaa

Покажите параметры, с которыми вызываются функции сервера приложений. Так не видно, в чем проблема.

bvr

if(wcscmp(fieldValue_TYPE.bstrVal, (BSTR)TEXT("Деталь"))==0)
{
CComSafeArray<VARIANT> methodParams22(6);
methodParams22[0] = L"Деталь";
methodParams22[1] = L"XXXXX";
methodParams22[2] = L"1";
methodParams22[3] = 0;
methodParams22[4] = &inRetCode;
methodParams22[5] = &strErr;
IPC->RunMethod(CComBSTR(L"CheckOut"), CComVariant(methodParams22), &vaResult);

CComSafeArray<VARIANT> methodParams_ConnectToCheckOut(4);
methodParams_ConnectToCheckOut[0] = vaResult;
methodParams_ConnectToCheckOut[1] = L"db1";
methodParams_ConnectToCheckOut[2] = &inRetCode;
methodParams_ConnectToCheckOut[3] = &strErr;
IPC->RunMethod(CComBSTR(L"ConnectToCheckOut"), CComVariant(methodParams_ConnectToCheckOut), &vaResult);

CComSafeArray<VARIANT> methodParams32(6);
methodParams32[0] = L"Чертеж детали";
methodParams32[1] = L"Проектирование";
methodParams32[2] = L"XXXXX";
methodParams32[3] = 0;
methodParams32[4] = &inRetCode;
methodParams32[5] = &strErr;
IPC->RunMethod(CComBSTR(L"NewObject"), CComVariant(methodParams32), &vaResult);

CComSafeArray<VARIANT> methodParams33(8);
methodParams33[0] = L"";
methodParams33[1] = L"Чертеж детали";
methodParams33[2] = L"";
methodParams33[3] = 1;
methodParams33[4] = TEXT("XXXXX");
methodParams33[5] = TEXT("X:\\");
IPC->RunMethod(CComBSTR(L"RegistrationOfFile"), CComVariant(methodParams33), &vaResult);
}

l2qwe

Относительный путь вроде надо указывать без диска. Если надо корень рабочего диска то просто "" вместо "X:\\"

Chaa

В таком виде вы добавляете файл к объекту с идентификатором 1. Нужно:
CComSafeArray<VARIANT> methodParams33(8);
methodParams33[0] = L"Чертеж детали";
methodParams33[1] = L"XXXXX";
methodParams33[2] = L"1";
methodParams33[3] = 0;
methodParams33[4] = L"XXXXX";
methodParams33[5] = L"";
IPC->RunMethod(CComBSTR(L"RegistrationOfFile"), CComVariant(methodParams33), &vaResult);

Или:

long VersionID = vaResult;
CComSafeArray<VARIANT> methodParams33(8);
methodParams33[0] = L"";
methodParams33[1] = L"";
methodParams33[2] = L"";
methodParams33[3] = VersionID;
methodParams33[4] = L"XXXXX";
methodParams33[5] = L"";
IPC->RunMethod(CComBSTR(L"RegistrationOfFile"), CComVariant(methodParams33), &vaResult);

Буква диска не указывается, указывается только путь к файлу относительно рабочего диска и имя файла.

bvr

Добрый день

Такой код не добавляет файл

long VersionID = vaResult;
CComSafeArray<VARIANT> methodParams33(8);
methodParams33[0] = L"";
methodParams33[1] = L"";
methodParams33[2] = L"";
methodParams33[3] = VersionID;
methodParams33[4] = L"XXXXX";
methodParams33[5] = L"";
IPC->RunMethod(CComBSTR(L"RegistrationOfFile"), CComVariant(methodParams33), &vaResult);

Возвращает E_UNEXPECTED
Каким способом получить VersionID?

Есть ли другие способы добавить файл?

Спасибо

Chaa

Идентификатор созданной версии возвращает метод NewObject сервера приложений.
IPC->RunMethod(CComBSTR(L"NewObject"), CComVariant(methodParams32), &vaResult);
long VersionID = vaResult;

Этот код возвращает идентификатор созданной версии?

bvr

Код такой

CComSafeArray<VARIANT> methodParams32(6);
methodParams32[0] = L"Чертеж детали";
methodParams32[1] = L"Проектирование";
methodParams32[2] = L"ХХХХ 111.111.1111.1111.11";
methodParams32[3] = 1;
methodParams32[4] = &inRetCode;
methodParams32[5] = &strErr;
if(IPC->RunMethod(CComBSTR(L"NewObject"), CComVariant(methodParams32), &vaResult)!=S_OK)
   return;

Возвращает
-      vaResult   I4 = 472387   tagVARIANT
      vt   3      unsigned short
      I4   472387      long

Chaa

472387 похоже на идентификатор версии.
Странно, должно работать. Попробуйте проверить еще раз все параметры RegistrationOfFile.
CComSafeArray<VARIANT> methodParams33(8);
methodParams33[0] = L"";
methodParams33[1] = L"";
methodParams33[2] = L"";
methodParams33[3] = VersionID;
methodParams33[4] = L"Имя файла";
methodParams33[5] = L"Имя папки, если есть";
methodParams32[6] = &inRetCode;
methodParams32[7] = &strErr;
IPC->RunMethod(CComBSTR(L"RegistrationOfFile"), CComVariant(methodParams33), &vaResult);

bvr

methodParams33[5] = L"Имя папки, если есть";
Если лежит в корневой папке, то
methodParams33[5] = L"";
а если в х:\123, то
methodParams33[5] = L"\123";
или
methodParams33[5] = L"123\";
Может каких прав нет на добавление файла?

Спасибо

Chaa

Если лежит в корневой папке, то
methodParams33[5] = L"";
а если в х:\123, то
methodParams33[5] = L"123\\";

Цитата: bvr от 16.05.11, 13:30:01
Может каких прав нет на добавление файла?
Попробуйте сделать то же в стандартном клиенте, если он работает, то должно и здесь работать.

bvr

Все, получилось, ОГРОМНОЕ СПАСИБО Chaa,
Но задача до конца не решена ;), сейчас читаю
Variant UpLink(
BSTR stParentType,        // тип объекта-родителя
BSTR stParentProduct,        // значение ключевого атрибута объекта-родителя
BSTR stParentVersion,        // номер версии  объекта-родителя
BSTR stChildType,        // тип объекта-потомка
BSTR stChildProduct,        // значение ключевого атрибута объекта-потомка
BSTR stChildVersion,        // номер версии  объекта-потомка
long inIdLink,        // идентификатор связи
Variant reMinQuantity,        // нижняя граница количества
Variant reMaxQuantity,        // верхняя граница количества
BSTR stIdUnit,        // уникальный идентификатор единицы измерения
WordBool boDel,        // признак удаления экземпляра связи
BSTR stLinkType,        // тип связи
Variant * inReturnCode,        // код возврата
Variant * stErrorMessage,        // сообщение об ошибке
);

Не понятно:
long inIdLink,        // идентификатор связи
-> должен быть 0 ?

Variant reMinQuantity,        // нижняя граница количества
Variant reMaxQuantity,        // верхняя граница количества
-> Что это такое и какое значение?

BSTR stIdUnit,        // уникальный идентификатор единицы измерения
-> Что это такое и какое значение?

WordBool boDel,        // признак удаления экземпляра связи
-> Что это такое и какое значение?

BSTR stLinkType,        // тип связи
-> Что это такое и какое значение?

Речь идет о добавлении файлов и привязки их.

Спасибо.



l2qwe

inIdLink - если связь создается новая то 0

Variant reMinQuantity,        // нижняя граница количества
Variant reMaxQuantity,        // верхняя граница количества
если связь не количественная то 0

stIdUnit - если количество то L"" //пустая строка

boDel - false

stLinkType - текстовое обозначение прямой связи L"Документы"

в Delphi у меня выглядит так связывание Архива ТП(Документ) к Сквозному ТП(Объект)
ЦитироватьappServer.UpLink('Сквозной ТП',
                 'SSSS.XXXXXX.XXX',
                 '1',
                 'Архив техпроцесса',
                 'SSSS.XXXXXX.XXX',
                 '1',
                 0,
                 0,
                 0,
                 '',
                 false
                 ,'Документы',
                 vRerurnCode,vError);

l2qwe

inIdLink  - указывает на конкретную уже существующюю связь и если мы его указываем то будет отредактирована эта связь (кол-во к примеру)
inIdLink  можно достать например от сюда: GetLinkedFast результат [_ID_LINK] int - уникальный идентификатор экземпляра связи;
и при этом если мы укажем boDel = true то связь будет удалена (дочерний объект будет вырезан)

bvr

Добрый день
ВСЕМ ОГРОМНОЕ СПАСИБО !!!!
И заключительный штрих, что-то лоцман не хочет возвращать чекоут, код такой:

CComSafeArray<VARIANT> methodParams22(6);
methodParams22[0] = L"Деталь";
methodParams22[1] = L"ХХХ.....";
methodParams22[2] = L"1";
methodParams22[3] = 0;
methodParams22[4] = &inRetCode;
methodParams22[5] = &strErr;
if(IPC->RunMethod(CComBSTR(L"CheckOut"), CComVariant(methodParams22), &vaResult)!=S_OK)
   return;
vaResult_CheckOut = vaResult;
................................
CComSafeArray<VARIANT> methodParams_CheckIn(4);
methodParams_CheckIn[0] = vaResult_CheckOut;
methodParams_CheckIn[1] = L"transformator";
methodParams_CheckIn[2] = &strErr;
methodParams_CheckIn[3] = &strErr;
hr = IPC->RunMethod(CComBSTR(L"CheckIn"), CComVariant(methodParams_CheckIn), &vaResult);
if(hr!=S_OK)
   return;
Когда проверяю в лоцмане то деталь остается в работе и не возвращается.

Спасибо.

Chaa

Попробуйте вместо
Цитата: bvr от 17.05.11, 12:23:10
methodParams_CheckIn[2] = &strErr;
methodParams_CheckIn[3] = &strErr;
написать
methodParams_CheckIn[2] = &inRetCode;
methodParams_CheckIn[3] = &strErr;

bvr

Все получилось, все работает, всем огромное спасибо!!!!!!