Фильтры

Добрый день!
 

После обновления на 7.16.1 сделал копию из продакшн базы в разработческую, в разработческой доработал пакет, выгрузил, загружаю в продакшн, получаю:

2020-08-05 17:24:21,283 Загрузка файла: ZL.Root.zip 100%
2020-08-05 17:24:21,330 Началось резервное копирование конфигурации.
2020-08-05 17:24:21,330 Загрузка пакетов из архива
2020-08-05 17:24:21,346 Пакет "ZL.Root" загружен
2020-08-05 17:24:21,346 Загрузка пакетов из базы данных
2020-08-05 17:24:21,853 System.ApplicationException: Невозможно установить пакет из zip-архива в то время как существует SVN-пакет с таким же UId.
   в Terrasoft.Core.AppInstallation.Packages.Backup.ZipPackageBackupManager.SaveBackup(IList`1 composedPackages, String backupPath, String code)
   в Terrasoft.Core.ServiceModelContract.PackageInstaller.PackageInstallerServiceInternal.<>c__DisplayClass25_0.<CreateBackup>b__0()
   в Terrasoft.Core.ServiceModelContract.PackageInstaller.BaseInstallerServiceInternal.InvokeWithLogging(Action action)

Как сие явление побороть?

Нравится

2 комментария
Лучший ответ

Здравствуйте! Ваш пакет  на продакшене - ZL.Root привязан к SVN для этого Вам необходимо выполнить несколько SQL запросов:
Отвязка пакета от репозитория

UPDATE SysPackage 
SET 
    [SysRepositoryId] = null
WHERE  [Name]= 'ZL.Root'

 

Блокирование пакта(+ задаем ему признак установленный):
 

update SysPackage
set IsChanged = 0, InstallType = 1, IsLocked = 0, Maintainer = 'Customer'
where Name in ('ZL.Root')

После этих манипуляций должно нормально устанавливаться

Здравствуйте! Ваш пакет  на продакшене - ZL.Root привязан к SVN для этого Вам необходимо выполнить несколько SQL запросов:
Отвязка пакета от репозитория

UPDATE SysPackage 
SET 
    [SysRepositoryId] = null
WHERE  [Name]= 'ZL.Root'

 

Блокирование пакта(+ задаем ему признак установленный):
 

update SysPackage
set IsChanged = 0, InstallType = 1, IsLocked = 0, Maintainer = 'Customer'
where Name in ('ZL.Root')

После этих манипуляций должно нормально устанавливаться

Нигрескул Алексей,

Сработало, спасибо!

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

Здравсвуйте! Есть некоторая проблема с написанным мной исходным кодом.
При запуске Бизнес-процесса при получении сигнала от объекта или таймера, где в задании сценарии вызывается вебсервис и метод без передачи параметров(плюс вдобавок это метод void), вызывается такая ошибка:
System.ServiceModel.ServiceActivationException: Set AspNetCompatibilityEnabled true
   в Terrasoft.Web.Common.BaseService.get_UserConnection()
   в Terrasoft.Configuration.WebService1C.UpdatesBankNameAndAdresAll()
   в Terrasoft.Core.Process.qrtProcess_f3c9148MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
Хотя при ручном запуске все работает нормально, как ее можно исправить?

Нравится

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

Вызываю вебсервис и метод так:
WebService1C service = new WebService1C();
service.UpdatesBankNameAndAdresAll();
return true;

Самое примечательное, что, если добавить перед запуском элемент "Вопрос пользователю" и добавить ответ положительный, а также ответить на него при вызове сигнала  от объекта или таймера или добавить элемент "Автогенирируемая страница", то все также работает нормально.

Также когда вебсервис и метод вызывается в коде джаваскрипта при помощи SrrviceHelper, тоже все работает нормально.

Вот код метода:

[OperationContract]
        [WebInvoke(Method = "GET", BodyStyle = WebMessageBodyStyle.Wrapped,
            RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        public void UpdatesBankNameAndAdresAll() {
            
            string guid1cBank = "";
            Guid id = new Guid();
            
            var esqBank = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "AccountBillingInfo");
            esqBank.AddAllSchemaColumns();
            var banks = esqBank.GetEntityCollection(UserConnection);
            foreach (var bankItem in banks) {
                guid1cBank = bankItem.GetTypedColumnValue<string>("qrtGuid1cBank");
                id = bankItem.GetTypedColumnValue<Guid>("Id");
                if(guid1cBank != String.Empty){
                    UpdatesBankNameAndAdresOne(id);
                }
            }
        }

Возможно не передается UserConnection, добавь в БП
var userConnection = Get<UserConnection>("UserConnection");
WebService1C service = new WebService1C(userConnection);

 

а, в схему добавь:

public UserConnection UserConnection {
            get;
            private set;
        }
        

        public WebService1C(UserConnection userConnection) {
            UserConnection = userConnection;
        }

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

Делаю отчет в FastReport по аналогии со статьей в Академии. 
https://academy.terrasoft.ru/documents/technic-sdk/7-16/primer-nastroyki-otcheta

Но мне для отчета нужны несколько источников данных и во многих несколько уровней группировки данных.
Источники данных.

{
    "ProviderName": "MortgageConclusionDataProvider",
    "Schemas": {
        "MortgageConclusionData": {
            "GroupName": {"DataValueType": 1},
            "Account": {"DataValueType": 1},
            "PreparationDate": {"DataValueType": 7},
            "ConclusionType": {"DataValueType": 1}
        },
        "LevelSecurityData": {
            "MortgageConclusion": {"DataValueType": 0},
            "SublimitTypes": {"DataValueType": 0},
            "NameSublimitTypes": {"DataValueType": 1},
            "Groupe": {"DataValueType": 1},
            "TargetUse": {"DataValueType": 1},
            "AmountLimit": {"DataValueType": 5}
        },
        "LocalizableStrings": {
            "ReportTitle": {"DataValueType": 1},
            ...
        }
    }
}

В сервисе прописываю логику:
 

public Task<ReportDataDictionary> GetData(UserConnection userConnection, IReadOnlyDictionary<string, object> parameters) {
            var filter = ExtractFilterFromParameters(userConnection, _entitySchemaUId, parameters);
            var result = new ReportDataDictionary {
                // Заполнить колонки в отчете.
                ["MortgageConclusionData"] = GetMortgageConclusionData(userConnection, _entitySchemaUId, filter),
                ["LevelSecurityData"] = GetLevelSecurityData(userConnection, _entityLevelSecuritySchemaUId),
                ["LocalizableStrings"] = GetLocalizableStrings(userConnection)
            };
            return Task.FromResult(result);
        }

И при формировании отчета ошибка 
 Error while sending request 
    response status: 500 (Internal Server Error)
    request url: ...FastReportService/CreateReport
    method: POST
    request data: {"reportTemplateId":"a1c1f160-a7c2-56a0-edcb-1101dde5a74e","reportCaption":"Заключение","reportSchemaName":"MortgageConclusion","report...

Через Profiler запросы сформировались, данные есть.

Хотелось бы хоть один рабочий пример увидеть, где несколько источников и есть иерархия...
Спасибо!

Нравится

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

Добрый день!

Делаю иерархическую деталь. Не работает отображение записей в детали. 

*Запрос отправляется.

*Ответ приходит.

*В объекте, по которому делается деталь, "Родитель иерархии" указан.

 

Код детали: 

define("NorbitContactProductDetail", ["ConfigurationGrid", "ConfigurationGridGenerator",
	 "ConfigurationGridUtilities"], function() {
	return {
		entitySchemaName: "NorbitContactProduct",
		messages: {},
		mixins: {},
		attributes: {},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			/**
			 * Скрыть кнопку "Добавить".
			 */
			/*{
				"operation": "remove",
				"name": "AddRecordButton"
			},*/
			
			/**
			 * Подключение иерархии детали.
			 */
			{
				"operation": "merge",
				"name": "DataGrid",
				"values": {
					"visible": true,
					"type": "listed",
					"hierarchical": true,
					"hierarchicalColumnName": "NorbitParentContactProduct",
					"useLevelRendering": true
				}
			},
		]/**SCHEMA_DIFF*/,
		methods: {

			addGridDataColumns: function (esq) {
			   this.callParent(arguments);
				if (!esq.columns.contains("Name")) {
					esq.addColumn("Name");
				}
				if (!esq.columns.contains("NorbitCount")) {
					esq.addColumn("NorbitCount");
				}
				if (!esq.columns.contains("NorbitParentContactProduct")) {
					esq.addColumn("NorbitParentContactProduct");
				}
			},

			
			/**
			 * Скрыть пункт меню "Копировать".
			 */
			getCopyRecordMenuItem: Terrasoft.emptyFn,
			
			/**
			 * Скрыть пункт меню "Изменить".
			 */
			getEditRecordMenuItem: Terrasoft.emptyFn,
			
			/**
			 * Скрыть пункт меню "Удалить".
			 */
			getDeleteRecordMenuItem: Terrasoft.emptyFn,
		}
	};
});

 

Нравится

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

Здравствуйте! Наблюдается следующая проблема, а именно конфликт библиотек  Google.Apis, в связи с этим не можем реализовать на стороне Ceatio нужный функционал. В академии прочел статью про метод разработки пакет-проект в которой говориться, что данного конфликта быть не должно т.к. пакет является изолированным, однако разработав такой пакет и вызывая его функционал из другого пакета системы конфликт так же остался - https://prnt.sc/truxr1.
Вот ссылка на скачивание разработанного нами пакета(пакет тестовый)- https://drive.google.com/file/d/19YyYJ6rLjEdS7N2HXRNduBw0oOZkdSkA/view?…
функционал вызываем данным образом:
namespace Autobooking.CreatioIntegrationApp
{
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Net;
    using System.Threading.Tasks;
    using Terrasoft.Configuration;
    using Terrasoft.Core;
    using Terrasoft.Core.Factories;
    using Terrasoft.Web.Common;
    using SysSettings = Terrasoft.Core.Configuration.SysSettings;
    using WebRequest = System.Net.WebRequest;
    using AutobookingGoogleAnalyticsApi.Interfaces;
    public sealed class CreatioIntegrationAppService : BaseService
    { 
        public CreatioIntegrationAppService(UserConnection userConnection) {
            UserConnection = userConnection;           
        }
 
        public string GetSysSetting(string settingName) {
            return SysSettings.GetValue<string>(UserConnection, settingName, null);
        }
 
 
        public void StartAnalytic() {
                var service = ClassFactory.Get<IReportService>(new ConstructorArgument("userConnection", UserConnection),
                new ConstructorArgument("serviceAccountEmail", "testEmail"),
                new ConstructorArgument("applicationName", "testAppName"), new ConstructorArgument("secretFile", null));
        service.AuthenticateServiceAccount();
        }        
    }
}

Нравится

1 комментарий

Здравствуйте, Александр!

По сути, все зависимые библиотеки загружаются в один домен, по этому конфликты будут независимо от того, сослались мы напрямую из конфигурации или опосредовано из через пакет-проект.

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