不能将 SetVar 与 PostAdd 或 PreAdd 挂钩 PDM 一起使用 Api
Cant use SetVar with PostAdd or PreAdd hooks PDM Api
我正在使用 SolidWorks PDM 2017 SP5
您好,我正在开发一个插件,当文档添加到保管库时必须修改一个变量,问题是 PreAdd
和 PostAdd
return我一个错误,文件没有被我签出(0x080040210),显然,文件还没有被注册
这是我的代码
public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
{
poInfo.mbsAddInName = "Titulo C# Add-In";
poInfo.mbsCompany = "ARTRANS S.A.";
poInfo.mbsDescription = "Renombra los títulos de las obras de epdm.";
poInfo.mlAddInVersion = 1;
poInfo.mlRequiredVersionMajor = 17;
poInfo.mlRequiredVersionMinor = 5;
//Create PreAdd hook (with PostAdd i have the same result)
poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreAdd);
}
public void OnCmd(ref EdmCmd poCmd, ref Array ppoData)
{
switch (poCmd.meCmdType)
{
case EdmCmdType.EdmCmd_PreAdd:
IEdmVault5 _Vault = (IEdmVault5)poCmd.mpoVault;
IEdmFile5 archivo = default(IEdmFile5);
var varManager = default(IEdmEnumeratorVariable8);
foreach (EdmCmdData fila in ppoData)
{
archivo = (IEdmFile5)_Vault.GetObject(EdmObjectType.EdmObject_File, fila.mlObjectID1);
varManager = (IEdmEnumeratorVariable8)archivo.GetEnumeratorVariable();
varManager.SetVar("Title", "", "Example"));
varManager.CloseFile(true);
}
break;
}
}
有人知道必须怎么做吗?我真的没主意了!
非常感谢
我找到了关于 EdmCmdData Structure 的文档,每个挂钩上都有 EdmCmdData 结构的行为,所以,在我的例子中,PostAdd
我得到了
父文件夹的 ID 在 EdmCmdData.mlObjectID1
本地文件路径在EdmCmdData.mbsStrData1
用所需的数据替换这一行:
archivo = (IEdmFile5)_Vault.GetObject(EdmObjectType.EdmObject_File, fila.mlObjectID1);
为此
IEdmFolder5 carpeta = (IEdmFolder5)_Vault.GetObject(EdmObjectType.EdmObject_Folder, fila.mlObjectID1);
archivo = _Vault.GetFileFromPath(fila.mbsStrData1,out carpeta);
您需要处理 PostAdd,并确保文件已由您在您的计算机上检出。
IEdmVault12 _Vault = (IEdmVault12)poCmd.mpoVault;
// Get our userId
var userId = _Vault.GetLoggedInWindowsUserID(_Vault.Name);
IEdmFile5 archivo = default(IEdmFile5);
var varManager = default(IEdmEnumeratorVariable8);
foreach (EdmCmdData fila in ppoData)
{
archivo = (IEdmFile5)_Vault.GetObject(EdmObjectType.EdmObject_File, fila.mlObjectID1);
// Make sure we're the user with the file checked out and it's checked out on this machine.
if (archivo.LockedByUserID != userId || archivo.LockedOnComputer != Environment.MachineName)
continue;
varManager = (IEdmEnumeratorVariable8)archivo.GetEnumeratorVariable();
varManager.SetVar("Title", "", "Example"));
varManager.CloseFile(true);
}
我正在使用 SolidWorks PDM 2017 SP5
您好,我正在开发一个插件,当文档添加到保管库时必须修改一个变量,问题是 PreAdd
和 PostAdd
return我一个错误,文件没有被我签出(0x080040210),显然,文件还没有被注册
这是我的代码
public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
{
poInfo.mbsAddInName = "Titulo C# Add-In";
poInfo.mbsCompany = "ARTRANS S.A.";
poInfo.mbsDescription = "Renombra los títulos de las obras de epdm.";
poInfo.mlAddInVersion = 1;
poInfo.mlRequiredVersionMajor = 17;
poInfo.mlRequiredVersionMinor = 5;
//Create PreAdd hook (with PostAdd i have the same result)
poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreAdd);
}
public void OnCmd(ref EdmCmd poCmd, ref Array ppoData)
{
switch (poCmd.meCmdType)
{
case EdmCmdType.EdmCmd_PreAdd:
IEdmVault5 _Vault = (IEdmVault5)poCmd.mpoVault;
IEdmFile5 archivo = default(IEdmFile5);
var varManager = default(IEdmEnumeratorVariable8);
foreach (EdmCmdData fila in ppoData)
{
archivo = (IEdmFile5)_Vault.GetObject(EdmObjectType.EdmObject_File, fila.mlObjectID1);
varManager = (IEdmEnumeratorVariable8)archivo.GetEnumeratorVariable();
varManager.SetVar("Title", "", "Example"));
varManager.CloseFile(true);
}
break;
}
}
有人知道必须怎么做吗?我真的没主意了!
非常感谢
我找到了关于 EdmCmdData Structure 的文档,每个挂钩上都有 EdmCmdData 结构的行为,所以,在我的例子中,PostAdd
我得到了
父文件夹的 ID 在 EdmCmdData.mlObjectID1
本地文件路径在EdmCmdData.mbsStrData1
用所需的数据替换这一行:
archivo = (IEdmFile5)_Vault.GetObject(EdmObjectType.EdmObject_File, fila.mlObjectID1);
为此
IEdmFolder5 carpeta = (IEdmFolder5)_Vault.GetObject(EdmObjectType.EdmObject_Folder, fila.mlObjectID1);
archivo = _Vault.GetFileFromPath(fila.mbsStrData1,out carpeta);
您需要处理 PostAdd,并确保文件已由您在您的计算机上检出。
IEdmVault12 _Vault = (IEdmVault12)poCmd.mpoVault;
// Get our userId
var userId = _Vault.GetLoggedInWindowsUserID(_Vault.Name);
IEdmFile5 archivo = default(IEdmFile5);
var varManager = default(IEdmEnumeratorVariable8);
foreach (EdmCmdData fila in ppoData)
{
archivo = (IEdmFile5)_Vault.GetObject(EdmObjectType.EdmObject_File, fila.mlObjectID1);
// Make sure we're the user with the file checked out and it's checked out on this machine.
if (archivo.LockedByUserID != userId || archivo.LockedOnComputer != Environment.MachineName)
continue;
varManager = (IEdmEnumeratorVariable8)archivo.GetEnumeratorVariable();
varManager.SetVar("Title", "", "Example"));
varManager.CloseFile(true);
}