Как отладить составную сущность с исключением «Неверный синтаксис рядом с ключевым словом FROM»? - PullRequest
2 голосов
/ 10 февраля 2020

Я создал новую составную сущность на основе двух новых сущностей. Те, в свою очередь, основаны на новых представлениях, которые основаны на новых запросах. Запросы основаны на сочетании стандартных таблиц, представлений и пользовательских таблиц.

Подобные составные объекты были созданы в прошлом и работают.

При экспорте составной сущности с проектом данных я получаю следующие исключения:

Исключение в журнале событий AX-DIXFRuntime:

System.Exception: Incorrect syntax near the keyword 'FROM'.
   at Microsoft.Dynamics.AX.Framework.Tools.DMF.ServiceProxy.DmfEntitySharedTypesProxy.DoWork[T](Func`1 work)
   at Dynamics.AX.Application.DMFGenerateSSISPackage.`generateFileDataV2(DMFDefinitionGroupExecution _dmfDefinitionGroupExecution, String _defGroupName, DMFFileFormat _fileFormat, DMFDelimiter _rowDelimiter, DMFDelimiter _columnDelimiter, String _codePage, String _locale, NoYes _isFirstRowHeader, NoYes _unicode, String _source, String _textQualifier, DMFXMLStyle _style, String _rootElement, String _filePath, Map _entitySyncVersion, Int32 _previewCount, Boolean @_entitySyncVersion_IsDefaultSet, Boolean @_previewCount_IsDefaultSet) in xppSource://Source/ApplicationFoundation\AxClass_DMFGenerateSSISPackage.xpp:line 1419

Исключение в AX -DIXFSSISRuntime журнал событий:

SSISexceptionMessage System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'FROM'. 
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 
at System.Data.SqlClient.SqlDataReader.get_MetaData() 
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) 
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) 
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) 
at Microsoft.Dynamics.AX.Framework.Tools.DMF.SSISHelper.DMFCompositeEntity.GetDatasetForXMlExport(String stagingString) 
at Microsoft.Dynamics.AX.Framework.Tools.DMF.SSISHelper.DMFCompositeEntity.ExportCompositeEntityToXML() 
at Microsoft.Dynamics.AX.Framework.Tools.DMF.SSISHelperService.Service.ServiceHelper.ExportCompositeEntityToXML(DMFCompositeEntity dmfCompEnt) ClientConnectionId:9a234a11-809d-4d88-828d-8981bfb4faa8 Error Number:156,State:1,Class:15 

Что я пробовал до сих пор:

  • refre sh сущности и составная сущность с en-us настройка языка
  • отладка DMFGenerateSSISPackage.generateFileDataV2 и сравнение с экспортом работающего составного объекта> очевидных неправильных различий не обнаружено
  • удаление линейного объекта из составного объекта> та же проблема
  • экспорт заголовка / строки непосредственно> работает без проблем

Вопрос

У меня вопрос, есть ли способ узнать, что такое SQL вызвало исключение Incorrect syntax near the keyword 'FROM'. Если нет возможности, я рад услышать предложения, как я могу еще более сузить эту проблему.

1 Ответ

3 голосов
/ 10 февраля 2020

Проблема вызвана длиной текста метки составного объекта и длиной имен объекта. Они не должны превышать ограничение в 99 символов.

Предположим, что у вас есть два объекта с именами

  • VeryLongNameWithSixtyCharactersThatIdentifyTheFirstEntity123 (60 символов)
  • AnotherLongNameWithSeventyCharactersThatIdentifyTheSecondEntity1234567 ( 70 символов)

Также предположим, что текст метки вашей сущности следующий

  • Label text with 30 characters1

Если вы перейдете в рабочую область Управление данными и откройте список сущностей, найдите составную сущность с именем Label text with 31 characters1 и откройте «Дочерние сущности». Он покажет 2 записи с именем

  • Label text with 30 characters1_VeryLongNameWithSixtyCharactersThatIdentifyTheFirstEntity123 (90 символов)
  • Label text with 30 characters1_AnotherLongNameWithSeventyCharactersThatIdentifyTheSecondEntity1234567 (100 символов)

Этот составной объект будет экспортироваться правильно .

Но если вы добавите еще один символ к имени второй сущности, вторая запись дочерних сущностей будет иметь 101 символ. Это приведет к описанной ошибке исключения.

Исправлено Microsoft

В выпуск 2086 документации Microsoft, они объявили о введении проверки во время компилируйте время для этого в PU 36, который в настоящее время находится под следствием. См. KB4549600.

...