I still use aaApi_UpdateEnvAttr with aaApi_UpdateLinkDataColumnValue and it does work, but I think Michael's suggestion is much simpler if you can use aaApi_UpdateLinkData in your situation.
While your code seems more complicated than necessary to get to a specific attribute, it does look like it should work. In your debugging, at the point you start call aaApi_UpdateLinkDataColumnValue and aaApi_UpdateEnvAttr, have you checked that the values for lTabId, lColNum and lIdx1are correct for what you trying to accomplish?
One thing I do notice as missing is any call to aaApi_FreeLinkDataUpdateDesc - per the help file for aaApi_UpdateLinkDataColumnValue:
[quote]When all values to be updated are set using this function, then the attribute record can be updated calling aaApi_UpdateEnvAttr(), or (in special cases) aaApi_UpdateLinkData() function. Do not call the function for the columns that remain unchanged to save operating time. Before forming a new record use aaApi_FreeLinkDataUpdateDesc() function to clear the static ProjectWise link data update descriptor.[/quote]