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

Есть объект и для него sql запрос. Доступ к коллекции объекта осуществляется через EntityDataService.svc. 
Одно из полей множественное, для такого поля в sql запросе сделана реализация через 

FOR XML PATH ('Goal'), TYPE

Но при запросе коллекции скобки xml тэгов заменяются их кодовыми значениями. 

<d:AccountLoginQualifiedGoal>&lt;Goal id="9857A30F-3F69-4D07-ADC8-02A61D686C82"&gt;&lt;Name&gt;ЦЕЛЬ№1&lt;/Name&gt;&lt;/Goal&gt;&lt;Goal id="187B496F-B7C5-449A-BDE6-7D07D28296DB"&gt;&lt;Name&gt;ЦЕЛЬ№2&lt;/Name&gt;&lt;/Goal&gt;</d:AccountLoginQualifiedGoal>

Можно ли как-то этого избежать и выводить просто как скобки? Чтобы было вот так.

 <d:AccountLoginQualifiedGoal><Goal id="9857A30F-3F69-4D07-ADC8-02A61D686C82"></Goal><Name>Цель№1</Name></Goal><Goal id="5985A03D-0162-4F02-AA64-BDFCFAC93B49"><Name>Ничего из этого</Name></Goal><Goal id="71EBF4E1-B344-490D-94D9-C67EC77206A9"><Name>Встречи</Name></Goal><Goal id="F6CA356F-635D-4C96-B1E6-D0409172F26E"><Name>Цель№2</Name></Goal></d:AccountLoginQualifiedGoal>

 

Нравится

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

Добрый день. 
Правильно ли я понимаю, что Вы получаете ответ от сервиса EntityDataService.svc в виде : 
 

<d:AccountLoginQualifiedGoal>&lt;Goal id="9857A30F-3F69-4D07-ADC8-02A61D686C82"&gt;&lt;Name&gt;ЦЕЛЬ№1&lt;/Name&gt;&lt;/Goal&gt;&lt;Goal id="187B496F-B7C5-449A-BDE6-7D07D28296DB"&gt;&lt;Name&gt;ЦЕЛЬ№2&lt;/Name&gt;&lt;/Goal&gt;</d:AccountLoginQualifiedGoal>

 

Mykhailo Storozhuk,

Да, все верно.

Данное поведения полностью корректное. Данную сериализацию делает базовая функциональность .net framework, именно System.Data.Services.DataService. Это нужно для того, что бы не нарушить основной xml.

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

 

Mykhailo Storozhuk, 

Хорошо, спасибо!

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

Уважаемая колеги!
Обращаюсь к вам со следующей задачей: 
1.Надо произвести запрос к внешнему API-сервису с конкретными входными параметрами. 
2. В ответ получаем данные в формате XML․ 
3.В качестве результата вывести данные из полученного файла на странице пользователя. 
4. Следующим шагом сохранить эти данные в БД. 
 Есть у вас шаблон для реализации описанной задачи или какие-либо рекомендации по ее выполнению?  
 

Нравится

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

Nerses, в дизайнере бизнес-процессов есть элемент вызова веб-сервиса, но в нынешней реализации он поддерживает только JSON, а не XML.

То есть Вам нужно будет обращаться к сервису и получать XML-ответ кодом. Пример есть тут.

 

Затем нужно будет разобрать полученный результат. Если формат всегда одинаковый и совсем простой, то можно использовать обычные строковые функции, но лучше будет воспользоваться какой-нибудь библиотекой по работе с XML.

 

По третьему и четвёртому пунктам, исходя из серверной архитектуры системы, будет уместнее поменять их местами: сначала сохранить запись или записи в базу в нужный объект, а уже потом стандартными средствами отабразить в браузере пользователю на преднстроенной, автогенерируемой странице или карточке этой записи в  соответствующем разделе.

 

Поскольку работа с XML будет выполнятся на C# из блока-скрипта, сохранение в базу можно сделать там же, используя класс Insert или Entity.Save. Второй вариант позволит при сохранении запустить какую-то дополнительную логику на объекте или в БП на событии создания, первый сохраняет в обход срабатывания событий.

 

То есть будет БП из двух элементов: скрипта, выполняющего всю работу и блока отображения пользователю страницы.

 

А вот если бы это был вызов веб-сервиса, возвращающего JSON, можно было бы без написания кода произвести сохранение в базу полученной коллекции элементом создания записи. Но пока для XML такого нет.

В системе для пунктов 1-3 нет специальных классов, вы реализуете эту функциональность используя либо стандартные классы .net, либо подключая любые библиотеки которыми вы хотите пользоваться.

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

Доброго дня, коллеги!

Стоит следующая задача - необходимо считать и отправить данные из объекта на удаленный веб-сервис. Удаленный веб-сервис принимает данные в формате XML. Подскажите пожалуйста, каким образом лучше всего это реализовать - используя бизнес-процессы, DataService или каким-либо другим способом? Заранее благодарю за развернутые ответы. 

Нравится

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

Добрый день!
Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.
Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!
Бизнес процесс, в котором скрипт С# с использованием HttpWebRequest.
Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

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

Добрый день!
Террасофт 3.3.2 MSSQL
Стоит задача выгрузки накладной (шапки и табличной части продуктов) в формат xml

Подскажите, пожалуйста, какие методы для этого существуют.
Может быть есть какие-то примеры.

Нравится

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

Добрый день!
Маленький пример по сохранению данных в формат XML

function SaveXMLToFile() {
	var Dataset = Services.GetNewItemByUSI('ds_Account');
	Dataset.Open();
	var XMLStorage = GetNewXMLStorage();
	XMLStorage.LoadFromDataset(Dataset, 'QueryData');
	XMLStorage.SaveToFile('c:\\qq.xml');
	Dataset.Close();
}

Еще можно посмотреть примеры работой с XML в сервисе wnd_CalendarExchangeScript, начиная с функции SaveCalendarToFile

Спасибо

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

Добрый день, Сообщество!

Кто нибудь сталкивался с задачей отправки электронных счет фактур или актов в систему Диадок славной компании СБК Контур. Уже который месяц пытаюсь получить от них внятного и работающего примера, но вот никак. Есть пример, но он до конца не работает(

Нравится

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

Здравствуйте.
С системой Диадок не сталкивался, но на вскидку, можно попробовать записывать данные в их базу напрямую, например через шлюзовые таблицы или использовать что-то на подобие ADO-Connection.

В общем то там у них ActiveX библиотека, в которой реализована обертка над их Web API. Но примеров отправки готовых XML докуметов нету или я их не нашел, вот второй месяц поддержку мучаю, прислали скрипт, но он не работает.

Здравствуйте.
Повторю, что у нас прецедентов интеграции с такой системой не было, но, вероятно, Вам будет любопытно ознакомиться с: http://habrahabr.ru/company/skbkontur/blog/175871/

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

Добрый день!
Пытаюсь тут сделать очень хитрую штучку и никак не получается пока что
Очень нужно сформировать Word-отчет, в который нужно передать переменные и параметры, которые нужно вывести в отчете
Как бы это сделать?
Сам запрос, к сожалению, в виде XML передается в отчет
Движок уже сам разбирает его и формирует результирующий какой-то набор для отчета

Подскажите, пожалуйста, если кто сталкивался

Нравится

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

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Иван, здравствуйте.

Можете попробовать вклиниться в метод ShowWordReport() в сервисе scr_UserReportCommon, там вызывается ProcessWordReportDataFill() в который передаются значения колонок для макросов, можете добавить необходимые значения и использовать их в качестве макросов в шаблоне отчета.

К сожалению, подобного опыта в поддержке не было, поэтому и примеров предоставить не сможем.

Передать параметры действительно получилось через ProcessWordReportDataFill
Там была написана еще процедура, которая подменяла определенные макросы в тексте на переданные элементы из массива

А не подскажите еще? хотелось бы попробовать как-то нарисовать таблицу в Word из террасофта
Но пока не получается
Может кто-то пробовал рисовать в ворде из террасофта ?

Заранее благодарен за ответы

Иван, посмотрите здесь.

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

В данном блоге хочу рассказать о возможностях, настройках и использовании RunSettings.xml. Данная возможность конфигурирования запуска, регистрации, обновления системы существует давно. Но, практически с каждым релизом новой версии она расширяется. Эта возможность появилась как инструмент "кастомизации" под конкретные задачи клиентов.
Рассмотрим наш RunSettings.xml:

Общие настройки

GlobalSettingsDirectory="" UserSettingsDirectory="" UserAppDataDirectory="" SessionDomainName="" SessionUserName="" SessionPassword=""/>

GlobalSettingsDirectory - путь к глобальному файлу конфигураций GlobalConfigs.xml
UserSettingsDirectory- путь к пользовательскому файлу конфигураций Confings.xml
UserAppDataDirectory- путь к папке Application Data пользователя
SessionDomainName - имя домена
SessionUserName - имя пользователя
SessionPassword - пароль пользователя

Теперь же рассмотрим подробнее что и как.
GlobalSettingsDirectory. Существуют задачи, в которых есть потребность иметь настройки к разным конфигурациям, но в тоже время нужно иметь глобальные конфигурации, которые пользователь удалить не сможет (если только не удалит файл GlobalConfigs.xml). Для создания GlobalConfigs.xml достаточно настроить Configs.xml и скопировать + переименовать его в GlobalConfigs.xml
UserSettingsDirectory. С этим параметром все просто. Если вам нужно хранить файл настройки конфигураций в отличном от %appdata% месте, то этот параметр для вас
UserAppDataDirectory. Этот параметр позволит переопределить для Terrasoft папку %appdata%
Далее идет блок, связан с аутентификацией. Что же это за параметры?
Иногда есть потребность запустить Terrasoft от имени другого пользователя, так вот, эти параметры и устанавливают от кого запускать
SessionDomainName. Если пользователь домменый, то указывается название домена
SessionUserName. Имя пользователя
SessionPassword. Пароль пользователя
Также, существует возможность использовать макросы в написании пути:
{tscrm} - путь к папке с установленным Terrasoft (Например: С:\Program Files\Terrasoft\Bin)
{win} - путь к папке Windows (Например: C:\Windows)
{tmp} - путь к папке Temp
{sys} - путь к системной папке Windows (Например: C:\Windows\System32)
{pf} - путь к папке Program Files
{usertscrmappdata} - путь к папке Terrasoft в AppData включая версию (Например: C:\Users\CurrentUser\AppData\Roaming\Terrasoft\3.4.1)
{userappdata} - путь к папке AppData (Например: C:\Users\CurrentUser\AppData)
{userdesktop} - путь к папке рабочего стола
{userstartup} - путь к папке Startup (Например: C:\Users\CurrentUser\Start Menu\Programs\Startup)
{userprofile} - путь к папке профиля пользователя (Например: C:\Users\CurrentUser)
ВАЖНО: Все макросы возвращают путь без последнего "слэша"

Настройки автообновления

Enabled="False" Force="False" Type="Network" Path="" URL="" FTPUserName="" FTPPassword="" MaxIterations="5"/>

Enabled - включено ли автообновление (True/False)
Force- принудительное обновление (True/False)
Type - тип обновления (Network/FTP)
Path - путь к файлам новой версии (используется для типа Network)
URL - путь к файлам новой версии (используется для типа FTP)
FTPUserName - имя пользователя (используется для типа FTP)
FTPPassword - пароль пользователя (используется для типа FTP)
MaxIterations - количество попыток автообновления

По большому счету со всеми параметрами все тривиально, но, хочу добавить касательно параметра Force. Если значение установлено в "False", то при обнаружении новой версии, пользователю отобразится диалоговое сообщение, в котором он может принять решение обновляться ли. В случае, когда значение установлено в "True", никакого сообщения не покажется, а сразу же начнется обновление

Системные настройки

ShowHint="True" HintHidePause="2500" ExternalAuthorizationProgID="" ConnectionKey=""/>

ShowHint- отображать ли хинты
HintHidePause - тайм-аут отображения хинтов
ExternalAuthorizationProgID - Здесь прописывается GUID COM объекта, который может производить авторизацию в Terrasoft. Этот объект должен содержать функцию ShowLoginForm.
Синтаксис:
HRESULT ShowLoginForm(
        [in] IConnector* Connector,
        [in] BSTR FormCaption,
        [in, out] BSTR* UserName,
        [in, out] BSTR* UserPassword,
        [in, out] BSTR* ConfigurationName,
        [out, retval] VARIANT_BOOL* Value);

ConnectionKey - данный ключ был создан для разрешения подключения к базе Oracle, так как в Oracle можно разграничивать приложения, которыми можно подключатся к БД. Этот ключ предоставляет администратор Oracle

Типы регистрации

>
Name="COM" FileName="regsvr32" RegistrationCommand="/s" UnregistrationCommand="/s /u" Default="True"/>
Name="Framework" FileName="%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\regsvcs.exe" UnregistrationCommand="/u"/>
>

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

Библиотеки для регистрации

FileName="TSClient.exe"/>
FileName="TSObjectLibrary.dll"/>
FileName="TSWindowLibrary.dll"/>

В данной секции находится список библиотек, которые будут перерегистрироваться. Путь к библиотеке указывается относительно папки Bin. Кроме FileName существует следующий набор атрибутов:
Dependence – атрибут, который указывает условие регистрации, т.е. если условие выполняется, то библиотека будет регистрироваться. По умолчанию условие отсутствует. Может принимать значения:
Win32 – если Windows 32-х битный;
Win64 – если Windows 64-х битный;
Office32 – если Office 32-х битный;
Office64 – если Office 64-х битный
Примечание: данный атрибут доступен только с версии 3.4.1
Required – указывает на обязательность наличия файла. Т.е. если Required = "False", и файл отсутствует, то система его пропустит. По умолчанию = True
IsSurrogate – указывает на то, что быблиотека будет/не будет регистрироваться как суррогатная. Этот параметр важен для работы с приложениями разрядности x64. Т.е., если мы указываем, что библиотека не является суррогатной (IsSurrogate = False), то 64-х битное приложение не сможет работать с объектами этой библиотеки. По умолчанию IsSurrogate = "True".
Примечание: данный атрибут доступен только с версии 3.4.1
RegistrationType – указывает каким обрахом будет регистрироваться библиотека в системе. Здесь указывается имя из RegistrationTypes. По умолчанию тип берется тот, в атрибуте которого указано IsDefault = "True"

Файлы для удаления

В этой секции можно указать список файлов, которые нужно удалить при перерегистрации. При этом, если файл существует и является зарегистрированной библиотекой, то произойдет отрегистрация, а после - удаление. Для этой секции справедливы все атрибуты из секции «Библиотеки для регистрации».
Примечание: Библиотека будет удалена независимо от того указан ли Dependence

PreUpdateRun, PostUpdateRun

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

FileName="" Parameters="" Show="False" UseSessionUser="False" Version=""/>

FileName – имя исполняемого файла;
Parameters – параметры для исполняемого файла. В данном атрибуте разрешается использовать макросы, описанные в секции «Общие настройки»;
Show – показывать ли запускаемое приложение (зависит от того, имеет ли такую возможность приложение);
UseSessionUser, Version – данные атрибуты не используются
Приведем пример очистки кэша до обновления. Для этого напишем ClearCache.cmd, который в качестве параметра должен принимать путь к папке кэша:
FileName="{tscrm}\ClearCache.cmd" Parameters="{usertscrmappdata}\Cache" Show="False" UseSessionUser="False" Version=""/>

PreExecuteRun

Секция PreExecuteRun имеет аналогичную логику с PreUpdateRun/PostUpdateRun за исключением того, что эти комманды будут выполняться всегда перед запуском приложения

Нравится

Поделиться

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

Артем, в статье ошибка:
{tscrm} - путь к папке с установленным Terrasoft (Например: С:\Program Files\Terrasoft\), а не к С:\Program Files\Terrasoft\Bin.

"Андрей Каспаревич" написал:ExternalAuthorizationProgID - Здесь прописывается GUID COM объекта, который может производить авторизацию в Terrasoft. Этот объект должен содержать функцию ShowLoginForm

А какой интерфейс должен реализовывать COM объект?
У меня появляется сообщение об ошибке, что интерфейс не поддерживается.

Добрый день. Необходима поддержка IDispatch'а. Объект создается методом CreateOleObject

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

Выгрузить XML-содержимое из базы данных в лог можно следующим образом:

DECLARE @tmp varchar(8000);

SELECT @tmp = cast(substring(QueryData, 1, 8000) AS varchar(8000)) FROM tbl_Query WHERE Name = 'Динамика резервирования'

PRINT @tmp

Когда это может быть полезно?

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

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

Нравится

Поделиться

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

Следует отметить, что для получения содержимого сервисов (таблиц, запросов, датасетов и т.д) в виде XML в версиях 3.3.2 и 3.4 этот способ не подходит: они хранятся сжатыми. В 3.3.1 и более ранних - ещё работает.

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

Всем привет!
В последнее время очень часто спрашивают как oktell принимает и отправляет sms.
Вот решил написать небольшую заметку.

Итак - Теория:
Выдержка из руководства пользователя oktell:

Система  использует web-интерфейс для подключения к SMS-сервису. Среди провайдеров,  предоставляющих услуги, ZANZARA(получить логин и пароль можно здесь)  и MessageGroup (Украина). Взаимодействие осуществляется  посредством компонентов сценариев из группы SMS. В разделе настройкам  подвергаются нижеперечисленные параметры.SMS-провайдер.

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

Подключаться  через Proxy-сервер.
Адрес  proxy.
Порт  proxy.
Логин к  proxy.
Пароль к  proxy.

Сразу возникает вопрос, а почему только 2 провайдера?

На самом деле рассылать  и принимать sms в oktell можно через любого провайдера который может Вам предоставить доступ к sms сервисам по XML протоколу. Но договариваться с каждым оператором мобильной связи не удобно, поэтому существуют так называемые контент-агрегаторы (так же их иногда называют контент-провайдерами ), у которых уже есть договорённость с несколькими операторами и свой сервер приложений с которым они Вам предложать работать через web-интерфейс и/или по XML протоколу.

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

Количество таких агрегаторов на рынке - большое множество, поэтому Вы можете выбирать с кем сотрудничать изходя из личных предпочтений. Так же я бы рекомендовал обратить внимание на такие возможности (не у всех агрегаторов они есть):
 1. Оплата только за доставленные sms сообщения
 2. Возможность задавать "время жизни sms"
 3. Возможность регистрации динамического альфа-нумерического имени (об этом позже)
 4. Единоразовая оплата за покупку альфа-нумерического имени.

С первыми двумя пунктами думаю понятно.
Если Вы хотите отправлять sms то должен быть адрес с которого вы их отправляете, таких варианта может быть 2:
1. Альфа-нумерическое имя
2. Короткий номер

Альфа-нумерическое имя (или просто альфа-имя), это набор из максимум 11 символов, который будет отображатся у абонента как номер отправителя, зачастую это имя компании-отправителя. Тут есть важный момент. Альфа-имя может быть задано как латинскими так и кирилическими буквами, но в случае кирилических, автоматически максимальный размер 1 sms будет составлять 70 символов (можно отпралять и больше, но оплачиваются это уже будет как несколько sms).
Альфа-имена бывают 2х видов:
1. Статические
2. Динамические

Статическое имя покупается 1 раз и менять не может, стоит у каждого провайдера по разному, некоторые даже могут предложить бесплатно при больших рассылках. В среднем в Украине стоит единоразово 40-120$ в зависимости от жадности контент-агрегатора.

За динамическое имя, как правило, оплачивается абонплата. Имея динамическое альфа-имя вы можете отправлять sms от разных альфа-имён которых можете формировать бесконечное множество, что очень удобно если вы являетесь поставщиком таких услуг. В среднем в Украине стоит единоразово 150-400$ в месяц ,в зависимости от жадности контент-агрегатора.

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

Если Вы собираетесь принимать sms, то Вам надо арендовать короткий  номер. При чём арендовать ндао у каждого моб. операта, от абонентов которого, Вы захотите принимать sms (Тоесть, например отправленая sms на номер 4555 абонентом Киевстара и абонентом МТС не обязательно прийдёт к одному и тому же получателю).

Эта услуга не дешовая, и очень зависит :
1. От жадности моб. оператора (у каждого может быть своя стоимость за номер)
2. От запоминаемости и краткости номера (тоесть 3х знаый номер 111 будет Вам стоить гораздо дороже чем 5-ти значный 15684)
Номера, как правило, арендуются на год.
В них есть смысл, если Вы проводите акции с обработкой входящих sms, тгда Вы сможете - перепродать котороткий номер сразу нескольким клиентам при условии что сможете структурировать входящий трафик и привязывать его к конкретным клиентам (Например клиент 1 всегда будет принимать только 7ми значные коды, клиент 2 будет принимать все sms которые начинаются с слова "hello" и т.д.)
Стоимость аренды на год такого номера у одного оператора может составлять даже несколько тысяч $.

Практика:
Для того чтобы рассылать/принимать sms от Вашего контент-агрегатора предоставившего XML протокол для обмена трафиком, Вам понадобиться:
1. Немножко терпения
2. Создание соответсвующего сценария с использованием компонетов "Запрос к Web-сервису"
3. Включение этого сценария в служебные задачи с указанием расписания (если сценарий служебный) и/или включение его в соответсвующую текстовую задачу колл-центра

Так же используя этот компонент Вы можете отправлять sms из диалоговых и IVR сценариев при необходимости.

Нравится

Поделиться

5 комментариев

Спасибо за детальное описание! +1 :twisted:

--
www.it-sfera.com.ua

Иван, ОГРОМНОЕ спасибо за описание. Действительно очень полезно. Думаю у многих из нас закрыто много вопросов. Хотелось также, если это возможно, получить список контент-провайдеров, с которыми Вам приходилось работать, и с какими трудностями приходилось сталкиваться.

Спасибо!

Иван, честь Вам и хвала!:twisted:

Насчёт списка контент-провайдеров... думаю это будет выглядеть как реклама, осбенно если учесть что у меня есть личные предпочтения:)

Иван Сибиряков
Telsystems Ukraine
www.telsystems.com.ua

А Вы личным сообщением отошлите:smile:

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

Здравствуйте!

Предлагаю Вашему вниманию некоторую реализацаю возможности выгрузки фильтров динамической группы в файл (*.xml) и загрузки для другой динамической группы.

Подробная инструкция прикреплена.

Приятной работы!

Нравится

Поделиться

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