I’m trying to get the possible values for a variable that is linked a PDM list. Here’s a visual from my data card to explain the situation.
Here’s a snippet on how to do this in C#. One observation is if the list is grabbing data from a SQL server, the code might be slow to execute.
{
private static IEdmFolder5 ppoRetParentFolder;
static void Main(string[] args)
{
var vault = new EdmVault5Class();
vault.LoginAuto("bluebyte", 0);
var file = vault.GetFileFromPath(@"C:\SOLIDWORKS PDM\BLUEBYTESYSTEMS\Bluebyte\api\sandbox\testfiles\Control_Panel_&.SLDASM", out ppoRetParentFolder);
var variableName = "MDL_EngAppvl";
System.Console.WriteLine(string.Join(System.Environment.NewLine, GetListValuesOfVariable(file, variableName)));
}
public static string[] GetListValuesOfVariable(IEdmFile5 file, string variableName)
{
if (file == null)
throw new ArgumentNullException("file");
if (string.IsNullOrEmpty(variableName))
throw new ArgumentNullException("variable cannot be empty.");
var vault = file.Vault;
var extension = System.IO.Path.GetExtension(file.Name).Replace(".","");
var aCard = (IEdmCard6)(file.GetNextFolder(file.GetFirstFolderPosition())).GetCard(extension);
var controlPosition = aCard.GetFirstControlPosition();
var l = new List<string>();
while (controlPosition.IsNull == false)
{
IEdmVariable5 variable = null;
var control = aCard.GetNextControl(controlPosition) as IEdmCardControl7;
var variableID = control.VariableID;
if (variableID != 0)
variable = vault.GetObject(EdmObjectType.EdmObject_Variable, control.VariableID) as IEdmVariable5;
if (variable != null)
{
if (variable.Name.ToLower() == variableName.ToLower())
{
string[] variablesList = null;
control.GetControlVariableList(file.ID, out variablesList);
if (variablesList != null)
l.AddRange(variablesList);
break;
}
}
}
return l.ToArray();
}
}
2 Likes