Party API PartyDocImport

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Party API PartyDocImport

Сообщение Marina »

Кто-нибудь пытался реализовать функцию PartyDocImport на VBА (для офисных приложений)? У меня или отрабатывает с результатом =0, но при этом изменений не делает (т.е. документ не импортирует и записей в таблице File1 для него не появляется) или скидывает офис с ошибкой приложения. Других результатов, несмотря на многочисленные эксперименты, достичь не удалось, обидно.
Помогите, кто знает.
Спасибо.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

выложите исходник (на VBA) (прям здесь) - посмотрим...

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Сообщение Marina »

Public Type PtArcDocInfo
piObjID(17) As Byte
dwSize As Long
lpszDescription(50) As Byte
dwTypeID(7) As Byte
dwAppID(7) As Byte
dwStorageID(7) As Byte
lpszNote(50) As Byte
lpszOriginalFile(50) As Byte
End Type

Public Declare Function PartyDocImport Lib "PartyAPI" (dwFlags As Long, lpDocInfo As PtArcDocInfo,ByVal lpDocId As String) As Integer

SumRc = 0
Call StrToArr(DocInfo.piObjID(0), lpObjID)
Call StrToArr(DocInfo.lpszDescription(0), strVal(40) & vbNullChar)
Call CopyMemory(DocInfo.dwTypeID(0), CLng(10), 8)
Call CopyMemory(DocInfo.dwAppID(0), CLng(10), 8)
Call CopyMemory(DocInfo.dwStorageID(0), CLng(10), 8)
Call StrToArr(DocInfo.lpszNote(0), strVal(40) & vbNullChar)
Call StrToArr(DocInfo.lpszOriginalFile(0), strVal(40) & vbNullChar)
DocInfo.dwSize = Len(DocInfo)

lpDocId = Space(18)
rc = PartyDocImport(PARTY_ARCDOCIMPORT_COPY, DocInfo, lpDocId)
rc = PartyUpdate()
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

можно один простой вопрос, не являюсь специалистом в этой области так кое что делал - и тема в общем интересна
не получилось в vba excel зарегистрировать библиотеку partyAPI.dll в Preferense - говорит несовместима

для начала как всегда нужен простой 100% стартовый пример
типа зарегистрировать и вызвать
PartyInit
PartyLoad
PartyUIActivate

к сожалению нет времени вспоминать все сначала
если не сложно покажите простой работающий пример vba-party

с остальным думаю разберемся и импортируем все что нужно, если не я то наверняка кто-то поможет. Просто нужно с чего-то начать. :wink: :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Сообщение Marina »

Вот пример самой Лоции. В моей программе многие функции работают (тот же PartyObjAttribSet), но вот с импортом через api глухо

Очень приятно, что нашлись неравнодушные люди :)

Option Base 0

Private Type PtDateTime
Year As Integer
Month As Byte
Day As Byte
Hour As Byte
Min As Byte
Sec As Byte
MilSec As Long
End Type
Const cPtDateTimeSize As Integer = 11

Private Type PtValue
cDataType As Byte
szValueS(255) As Byte
dblValueN(7) As Byte
dtValueT(cPtDateTimeSize - 1) As Byte
End Type
Const cPtValueSize As Integer = 276

Private Type PtList
dwSize As Long
wType As Integer
wCnt As Integer
End Type
Const cPtListSize As Integer = 8

Private Type PtObjAttrib
piID(17) As Byte
piAttribID(17) As Byte
pvValue(cPtValueSize - 1) As Byte
cMultiType As Byte
cLinkMode As Byte
piGroupID(17) As Byte
szEditMask(255) As Byte
cEditType As Byte
szDescription(50) As Byte
szGroupDescr(50) As Byte
End Type
Const cPtObjAttribSize As Integer = 691

Private Type PtObject
piID(17) As Byte
piTypeID(17) As Byte
szDescription(50) As Byte
szTypeDesc(50) As Byte
szTypeMnemo(4) As Byte
cTypeClass As Byte
End Type
Const cPtObjectSize As Integer = 144

Private Type PtArgFind
wType As Integer
lpFindArg As Long
End Type


Private Declare Function PartyInit Lib "PartyAPI" (ByVal Wnd As Long) As Integer
Private Declare Function PartyUpdate Lib "PartyAPI" () As Integer

Private Declare Function PartyUIObjectOpen Lib "PartyAPI" (ByVal lpObjID As String, ByVal dwFlags As Long, ByVal Res1 As Long) As Integer
Private Declare Function PartyUIObjectSelect Lib "PartyAPI" (ByVal lpObjID As String, ByVal dwFlags As Long, ByVal Res1 As Long) As Integer

Private Declare Function PartyObjectGetEx Lib "PartyAPI" (lpFindArg As PtArgFind, lpList As Long) As Integer
Private Declare Function PartyObjAttribGet Lib "PartyAPI" (ByVal lpObjID As String, ByVal lpTLinkID As String, ByVal lpAttrID As String, lpList As Long) As Integer
Private Declare Function PartyObjAttribSet Lib "PartyAPI" (ByVal lpObjID As String, ByVal lpTLinkID As String, ByVal lpAttrID As String, lpValue As PtValue, ByVal lpID As String) As Integer

' WinAPI
Private Declare Function StrToArr Lib "Kernel32" Alias "lstrcpyA" (ByRef RetVal As Any, ByVal Str As String) As Long
Private Declare Function CopyStr Lib "Kernel32" Alias "lstrcpyA" (ByVal RetVal As String, Ptr As Any) As Long
Private Declare Function StrLen Lib "Kernel32" Alias "lstrlenA" (Ptr As Any) As Long
Private Declare Function StrPtr Lib "Kernel32" Alias "lstrcpyA" (RetVal As Byte, ByVal Ptr As String) As Long
Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Sub CopyMemoryPtr Lib "Kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Private Declare Sub LocalFree Lib "Kernel32" (ByVal lPtr As Long)

' ñòðóêòóðû VB
Private Type vbObjAttrib
piID As String
piAttribID As String
pvValue As Variant
cMultiType As String
cLinkMode As String
piGroupID As String
szEditMask As String
cEditType As String
szDescription As String
szGroupDescr As String
End Type
Private Type vbObject
piID As String
piTypeID As String
szDescription As String
szTypeDesc As String
szTypeMnemo As String
cTypeClass As String
End Type

Sub PartyGetObjectAttrib()
Dim lpObjID As String
Dim dtValueT As PtDateTime
Dim lpAttrib() As vbObjAttrib, lpAttrib1 As vbObjAttrib
Dim lsStr As String
Dim lListPtr As Long, lPtr As Long
Dim lpList As PtList
Dim lpRow As PtObjAttrib
Dim ldblValue As Double

PartyInit (0)

lpObjID = Space(18)
rc = PartyUIObjectSelect(lpObjID, 0, 0)





Dim lpValID As String

Value.cDataType = Asc("S") ' String
Call StrToArr(Value.szValueS(0), "Значение атрибута" & vbNullChar)

' Value.cDataType = Asc("N") ' Double
' Call CopyMemory(Value.dblValueN(0), CDbl(123.45), 8)

' Value.cDataType = Asc("T") ' DateTime
' dtValueT.Day = 21
' dtValueT.Month = 11
' dtValueT.Year = 2000
' Call CopyMemory(Value.dtValueT(0), dtValueT, 11)

lpValID = Space(18) '


rc = PartyObjAttribSet("43", "0", "-30", Value, lpValID)

rc = PartyUpdate()

End Sub
Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

Marina, если Александр не специалист, то я вообще нахожусь в последних рядах неспециалистов. И это правда. Но вот что я подумал, поскольку Вы импортируете из office, не загружено ли у Вас расширение для интеграции с Лоцией. Или выражусь по-другому - не мешают ли они друг другу - Ваша программа и расширение?
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

пока мне кажется что ошибка вызвана или из за отсутствия инициализации переменных типа pObjID = Space(17) (если нет то офис вылетает 100%) или из за преобразования типов - вобщем разбираюсь пока... (оказывается пример то был на диске ApiTest.Doc & Alt+F11)

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Сообщение Marina »

Инициализация переменных не помогает. С типами возможно. Я эту структуру пыталась 3-мя способами описывать :

1. Если действовать согласно описанию структуры в руководствах (PartyAPI.doc)

Public Type PtArcDocInfo
piObjID As String
dwSize As Long
lpszDescription As String
dwTypeID As Long
dwAppID As Long
dwStorageID As Long
lpszNote As String
lpszOriginalFile As String
dwFlags As Long
End Type

2. по аналогии со структурой PtValue описанной в примерах ApiTest.doc

Public Type PtArcDocInfo
piObjID(17) As Byte
dwSize As Long
lpszDescription(50) As Byte
dwTypeID(7) As Byte
dwAppID(7) As Byte
dwStorageID(7) As Byte
lpszNote(50) As Byte
lpszOriginalFile(50) As Byte
End Type

3. наверняка не верно, но так любопытства ради:

Public Type strFileImport
PartyID As String
sDes As String
sDocName As String
sFullName As String
sTypeApp As String
sTypeDoc As String
End Type

В 1-ом случае срабытывает с кодом результата =0, но не производит никаких действий (проверяла и в Lotsia и непосредственно записи в таблице file1 смотрела)

Во 2-м и 3-ем случаях, выдает ошибку приложения и выгружает Excell
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

еще чуть чуть, с поиском и открытием объектов напрямую из екселя уже разобрался - счас попробуем и файлик подцепить к выбранному объекту :wink:

а вообще все это дело натолкнуло на мысль - а может ну его нафиг интерфейс Party ведь можно и на VBA развернуться - там тоже правда все убого в плане интерфейса форм - Но, индикатор прогресса то - есть как ни крути :wink:

ладно пока в процессе....

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Сообщение Marina »

Да я уже тоже так думаю, может ну ее нафиг эту функцию. Можно ведь напрямую через sql-запрос данные в file1 вставить, id формировать можно по алгоритму: находим max в таблице и +100000 (именно так id и формируется, если записи проанализировать). Вопрос с формированием внутреннего имени файла, но тут тоже можно свой алгоритм придумать. Проблема в записи файла в библиотеку, функцию, думаю, найти можно, а вот не будет ли проблемы с PartyArc, если хранилище защищенное? Работу делаю для дилерской компании, как и вы, если не ошибаюсь :), так что на случайности надеятся глупо: где защитят бибилиотеку, а где нет.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

не торопитесь -посмотрим что получится - прямой SQL это не выход (выход конечно но не в ту сторону)

Кстати вы затронули очень интересный вопрос по формированию id что тщательно всеми скрывается по каким то таинственным соображениям. На счет алгоритма вы не совсем правы. На самом деле есть некая служебная таблица привязанная к номеру филиала - в ней несколько строк по типам данных - каждая из которых ведет свой собственный счетчик привязанный к типу. Дыры в случае удаления объектов остаются но как все таки генерить id штатными средствствами я так и не понял - хотя наметился определенный прогресс и в скрипты уже вставлена эта функция - хотелось бы конечно в виде SQL ...

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Сообщение Marina »

У меня что-то так ничего и не получается :( офис вылетает и все. Как у вас успехи?
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

да шеф завалил своей автоматизацией в Excel так что и не вылезти, так что пока никак Лоция побоку - но техподдержку на всякий случай озадачил - сказали будет время сделают.

На самом деле я ждал что Алексей откликнется - он бы помог точно

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Marina
Новый участник
Сообщения: 11
Зарегистрирован: 14 апр 2005, 10:16
Контактная информация:

Сообщение Marina »

Лоцию я тоже озадачивала, они сказали, что я перепутала понятия byVal и byRеf. Пробовала не помогает, попросила прислать пример, они проигнорировали.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Марин... техподдержка как всегда оказалась на высоте файлы нам выслали - надеюсь вы теперь решите свою проблему :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Ответить