Для того, чтобы на основе какой-либо сущности сделать экспорт объекта этой сущности в SQL-скрипт (для быстрого переноса элемента в другую БД), в Витакарте предусмотрен следующий механизм:
Заходим в «Администрирование»-«Дополнительные команды пользовательского интерфейса», добавляем новую команду. В поле «Наименование» вводим название вновь создаваемого действия, оно будет выводиться в меню на той сущности, для которой создаётся действие. В поле «Команда» выбираем «Действие». В поле «Отображать на сущности» выбираем TEMPLATE_FIELD. В поле хранимая процедура прописываем spx_TEMPLATE_FIELD_ExportToSql. Затем добавляем два параметра. Все данные для заполнения видны на скриншотах:
Добавляем первый параметр
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://mycompany.com/mynamespace" xmlns:js="urn:the-xml-files:xslt-csharp" xmlns:ntd="http://www.ntd.ru/ntd/" version="1.0"> <xsl:output method="text"/> <xsl:template match="root"> <xsl:for-each select="TEMPLATE_FIELD"> declare @TemplateFieldId uniqueidentifier set @TemplateFieldId = '<xsl:value-of select="TemplateFieldID"/>' if not exists(select * from VCLib.T_TEMPLATE_FIELD where Entity = '<xsl:value-of select="Entity"/>' and AttrPath = '<xsl:value-of select="AttrPath"/>') insert into VCLib.T_TEMPLATE_FIELD(TemplateFieldID, Entity, AttrPath, UsersValuesOnly, CopyAttributes) values ( @TemplateFieldId, '<xsl:value-of select="Entity"/>', '<xsl:value-of select="AttrPath"/>', <xsl:choose> <xsl:when test="string(UsersValuesOnly)"> <xsl:value-of select="UsersValuesOnly"/> </xsl:when> <xsl:otherwise>NULL</xsl:otherwise> </xsl:choose>, <xsl:choose> <xsl:when test="string(CopyAttributes)">'<xsl:value-of select="CopyAttributes"/>'</xsl:when> <xsl:otherwise>NULL</xsl:otherwise> </xsl:choose> ) else select @TemplateFieldID = TemplateFieldID from VCLib.T_TEMPLATE_FIELD where Entity = '<xsl:value-of select="Entity"/>' and AttrPath = '<xsl:value-of select="AttrPath"/>' <xsl:for-each select="TEMPLATE_FIELD_VALUE"> if not exists(select * from VCLib.T_TEMPLATE_FIELD_VALUE where TemplateFieldValueID = '<xsl:value-of select="TemplateFieldValueID"/>') insert into VCLib.T_TEMPLATE_FIELD_VALUE(TemplateFieldValueID, TemplateField, TemplateString, Name, Category, TextValueType, TextFontSize) values ( '<xsl:value-of select="TemplateFieldValueID"/>', @TemplateFieldId, '<xsl:value-of select="TemplateString"/>', '<xsl:value-of select="Name"/>', <xsl:choose> <xsl:when test="string(Category)">'<xsl:value-of select="Category"/>',</xsl:when> <xsl:otherwise>NULL,</xsl:otherwise> </xsl:choose> '<xsl:value-of select="TextValueType"/>', <xsl:choose> <xsl:when test="string(TextFontSize)">'<xsl:value-of select="TextFontSize"/>'</xsl:when> <xsl:otherwise>NULL</xsl:otherwise> </xsl:choose> ) </xsl:for-each> GO </xsl:for-each> </xsl:template> </xsl:stylesheet>
Скачать TemplatesToSQL.xslt в виде файла
Добавляем второй параметр
Добавляем в БД хранимую процедуру:
USE [AKUZDB] GO /****** Object: StoredProcedure [dbo].[spx_TEMPLATE_FIELD_ExportToSql] Script Date: 04.02.2018 18:03:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[spx_TEMPLATE_FIELD_ExportToSql] @TemplateFieldID uniqueidentifier, @xml varchar(max) out AS BEGIN set @xml = ( select t.[TemplateFieldID] , t.[Entity] , t.[AttrPath] , t.[UsersValuesOnly] , t.[CopyAttributes] , ( select tv.[TemplateFieldValueID] , tv.[TemplateField] , tv.[TemplateString] , tv.[Users] , tv.[Name] , tv.[Category] , tv.[UsersGroup] , tv.[TextValueType] , tv.[TextFontSize] from [VCLib].T_TEMPLATE_FIELD_VALUE tv where tv.TemplateField = t.TemplateFieldID for xml path('TEMPLATE_FIELD_VALUE'), TYPE ) from [VCLib].T_TEMPLATE_FIELD t where t.TemplateFieldID = @TemplateFieldID for xml path('TEMPLATE_FIELD'), root('root') ) END
Скачать TemplatesToSQL.sql в виде файла
После этих действий, на форме сущности «TEMPLATE_FIELD» должен появится пункт меню «Действие», а в этом пункте наше, вновь созданное, действие «Экспорт в SQL».
Также пункт меню «Действие» можно найти в контекстном меню, вызванном на объекте этой сущности.
На основе описанного механизма можно сконструировать много других полезных выгрузок.