GroupShare 2017 TM Server API issue

Former Member
Former Member

Hi,

 

I need your help about GroupShare 2017 API.

Customer is facing issue about GS 2017 TM server API.

 

Symptom

Code which worked fine with SDL Trados Server 2015 fails with GroupShare 2017.

- Adding Server-based to project and exectuting "AnalyzeFile" task, it ralis and ProjectAutomationExceptionga is throuwn.

- The same error happens on Sdl.SDK.ProjectAutomation.Samples.BatchAnalyze prvided by SDL.

 

Attached files

Code.txt … customer’s code.

Task messages.txt… error message.

 

Question

How can "AnalyzeFiles" task be executed wih SDL Trados Server 2017's server-based TM?

 

Expected Result

- analyzeTask.Status should be "completed".

- The length of analyzeTask.Messages should be 0.

 

Current Result

- analyzeTask.Status indicates "failed".

- analyzeTask.Messages includes ProjectAutomationException alwais.

 

If this issue is due to change of API specification, could you please give me some advice to modify the code so that it can work with GS 2017 TM Server.

Many thanks in advance.

Parents
  • Former Member
    0 Former Member

    Sample Code:

            private const string ServerUri = "http://example.localnet/";
            private const string TmUri = "sdltm." + ServerUri + "TestOrg/TradosSample";
            private const string UserName = "*****";
            private const string Password = "*****";

            var info = new ProjectInfo { /* ... */ };
            var project = new FileBasedProject(info);
            project.AddFiles(new string[] { /* ... */ });
            var scan = project.RunAutomaticTask(
                project.GetSourceLanguageFiles().GetIds(),
                AutomaticTaskTemplateIds.Scan
                );
            Uri tmAddress = new Uri(TmUri);
            TranslationProviderConfiguration config = project.GetTranslationProviderConfiguration();
            TranslationProviderCascadeEntry tm = new TranslationProviderCascadeEntry(
                new TranslationProviderReference(tmAddress),
                true,
                true, // value 'false' causes "ArgumentException" when call project.UpdateTranslationProviderConfiguration
                false);
            config.Entries.Add(tm);
            project.UpdateTranslationProviderConfiguration(config);
    //      project.Credentials.AddCredential(new Uri(ServerUri), false, UserName, Password);
            project.Credentials.AddCredential(new Uri(ServerUri), $"user={UserName};password={Password};type=CustomUser");
            project.UpdateTranslationProviderConfiguration(config);
            ProjectFile[] files = project.GetSourceLanguageFiles();
            foreach (var file in files)
            {
                if (file.Role != FileRole.Translatable)
                {
                    continue;
                }
                Guid[] currentFileId = { file.Id };
                AutomaticTask convertTask = project.RunAutomaticTask(
                    currentFileId,
                    AutomaticTaskTemplateIds.ConvertToTranslatableFormat);
                AutomaticTask copyTask = project.RunAutomaticTask(
                    currentFileId,
                    AutomaticTaskTemplateIds.CopyToTargetLanguages);
            }
            // Expected task's Status is "Completed", but actual is "Failed"
            AutomaticTask analyzeTask = project.RunAutomaticTask(
                project.GetTargetLanguageFiles().GetIds(),
                AutomaticTaskTemplateIds.AnalyzeFiles);
            Console.WriteLine($"AnalyzeFiles : {analyzeTask.Status}");
            Console.WriteLine(String.Join("\n",
                analyzeTask.Messages.Select(m => m.Exception)));

     

    Task messages:

    Sdl.ProjectAutomation.Core.ProjectAutomationException: Unexpected exception when initializing task 'Analyze Files': Translation Provider 'sdltm.example.localnet/.../TradosSample' Couldn't create instance. ---> Sdl.ProjectApi.ProjectApiException: Unexpected exception when initializing task 'Analyze Files': Translation Provider 'sdltm.example.localnet/.../TradosSample' Couldn't create instance. ---> Sdl.ProjectAutomation.Core.ProjectAutomationException: Translation Provider 'sdltm.example.localnet/.../TradosSample' Couldn't create instance ---> System.Collections.Generic.KeyNotFoundException: No identity information found for server 'http://example.localnet/'.
       Location Sdl.Enterprise2.Platform.Client.IdentityModel.IdentityInfoCache.ValidateKey(String key)
       Location Sdl.Enterprise2.Platform.Client.IdentityModel.IdentityInfoCache.GetIdentityInfo(String key)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.IdentityInfoCacheCredentialStore.GetCredential(Uri uri)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.TranslationProviderCredentialStore.GetCredential(Uri uri)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.ServerBasedTranslationMemoryFactory.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.TranslationProviderManager.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
       Location Sdl.ProjectApi.TranslationProviderCache.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
       Location Sdl.ProjectApi.TranslationProviderCache.GetTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore, Boolean performUpdate, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.GetTranslationProviderLanguageDirection(TranslationProviderItem translationProviderItem, LanguagePair languageDirection, Boolean performUpdate, Boolean refreshCache)
       --- End of inner exception stack trace ---
       Location Sdl.ProjectAutomation.FileBased.Internal.AutomationServerEvents.HandleTranslationProviderException(TranslationProviderItem translationProviderItem, Exception exception)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.GetTranslationProviderLanguageDirection(TranslationProviderItem translationProviderItem, LanguagePair languageDirection, Boolean performUpdate, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.CreateProjectCascadeEntries(IList`1 projectCascadeEntryDataList, LanguagePair languagePair, Boolean readOnly, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.CreateCascade(ProjectCascadeSettings projectCascadeSettings, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.LanguageDirectionHelper.CreateCascade(ILanguageDirection languageDirection, ProjectCascadeEntryDataFilterFunction filter, IComparer`1 sort, Boolean readOnly, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.<>c__DisplayClass4.<GetRecognizers>b__3()
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetOrCreateObject(String key, Func`1 createObject)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetRecognizers(ILanguageDirection languageDirection)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetLanguageTools(ILanguageDirection languageDirection)
       Location Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisDataCollectorX.CreateAnalysisDataStorage(ILanguageDirection languageDirection, AnalysisTaskSettings analysisSettings, TranslationMemorySettings translationMemorySettings, ILanguageObjectsCache objectsCache)
       Location Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisDataCollectorX.Initialize(IList`1 files)
       Location Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisTask.CreateAnalysisDataCollectors()
       Location Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisTask.InitializeTask(IExecutingAutomaticTask task)
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.InitializeTaskImplementations()
       --- End of inner exception stack trace ---
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.InitializeTaskImplementations()
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.Execute()
       Location Sdl.ProjectApi.Implementation.AutomaticTaskExecuter.Execute()
       --- End of inner exception stack trace ---

  • Can you please try and save the project before you run the analysis? Also can you please let me know if you have any Trados Studio 2017 updates installed?

    Romulus Crisan | Translation Productivity Development Manager | SDL | (twitter) @cromica_82 | (blog) http://www.romuluscrisan.com/

Reply Children
  • Hi ,

    Thank you for reply. Do you mean saving bilingual file by "save the project"?
  • Save the project. It should be something like project.save()

    Romulus Crisan | Translation Productivity Development Manager | SDL | (twitter) @cromica_82 | (blog) http://www.romuluscrisan.com/

  • Hi,

    I am sorry that the issue was not solved completely...

    Analyze task worked by adding project.save() but Pretranslation task fails even if save project is processed...
    Could you please give some advice?

    Trados Studio's build is 5889.5 (2017 CU 5)

    [Expected result]
    preTranslateTask.Status should be Completed.
    The length of preTranslateTask.Messages is 0.

    [Current Result]
    preTranslateTask.Status returns Failed.
    preTranslateTask.Messages includes ProjectAutomationException.

    [Code]
    using System;
    using System.IO;
    using System.Linq;
    using Sdl.Core.Globalization;
    using Sdl.ProjectAutomation.Core;
    using Sdl.ProjectAutomation.FileBased;
    namespace ConsoleApplication21
    {
        class Program
        {
            private const string ServerUri = "http://example.localnet/";
            private const string UserName = "********";
            private const string Password = "********";
            private const string Organization = "TestOrg";
            private const string TmName = "TradosSample";
            private const string SourceCultureName = "en-US";
            private const string TargetCultureName = "de-DE";
            private const string SourceFileName = @"C:\Users\myuser\Documents\test\input.txt";
            static void Main()
            {
                var info = new ProjectInfo
                {
                    Name = Path.GetFileName(SourceFileName),
                    LocalProjectFolder = Path.Combine(Path.GetDirectoryName(SourceFileName), "Trados"),
                    SourceLanguage = new Language(SourceCultureName),
                    TargetLanguages = new[] { new Language(TargetCultureName) }
                };
                if (Directory.Exists(info.LocalProjectFolder))
                {
                    Directory.Delete(info.LocalProjectFolder, true);
                }
                var project = new FileBasedProject(info);
                project.AddFiles(new[] { SourceFileName });
                project.RunAutomaticTask(project.GetSourceLanguageFiles().GetIds(), AutomaticTaskTemplateIds.Scan);
                project.RunAutomaticTask(project.GetSourceLanguageFiles().GetIds(), AutomaticTaskTemplateIds.ConvertToTranslatableFormat);
                project.RunAutomaticTask(project.GetSourceLanguageFiles().GetIds(), AutomaticTaskTemplateIds.CopyToTargetLanguages);
                var projectConfig = project.GetTranslationProviderConfiguration();
                projectConfig.Entries.Add(new TranslationProviderCascadeEntry(new TranslationProviderReference(new Uri($"sdltm.{ServerUri}{Organization}{(Organization != "" ? "/" : "")}{TmName}")), true, true, false));
                project.Credentials.AddCredential(new Uri(ServerUri), $"user={UserName};password={Password};type=CustomUser");
                project.UpdateTranslationProviderConfiguration(projectConfig);
                project.Save();
                var preTranslateTask = project.RunAutomaticTask(project.GetTargetLanguageFiles().GetIds(), AutomaticTaskTemplateIds.PreTranslateFiles);
                Console.WriteLine($"PreTranlsate : {preTranslateTask.Status}");
                Console.WriteLine(String.Join("\n",
                    preTranslateTask.Messages.Select(m => m.Exception)));
                project.Save();
            }
        }
    }

    [Task.Messages.Message (Locale: ja-JP)]
    PreTranlsate : Failed
    Sdl.ProjectAutomation.Core.ProjectAutomationException: Unexpected exception when configuring file multiFileConverter for task 'Pretranslation': Failed to create an instance of translation provider 'sdltm.http://example.localnet/TestOrg/TradosSample'.. ---> Sdl.ProjectApi.ProjectApiException: Unexpected exception when configuring file multiFileConverter for task 'Pretranslation': Failed to create an instance of translation provider 'sdltm.http://example.localnet/TestOrg/TradosSample'.. ---> Sdl.ProjectAutomation.Core.ProjectAutomationException: Failed to create an instance of translation provider 'sdltm.http://example.localnet/TestOrg/TradosSample'. ---> System.Collections.Generic.KeyNotFoundException: No identity information found for server 'http://example.localnet/'.
       Location Sdl.Enterprise2.Platform.Client.IdentityModel.IdentityInfoCache.ValidateKey(String key)
       Location Sdl.Enterprise2.Platform.Client.IdentityModel.IdentityInfoCache.GetIdentityInfo(String key)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.IdentityInfoCacheCredentialStore.GetCredential(Uri uri)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.TranslationProviderCredentialStore.GetCredential(Uri uri)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.ServerBasedTranslationMemoryFactory.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
       Location Sdl.LanguagePlatform.TranslationMemoryApi.TranslationProviderManager.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
       Location Sdl.ProjectApi.TranslationProviderCache.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
       Location Sdl.ProjectApi.TranslationProviderCache.GetTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore, Boolean performUpdate, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.GetTranslationProviderLanguageDirection(TranslationProviderItem translationProviderItem, LanguagePair languageDirection, Boolean performUpdate, Boolean refreshCache)
       --- End of inner exception stack trace ---
       Location Sdl.ProjectAutomation.FileBased.Internal.AutomationServerEvents.HandleTranslationProviderException(TranslationProviderItem translationProviderItem, Exception exception)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.GetTranslationProviderLanguageDirection(TranslationProviderItem translationProviderItem, LanguagePair languageDirection, Boolean performUpdate, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.CreateProjectCascadeEntries(IList`1 projectCascadeEntryDataList, LanguagePair languagePair, Boolean readOnly, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.ProjectCascadeFactory.CreateCascade(ProjectCascadeSettings projectCascadeSettings, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.LanguageDirectionHelper.CreateCascade(ILanguageDirection languageDirection, ProjectCascadeEntryDataFilterFunction filter, IComparer`1 sort, Boolean readOnly, Boolean refreshCache)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetLanguageResources(ILanguageDirection languageDirection)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.<>c__DisplayClass1.<GetLanguageResources>b__0()
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetOrCreateObject(String key, Func`1 createObject)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetLanguageResources(IProject project, Language language)
       Location Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetLanguageResources(ITranslatableFile file)
       Location Sdl.ProjectApi.AutomaticTasks.AbstractContentProcessorTaskImplementation.AddSegmentorToConverter(IExecutingTaskFile executingTaskFile, IBilingualProcessorContainer multiFileConverter)
       Location Sdl.ProjectApi.AutomaticTasks.AbstractTmContentProcessorTaskImplementation.ConfigureConverter(IExecutingTaskFile executingTaskFile, IMultiFileConverter multiFileConverter)
       Location Sdl.ProjectApi.AutomaticTasks.Translate.TranslateTask.ConfigureConverter(IExecutingTaskFile executingTaskFile, IMultiFileConverter multiFileConverter)
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.TaskFileExecuter.ConfigureConverter(IMultiFileConverter multiFileConverter, Language targetLanguage)
       --- End of inner exception stack trace ---
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.TaskFileExecuter.ConfigureConverter(IMultiFileConverter multiFileConverter, Language targetLanguage)
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.TaskFileExecuter.CreateMultiFileConverter(IProjectFile tf, String filePath)
       Location Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.TaskFileExecuter.Parse(String targetFilePath)
       --- End of inner exception stack trace ---

  • When adding the credentials please specify the url including the sdltm exactly as specified when creating the TranslationProviderReference.

     

    new Uri($"sdltm.{ServerUri}{Organization}{(Organization != "" ? "/" : "")}{TmName}"))

    Romulus Crisan | Translation Productivity Development Manager | SDL | (twitter) @cromica_82 | (blog) http://www.romuluscrisan.com/

  • Hi,

    I'm having a same issue in that Analyze Files Task comes back with following error:

    Unexpected exception when initializing task 'Analyze Files': Failed to create an instance of translation provider 'sdltm.http://nicgroupshare-test/?orgPath=/All Languages/Asian Languages/Japanese&tmName=Japanese RnD Test'.. AutomaticTaskExecuter

    I have the project saved right before Analyze Files Task, but error still occurs.  This used to work for 2014, but it doesn't work with 2017...  

    Could anyone help?

    Thanks!
    Rieko

  • Using Trados Studio, I opened the project that was created with API, and then run Batch->Analyze Files, it works fine.  Here's the Task History:  

  • I have the same error, it used to work on GS2015.

    Unexpected exception when initializing task 'Analizza file': Impossibile creare un'istanza del provider di traduzione
    'sdltm.xxx.xxxx.xxx/ ENRICO&tmName=Test_2015_enrico_EN'..

    if I open the project and perform it with Studio everything runs fine.
  • Is this problem appearing on any project? Would you be able to share the entire error stack trace?

    GS2017 CU4 makes the analysis reports available via the REST API so it might be a better and simpler alternative to just retrieve the analysis using the REST API rather than rely on Trados Studio Project Automation API.

    Romulus Crisan | Translation Productivity Development Manager | SDL | (twitter) @cromica_82 | (blog) http://www.romuluscrisan.com/