@jabowabo wrote:
Our PnID app is home-brewed so I don't delve into that side of it much. This looks promising but I haven't tested:
Autodesk.ProcessPower.ProjectManager.PnIdProject.GetTagFormats(string, bool)
public override System.Collections.Specialized.StringCollection GetTagFormats(string strClassName, bool bIncludeInherited)
Member of Autodesk.ProcessPower.ProjectManager.PnIdProject
Jason,
Thank you. I was able to get it working. In the end it required disassembling PnPProjectManagerMgd.dll, but you pointed me in the right direction.
For future reference, here's how anyone can retrieve the tag format for a given P&ID class and build a new tag based on an updated tag format. Note the loop doesn't limit to a single or set of P&ID drawings, but this could be done easily by looking at the data links for a given drawing.
// get pnid project
var pnidProject = PlantApplication.CurrentProject.ProjectParts.FirstOrDefault(p => p is PnIdProject) as PnIdProject;
if (pnidProject == null)
return;
// get pnid database
var pnpDatabase = pnidProject.DataLinksManager.GetPnPDatabase();
// get tag format name
var tagFormatName = pnpDatabase.Tables["HandValves"].GetTableAttributeValue("TagFormatName");
// get tag format (value = format definition defined in the class definition via project settings)
var tagFormat = pnidProject.GetTagFormat(tagFormatName, out var value, out var baseClass);
// get formattoolsutil instance (used to rebuild tags if desired)
var formatToolsUtil = new FormatToolsUtil();
// loop through hand valves
var pnpHandValves = pnpDatabase.Tables["HandValves"].Select().ToList();
foreach (var pnpHandValve in pnpHand)
{
// get old tag
var oldTag = pnpHandValve["Tag"];
// get new tag
var newTag = formatToolsUtil.RebuildTagValue(value, "", pnpHandValve.RowId, pnidProject.DataLinksManager);
}