Назад | Перейти на главную страницу

Publish-AXReport выдает ошибку «Имя не может начинаться с символа« »»

Выполнение приведенного ниже сценария PowerShell (т.е. для развертывания всех отчетов SSRS для AX) дает ошибку:

$axdllname = "Microsoft.Dynamics.AX.Framework.Management.dll"
$gacfolder = join-path $env:windir "assembly\GAC_MSIL"
$axdll = Get-ChildItem $gacfolder -Recurse -Name $axdllname
$axdll = join-path $gacfolder $axdll
import-module $axdll
Publish-AXReport -ReportName "*" -RestartReportServer

Сообщение об ошибке:

Publish-AXReport : Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 46, position 8.
At line:1 char:17
+ Publish-AXReport <<<<  -ReportName "*" -RestartReportServer
+ CategoryInfo          : ParserError: (:) [Publish-AXReport], XmlException
+ FullyQualifiedErrorId : Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 46, position 8.,M
icrosoft.Dynamics.AX.Framework.Management.Reports.PublishReportCommand

К сожалению, я не могу найти копию источника для Publish-AXReport, поэтому не могу глубже понять, откуда исходит это исключение.

Вопрос

Кто-нибудь знает вероятную причину этой проблемы или какие шаги я могу предпринять, чтобы ее выявить?

Обновить

Вместо запуска для всех отчетов с использованием * Я попытался получить список всех отчетов (отлично работает сам по себе / не показывает отчетов с именами, начинающимися с пробела), а затем связал его с командлетом publish-axreport; что теперь означает, что я могу видеть, какие отчеты вызывают эту ошибку.

Get-AxReport -ReportName * | Publish-AXReport

Теперь ясно, что есть несколько отчетов (хотя и лишь небольшая часть из доступных), которые выдают эту ошибку при публикации. Один из них AssetAcquisitionDocumentPL.

Кажется, что ошибки возникают только для отчетов со связанными сборками / всегда ошибаются для отчетов с; никогда для тех, у кого нет.

Такая же проблема возникает при запуске Get-AXReportServerConfiguration | %{Publish-AXAssembly -id $_.ConfigurationId -vsprojectname 'assetAcquisitionDocumentPL.BusinessLogic'}

Выполнение вышеуказанного с помощью -verbose switch показывает, что ошибка возникает в какой-то момент после того, как предположения скопированы из временного каталога в каталог bin SSRS.

Проблема решена в этой теме: https://community.dynamics.com/ax/f/33/t/190841

Основная причина

файл D:\Program Files\Microsoft SQL Server\MSRS11.AX2012_ENVIRON1\Reporting Services\ReportServer\rssrvpolicy.config содержит пробел между открытой скобкой и одним из имен элементов; т.е. < CodeGroup ...> вместо того <CodeGroup ...>.

Исправив эту опечатку, проблема была решена.

(Я не знаю, как пространство вообще попало в файл / сомневаюсь, что узнаю, если мы снова не увидим эту проблему).

Шаги по обнаружению причины

Если у кого-то возникнет аналогичная проблема с другой причиной, вот подробная версия того, как мы обнаружили проблему:

  • Скачать и извлечь монитор процесса: https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx
  • Закройте все ненужные процессы / службы (для уменьшения шума)
  • открыто Microsoft Dynamics AX 2012 Management Shell как администратор
  • Введите команду, вызывающую ошибку (Publish-AXAssembly -id 'SSRSNLBAOS2' -vsprojectname 'assetAcquisitionDocumentPL.BusinessLogic' -verbose); выберите команду, которая выполняет минимально возможную работу, прежде чем выдавать ошибку (для уменьшения шума).
  • Открыть монитор процесса
  • Запустите команду
  • В момент появления ошибки нажмите «Сохранить в мониторе процессов», чтобы сохранить сеанс в файл PML.
  • Закройте монитор процессов и powershell
  • Откройте файл PML и отфильтруйте имя процесса powershell.exe
  • Ищите интересные события. Я подозревал, что это файл XML, поэтому посмотрел на события доступа к файлу ближе к концу файла.
  • Поскольку я раньше сталкивался с подобными проблемами с файлами XML, сосредоточился на файлах XML (формат) / попытался проанализировать их, чтобы увидеть, какие из них ошибочно ([xml][string](get-content 'd:\some\path\to\a\file.config')).
  • Когда файл не проанализировал / не выдал ошибку о недопустимом пробеле, это был файл-виновник.
  • Затем я открыл файл в текстовом редакторе и, благодаря подсветке синтаксиса, сразу обнаружил ошибку.
  • Исправление файла, сохранение и последующее подтверждение того, что это единственная ошибка в файле, повторным синтаксическим анализом оставили файл в хорошем состоянии.
  • Затем я перезапустил Publish-AXAssembly ... (без запущенного монитора процессов), чтобы узнать, была ли проблема решена.

Спасибо @BrandonWiese из сообщества Dynamics за его помощь.

Похоже, у вас есть пробелы (шестнадцатеричный 0x20) в имени отчета, которое вызывает ошибку. Пожалуйста, проверьте свой сценарий и / или имена отчетов, чтобы удалить пробелы.

Строка 46, позиция 8