Using ID from new server-based project on the local file-based version

I'm automating the process of creating Trados Studio projects locally, then uploading them to GroupShare via the REST API.

When uploading I first of all create an empty project using this API method...

Screenshot of an API method POST request to create an empty Trados Studio project on the server.

This returns the ID of the created empty project. Then I create a local FileBasedProject object, create a package from it, then upload the package to...

Screenshot of an API method POST request to publish a Trados Studio package to an empty server project.

This works - the server-based project does get published.

However, if I want to do anything with the local FileBasedProject then I face a problem: It's ID is not the same as the project on the server. And the project's Id property is read-only, so I can't update it.

I tried opening the project file, updating the Guid attribute on the root element...

Screenshot showing XML code of a Trados Studio project file with a highlighted Guid attribute, indicating an attempt to update the project ID.

... and then reloading the project - here's the code I used...

private static void UpdateProjectId(FileBasedProject project, Guid newId, Reporter reporter)
{
const string projectFileExtension = ".sdlproj";
const string projectIdAttributeName = "Guid";

var projectInfo = project.GetProjectInfo();

var path = Path.Combine(projectInfo.LocalProjectFolder, $"{projectInfo.Name}{projectFileExtension}");

XDocument xProjectFile;
using (var fs = new FileStream(path, FileMode.Open))
{
xProjectFile = XDocument.Load(fs, LoadOptions.PreserveWhitespace);
}

var attrGuid = xProjectFile.Document.Root.Attribute(projectIdAttributeName);
if (attrGuid != null)
{
attrGuid.Value = newId.ToString();
xProjectFile.Save(path);
}

project = new FileBasedProject(path);
}

However, when I call project.GetProjectInfo().Id after calling new FileBasedProject(path) I still see the previous Guid value - even though I can verify that the physical file does now have the new value.

So I took another look at the API reference and saw this method...

Screenshot of an API method POST request with a placeholder for project ID, used to create or register a project from the server.

Perhaps that id variable will allow me to specify the ID of the empty project?

Unfortunately it returns a 500 (Internal Server Error), and I can't see anything recorded in the log files relating to this error.

So what should I do? I have a local project, a corresponding server-based project, but their IDs are different. How can I use the ID of the server-based project against the local project?



Generated Image Alt-Text
[edited by: Trados AI at 4:08 AM (GMT 0) on 5 Mar 2024]
emoji
Parents
  • Hi ,

    As you saw when you create a GS project skeleton a new project Guid will be generated for it. After the server based project is published from the Trados Studio package you will have 2 distinct projects - with 2 different project IDs. That is expected.

    When you create a new GS project (from a template, by uploading a package, etc.) a lot of internal processing will take place that will result in new resource IDs to be created. Hence it's not possible to just update an existing file based project's ID in the sdlproj file.This is a limitation of this approach - i.e. creating a GS project via a Trados Studio package. 


    Instead, you should pull down the server based project from GS.  This can be done using Trados Studio APIs, see this chapter "Connecting a Project to a Project Server"

    Alternativelly, you could use Trados Studio API to publish a file based project to GS. see Publishing to a Project Server

    emoji
Reply
  • Hi ,

    As you saw when you create a GS project skeleton a new project Guid will be generated for it. After the server based project is published from the Trados Studio package you will have 2 distinct projects - with 2 different project IDs. That is expected.

    When you create a new GS project (from a template, by uploading a package, etc.) a lot of internal processing will take place that will result in new resource IDs to be created. Hence it's not possible to just update an existing file based project's ID in the sdlproj file.This is a limitation of this approach - i.e. creating a GS project via a Trados Studio package. 


    Instead, you should pull down the server based project from GS.  This can be done using Trados Studio APIs, see this chapter "Connecting a Project to a Project Server"

    Alternativelly, you could use Trados Studio API to publish a file based project to GS. see Publishing to a Project Server

    emoji
Children