Update drawing from external inputs

Update drawing from external inputs

Anonymous
Not applicable
517 Views
1 Reply
Message 1 of 2

Update drawing from external inputs

Anonymous
Not applicable

Hi,  

     I have written below code to update the specific value  in Drawing, I am able to update successfully but the issue is when I open the drawing I am getting "Annotations in your drawing are out of date and need to be updated."
Changes in the project or another drawing have caused changes to annotations on your drawing." , Please let me know what I was missed in the below code 

string strDwgPath;
// Get the current document and database
Database db = new Database(false, true);
Project currentProject = (PnIdProject)PlantApplication.CurrentProject.ProjectParts["PnId"];
DataLinksManager dlm = currentProject.DataLinksManager;
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
HostApplicationServices hs = HostApplicationServices.Current;

string path = hs.FindFile(doc.Name,doc.Database,FindFileHint.Default);
// get project drawing
PnPProjectDrawing pnp_dwg = currentProject.GetDwgFileByName(path);
// use resolved path
strDwgPath = pnp_dwg.ResolvedFilePath;

db.ReadDwgFile(strDwgPath, FileShare.ReadWrite, false, null);

dlm.EnlistDrawing(db);

// Start a transaction
using (Transaction acTrans = db.TransactionManager.StartTransaction())
{
// use resolved path
strDwgPath = pnp_dwg.ResolvedFilePath;
System.Data.DataTable dt = new System.Data.DataTable();
PnPDatabase dbl = dlm.GetPnPDatabase();
dbl.StartTransaction();
PnPTable tbl = dbl.Tables["Tool"];
PnPRow[] rows = tbl.Select();
PnPColumns cols = tbl.AllColumns;
DataRow dataRow;
foreach (PnPRow p in rows)
{
dataRow = dt.NewRow();
foreach (PnPColumn col in cols)
{
DataColumnCollection columns = dt.Columns;
if (!columns.Contains(col.Name))
{
dt.Columns.Add(col.Name);
}
if (col.Name == "Toolname_l1")
{
p.BeginEdit();

p["ex_LPOC_Assignment"] = "st";

p.EndEdit();

}

dataRow[col.Name] = p[col.Name].ToString();

}
dt.Rows.Add(dataRow);

}


if (currentProject.IsDrawingOutOfSync(strDwgPath, db))

{
PnPSyncConflicts conflicts = null;

currentProject.UpdatePnPDrawing

(db, strDwgPath, ref conflicts);

DataLinksManager.DatabaseToForceSaveComplete = db;

try

{

db.SaveAs(strDwgPath, DwgVersion.Current);

}

catch (System.Exception ex)

{

 

}

finally

{

DataLinksManager.DatabaseToForceSaveComplete

= null;

 

}

}

dlm.Upgrade();
dlm.AcceptChanges();


dbl.Upgrade();

acTrans.Commit();

 

0 Likes
518 Views
1 Reply
Reply (1)
Message 2 of 2

jabowabo
Mentor
Mentor

I haven't seen any documentation on modifying side databases with the Plant 3D API. I've run into limitations with this myself. The safest way is to have the .dwg open in project context while running the code.

0 Likes