Here is some code that will attach a list of sublists to an entity or vla-object
;Create a list of sublists of your data
(setq lstOfSublists (list (list "Partnumber" 1)(list "MemberNumber" 2)))
;Attach the data using the setxdata funtion
(setxdata entSelection lstOfSublists)
;retrieve the xdata using the getxdata function
(setq lstOfSublists (getxdata entSelection))
See routine code below
Peter
Code:
; The setxadata function will add a list of sublists to an object as xdata.
; The first item in each sublist is a unique string application name
(defun SetXData (objSelection lstOfSubLists / DataItem lstData
intDataType lstOfSublistsDXFCodes lstOfSublistsValues
safDXFCodes safDataValues)
(if (= (type objSelection) 'ENAME)
(setq objSelection (vlax-ename->vla-object objSelection))
)
(foreach lstData lstOfSublists
(setq lstOfSublistsDXFCodes (cons 1001 lstOfSublistsDXFCodes)
lstOfSublistsValues (cons (car lstData) lstOfSublistsValues))
(RegApp (car lstData))
(foreach DataItem (cdr lstData)
(cond ; Determine the data type and corrusponding DXF Code
((= (type DataItem) 'INT)
(if (> DataItem 100000)
(setq intDataType 1071) ; Long Data Type
(setq intDataType 1070) ; Integer Data Type
)
)
((= (type DataItem) 'REAL)(setq intDataType 1040)) ; Real Data Type
((= (type DataItem) 'STR)
(if (or (= DataItem "{")(= DataItem "}")) ; String Data Type
(setq intDataType 1002)
(setq intDataType 1000)
)
)
)
(setq lstOfSublistsDXFCodes (cons intDataType lstOfSublistsDXFCodes)
lstOfSublistsValues (cons DataItem lstOfSublistsValues)
)
)
)
(setq safDXFCodes (listToSafearray vlax-vbinteger
(reverse lstOfSublistsDXFCodes))
safDataValues (listToSafeArray vlax-vbvariant
(reverse lstOfSublistsValues)))
(errortrap '(vla-setXData objSelection safDXFCodes safDataValues)))
; Returns a list of sublists that include a application name as the first
; Item in every sublist and data for the remaining members
(defun C:GetXdata ()
(getxdata (car (entsel "\nSelect object with Xdata: ")))
)
(defun GetXdata (objSelection / intCount lstAll lstSub safDXFValues safDXFValues)
(if (= (type objSelection) 'ENAME)
(setq objSelection (vlax-ename->vla-object objSelection))
)
(vla-getxdata objSelection "" 'safDXFCodes 'safDXFValues)
(if (and safDXFCodes
safDXFValues
)
(progn
(setq lstDXFCodes (vlax-safearray->list safDXFCodes)
lstDXFValues (mapcar 'variant-value (vlax-safearray->list safDXFValues))
intCount 0
)
(foreach intDXFCode lstDXFCodes
(if (= intDXFCode 1001)
(if lstSub
(setq lstAll (cons (reverse lstSub) lstAll)
lstSub (list (nth intCount lstDXFValues))
)
(setq lstSub (list (nth intCount lstDXFValues)))
)
(setq lstSub (cons (nth intCount lstDXFValues) lstSub))
)
(setq intCount (1+ intCount))
)
(if lstSub (reverse (cons (reverse lstSub) lstAll)))
)
)
)
; Convert list to Safearray
(defun ListToSafearray (symVariableType lstValues / safValues)
(setq safValues (vlax-make-safearray symVariableType (cons 0 (1- (length lstValues)))))
(vlax-safearray-fill safValues lstValues)
)