Симптомы

Во время синхронизации происходит ошибка:

Элемент с идентификатором "90a3e9f6-........................-7c4aadb41f28" не найден

Причина

Таблица SysLookup не используется в десктопных версиях 7.5 и 7.6, но используется в мобильном приложении ниже версии 7.7.1

В таблице SysLookup есть записи которые ссылаются на несуществующие схемы, например такие UID'ы:

90A3E9F6-12D4-45B5-9122-7C4AADB41F28

A85932A3-30A5-49D7-9627-7F749A055AB7

CCF7D813-FC83-47AD-BE61-8F3B3B98A54F

E0AA5FA2-0910-478D-943B-E9C2579AD7B4

Решение

Выполнить скрипт

UPDATE [SysLookup]
SET IsSimple = 0
WHERE IsSimple = 1
AND NOT EXISTS (select 1 from SysSchema ss WHERE ss.[UId] = SysEntitySchemaUId)

Необходимые условия и возможные ограничения

Некоторые версия BPMonline 7.6

Версия мобильного приложения ниже 7.7.0

Нравится

Поделиться

0 комментариев
Показать все комментарии
IF NOT EXISTS (
 
    SELECT 1 FROM sys.columns
 
    WHERE [Name] = N'TIME_ZONE_ID'
 
    AND [Object_ID] =
Object_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]')
 
)
 
BEGIN
 
    ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD [TIME_ZONE_ID]
[NVARCHAR] (80);
 
END;  

 

Нравится

Поделиться

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

Симптомы

В настройках папок для синхронизации почты недостаточно большая ширина для дерева папок, в результате чего названия папок отображаются в столбец по одной букве.

Причина

На странице настройки присутствует невидимая правая панель, которую скрыли ещё в 7.2.0, в результате чего на ширину дерева групп выделено всего 40%. Кроме того, к странице применяются стили из PageDesignerUtilities, которые отображают всю область настройки на половину страницы.

Решение

В версии 7.7.0 данный функционал полностью изменён, в результате чего проблемы в этой версии не будет. Для версий 7.6.0 и ниже необходимо заместить модуль MailboxFolderSyncSettingsModule с полным копированием кода, удалить стили для класса left-container, добавить новый стиль

#mainContainerEx {
 
     width:  100%;
 
     padding-top:  7px;
 
     margin-right:  40px;
 
}

и заменить в исходном коде id и селектор mainContainer на mainContainerEx.

Нравится

Поделиться

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

Вопрос

На боковой панели в srm есть знак "+", по которому можно добавить новый заказ, обращение, звонок и т.д. Но при выборе добавления, например, обращения программа подвисает и никакое окно для создания нового обращения не открывается. (то же самое по заказу и задача/звонок).

Ответ

Cодержимое «+» быстрого добавления, редактируется в справочнике «Настройка меню быстрого добавления», как «Пункт меню быстрого добавления». Одна из его колонок - «Страница добавления» - является типом «Карточка редактирования раздела», которая ссылается не на таблицу, а на представление «VwSysModuleSchemaEdit» базы данных.

А в коде этого представления, идет привязка к имени рабочего пространства «Default», которое в вашем решении переименовано на «DefaultFlat». Следовательно, ни одна из страниц редактирования Вам не была видна. Так же как и не могла быть вызвана в качестве пункта меню быстрого добавления.

Для решения проблемы необходимо старую VwSysModuleSchemaEdit в БД, переименовать, к примеру, в «VwSysModuleSchemaEdit_Old» и выполнить скрипт по добавлению нового представления:

CREATE VIEW [dbo].[VwSysModuleSchemaEdit]
AS
SELECT
       se.Id as 'Id',
       se.CreatedOn as 'CreatedOn',
       se.CreatedById as 'CreatedById',
       se.ModifiedOn as 'ModifiedOn',
       se.ModifiedById as 'ModifiedById',
       se.ProcessListeners as 'ProcessListeners',
       se.PageCaption as 'PageCaption',
       se.TypeColumnValue as 'TypeColumnValue',
       se.SysModuleEntityId as 'SysModuleEntityId',
       ss.Caption as 'EditPageCaption',
       ss.Name as 'EditPageName'
FROM SysModuleEdit se
inner join VwSysSchemaInWorkspace ss ON ss.UId = se.CardSchemaUId
       and ss.SysWorkspaceId = (SELECT Id FROM SysWorkspace WHERE Name = 'DefaultFlat')
WHERE
       exists(SELECT null FROM SysModule sm WHERE sm.SysModuleEntityId = se.SysModuleEntityId)
       and exists(SELECT vss.Caption FROM VwSysSchemaInWorkspace vss WHERE vss.UId = se.CardSchemaUId)
GO

Для вступления изменений почистите кеш браузера, и перезайдите на сайт.

Нравится

Поделиться

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

Вопрос

Как зарегистрировать раздел на уровне БД если в интерфейсе он не отображается? Используется русская локализация

Ответ

Если в таблицах SysModuleEntity, SysModuleEdit и SysModule отсутствует информация об новом разделе, то поступаем в следующем порядке:

Изображение удалено.  В данной статье представлен минимум при котором раздел должен работать корректно

  • I Этап. Создать запись в таблице SysModuleEntity (таблица, где хранится информация объектах разделов):

     

SysModuleEntity

insert into SysModuleEntity (SysEntitySchemaUId) values ('AF6DD4AD-1398-4FCE-8837-78DC65AE0F9E')

где  [SysEntitySchemaUId] - колонка Uid объекта раздела (например, "UsrRK") в таблице SysSchema;

  • II Этап. Создать запись в таблице SysModuleEdit (страница редактирования "Page"):

     

SysModuleEdit

insert into SysModuleEdit (SysModuleEntityId
,UseModuleDetails
,CardSchemaUId
,ActionKindCaption
,ActionKindName
,PageCaption)
values ('8ED522AF-00E1-4595-AC13-643944B005B7'
,1
,'8B22D9BE-4BBC-4B50-80EA-AB6FBB604B7E'
,'Добавить'
,'UsrRK1Page'
,'Card schema: "RK"')

где  [SysModuleEntityId] - колонка Id записи таблицы SysModuleEntity из первого этапа (проверка Select Id from SysModuleEntity Where SysEntitySchemaUId='AF6DD4AD-1398-4FCE-8837-78DC65AE0F9E')

[CardSchemaUId]  - колонка Uid страницы редактирования объекта (например, "UsrRK1Page") в таблице SysSchema (проверка Select Uid,Name from SysSchema where name like '%UsrRK%'). Нам необходима схема, которая называется "Название объекта + 1Page"

[ActionKindCaption] - Название кнопки в реестре раздела;

[ActionKindName] - Название схемы страницы редактирования;

[PageCaption] - Заголовок схемы страницы редактирования в таблице SysSchema (проверка Select Uid,Name,Caption from SysSchema where name like '%UsrRK1Page%')

  • III Этап. Создать запись в таблице SysModule (страница раздела "Section"):

     

SysModule

insert into SysModule (Caption
,SysModuleEntityId
,FolderModeId
,GlobalSearchAvailable
,Code
,SectionModuleSchemaUId
,SectionSchemaUId
,CardModuleUid
,Image32Id) values (N'RK'
,'8ED522AF-00E1-4595-AC13-643944B005B7'
,'B659D704-3955-E011-981F-00155D043204'
,1
,'UsrRK'
,'DF58589E-26A6-44D1-B8D4-EDF1734D02B4'
,'B3D153C0-92EF-4A53-B868-9395C3E43516'
,'4E1670DC-10DB-4217-929A-669F906E5D75'
,'026742D9-390C-4778-BC46-9FA85C42677A')

где  [Caption] - Название раздела (можно брать caption объекта раздела) - 

[SysModuleEntityId]  - колонка Id записи таблицы SysModuleEntity из первого этапа (проверка Select Id from SysModuleEntity Where SysEntitySchemaUId='AF6DD4AD-1398-4FCE-8837-78DC65AE0F9E')

[Code] - Название объекта раздела (на английском языке);

[SectionModuleSchemaUId] - UId модуля SectionModuleV2 с помощью которой открывается схему раздела (Id для всех разделов одинаковый);

[SectionSchemaUId] - колонка Uid страницы раздела объекта (например, "UsrRK1Section") в таблице SysSchema (проверка Select Uid,Name,Caption from SysSchema where name like '%UsrRK%'). Нам необходима схема, которая называется "Название объекта + 1Section"

Нравится

Поделиться

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

Вопрос

Как изменить вкладку по умолчанию?

Ответ

Для этой цели Вы можете использовать свойство DefaultTabName, задав в нем необходимую вкладку, либо переопределить метод initTabs(), в котором при помощи this.setActiveTab("Имя вкладки"); задать вкладку, которая будет устанавливаться активной.

Нравится

Поделиться

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

Симптомы

В мобильном приложении при переходе в один из разделов происходит ошибка:

Тип: Terrasoft.SourceCodeException

Сообщение: TypeError: undefined is not an object (evaluating 'Terrasoft.sdk.RecordPage.getColumns(model, columnSetName).

get(columnName).columnOriginalConfig')

Дополнительная информация:

Script: file:///private/var/mobile/Containers/Bundle/Application/4C00C070-499C-4318-9653-8938B2A3B608/bpm'online.app/www/Common/Terrasoft.Mobile.Combined.js%0D%0A%09Line: 7698"

Причина

Пользователь удалил базовую колонку через дизайнер

Решение

1) В конфигурации создаем новый "модуль" с именем UsrMobileOverrideUtilities

добавляем в него такой текст: 

Ext.define("Terrasoft.sdk.RecordPage.Override", {
    override: "Terrasoft.sdk.RecordPage",
    configureColumn: function(model, columnSetName, columnName, columnConfig) {
        if (!Terrasoft.sdk.RecordPage.getColumns(model, columnSetName).get(columnName)) {
            return;
        }
        this.callParent(arguments);
    }
});

2) Меняем пользовательский манифест обычно он называется UsrMobileApplicationManifestCustom

добавляем в него такой блок:

"CustomSchemas": [
    "UsrMobileOverrideUtilities"
],

Необходимые условия и возможные ограничения

Базовая колонка использовалась в одном из базовых скриптов мобильного приложения

Нравится

Поделиться

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

Симптомы

Проблема воспроизводится, если для раздела, на который ссылается поле, указано несколько карточек редактирования. Для любого значения открывается первая карточка.

Причина

Некорректное формирование гиперссылки по данным поля.

Решение

Проблема исправлена в последних версиях 7.6.0 и начиная с 7.7.0. Часто бывает так, что клиент по различным причинам не может обновиться до данных версий. В этом случае есть обходное решение: необходимо создать замещающий клиентский модуль для схемы BasePageV2 и вставить в него код:

define("BasePageV2", ["terrasoft"], function(Terrasoft) {
	return {
		methods: {
			/**
			 * @inheritdoc Terrasoft.BasePageV2#getEntitySchemaQuery
			 * @overridden
			*/
			getEntitySchemaQuery: function() {
				var esq = this.callParent(arguments);
				this.Terrasoft.each(this.columns, function(column) {
					if ((column.type === Terrasoft.ViewModelColumnType.ENTITY_COLUMN) && column.referenceSchemaName) {
						var referenceSchema = Terrasoft.configuration.EntityStructure[column.referenceSchemaName];
						var attributeValue = referenceSchema && referenceSchema.attribute;
						var columnPath = attributeValue && (column.name + "." + attributeValue);
						if (columnPath && !esq.columns.contains(columnPath)) {
							esq.addColumn(columnPath);
						}
					}
				}, this);
				return esq;
			},
 
			/**
			 * @inheritdoc Terrasoft.BasePageV2#setColumnValues
			 * @overridden
			*/
			setColumnValues: function(entity) {
				this.Terrasoft.each(this.columns, function(column) {
					if ((column.type === Terrasoft.ViewModelColumnType.ENTITY_COLUMN) && column.referenceSchemaName) {
						var columnName = column.name;
						var lookupValue = entity.get(columnName);
						if (!Ext.isEmpty(lookupValue)) {
							var referenceSchema = Terrasoft.configuration.EntityStructure[column.referenceSchemaName];
							var attributeValue = referenceSchema && referenceSchema.attribute;
							var columnPath = attributeValue && (columnName + "." + attributeValue);
							if (columnPath) {
								var entityLookupValue = entity.get(columnPath);
								lookupValue[attributeValue] = entityLookupValue;
								this.set(columnPath, entityLookupValue);
							}
						}
					}
				}, this);
				this.callParent(arguments);
			}
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

Необходимые условия и возможные ограничения

После обновления до версий, в которых данная проблема исправлена, необходимо удалить описанное выше замещение из пользовательского пакета.

Нравится

Поделиться

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

Вопрос

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

1. Можно ли использовать для детали filterMethod, как в основной версии, или каким-либо образом использовать произвольный фильтр, а не только по колонке родительской страницы?

2. Как отключить возможность добавлять, удалять и редактировать записи детали, в зависимости от значений на родительской странице?

Ответ

1. Для деталей можно указывать фильтры, используя метод configure() соотв. sdk-класса:

Terrasoft.sdk.Details.configure("Contact", "ActivityDetailV2StandartDetail", {
   filters: Ext.create("Terrasoft.Filter", {
      type: Terrasoft.FilterTypes.Group,
      subfilters: [
         Ext.create("Terrasoft.Filter", {
            compareType: Terrasoft.ComparisonTypes.NotEqual,
            property: "Type",
            value: Terrasoft.GUID.ActivityTypeEmail
         })
      ]
   })
});

2. В целом, изменение режима работы детали делается так:

Terrasoft.sdk.Details.setChangeModes("Contact", "ActivityDetailV2StandartDetail", [Terrasoft.ChangeModes.Read]);

Но если нужно менять режим работы от условия, то для этого в контроллерах страниц есть метод getChangeModes(). Т.е. в контроллерах соотв. страниц (грида, просмотра, редактирования) нужно расширить этот метод:

getChangeModeOperations: function() {
   var detailConfig = this.getDetailConfig();
   if (detailConfig) {
      var parentRecord = detailConfig.parentRecord;
      if (parentRecord.get("IsNonActualEmail") === false) {
         return {
            canCreate: false,
            canUpdate: false,
            canDelete: false
         };
      }
   }
   return this.callParent(arguments);
}

 

Нравится

Поделиться

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

Решение найдет свое применение в тех случаях, когда есть необходимость отменять зависшие экземпляры процессов.

Ссылка на решение

Вся основная логика лежит на хранимых процедурах: tsp_DeleteSysProcessDataById, tsp_DeleteSysProcessDataByStartDate, tsp_UpdateSysProcessLogById, tsp_UpdateSysProcessLogByStartDate

В общих словах про процедуры

tsp_DeleteSysProcessDataById – удаляет информацию по процессу из таблиц SysActivityPrcEl, SysEntityCommonPrcEl, SysProcessIntermediateEvent, SysProcessData

tsp_DeleteSysProcessDataByStartDate – читает процессы, в логе фильтрует по дате, и запускает DeleteSysProcessDataById 

tsp_UpdateSysProcessLogById – обновляет информацию по процессу из таблиц SysProcessLog, SysProcessElementLog,

tsp_UpdateSysProcessLogByStartDate – читает процессы, в логе фильтрует по дате, и запускает UpdateSysProcessLogById

Бизнес-процесс который позволяет выбрать процесс, указать период, отменить процессы и выдать результат (к-ство отменных процессов)

Ниже отдельно SQL скрипты самих процедур

Скрипт на удаление:

SET QUOTED_IDENTIFIER ON
GO
 
IF NOT OBJECT_ID('[dbo].[tsp_DeleteSysProcessDataById]') IS NULL
BEGIN
	DROP PROCEDURE [dbo].[tsp_DeleteSysProcessDataById]
END
GO
 
CREATE PROCEDURE [dbo].[tsp_DeleteSysProcessDataById]
	@SysProcessDataId uniqueidentifier
AS
BEGIN
 
	SET NOCOUNT ON
 
	DECLARE @sysProcessDataRecordsToDelete TABLE (Id uniqueidentifier)
	DECLARE @sysProcessElementDataRecordsToDelete TABLE (Id uniqueidentifier )
 
	INSERT INTO @sysProcessDataRecordsToDelete ([Id])
		SELECT Id from SysProcessData
		WHERE ParentId = @SysProcessDataId
	OPTION (OPTIMIZE FOR (@SysProcessDataId UNKNOWN))
 
	DECLARE @COUNT bigint = (SELECT COUNT_BIG(*) FROM @sysProcessDataRecordsToDelete)
	WHILE (@COUNT) != 0
		BEGIN
			DECLARE @parentId uniqueidentifier = (SELECT TOP 1 Id from @sysProcessDataRecordsToDelete)
			DELETE FROM @sysProcessDataRecordsToDelete WHERE Id = @parentId;
			EXEC [dbo].[tsp_DeleteSysProcessDataById] @parentId
			SET @COUNT = @COUNT - 1
		END
 
	INSERT INTO @sysProcessElementDataRecordsToDelete ([Id])
		SELECT Id FROM SysProcessElementData
		WHERE SysProcessId = @SysProcessDataId
	SET @COUNT = (SELECT COUNT_BIG(*) FROM @sysProcessElementDataRecordsToDelete)
	DELETE FROM SysActivityPrcEl WHERE ProcessElementId IN (SELECT Id FROM @sysProcessElementDataRecordsToDelete)
	DELETE FROM SysEntityCommonPrcEl WHERE ProcessElementId IN (SELECT Id FROM @sysProcessElementDataRecordsToDelete)
	DELETE FROM SysProcessIntermediateEvent WHERE SysProcessElementId IN (SELECT Id FROM @sysProcessElementDataRecordsToDelete)
	DELETE FROM SysProcessData WHERE Id = @SysProcessDataId
	OPTION (OPTIMIZE FOR (@SysProcessDataId UNKNOWN))
END
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
IF NOT OBJECT_ID('[dbo].[tsp_DeleteSysProcessDataByStartDate]') IS NULL
BEGIN
	DROP PROCEDURE [dbo].[tsp_DeleteSysProcessDataByStartDate]
END
GO
 
CREATE PROCEDURE [dbo].[tsp_DeleteSysProcessDataByStartDate]
	@ProcessName nvarchar(MAX),
	@StartDate datetime,
	@EndDate datetime
AS
BEGIN
 
	SET NOCOUNT ON
 
	IF NOT OBJECT_ID('#SysProcessDataId') IS NULL
	BEGIN
		DROP TABLE #SysProcessDataId
	END
 
	CREATE TABLE #SysProcessDataId (Id uniqueidentifier)
 
	INSERT INTO #SysProcessDataId ([Id])
		SELECT DISTINCT SysProcessData.Id FROM SysProcessLog
		JOIN SysProcessData on SysProcessLog.SysSchemaId = SysProcessData.SysSchemaId
		WHERE SysProcessData.ParentId IS NULL
		AND CONVERT(date, SysProcessLog.StartDate) >= CONVERT(date, @StartDate) and CONVERT(date, SysProcessLog.StartDate) <= CONVERT(date, @EndDate) 
		AND SysProcessLog.Name = @ProcessName
		AND SysProcessLog.StatusId = 'ED2AE277-B6E2-DF11-971B-001D60E938C6'
 
	DECLARE SysProcessDataIdCursor CURSOR STATIC LOCAL FOR
	SELECT
		Id
	FROM 
		#SysProcessDataId
 
	DECLARE @COUNT int = (SELECT COUNT_BIG(*) FROM #SysProcessDataId)
 
	IF (@COUNT > 50000)
		SET @COUNT = 50000
 
	DECLARE @processDataId uniqueidentifier
 
	OPEN SysProcessDataIdCursor
	WHILE (@COUNT > 0)
		BEGIN
			FETCH NEXT FROM SysProcessDataIdCursor INTO @processDataId
			IF @@FETCH_STATUS = -1 BREAK
			IF @@FETCH_STATUS = -2 CONTINUE
			EXEC [dbo].[tsp_DeleteSysProcessDataById] @processDataId
			SET @COUNT = @COUNT - 1
		END
	CLOSE SysProcessDataIdCursor
	DEALLOCATE SysProcessDataIdCursor
 
	IF NOT OBJECT_ID('#SysProcessDataId') IS NULL
	BEGIN
		DROP TABLE #SysProcessDataId
	END
 
END
GO

Скрипт на обновление:

SET QUOTED_IDENTIFIER ON
GO
 
IF NOT OBJECT_ID('[dbo].[tsp_UpdateSysProcessLogById]') IS NULL
BEGIN
	DROP PROCEDURE [dbo].[tsp_UpdateSysProcessLogById]
END
GO
 
CREATE PROCEDURE [dbo].[tsp_UpdateSysProcessLogById]
	@SysProcessLogId uniqueidentifier
AS
BEGIN
 
	SET NOCOUNT ON
 
	DECLARE @sysProcessLogRecordsToDelete TABLE (Id uniqueidentifier)
 
	INSERT INTO @sysProcessLogRecordsToDelete ([Id])
		SELECT Id FROM SysProcessLog
		WHERE ParentId = @SysProcessLogId
	OPTION (OPTIMIZE FOR (@SysProcessLogId UNKNOWN))
 
	DECLARE @COUNT int = (SELECT COUNT(*) FROM @sysProcessLogRecordsToDelete)
	WHILE (@COUNT) != 0
		BEGIN
			DECLARE @parentId uniqueidentifier = (SELECT TOP 1 Id from @sysProcessLogRecordsToDelete)
 
			Update SysProcessLog 
			Set StatusId=( select id from SysProcessStatus where id = '1BE78F3E-234D-4D6A-869A-DC07253FD2F3' ) 
			Where id =@parentId
 
			EXEC [dbo].[tsp_UpdateSysProcessLogById] @parentId
			SET @COUNT = @COUNT - 1
		END
 
	Update SysProcessLog 
	Set CompleteDate = GETUTCDATE(), StatusId=( select id from SysProcessStatus where id = '1BE78F3E-234D-4D6A-869A-DC07253FD2F3' ) 
	Where id =@SysProcessLogId AND StatusId = 'ED2AE277-B6E2-DF11-971B-001D60E938C6'
 
 
	UPDATE SysProcessElementLog Set StatusId = (select Id from SysProcessStatus where Id = '1BE78F3E-234D-4D6A-869A-DC07253FD2F3'), CompleteDate = GETUTCDATE() where SysProcessId = @SysProcessLogId 
	and StatusId= 'ED2AE277-B6E2-DF11-971B-001D60E938C6' 
 
 
END
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
IF NOT OBJECT_ID('[dbo].[tsp_UpdateSysProcessLogByStartDate]') IS NULL
BEGIN
	DROP PROCEDURE [dbo].[tsp_UpdateSysProcessLogByStartDate]
END
GO
 
CREATE PROCEDURE [dbo].[tsp_UpdateSysProcessLogByStartDate]
	@ProcessName nvarchar(MAX),
	@StartDate datetime,
	@EndDate datetime
AS
BEGIN
 
	SET NOCOUNT ON
 
	IF NOT OBJECT_ID('#SysProcessLogId') IS NULL
	BEGIN
		DROP TABLE #SysProcessLogId
	END
 
	CREATE TABLE #SysProcessLogId (Id uniqueidentifier)
 
	INSERT INTO #SysProcessLogId ([Id])
		SELECT Top 100000 SysProcessLog.Id FROM SysProcessLog
		WHERE SysProcessLog.ParentId IS NULL
		AND CONVERT(date, SysProcessLog.StartDate) >= CONVERT(date, @StartDate) 
		AND CONVERT(date, SysProcessLog.StartDate) <= CONVERT(date, @EndDate) 
		AND SysProcessLog.Name = @ProcessName 
 
	CREATE TABLE #SysProcessExec (Id uniqueidentifier)
 
	INSERT INTO #SysProcessExec ([Id])
		SELECT Top 100000 SysProcessLog.Id FROM SysProcessLog
		WHERE SysProcessLog.ParentId IS NULL
		AND CONVERT(date, SysProcessLog.StartDate) >= CONVERT(date, @StartDate) 
		AND CONVERT(date, SysProcessLog.StartDate) <= CONVERT(date, @EndDate) 
		AND SysProcessLog.Name = @ProcessName 
		AND SysProcessLog.StatusId = 'ED2AE277-B6E2-DF11-971B-001D60E938C6'
 
	DECLARE SysProcessLogIdCursor CURSOR STATIC LOCAL FOR
	SELECT
		Id
	FROM 
		#SysProcessLogId
 
	DECLARE @COUNT int = (SELECT COUNT_BIG(*) FROM #SysProcessLogId)
 
	DECLARE @processLogId uniqueidentifier
 
	OPEN SysProcessLogIdCursor
	WHILE (@COUNT > 0)
		BEGIN
			FETCH NEXT FROM SysProcessLogIdCursor INTO @processLogId
			IF @@FETCH_STATUS = -1 BREAK
			IF @@FETCH_STATUS = -2 CONTINUE
			EXEC [dbo].[tsp_UpdateSysProcessLogById] @processLogId
			SET @COUNT = @COUNT - 1
		END
	CLOSE SysProcessLogIdCursor
	DEALLOCATE SysProcessLogIdCursor
	INSERT INTO MassCancellationProcessesLog (StartDate, EndDate, DisableProcessCount, Process)	VALUES(CONVERT(date, @StartDate), CONVERT(date, @EndDate), (SELECT COUNT(*) FROM #SysProcessExec), @ProcessName)
	IF NOT OBJECT_ID('#SysProcessLogId') IS NULL
	BEGIN
		DROP TABLE #SysProcessLogId
	END
	IF NOT OBJECT_ID('#SysProcessExec') IS NULL
	BEGIN
		DROP TABLE #SysProcessExec
	END
 
END
GO

 

Нравится

Поделиться

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