К сожалею полноценная отладка, как Вы спрашиваете не возможна.
1. Но вы можете отлаживаться наше предложение, как предложение размещенное на сервере IIS
Здесь приведена ссылка, как это возможно сделать. http://www.cyberguru.ru/microsoft-net/asp-net/aspnet-debugging-iss-remo…
2. Когда Вы компилируете с конфигурации наше приложение, то часть исходных файлов выгружается локально по указанному в web.config пути
Есть сущность Вакансия. В ней добавлено виртуальное вычисляемое поле в клиентском коде модуля, Recent vacancy status. Необходимо отобразить это поле на list page вакансий (не знаю как это называется на русском в терминологии BPM). Однако, его нет в списке. Есть ли возможность добавить?
День добрый.
Мастер редактирования реестра работает только с полями, которые через таблицы. Поля, которые добавлены кодом не отображаются в реестре.
Для решения ситуации Вам необходимо добавить поле посредством таблиц и прописать соответствующий код его заполнения.
Пропал стандартный справочник 'AddressType' из UI. Поискал его в базе SQL запросом - есть, должен быть в папке General, однако там его нет.
Возможно, это результат прямого вмешательства в БД, либо какой то баг BPM, который кто-то случайно воспроизвёл.
Вот SQL запрос.
SELECT * FROM SysSchema sch JOIN SysLookup l ON l.SysEntitySchemaUId = sch.UId JOIN SysLookupFolder lf ON lf.Id = l.SysFolderId WHERE sch.Name ='AddressType'
День добрый.
Данный справочник является системным и не был зарегистрирован в системе по причине того, что на значения данных справочников завязана внутренняя логика продуктов. При редактировании типов не рекомендуем удалять уже существующие значения.
Для того чтобы имелась возможность редактировать данный справочник необходимо зарегистрировать его нажав [Add], при добавлении укажите уже имеющийся в системе Объект и Страницу редактирования.
Спасибо за ответ!
Мне как раз дали задачу удалить ненужные значения из справочника AddressType, чтобы не запутывать сотрудников :sad: Какой наиболее безболезненный путь вы посоветуете для решения этой задачи?
Сказали сделать такое:
1. Удалить из CommunicationType - alternate phone, primary phone, extension number, business phone, fax
2. AddressType - удалить всё, кроме home i business
Подозреваю, в дальнейшем также будут подобные запросы :lol: Как добавления, так и удаления значений..
Я пока сказал заказчикам, что поддержка посоветовала мне не удалять существующие значения из справочников, т.к. это может "поломать" приложение.
Да, совершенно верно - не стоит удалять.
Если вопрос критичен - необходимо добавлять проектную логику по маркировке используемых или неиспользуемых типов или комментировать в разделах уже существующую логику заполнения полей.
"trickbz" написал:Я пока сказал заказчикам, что поддержка посоветовала мне не удалять существующие значения из справочников, т.к. это может "поломать" приложение.
Да, это "поломает" импорт из Excel, так как он завязан на ID конкретных типов :(
В справочнике, кажется, есть поля "Использовать для контрагентов" и "Использовать для контактов"
Впроваджую ручний розподіл контент-менеджерів по запитах. Зустрівся з таким фактом:
При формуванні списку пар дат випадають деякі дні із загального списку.
Дослідив,- використовується для роботи "Базовый календарь".
Загалом є такі календарі в системі:
Базовый календарь
Тестовый календарь
Капран Владислав
Для роботи список днів має бути без вихідних (які, я так розумію, і випадають із загального списку дат ).
Мені можна взяти до роботи "Тестовый календарь" ? (Я подивився за червень - всі дні присутні)
Можно создать свой календарь в справочника «Календари» и там определить все дни рабочими. Или отредактировать какой-то из существующих.
Обычно есть один базовый календарь, он определяется системной настройкой. А остальные календари определены относительно него, то есть в новом календаре для дней недели «Суббота» и «Воскресенье» поставить галочку «Отличается от родительского календаря» и задать их рабочими.
Проставив у базовому всі дні робочими з 07:00 до 20:00.
Все добре, окрім дати 2015.06.05, вона у мене чомусь відображається в 3-х екземплярах:
StartDate EndDate
2015-06-05 14:16:49.000 2015-06-05 18:00:00.000
2015-06-05 14:16:49.000 2015-06-05 20:00:00.000
2015-06-05 14:16:49.000 2015-06-05 18:00:00.000
і, як видно, у двох у кінечний час підставлено попереднє значення - 18:00.
Де це воно визначено, чи можу я зайве прибрати, в у списку періодів всі три і відображаються
Хоча візуально важко розпізнати, що саме відображається.
Думаю, лучше не трогать базовый календарь, а создать или изменить какой-то другой.
Окна «Страница выбора Content-менеджера» я у себя не вижу. Вероятно, это какая-то проектная доработка. Обратитесь лучше к тем, кто его разрабатывал.
BPM 7.5. Сценарий - кто то открыл одну из вакансий, заполнил пару полей, перешел на другую - изменения не сохранились без нажатия кнопки Save. Поступило требование реализовать функциональность, чтобы при переходе между сущностями появлялся диалог с просьбой сохранить изменения, если они конечно были. Есть стандартный способ это реализовать?
Данную функциональность возможно реализовать переопределив метод onGridRowChanged базового модуля BasePageV2 в пользовательском пакете.
Добавив туда логику в начало метода:
1. на проверку изменений if this.isChanged()
2. задать вопрос с помощью showConfirmationDialog
3. если ответ положительный сохранить this.save();
Добавил код ниже в клиенсткий код страницы UsrVacanciesPage. Работает.
Но есть пару вопросов:
1. Я добавил это лишь в UsrVacanciesPage. Возможно, это нужно будет добавить в базовую страницу BasePageV2 , чтобы это было унифицированно для всех страниц. Я так понимаю, её нужно "заместить", "унаследоваться", и переопределить под себя. Однако я еще не пробовал делать этого. Вы не подскажите алгоритм и ньюансы?
2. Диалог появляется уже тогда, когда выбрана другая сущность в списке и отображаются её детали., дальше диалог блокирует ввод пользователя. Возможно ли сделать так, чтобы диалог появлялся ДО того, как происходит переход на другую сущность, чтобы пользователь видел текущую сущность и её детали, и лишь после нажатия кнопки на диалоге переходил на слудующую?
3. Как мне сделать, чтобы кнпока "Yes" называлась скажем "Save changes" и "No" - "Discard changes"?
4. Может есть какая-то документация?
onGridRowChanged: function(){if(this.isChanged()){
var cfg ={
style: Terrasoft.MessageBoxStyles.BLUE};
var changedEntityPrimaryColumnValue =this.get(this.primaryDisplayColumnName);this.showConfirmationDialog("You have unsaved changes on the the '"+ changedEntityPrimaryColumnValue +' page. Do you want to save changes?",
function getSelectedButton(returnCode)
{
if (returnCode === Terrasoft.MessageBoxButtons.YES.returnCode)
{
this.save();
}
}, ['yes', 'no'], cfg
);
}
},
По пунктам:
1. Вы правильно думаете, что необходимо расширить страницу BasePageV2, тогда все внесенные изменения распространяться на все страницы.
Расширение страницу BasePageV2 необходимо делать в пользовательском модуле, и таким образом все страницы унаследованные от BasePageV2 получат новую логику автоматически.
2. К сожалению нет возможности реализовать предложенный Вами функционал, так как даже то, что Вы реализовали является не стандартным функционалом. Ваше предложение будет рассмотрено нашими аналитиками и возможно будет реализовано в будущих версиях.
3. Это возможно сделать. Ниже приведен пример из модуля OrderPageV2:
"Вильшанский Дмитрий" написал:1. Вы правильно думаете, что необходимо расширить страницу BasePageV2, тогда все внесенные изменения распространяться на все страницы.
Расширение страницу BasePageV2 необходимо делать в пользовательском модуле, и таким образом все страницы унаследованные от BasePageV2 получат новую логику автоматически.
Спасибо за ответ!
А вы не могли бы по шагам в обзорном виде расписать как правильно замещать страницы? Никогда этого не делал, боюсь что-то поломать. Нужно ли копировать полный код замещаемого модуля? Если не нужно, то какой минимальный скрипт дожен быть скопирован? Как правильно в этом скрипте заместить метод, может какой то особый синтаксис?
Замещение метода происходит путем вставки нужного кода в метод, который имеет такое же название как родитель.
Если необходимо добавить вызов код родительского метода это делается строкой:
this.callParent(arguments);
"trickbz" написал:К сожалению нет возможности реализовать предложенный Вами функционал, так как даже то, что Вы реализовали является не стандартным функционалом. Ваше предложение будет рассмотрено нашими аналитиками и возможно будет реализовано в будущих версиях.
Заказчикам не очень нравится, что диалог появляется только после перехода на след сущность. Думаю, действительно, неплохо было бы реализовать такой функционал в будущих версиях. Тем более, это распространённая функциональность во многих продуктах.
Мне нужно создавать что-то в "Идеях", чтобы это было рассмотрено?
MarkerValue это способ находить элемент в DOM'e. Можно находить по ID, а можно находить по MarkerValue. Например если ID автогенерируемый, а Вам необходимо с данным контроллером проделать конкретные действия, то для этого можно использовать MarkerValue.
Пример:
"trickbz" написал:
trickbz пишет:
К сожалению нет возможности реализовать предложенный Вами функционал, так как даже то, что Вы реализовали является не стандартным функционалом. Ваше предложение будет рассмотрено нашими аналитиками и возможно будет реализовано в будущих версиях.
Данная идея будет зарегистрирована как пожелания и будет рассмотрена департаментом разработки для реализации подобного функционала в будущих версиях.
Спасибо!
Заказчикам не очень нравится, что диалог появляется только после перехода на след сущность. Думаю, действительно, неплохо было бы реализовать такой функционал в будущих версиях. Тем более, это распространённая функциональность во многих продуктах.
Мне нужно создавать что-то в "Идеях", чтобы это было рассмотрено?
Спасибо!
Данная идея будет зарегистрирована как пожелания и будет рассмотрена департаментом разработки для реализации подобного функционала в будущих версиях.
Как быстро создать новый тип активности в 7.3?
Пробовала через Мастер раздела, но выдает ошибку, что активность можно добавить только через справочник. Хотя новый тип документа через мастер раздела добавить получилось.
В чем может быть проблема?
В справочниках системы не нашла данный справочник, хотя при добавления его самостоятельно выдает предупреждение, что Справочник уже зарегистрирован в системе.
Зарегистрировала "повторно".
Указала карточку редактирования базового справочника с кодом, добавила активность, затем через мастер раздела добавила новый тип в систему. Все работает.
Ошибка возникла из неоткуда. При открытии сервиса "wnd_OfferingsDetailTreeArea" возникает ошибка: "Дублируется значение свойства 'UID'. Значение '{91DAAD2E-F7A3-4382-AD0C-2D3B63EF870C}' уже существует". Такая же ошибка выбивает когда пытаюсь перенести сервис со старого работающего бекапа. Изначально ошибка обнаружилась через клиент, открыли раздел "Продукты"
Чтобы понять, в чём дело, нужно выгрузить сервис в XML-файл (в администраторе из контекстного меню или по Ctrl+Shift+S), открыть в блокноте и найти все места, где встречается "91DAAD2EF7A34382AD0C2D3B63EF870C" (без фигурных скобок и дефисов).
Дальше смотреть по обстоятельствам. Возможно, поможет, если в файле просто удалить текст «UID="91DAAD2EF7A34382AD0C2D3B63EF870C" », сохранить файл и загрузить обратно в администратор, оно само сгенерирует новый UID.
На всякий случай перед манипуляциями сделайте бекап базы.
даже когда пытаюсь выгрузить сервис выдает журнал с ошибкой:
Ошибка получения элемента по USI 'Opportunities\Details\Offerings\wnd_OfferingInOpportunitiesDetailTreeArea'. Дублируется значение свойства 'UID'. Значение '{91DAAD2E-F7A3-4382-AD0C-2D3B63EF870C}' уже существует «Call Stack»
-------------------------------
Поднял старый бекап, там сервис работает нормально...
Так ругается на wnd_OfferingInOpportunitiesDetailTreeArea или wnd_OfferingsDetailTreeArea? Или на оба?
на wnd_OfferingInOpportunitiesDetailTreeArea
сервис не редактировался, не переливался, сегодня впервые попытались использовать.
На тестовой попытался удалить сервис и заново залить, сервис удалился но при загрузке выбила таже ошибка...
Если такой же сервис есть в старой резервной копии, можно попробовать неработающий из дерева в TSAdmin удалить, а на его место залить такой же со старого. Поскольку это сервис окна, а не таблицы, то при удалении данные не должны пропасть. Возможно, но не факт, после удаления и заливки новой-старой надо будет перезалить окно раздела, в котором используется эта деталь.
"Зверев Александр" написал:Если такой же сервис есть в старой резервной копии, можно попробовать неработающий из дерева в TSAdmin удалить, а на его место залить такой же со старого.
только что пробовал на тестовой, удаляется, но при заливке ошибка приложения и такое же сообщение
Может, сервис с таким же UID есть ещё один?
Предлагаю после удаления выгрузить все схемы в виде файлов в одну папку (правой кнопкой по корню дерева в TSAdmin) и поискать по их тексту упоминания "91DAAD2EF7A34382AD0C2D3B63EF870C".
выгрузил все разделы кроме продаж. Я даже проверять не стал на нормальность этих сервисов, в журнале выбило 2 одинаковых ошибки на 2 сервиса: wnd_OfferingInInvoiceGridArea и wnd_OfferingInInvoiceInProjectGridArea. После их удаление проблема не исчезла, залить старый-новый неудется
"Зверев Александр" написал:То есть на текущий момент в конфигурации нет ни одного сервиса с таким UID и при этом загрузить в конфигурацию сервис с этим UID не даёт?
НАШЕЛ!!! Оказывается был еще один сервис где вспоминалось это UID - "wnd_OfferingsDetailTreeArea"(я просто не дождался второго файла при поиске). Когда там удалил строку «UID="91DAAD2EF7A34382AD0C2D3B63EF870C" » - все ошибки пропали!!!
Допустим, есть таблица UsrIssues, в ней есть лукапная колонка UsrIssueType - внешний ключ на таблицу UsrIssueType. Т.е. исходные данные для SQL - строки "UsrIssues" и "UsrIssueType". Необходимо получить UId колонки UsrIssueType, тот, что мы получаем, открывая метаданные объекта UsrIssue, и поиском по тексту ищем строку "UsrIssueType", и копируем UId сверху.
Вообщем, вопрос - можно ли забрать данные из метаданных с помощью SQL.
select p.name, p.value
from sys.extended_properties p
inner join sys.tables t on p.major_id= t.object_id
inner join sys.columns c on c.object_id= t.object_id
where t.Name='FIAS'--таблица
and c.Name='Address'--колонка
and p.Name='TS.EntitySchema.UId'--extended property name
Здесь пример запроса получение UId для таблицы 'Contact'и колонки 'SalutationTypeId'
SELECT value AS [UId]
FROM sys.extended_properties AS ep
INNER JOIN sys.tables AS t ON ep.major_id = t.object_id
INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
WHERE class = 1
and ep.name = 'TS.EntitySchemaColumn.UId'
and t.name = 'Contact'
and c.name = 'SalutationTypeId'
order by t.name;
Спасибо обоим! Валерий, у меня получилось длиннее, спасибо за коротку версию :lol:
declare @detailObjectName nvarchar(255)='UsrCandNotewortev';
declare @typeColumnName nvarchar(255)='AnniversaryType';
declare @typeColumnNameFull nvarchar(255)= @typeColumnName +'Id';
declare @majorId int, @minorId int;
select top 1 @majorId = p.major_id, @minorId = p.minor_id
FROM sys.extended_properties p
INNER JOIN sys.TABLES t ON p.major_id= t.object_id
INNER JOIN sys.COLUMNS c ON c.object_id= t.object_id
WHERE
t.Name= @detailObjectName
AND c.Name= @typeColumnNameFull
AND p.name='TS.ColumnName'
AND p.value= @typeColumnNameFull;
declare @typeColumnUId uniqueidentifier =(
select top 1 CONVERT(uniqueidentifier, p.value)
from sys.extended_properties p
where
p.major_id= @majorId
and p.minor_id= @minorId
and p.name='TS.EntitySchemaColumn.UId');
select @typeColumnUId as TypColumnUId
Сделал функцией:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[GetColumnUId](
@tableName nvarchar(255)
,@columnName nvarchar(255))
RETURNS uniqueidentifier
AS
BEGIN
declare @columnUId uniqueidentifier;
SELECT @columnUId= CONVERT(uniqueidentifier, value)
FROM sys.extended_properties AS ep
INNER JOIN sys.tables AS t ON ep.major_id= t.object_id
INNER JOIN sys.columns AS c ON ep.major_id= c.object_id AND ep.minor_id= c.column_id
WHERE
class=1and ep.name='TS.EntitySchemaColumn.UId'and t.name= @tableName
and c.name= @columnName
order by t.name;return @columnUId;
END
GO
В Контрагентах изменил справочник "Категория контрагента", переименовал и наполнил его другим содержанием (перечень товарных групп). В результате теста на админ правах все работает отлично. Пользователи не имеющие административных прав, не видят перечень значений, при открытии окна списка пишет "нет данных". Проштудировал мануалку но решения в ней не нашел.
Наверное большинству пользователей форума вопрос покажется примитивным, но все же помогите разобраться чайнику.
Подскажите как скрыть печатную форму одного типа карточки для других?
Например, есть печатная форма Договора, если ее просто добавить в справочник печатных форм, то она будет добавлена во все карточки документов: и в акт, и в договор и т.д.
В базовой функциональности приложения данной возможности нет. Все печатные формы отображаются по объекту, без разграничения по типам или другим справочным полям.
Один из возможных вариантов для реализации подобного разграничения - дорабатывать логику приложения путем замещения схемы объекта и добавлением необходимой фильтрации.
В базовой функциональности приложения данной возможности нет. Все печатные формы отображаются по объекту, без разграничения по типам или другим справочным полям.
Один из возможных вариантов для реализации подобного разграничения - дорабатывать логику приложения путем замещения схемы объекта и добавлением необходимой фильтрации.
С уважением,
Роман Резвов
Специалист службы поддержки II линии
Группа компаний Terrasoft
Можете описать пример фильтрации для данного вопроса?
Здравствуйте.
В таблице печатных форм добавить поле Value Type ссылающиеся на тип карточки.
При формировании списка печатных форм прописать код фильтрации по данному полю в соответсвии с типом открытой карточки.