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/

  • 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/

  • Hi

    Yes, the problem occurs in all project that I'm creating. Will following error stack trace help you ?

    Thank you very much!

    <SDLErrorDetails time="2017/08/09 18:27:17">
    <ErrorMessage>Unexpected exception when initializing task 'Analyze Files': Failed to create an instance of translation provider 'sdltm.nicgroupshare-test/ Languages/Asian Languages/Japanese&amp;tmName=Japanese RnD Test'..</ErrorMessage>
    <Exception>
    <Type>Sdl.ProjectApi.ProjectApiException, Sdl.ProjectApi, Version=14.0.0.0, Culture=neutral, PublicKeyToken=c28cdb26c445c888</Type>
    <HelpLink />
    <Source>Sdl.ProjectApi.Implementation</Source>
    <HResult>-2146233088</HResult>
    <StackTrace><![CDATA[ at Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.InitializeTaskImplementations()
    at Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.Execute()
    at Sdl.ProjectApi.Implementation.AutomaticTaskExecuter.Execute()]]></StackTrace>
    <InnerException>
    <Type>Sdl.ProjectAutomation.Core.ProjectAutomationException, Sdl.ProjectAutomation.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c28cdb26c445c888</Type>
    <HelpLink />
    <Source>Sdl.ProjectAutomation.FileBased</Source>
    <HResult>-2146233088</HResult>
    <StackTrace><![CDATA[ at Sdl.ProjectAutomation.FileBased.Internal.AutomationServerEvents.HandleTranslationProviderException(TranslationProviderItem translationProviderItem, Exception exception)
    at Sdl.ProjectApi.Helpers.ProjectCascadeFactory.GetTranslationProviderLanguageDirection(TranslationProviderItem translationProviderItem, LanguagePair languageDirection, Boolean performUpdate, Boolean refreshCache)
    at Sdl.ProjectApi.Helpers.ProjectCascadeFactory.CreateProjectCascadeEntries(IList`1 projectCascadeEntryDataList, LanguagePair languagePair, Boolean readOnly, Boolean refreshCache)
    at Sdl.ProjectApi.Helpers.ProjectCascadeFactory.CreateCascade(ProjectCascadeSettings projectCascadeSettings, Boolean refreshCache)
    at Sdl.ProjectApi.Helpers.LanguageDirectionHelper.CreateCascade(ILanguageDirection languageDirection, ProjectCascadeEntryDataFilterFunction filter, IComparer`1 sort, Boolean readOnly, Boolean refreshCache)
    at Sdl.ProjectApi.Helpers.LanguageObjectsCache.<>c__DisplayClass4.<GetRecognizers>b__3()
    at Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetOrCreateObject(String key, Func`1 createObject)
    at Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetRecognizers(ILanguageDirection languageDirection)
    at Sdl.ProjectApi.Helpers.LanguageObjectsCache.GetLanguageTools(ILanguageDirection languageDirection)
    at Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisDataCollectorX.CreateAnalysisDataStorage(ILanguageDirection languageDirection, AnalysisTaskSettings analysisSettings, TranslationMemorySettings translationMemorySettings, ILanguageObjectsCache objectsCache)
    at Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisDataCollectorX.Initialize(IList`1 files)
    at Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisTask.CreateAnalysisDataCollectors()
    at Sdl.ProjectApi.AutomaticTasks.Analysis.AnalysisTask.InitializeTask(IExecutingAutomaticTask task)
    at Sdl.ProjectApi.Implementation.TaskExecution.ContentProcessingTaskImplementation.InitializeTaskImplementations()]]></StackTrace>
    <InnerException>
    <Type>System.Collections.Generic.KeyNotFoundException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>
    <HelpLink />
    <Source>Sdl.Enterprise2.Platform.Client</Source>
    <HResult>-2146232969</HResult>
    <StackTrace><![CDATA[ at Sdl.Enterprise2.Platform.Client.IdentityModel.IdentityInfoCache.ValidateKey(String key)
    at Sdl.Enterprise2.Platform.Client.IdentityModel.IdentityInfoCache.GetIdentityInfo(String key)
    at Sdl.LanguagePlatform.TranslationMemoryApi.IdentityInfoCacheCredentialStore.GetCredential(Uri uri)
    at Sdl.LanguagePlatform.TranslationMemoryApi.TranslationProviderCredentialStore.GetCredential(Uri uri)
    at Sdl.LanguagePlatform.TranslationMemoryApi.ServerBasedTranslationMemoryFactory.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
    at Sdl.LanguagePlatform.TranslationMemoryApi.TranslationProviderManager.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
    at Sdl.ProjectApi.TranslationProviderCache.CreateTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore)
    at Sdl.ProjectApi.TranslationProviderCache.GetTranslationProvider(Uri translationProviderUri, String translationProviderState, ITranslationProviderCredentialStore credentialStore, Boolean performUpdate, Boolean refreshCache)
    at Sdl.ProjectApi.Helpers.ProjectCascadeFactory.GetTranslationProviderLanguageDirection(TranslationProviderItem translationProviderItem, LanguagePair languageDirection, Boolean performUpdate, Boolean refreshCache)]]></StackTrace>
    </InnerException>
    </InnerException>
    </Exception>
    <Environment>
    <ProductName>SDL Trados Studio</ProductName>
    <ProductVersion>14.0.0.0</ProductVersion>
    <EntryAssemblyFileVersion>14.1.6284.6</EntryAssemblyFileVersion>
    <OperatingSystem>Microsoft Windows 10 Pro</OperatingSystem>
    <ServicePack>NULL</ServicePack>
    <OperatingSystemLanguage>1041</OperatingSystemLanguage>
    <CodePage>932</CodePage>
    <LoggedOnUser>AMER\riekom</LoggedOnUser>
    <DotNetFrameWork>4.0.30319.42000</DotNetFrameWork>
    <ComputerName>WIN10SDL2017</ComputerName>
    <ConnectedToNetwork>True</ConnectedToNetwork>
    <PhysicalMemory>8388084 MB</PhysicalMemory>
    </Environment>
    </SDLErrorDetails>

Reply Children


  • I started looking into github.com/.../groupsharekit.net with the hopes that it would include some sample on using what you suggested: 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.
    But, I cannot see where in that code AnalysisReport is used. Can you additional information on how to use AnalysisReport?

    Also, has anyone been able to resolve the issue with ProjectBased API yet?

    Thank you!
    Rieko
  • Hi Rieko,

    The project for what you want to run the Analysis must be created from Groupshare. Is not working for projects created in Studio and published in GS.

    This is a code sample on how you can use Analyse report from GroupShare Kit:

    public async Task AnalysisReports()
    {
    var groupShareClient = await Helper.GetGroupShareClient();
    var report = await groupShareClient.Project.GetAnalysisReports("522dde85-7f5b-4aa5-a4d9-af97d78798f2", "en-US");
    Assert.True(report.Count > 0);
    }

     

    More code sample on how you can use the library you can find here.

    Kind regards,

    Andrea.

  • Hi ,

    Thank you for your answer! The fact that project must be created from groupshare is a big concern for our company because we have heavy projects with millions of words run in parallel in several languages. So, we have to go back to solving the issue with ProjectAutomation API.

    ,
    Have you had a chance to look at error stack trace I submitted a while back in August 9? Will that give you any clue as to what I need to fix?

    Thank you very much!
    Rieko
  • Hi Rieko,

    This seems to be a product in the product. Can you please raise this issue with support?

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

  • I just made some tests around this issue which where able to reproduce. There are few things to be considered:

    1. For TM address make sure to use this format new Uri($"sdltm.{ServerUri}{Organization}{(Organization != "" ? "/" : "")}{TmName}"); 
    2. When adding credentials make sure the URI from point 1 is used.

    You can also have a look at the sample code here. I used for testing with which I had similar problems before I adjusted it according to above points.

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

  • Hi 

    I got your sample code to work in our environment!  

    But, your sample code seems to only work with SDL credential.  If I set useWindowsAuthentication to true, and use windows username and password, then, the code comes back with error...

    Invoke Node System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.  Inner Exception: System.ArgumentException: Requested value 'Windows' was not found.  

    Have you ever tested your code using windows credential?

    project.Credentials.AddCredential(tmAddress, true, UserName, Password);

    I have also tried using Uri("http://nicgroupshare-test:80") as tmAddress input (as suggested on this page http://producthelp.sdl.com/SDK/ProjectAutomationApi/3.0/html/388c870e-0e80-4381-a46a-fe57821571f9.htm), but then the analysis automatic task fails with

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

    What else can I try?

    Thank you!

    Rieko

  • Former Member
    0 Former Member in reply to Rieko Matsunaga
    Hi ,

    I tried to reproduce your problem using windows credentials, but for me the 'Analyze Files' task works fine. I will add my sample code here to see if it works for you. Also, I know you are using CU05 version of GroupShare2017, which is before SR1. We would recommend updating to CU06 and this will include the SR1 release.

    Sample Code:

    private const string ServerUri = "http[s]://HOSTNAME:PORT/";
    private const string UserName = "username";
    private const string Password = "password";
    private const string Organization = "organization name";
    private const string TmName = "tmName";


    private const string SourceCultureName = "en-US";
    private const string TargetCultureName = "de-DE";
    private const string SourceFileName = @"source file path";

    var info = new ProjectInfo
    {
    Name = Path.GetFileName(SourceFileName),
    LocalProjectFolder = @"local project folder",
    SourceLanguage = new Language(SourceCultureName),
    TargetLanguages = new[] { new Language(TargetCultureName) }
    };
    if (Directory.Exists(info.LocalProjectFolder))
    {
    Directory.Delete(info.LocalProjectFolder, true);
    }
    FileBasedProject project = new FileBasedProject(info);

    project.AddFiles(new[] { SourceFileName });

    var scan = project.RunAutomaticTask(
    project.GetSourceLanguageFiles().GetIds(),
    AutomaticTaskTemplateIds.Scan
    );

    Uri tmAddress = new Uri($"sdltm.{ServerUri}{Organization}{(Organization != "" ? "/" : "")}{TmName}");
    TranslationProviderConfiguration config = project.GetTranslationProviderConfiguration();
    TranslationProviderCascadeEntry tm = new TranslationProviderCascadeEntry(
    new TranslationProviderReference(tmAddress),
    true,
    true,
    false);

    config.Entries.Add(tm);
    project.UpdateTranslationProviderConfiguration(config);
    project.Credentials.AddCredential(new Uri("http[s]://HOSTNAME:PORT:80"), true, UserName, Password);
    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)));

    Regards,
    Alexandru-Constantin Pascariu
  • Hi

    It seems that this line is about the only difference from Romulus' code:

    project.Credentials.AddCredential(new Uri("https://HOSTNAME:PORT:80"), true, UserName, Password);

    First, what is the sleep icon that I see after http?
    Second, if that meant https, then why are you using :80? Doesn't :80 only work with http?
    Third, why do you have :PORT and then :80 ?
    Fourth, in your environment do you have https enabled inside your firewall? (We don't)


    I have tried the following address to create Uri:
    http://nicgroupshare-test:80
    https://nicgroupshare-test:80
    https://nicgroupshare-test:443
    But, following is the message I get with analyzeTask.Messages.Select(m => m.Exception)

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

    What am I doing wrong?

    Thank you!
    Rieko
  • Former Member
    0 Former Member in reply to Rieko Matsunaga

    Hi Rieko Matsunaga (rieko.matsunaga)

    I'm sorry for the confusion, I meant to write http(s)://HostName:Port, for testing I used the "80" port because we had http not https. From what I see, you still receive the same error. Have you considered updating GroupShare to CU06 and check if the error persists?

    Regards,

    Alexandru-Constantin Pascariu

  • Hi  ,

    Updating GroupShare to CU06 did not resolve the problem. So, now, I decided to attempt at creating a project using VC#!
    Building the project was successful, but when I tried to run the executable, I get this error... Can you help me figure out why this error occurs?

    ----------------------------------
    C:\Program Files (x86)\SDL\SDL Trados Studio\Studio5>Samples.BatchAnalyze.exe
    log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file. Check your .config file for the <log4net> and <configSections> elements. The configuration section should look like: <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

    ハンドルされていない例外: System.BadImageFormatException: ファイルまたはアセンブリ 'SDLTradosStudio'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。
    場所 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    場所 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    場所 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
    場所 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
    場所 System.Reflection.Assembly.Load(String assemblyString)
    場所 Sdl.Core.Globalization.LocalizableString.LoadResourceString(String embeddedResourceName)
    場所 Sdl.Desktop.Platform.Implementation.Services.UserProfile.ReadHeader()
    場所 Sdl.Desktop.Platform.Implementation.Services.UserSettingsService.EnsureLoaded()
    場所 Sdl.Desktop.Platform.Implementation.Services.UserSettingsService.get_UserSettings()
    場所 Sdl.ProjectAutomation.FileBased.FileBasedProject.GetDefaultProjectTemplateReference()
    場所 Samples.BatchAnalyze.Program.Main(String[] args) 場所 C:\temp\Samples.BatchAnalyze\Samples.BatchAnalyze\Program.cs:行 45
    ------------------------------------

     

    Here is my code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Globalization;
    using System.IO;
    using Sdl.Core.Globalization;
    using Sdl.Core.Settings;
    using Sdl.LanguagePlatform.TranslationMemoryApi;
    using Sdl.ProjectAutomation.Core;
    using Sdl.ProjectAutomation.FileBased;
    using Sdl.ProjectAutomation.Settings;

     

    namespace Samples.BatchAnalyze
    {
    class Program
    {
    private const string ServerUri = "http://nicgroupshare-test:80/";
    private const string UserName = "amer\riekom";
    private const string Password = "mypassword";

    private const string Organization = "/All Languages/Asian Languages/Japanese";
    private const string TmName = "Japanese RnD Test";
    private const string SourceCultureName = "en-US";
    private const string TargetCultureName = "ja-JP";
    private const string SourceFileName = @"C:\SourceFiles\rtapp_0.trsc.strings.xml";
    private const string LocalProjectFolder = @"C:\temp3";
    static void Main(string[] args)
    {
    var info = new ProjectInfo
    {
    Name = Path.GetFileName(SourceFileName),
    LocalProjectFolder = LocalProjectFolder,
    SourceLanguage = new Language(SourceCultureName),
    TargetLanguages = new[] { new Language(TargetCultureName) }
    };


    if (Directory.Exists(info.LocalProjectFolder))
    {
    Directory.Delete(info.LocalProjectFolder, true);
    }
    FileBasedProject project = new FileBasedProject(info);

    project.AddFiles(new[] { SourceFileName });

    var scan = project.RunAutomaticTask(
    project.GetSourceLanguageFiles().GetIds(),
    AutomaticTaskTemplateIds.Scan
    );

    Uri tmAddress = new Uri($"sdltm.{ServerUri}{Organization}{(Organization != "" ? "/" : "")}{TmName}");
    TranslationProviderConfiguration config = project.GetTranslationProviderConfiguration();
    TranslationProviderCascadeEntry tm = new TranslationProviderCascadeEntry(
    new TranslationProviderReference(tmAddress),
    true,
    true,
    false);

    config.Entries.Add(tm);
    project.UpdateTranslationProviderConfiguration(config);
    project.Credentials.AddCredential(new Uri(ServerUri), true, UserName, Password);
    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)));
    }
    }
    }