OData
Технические вопросы
5.x

Подскажите, как правильно добавить пользователя портала через Odata?

Я делаю так

SysAdminUnit() sau = new SysAdminUnit();
sau.LDAPEntry = stripedLogin;
sau.Name = stripedLogin;
sau.SynchronizeWithLDAP = true;
contextWin.AddToSysAdminUnitCollection(sau);
responces = contextWin.SaveChanges();

при сохранении получаю ошибку Forbidden

xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  >4>
  xml:lang="">Forbidden>
  >
    >Forbidden>
    >System.Data.Services.DataServiceException>
    >
      at System.Data.Services.Serializers.Deserializer.HandlePostRequest()
      at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)
      at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)
      at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)
      at System.Data.Services.DataService`1.HandleRequest()
    >
  >
>

хотя, например, Контакты и другие объекты создаются через Odata "на ура".
К Odata подключаюсь как Supervisor

Нравится

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

упс, видимо нужно создавать не SysAdminUnit а SysSSPUser, но по-прежнему возвращается ошибка Forbidden

Здравствуйте, Леонид!
Дело в том, что при работе через OData на уровне ядра запрещен доступ к системным таблицам, поэтому создавать пользователей таким образом не представляется возможным.

Показать все комментарии
Проверка на дубли
Технические вопросы
Разработка

Добрый день!
Не могу сообразить каким образом осуществляется вызов проверки на дублирование контрагента при сохранении записи.
Мне нужно сделать проверку при изменении поля, например пользователь ввел ИНН, нужно сразу сделать проверку.
Подскажите, пожалуйста, где можно посмотреть?

Нравится

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

Какая у Вас версия, 3.3.2 или 3.4?

TS XRM Distribution 3.4.1

"Молчанов Дмитрий Павлович" написал:Не могу сообразить каким образом осуществляется вызов проверки на дублирование контрагента при сохранении записи.

При событии Post на Dateset-е, для которого настроен поиск дублей, на уровне ядра срабатывает поиск, и результаты передаются в функцию BaseDuplicatesFound в скрипте scr_BaseDuplicatesFoundHandler. В этом скрипте организовано открытие окна «Найдены дублирующиеся записи» с нужными данными.

Непосредственно поиск осуществляется хранимкой вроде tsp_AccountDS (для каждого раздела она генерируется автоматически при настройке правила поиска), хранимка вызывается на уровне ядра.

Дмитрий, чем не подходит настройка проверки на дублирование базовыми средствами?
Вы можете перейти в Файл - Настройки - Правила поиска дублей и создать правило, при котором поиск будет осуществляться в момент сохранения записи (можно задать настройку активации поиска в момент изменения значения в определенном поле):
/system/files/duplicate.png

Требуется реализовать проверку на дубли не при сохранении записи, а при заполнении определенных полей (Наименование, ИНН, Телефон).

Мне кажется, это будет не очень удачный вариант: при вводе каждой буквы проверять тысячи записей. На заполненной базе существующая проверка дублей при сохранении «задумывается» на несколько секунд.

Или там будет отдельная кнопка «проверить на дубли»?

Ну можно сделать не на DataChange, а на OnExit у контрола. На текущий момент отрабатывает в течении секунды примерно.

Дмитрий, тогда в нужный момент выполняйте вызов хранимой процедуры tsp_AccountDS, затем анализируйте результат.

Немного ввёл в заблуждение, при сохранении вызывается хранимая функция fn_AccountLDS, она и вернёт список записей, которые могут быть дублями.

А tsp_AccountDS — при ручном поиске дублей из меню.

Можно настроить правило, как показала на рисунке Наталия, поставить breakpoint в скрипте scr_BaseDuplicatesFoundHandler и посмотреть, какие данные туда передаются при сохранении записи, у которой есть дубли.

Потом запрограммировать на событии OnExit (или любом другом) вызов BaseDuplicatesFound с такими же параметрами, данные получать из хранимки fn_AccountLDS.

Также учтите, что в окне «Найдены дублирующиеся записи» есть кнопка «Объединить», она может работать некорректно, если запись ещё не сохранена, а хотите её слить.

Большое спасибо. Попробую сделать.

Добрый день!

в руководстве администратора http://www.training.terrasoft.ru/system/files/TS_AG_3.4.0.pdf
параграф 4.4. Настройка правил поиска дублей с.152
написано что для версий Террасофт 3.Х доступно окно настроек для правил поисков дублей [Правила поиска дублей]
у нас версия 3.4.1 но данной настройки у нас нет.

подскажите пожалуйста в чем может быть проблема?

Андрей,

данный вопрос рассматривается в теме:

Дубли записей

Показать все комментарии
LookupEdit
SelectedValues
Технические вопросы
5.x

Добрый день!
Пытаюсь добавить SelectedValues в LookupEdit с помощью метода .AddValues(), но получаю ошибку:

Exception Message: Unsupported type: System.Guid. Use the JsonSerializer class to get the object's JSON representation.
Exception Type: System.ArgumentException
Exception Source: Newtonsoft.Json

Exception Stack Trace:
at Newtonsoft.Json.JsonWriter.WriteValue(Object value)
at Terrasoft.UI.WebControls.Utilities.Json.Converters.LookupSelectedValuesJsonConverter.WriteJson(JsonWriter writer, Object value, JsonSerializer serializer)
at Terrasoft.UI.WebControls.ClientConfig.ToExtConfig(PropertyInfo property, ClientConfigAttribute attr, Object objValue, Object defValue)
at Terrasoft.UI.WebControls.ClientConfig.Process(Object obj)

Кусок кода, вызывающий ошибку:
Dictionary LoadedSelectedValues = new Dictionary();
LoadedSelectedValues.Add(accountColumnName, text);
LoadedSelectedValues.Add("schemaUId", schemaUId);
Page.LookupEditSprRiskPremium.AddSelectedValue(riskRationaleId.ToString(), LoadedSelectedValues);

Terrasoft BPM 5.2.660

Нравится

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

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

Что записывается в accountColumnName?

У меня работает такое:

         var entitySchema = userConnection.EntitySchemaManager.GetInstanceByUId(schemaUId);
            string primaryDisplayColumnName = entitySchema.GetPrimaryDisplayColumnName();
            foreach (Entity entity in entityCollection)
            {
                Guid entityId = entity.GetTypedColumnValue<Guid>(entityIdColumnName);
                string entityName = entity.GetTypedColumnValue<string>(entityNameColumnName);
                Dictionary<string, object> values = new Dictionary<string, object>();
                values.Add(primaryDisplayColumnName, entityName);
                values.Add("schemaUId", schemaUId);
                multiLookupEdit.SelectedValues.Add(entityId.ToString(), values);
            }

Обратите внимание на тип переменной values, дело может быть в ней.

Показать все комментарии
5.x
e-mail
ошибка
почта
рассылка
Технические вопросы

BPM 5.4.0.317
Когда пытаюсь сделать рассылку, на кнопку "Запустить рассылку", то письма не отсылаются, а появляется ошибка "The server rejected the specified sender email address. The server responded: 530 5.7.1 Client was not authenticated". Точно такая же ошибка на отправку обычного письма.
Все параметры для отправки почты занесены в системные настройки. На всякий случай, пользователю делающему рассылку указал тот же e-mail, что и в настройках.
Скрипт

var Smtp = new SmtpClient(GetSysSettingsValue("SmtpHost"), Convert.ToInt32(GetSysSettingsValue("SmtpPort")));
Smtp.Credentials = new NetworkCredential(GetSysSettingsValue("SmtpUserName"), GetSysSettingsValue("SmtpUserPassword"));
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
       
MailMessage Message = new MailMessage();

Message.From = new MailAddress(GetSysSettingsValue("MassMailingFromAddress"));
Message.To.Add(new MailAddress("xxx@xxx.xxx"));
Message.Subject = "test subject";
Message.Body = "test body";
Message.IsBodyHtml = true;

Smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
try
{
   Smtp.Send(Message);
}
catch (SmtpException e)
{
}
return true;

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

Нравится

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

Здравствуйте, Александр Владимирович!

В ходе удаленного подключения проблема была решена исправлением в методе SendMessage объекта
SmtpClient создания объекта server.

var server = new SmtpServer(_credentials.Host, _credentials.UserName, _credentials.UserPassword) {
		  Port = _credentials.Port,
		  SslMode = _credentials.UseSsl ? SslStartupMode.OnConnect : SslStartupMode.Manual,
		  Timeout = _credentials.Timeout,
};

После внесения изменений и компилирования конфигурации отправка заработала.

Напишу тут.
Андрей, помните у нас после этой письмо отправлялось, но возникла другая ошибка.
Дело в том, что в скрипте smtp после отправления письма bpm пытался найти status(состояние)
активности с кодом Finish и кое-где напрямую id

activity.SetColumnValue("StatusId", "4BDBB88F-58E6-DF11-971B-001D60E938C6");

Но с таким id и кодом "Finish" не было в базе (уж не знаю наши молодцы удалили или же terrasoft забыл добавить), но изменил "Finish" на "Done" и этот id поменял на другой и теперь все в порядке.

Здравствуйте, Александр Владимирович!

Больше спасибо за предоставленное решение.

Если данная ошибка и имела место быть, то в самых ранних сборках BPMonline 5.4.

В более поздних релизах подобных ошибок замечено не было.

В любом случае, спасибо!

Показать все комментарии
7.x
детали
разделы
Технические вопросы

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

1. Подскажите такой вопрос в версии 7.0.0.235, скрыть отдельные детали можно в Дизайнере страницы. Каким образом потом их восстановить?

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

2. Чтобы скрыть разделы, нужно удалить запись в таблице SysModule. При этом удаляются связанные записи в других таблицах. Чтобы при необходимости разделы восстановить, в какие таблицы необходимо вносить изменения?

Заранее благодарен.

Нравится

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

Здравствуйте, Александр!
1. Таблица называется [EditPageModification]. В ней для каждой страницы сохраняются изменения, выполненные с помощью дизайнера. Удалением записи из этой таблицы можно восстановить исходный вид страницы.
2. Чтобы скрыть разделы, лучше удалять из таблицы [SysModuleInSysModuleFolder]. Если Вы удалили регистрацию раздела из [SysModule], то можно заново зарегистрировать раздел с помощью хранимой процедуры [tsp_RegisterSection]. Подробней можно прочитать в SDK (пункт "Регистрация раздела в системе") или в этой статье.

Показать все комментарии
SQL-сервер
БД
Технические вопросы
Разработка

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

Рассматриваем вариант с переносом базы данных Terrasoft на виртуальную машину под управлением Windows 7 Professional 64-bit + MS SQL Server Express. На данный момент система работает под управлением Windows SBS 2011 (Усечённая версия Windows Server 2008 R2). Просьба уточнить :

• Может ли данный перенос повлиять на работоспособность системы?
• Потребуется ли перезаказывать лицензии?

Нравится

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

Здравстуйте.
Перенос не повлияет на работоспособность системы. Если речь идёт о BPMonline, то перезаказ лицензий обязателен. Ежели подразумевается Terrasoft 3.x, то перезаказ необходим в случае конкурентных лицензий. При наличии именных, нужно будет в ручном режиме создвать логины на SQL-сервере и "привязывать" их к пользователям в базе данных. Если понадобится - обращайтесь в поддержку (support@terrasoft.ru). Так будет проще и оперативнее решить вопрос.

Показать все комментарии
padeg.dll
x_padeg.dll
Библиотека склонение
Технические вопросы
Разработка

Продолжении темы https://community.terrasoft.ua/forum/topic/5023 есть ли у кого нибудь готовая сборка обертки и самой dll для x64 версии ОС. Переставил сервер и теперь не могу использовать данную библиотеку. Буду очень признателен за собранную библиотеку.
http://www.delphikingdom.com/zip/pd_Sample.zip

Нравится

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

Здравствуйте, Иван!
Думаю, чтобы пересобрать dll, нужны исходники, а они есть у авторов библиотеки. Можете попробовать обратитсья к ним.

Пишут такое:


При попытках выполнить / напечатать документы в ЗУП 2.5 ругается на компоненту. При попытке регистрации ругается, что в наличии под x64 нет. Как быть в этом случае?
Где скачать и/или как зарегистрировать?
Решение найдено:
Cmd - под админом.
%systemroot%\SysWoW64\regsvr32.exe %systemroot%\SysWoW64\padeg.dll
Ессно, файлик сперва положить в папку SysWoW64.

У меня проблема с оберткой для SQL сервера. Библиотека регистрируется как расширенные функции, но при вызове ругается на x_padeg.dll

А разработчик библиотеки ответил?
В крайнем случае можно переделать на другую библиотеку (но она платная).

Показать все комментарии
Как легко и быстро получить Sql запрос
Технические вопросы
5.x

Добрый вечер, коллеги нужна ваша помощь,
Когда ранее сайт работал на 32 бите я использовал утилиту SqlTracker для получения sql запросы, очен удобный инструмент,
Как поменяли на 64 бит сайт, перестал работать SqlTracker, существует ли другие способы получение sql запросов быстро не используя метод .GetSelectQuery(UserConnection).GetSqlText();,
Версия 5.1.1.159

Нравится

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

А SQL Server Profiler из комплекта MS SQL Server не работает?

"Зверев Александр" написал:

А SQL Server Profiler из комплекта MS SQL Server не работает?


У нас Oracle стоит, MS SQL Server не используем

Это существенное уточнение. Ещё бы сообщили версию SQL Tracker.

"Зверев Александр" написал:

Это существенное уточнение. Ещё бы сообщили версию SQL Tracker.


Quest SQL Tracker v.3.0.1.70

Здравствуйте, Баглан!

Прошу уточнить, Вы имеете ввиду, что пул приложения теперь работает в 64-битном режиме?

Попробуйте использовать одну из альтернативных утилит:

http://www.toadworld.com/m/freeware/558.aspx
http://sourceforge.net/projects/ocimonitor/

"Безродный Андрей" написал:

Здравствуйте, Баглан!

Прошу уточнить, Вы имеете ввиду, что пул приложения теперь работает в 64-битном режиме?

Попробуйте использовать одну из альтернативных утилит:

http://www.toadworld.com/m/freeware/558.aspx

http://sourceforge.net/projects/ocimonitor/


Здравствуйте, Андрей!
Да, пул приложения теперь работает в 64-битном режиме

Баглан, попробуйте использовать альтернативные утилиты.

Вероятно, Quest SQL Tracker не может взаимодействовать с 64-битным приложением.

"Безродный Андрей" написал:

Баглан, попробуйте использовать альтернативные утилиты.

Вероятно, Quest SQL Tracker не может взаимодействовать с 64-битным приложением.

Добрый день! Андрей, я скачал утилиты, http://www.toadworld.com/m/freeware/558.aspx --- не работает, не смог запустить или я не правильно запускаю, высылаю скриншот

http://sourceforge.net/projects/ocimonitor/ ----- скачал отсуствовала exe файл для запуска утилиты, не смог запустить.

существует ли более гибкие утилиты?

Баглан, добрый день.

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

Что касается используемой Вами ранее Quest SQL Tracker, необходима установленная версия Toad не ниже 12 и 64-разрядной. Вероятно, в данный момент у Вас установлена 32-битная версия.

"Безродный Андрей" написал:

Баглан, добрый день.

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

Что касается используемой Вами ранее Quest SQL Tracker, необходима установленная версия Toad не ниже 12 и 64-разрядной. Вероятно, в данный момент у Вас установлена 32-битная версия.

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

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

Вы пробовали обновить версию TOAD?

"Безродный Андрей" написал:

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

Вы пробовали обновить версию TOAD?


обновить не удалось, требует лицензию, наша организация еще не покупала новую версию, еще есть вариант?

Здравствуйте, Баглан!

Последний возможный вариант, который я могу посоветовать - это штатный Enterprise-менеджер.
Инструкция по работе с ним доступна по ссылке:
http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/pro…

Каких-либо бесплатных Open-source - решений я не встречал.

"Безродный Андрей" написал:

Здравствуйте, Баглан!

Последний возможный вариант, который я могу посоветовать - это штатный Enterprise-менеджер.

Инструкция по работе с ним доступна по ссылке:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/prod...

Каких-либо бесплатных Open-source - решений я не встречал.

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

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

"Безродный Андрей" написал:

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

Все возможные варианты со своей стороны я Вам предоставил.


Администраторы доступ не предоставят, хорошо спасибо.

Показать все комментарии
деталь история
контакт
Технические вопросы
Разработка

Всем добрый день! Появился такой вопрос. Есть 2 аналогично реализованных функционала контрагент -> Деталь "История" и контакт -> Деталь "История". Но работают они по разному, скажу больше деталь контакта не работает. По логике не должны отображаться кнопки добавить, копировать, изменить и удалить, так как данные в sql запросе просто вытягиваются из всех возможных мест (задачи, воздействия и т.д.), но на деле кнопки подтягиваются, но при нажатии на "добавить" вылетает не обработанное исключение. Причём всё это отлично работает с контрагентами. Может кто сталкивался с данной проблемой. Буду рад любой помощи.
Заранее спасибо!!

Нравится

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

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

Неплохо было бы указать точную версию террасофта.
Не знаю помогла ли вам на этот момент техподдержка, но так как окно унаследовано от стандартного грида, то в нем есть кнопки. Чтобы эти кнопки не отображались, окну надо присвоить свойство
HideButtonsFrame (его можно присвоить на onPrepare самого грида или на RefreshDetails воркспейса контактов)

SetAttribute(Window, 'HideButtonsFrame', true);

Тогда кнопки отображаться не будут.

Но вон у вас на втором скрине дебаггер вылез. Открыли visual studio и она покажет в какой строчке именно ошибка, а там может быть все что угодно и надо уже смотреть, так что если это не поможет и сами не разберетесь, тогда к техпому.

"Сазанов Александр Владимирович" написал:

Неплохо было бы указать точную версию террасофта.

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

HideButtonsFrame (его можно присвоить на onPrepare самого грида или на RefreshDetails воркспейса контактов)

SetAttribute(Window, 'HideButtonsFrame', true);

Тогда кнопки отображаться не будут.

Но вон у вас на втором скрине дебаггер вылез. Открыли visual studio и она покажет в какой строчке именно ошибка, а там может быть все что угодно и надо уже смотреть, так что если это не поможет и сами не разберетесь, тогда к техпому.

3.4.1.145 - версия Террасофта.
По поводу кнопок: не понятно как должно быть точно, ведь в детали контрагента кнопок нет, а ошибка валится при нажатии на кнопку, хотя к кнопке даже edit window не привязан

Кнопок быть не должно и логики, соответственно, на них никакой нет.

В базовой версии упомянутый Александром параметр передается реестру детали в методе RefreshContactHistoryDetail():

function RefreshContactHistoryDetail() {
	var DetailWindow = wndContactHistoryDetail.Window;
	var DetailDataset = DetailWindow.ComponentsByName('dlData').Dataset;
	if (!DetailWindow.Attributes('InitializeFlag')) {
		SetAttribute(DetailWindow, 'HideButtonsFrame', true);
		var SelectCall = DetailDataset.SelectQuery.ItemsByCode('SelectCall');
		if (!Connector.Attributes('HasCallLicense')) {
			DetailDataset.SelectQuery.Remove(SelectCall);
		}
	}
	RefreshCommonDetail(BaseWorkspace, wndContactHistoryDetail, 
		'ContactID', 'ContactID');
}

Который вызывается при фокусировке на детали История в методе RefreshDetails():

	if (pcDetails.ActivePage.Name == pgContactHistoryDetail.Name) {
		RefreshContactHistoryDetail();
	}
Показать все комментарии
5.x
мультивалютное поле
Технические вопросы

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

Нравится

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

Здравствуйте, Эмин!
Попробуйте по аналогии с тем, как реализовано в карточке счета или продажи добавить события типа "PrimaryAmountEditChange", "CurrencyRateEditChange" и т.д.

"Андрей Каспаревич" написал:

Здравствуйте, Эмин!

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


Создал 4 сообщения со скриптами по аналогии со Счет. Проверил дебаггером, скрипты не вызываются. Т.е. нет никакой реакции на изменения в форме.
Разобрался. Необходимо руками добавить подписку на эвенты при изменении курса, валюты и тп. после сообщения Init

Эмин, я как раз собирался Вам об этом писать.
Рад, что Вы разобрались!

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