Не работает замещение метода из ReportHelper под safari

Здравствуйте! Поймали необъяснимый баг.

Есть C# в котором замещается метод CreateReport из ReportHelper

Приведу пример:

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text.RegularExpressions;
using System.Web;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.Factories;
using Terrasoft.Reports;
using System.Web.Script.Serialization;
using Terrasoft.Core.Entities;
 
namespace Terrasoft.Configuration.ReportService
{
	[Terrasoft.Core.Factories.Override]
	class OnellectReportHelper : ReportHelper
	{
		public override string CreateReport(string entitySchemaUId, string reportSchemaUId, string templateId,
				string recordId, string reportParameters, bool convertInPDF) {
			string key = base.CreateReport(entitySchemaUId, reportSchemaUId, templateId, recordId, reportParameters, convertInPDF);
			string reportName = "Метод генерации названия файла";
			if (!reportName.IsNullOrEmpty())
			{
				object reportObj = UserConnection.SessionData[key];
				var report = (ReportData)reportObj;
				report.Caption = Uri.EscapeDataString(reportName);
				UserConnection.SessionData[key] = report;
			}
			return key;	
		}
	}
}

Так вот под Windows проблем нет, все отрабатывает корректно, но некоторые клиенты стали жаловаться, что именование файлов работает как в коробке. Выяснилось, что они используют Safari. Если запустить генерацию печатных форм в Chrome, то название формируется согласно замещающему методы.

 

Не могу понять, куда копать. Mac-а для отладки под рукой нет. По идее код можно вставить на любой среде и тогда все печатные формы должны выгружаться с названием из переменной reportName. Может кто-то проверит под маком и Safari, повторится ли баг?

Нравится

3 комментария

Мы для тестов под Mac использовали облачный сервис. Например, https://www.macincloud.com

Здраствуйте,  попробуйте вместо килирицы использовать латиницу, возможно проблема в кодировке.

Я нашел проблему. Почему-то Safari берет название не из метаданных файла, а из caption, которое было сгенерировано на фронте. Метод downloadReport из PrintReportUtilities, передается caption с фронта.

		downloadReport: function(caption, key) {
			var report = document.createElement("a");
			report.href = "../rest/ReportService/GetReportFile/" + key;
			report.download = caption;
			if (this.Ext.isIE) {
				report.target = "_blank";
			}
			document.body.appendChild(report);
			report.click();
			document.body.removeChild(report);
		}

Получилось обойти это, изменив объект printForm в методе generatePrintForm в BasePageV2

generatePrintForm: function(printForm) {
   printForm.$Caption = "Имя файла";
   return this.callParent(arguments);
}

Правда с получением названия отчета из бекэнда пришлось повозиться, так и не смог по нормальному вызвать callParent внутри callService, т.к. название отчета получал через сервис. Забил на это дело с вызовом callParent и полностью скопировал код метода generatePrintForm из PrintReportUtilities, без всякого наследования...возможно это аукнется в одном из обновлений, но таков путь...

Показать все комментарии