Добрый день!
Возможно ли отключить подчеркивание текста в dgdtLookup колонках. Т.е. чтобы текст оставался Lookup, но без нижнего подчеркивания.

Нравится

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

Для этого нужно изменить у колонки в гриде свойство LookupType с dgcltLookup на dgcltGeneral.

Тогда текст перестанет быть ссылкой(вместо ладошки будет стрелка курсора) и одним кликом не откроешь карточку, например, контакта. Я не зря задал этот вопрос.

Чтобы текст стал ссылкой и карточка открывалась — выставите полю свойство LookupType равным dgcltLookup.

Видимо я плохо сформулировал свой вопрос. Попробую по другому. Можно ли сделать так, чтобы при
LookupType = dgcltLookup каким-то образом убрать нижнее подчеркивание у ссылки.

Например в css нижнее подчеркивание можно отключить так:
a {
text-decoration: none; /* Убираем подчеркивание у ссылок */
}
ссылка уже будет без нижнего подчеркивания:

Мне нужно сделать то же самое. Возможно ли это сделать каким-нибудь образом?

Это можно сделать путём доработки ядра системы, если есть его исходники. Исходники клиентам не предоставляются.

Как всегда все упирается в святая святых - ядро :exclaim: !

Система предоставляет возможность сделать текст в колонке как подчёркнутым, так и не подчёркнутым, в зависимости от типа колонки. Это свойство LookupType можно менять из конфигурации. Подчёркивание символизирует, что колонка лукапная.

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

Друзья, подскажите, пожалуйста, информацию по данной части кода, который является частью общей схемы. Я не понимаю что за Place:
"UsrPlace": {
// Настройка правила видимости поля [UsrPlace] по колонке [UsrRayonN].
"BindParametrVisibile

Place

ByType": {

это что мы атрибут создали для хранения идентификатора нужного района где указали PlaceID?
В данном случае просто не указывается "ID", оставляем просто Place ?

Вот код:

define("UsrUsrCadress1Page", ["BusinessRuleModule", "ConfigurationConstants"],
function(BusinessRuleModule, ConfigurationConstants) {
return {
entitySchemaName: "UsrCadress",
attributes: {
"PlaceId": {
"dataValueType": Terrasoft.DataValueType.TEXT,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
"value": ""
}
},
methods: {
// Метод инициализации схемы.
init: function() {
this.callParent(arguments);
this.initPlaceId();
},
// Метод определения района.
initPlaceId: function() {
var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrRayonSp"});
// Сохранение контекста модуля в переменную.
var scope = this;
esq.addColumn("Name", "Name");
// Выполнение запроса.
esq.getEntityCollection(function(result) {
if (result.success) {
// Перебор значений справочника Районы.
result.collection.each(function(item) {
// Если значение колонки [Name] — [Район1].
if (item.get("Name") === "Район1") {
// Получение идентификатора для Район1.
var Id = item.get("Id");
// Установка значения атрибута.
scope.set("PlaceId", Id);
}
});
}
}, this);
}
},
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
{
// Метаданные для добавления поля [Где встречаемся].
"operation": "insert",
"parentName": "Header",
"propertyName": "items",
"name": "UsrPlace",
"values": {
"caption": {"bindTo": "Resources.Strings.PlaceCaption"},
"layout": { "column": 0, "row": 4, "colSpan": 12 }
}
},
{
"operation": "insert",
"name": "UsrCompany68a57d28-f347-402e-b0dd-212721e10da6",
"values": {
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 12,
"row": 0,
"layoutName": "Header"
},
"bindTo": "UsrCompany"
},
"parentName": "Header",
"propertyName": "items",
"index": 0
},
{
"operation": "insert",
"name": "UsrStreet80970a2b-d253-4cc0-8131-1309a94a725c",
"values": {
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 1,
"layoutName": "Header"
},
"bindTo": "UsrStreet"
},
"parentName": "Header",
"propertyName": "items",
"index": 1
},
{
"operation": "insert",
"name": "UsrRayonN0e89212d-002b-411c-9df1-6398684f32de",
"values": {
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 2,
"layoutName": "Header"
},
"labelConfig": {},
"enabled": true,
"contentType": 5,
"bindTo": "UsrRayonN"
},
"parentName": "Header",
"propertyName": "items",
"index": 2
},
{
"operation": "insert",
"name": "UsrStreetN6141b4cf-114d-4512-be07-a21699058223",
"values": {
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 3,
"layoutName": "Header"
},
"labelConfig": {},
"enabled": true,
"contentType": 5,
"bindTo": "UsrStreetN"
},
"parentName": "Header",
"propertyName": "items",
"index": 3
}
]/**SCHEMA_DIFF*/,
rules: {
// Набор правил для колонки [UsrStreetN] модели представления.
"UsrStreetN": {
// Правило фильтрации колонки [UsrStreetN] по значению колонки [UsrRayonN].
"FiltrationUsrStreetNByUsrRayonN": {
// Тип правила FILTRATION.
"ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
// Будет выполняться обратная фильтрация.
"autocomplete": true,
// Будет выполнятся очистка значения при изменении значения колонки [UsrRayonN].
"autoClean": true,
// Путь к колонке для фильтрации в справочной схеме [UsrStreetN],
// на которую ссылается колонка [UsrStreetN] модели представления
// страницы редактирования.
"baseAttributePatch": "UsrRayonN",
// Тип операции сравнения в фильтре.
"comparisonType": Terrasoft.ComparisonType.EQUAL,
// В качестве значения при сравнении выступает колонка (атрибут)
// модели представления.
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
// Имя колонки модели представления страницы редактирования,
// по значению которой будет выполняться фильтрация.
"attribute": "UsrRayonN"
}
},
// Набор правил для колонки [UsrPlace] модели представления.
"UsrPlace": {
// Настройка правила видимости поля [UsrPlace] по колонке [UsrRayonN].
"BindParametrVisibilePlaceByType": {
// Тип правила BINDPARAMETER.
"ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
// Правило регулирует свойство VISIBLE поля.
"property": BusinessRuleModule.enums.Property.VISIBLE,
// Массив условий, при выполнении которых отрабатывает правило. В данном
// случае массив содержит одно условие для сравнения значения колонки [RayonN] с
// идентификатором категории активности [Район1].
"conditions": [{
// Выражение левой части условия.
"leftExpression": {
//Тип выражения ATTRIBUTE указывает на то, что в качестве выражения выступает
// аттрибут (колонка) модели представления.
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
// Название колонки модели представления, значение которой сравнивается в выражении.
"attribute": "UsrRayonN"
},
// Тип операции сравнения.
"comparisonType": Terrasoft.ComparisonType.EQUAL,
// Выражение правой части условия.
"rightExpression": {
"type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
// Значение, с которым сравнивается выражение левой части. В данном случае идентификатор типа [Района] задается в PlaceId.
"attribute": "PlaceId"
}
}]
}
},
},
};
});

Нравится

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

Вы берёте колонку UsrRayonN и сравниваете её с атрибутом PlaceId. Если у вас вопрос к названию, то:

"UsrPlace": {              ///указывается колонка, к которой применяется правило(а)
	"BindParametrVisibilePlaceByType": {},         ////название правил может быть любым 
	"CustomRuleNumber2": {}                 ////правил может быть несколько
}

EDIT: Настоятельно рекомендую - http://www.community.terrasoft.ru/blogs/9863

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

Добрый день!
Я скопировал процесс "Отправка email сообщения группе о назначении обращения", он появился в пакете Custom

Открываю проект в Visual Studio, запускаю команду UpdateWorkSpaceSolution - в структуре проекта появляется файл "UsrSendEmailToCaseGroup1.Custom_Entity.cs"

Я его открываю, изменяю код, сохраняю

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

В Visual Studio делаю Attach to process, ставлю точку останова

Но сайт не всегда останавливается на Breakpoint'ах, иногда остановившись упорно не хочет показывать значения переменных, как будто вообще не видит эту строку

При попытке выполнить команду UpdateWorkSpaceSolution, появляются 2 сообщения
The line endings in the following file are not consistent. Do you want to normalize the line endings?
(Yes/No)
The project 'Terrasoft.Configuration' has been modified outside the environment!
(Reload/Ignore)

После чего все сделанные изменения в коде исчезают

Подскажите почему так происходит?

Нравится

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

Изменения прямо в файле вносить нельзя. Только через конфигурацию. С тем что точки останова не светятся и не работают тоже переодически сталкиваюсь, помогает нажать в bpm'online на схеме которую вы хотите отлаживать правой кнопкой и выбрать "скомпилировать исходные коды для выбранных элементов", после чего из того же контекстного меню "компилировать измененное". Если в студии появится The project 'Terrasoft.Configuration' has been modified outside the environment!
(Reload/Ignore) выбирайте Reload.

"Максим Шевченко" написал:

Изменения прямо в файле вносить нельзя. Только через конфигурацию. С тем что точки останова не светятся и не работают тоже переодически сталкиваюсь, помогает нажать в bpm'online на схеме которую вы хотите отлаживать правой кнопкой и выбрать "скомпилировать исходные коды для выбранных элементов", после чего из того же контекстного меню "компилировать измененное". Если в студии появится The project 'Terrasoft.Configuration' has been modified outside the environment!

(Reload/Ignore) выбирайте Reload.

Получается что код пишется в слепую без IntelliSense?

"Молчанов Антон Сергеевич" написал:Получается что код пишется в слепую без IntelliSense?

Вы можете писать его и в VS с её IntelliSense, но применять его и компилировать для последующей отладки все равно нужно в bpm'online.

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

Как можно к элементу БП «Задача» добавить связь с новый разделом (именно, чтобы в данном элементе можно было его выбрать как и все остальные, стандартные), чтобы не через «Страницу редактирования активности»
Наверняка частый вопрос, может есть в базе знаний у Вас описание, со скринами?

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

Буду благодарен за помощь:)

Нравится

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

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

Алгоритм решения:
1. Выгрузить схему элемент “Задачи” (ActivityUserTask) из конфигурации.
2. Открыть в текстовом редакторе выгруженную схему. Изменить UId схемы, Name, Caption на новые значения. Важно! Изменять необходимо во всем файле.
UId схемы можно сформировать с помощью Guid Generator (https://www.guidgenerator.com/)
3. Выполнить импорт модифицированной схемы в конфигурацию (условно UsrActivityUserTaskNew).
4. В схеме UsrActivityUserTaskNew добавить новый параметр типа справочник, который будет ссылаться на интересующий объект.
5. Замесить в UsrActivityUserTaskNew методы CompleteExecuting() и CreateActivity(). Добавить в методы параметр созданный в Пункт 4 (по аналогии с существующей реализацией).
6. В таблицу EntityConnection добавить связь Активности с пользовательским полем.
7. Изменить значение колонки SysUserTaskSchemaUId в таблице SysProcessUserTask для задачи на UId созданной схемы UsrActivityUserTaskNew.

Олег,
большое спасибо Вам за ответ! :)

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

Я думаю, что этот вопрос очень актуальный, наверняка ОЧЕНЬ часто создаются новые разделы и было бы неплохо иметь подсказку как его привязать к элементу БП. Без этйо привязки очень сложно строить БП в связи с тем, что через страницу редактирования активности приходиться привязывать все результаты задачи к дальнейшим шагам процесса :(

Цитирую коллег из команды разработки:
"сейчас работаем над системным решением этой задачи. В версии 7.10 (возможно в 7.9.2) ссылки на новые разделы будут добавляться автоматически"

Спасибо!
Ждемс

в 792 не появилось.

Вопрос по

6. В таблицу EntityConnection добавить связь Активности с пользовательским полем.
7. Изменить значение колонки SysUserTaskSchemaUId в таблице SysProcessUserTask для задачи на UId созданной схемы UsrActivityUserTaskNew.

Можете пример.

Понимаю что надо сделать insert но пример бы.

Марат, здравствуйте!

В версии 7.10 будет возможность в элементе "Задача" выбирать поля, которые отображаются на детали "Связи" на странице редактирования раздела "Активности".

Как было замечено ранее, связи хранятся в таблице EntityConnection. По сути нужно создать запись, в которой будут заполнены поля:
1) SysEntitySchemaUID
2) ColumnUID

SysEntitySchemaUID - значение поля UID из таблицы SysSchema. Для объекта "Активность" значение можно получить запросом:

select UID
from SysSchema
where Name = 'Activity'
and ExtendParent = 0

ColumnUID можно получить либо из метаданных объекта Activity в пакете, в котором поля были добавлены, либо из таблицы SysEntitySchemaReference.

Алексей, спасибо получилось.

По запросу у меня вышло 2 записи. Одна родная, вторая замещающая.

Потом выполнил такой запрос

SELECT ColumnUId, ColumnCaption
FROM SysEntitySchemaReference

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

insert into EntityConnection 
(SysEntitySchemaUId,ColumnUId)
values
(вашID,
'вашColumnId')

"Демьяник Алексей" написал:В версии 7.10 будет возможность в элементе "Задача" выбирать поля, которые отображаются на детали "Связи" на странице редактирования раздела "Активности".

Вот и вышло 7.10.
Добавил новый объект на деталь связи в активности, но по прежнему его нет в элементе БП Выполнить задачу. Или я ошибаюсь и что-то не так понял или сделал?

Для того, чтобы система автоматически установила нужные связи активности с другим разделом достаточно включить DCM в целевом разделе:
- перейти в раздел
- [Вид – Настроить кейсы раздела]
- заполнить поле “По какой колонке строятся стадии кейса?”
- сохранить

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

Супер, работает.
ВАЖНО, нажмите добавить новый кейс и тогда при сохранении она сработает. Если просто заполнить поля для кейса и нажать сохранить ничего не произойдет.

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

Добрый вечер, как я понимаю, чтобы для уведомлений из пользовательского раздела отображался колокольчик с +1 необходимо создать в схемах провайдер, и затем с помощью sql запроса его зарегистрировать в общем NotificationProvider, но я не могу найти как выполнить sql запрос. Запросили партнерское решение (https://marketplace.terrasoft.ru/app/49) , но пока тихо, подскажите, пожалуйста, есть ли какой-нибудь нативный способ подключить провайдер уведомлений в bpmonline 7.9? :smile:

Нравится

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

A почему бы не воспользоваться закладкой "SQL-запросы" в свойствах пользовательского пакета? :)

Добрый вечер.

Как вариант, Вы можете
1) Вывести таблицу как справочник в разделе Справочники, это позволит Вам менять колонки, не хранящие в себе значения GUID.

2) Написать простой запрос в консоли используя entityschemaquery (так как esq проверяет права пользователя - выполнять его необходимо под пользователем, имеющим права на изменение объекта).

И да, прикрепить скрипт на вкладке sql сценарии в конфигурации и выполнить.

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

таблица NotificationProvider, колонка type

Большое спасибо, помогло с отображением счетчика в нужном месте :smile:
А не подскажете в чем может быть ошибка с отображением пустой иконки в уведомлениях, для раздела иконка установлена, в таблице NotificationsSettings необходимо что-то добавить?

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

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

Проверьте заполнение полей SysImageId и SysEntitySchemaUid.

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

Кейс таков, что есть созданная кнопка, по её нажатию должна открыться карточка EmailPageV2.
Существует ли возможность реализовать это без бизнес-процесса и передать туда значения какие-либо.
Главное это открытие, а передачу я сам организую.

Нравится

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

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

Пример реализации вы можете найти в схеме CommunicationPanelEmailSchema - при нажатии на кнопку "Добавить email" (AddEmail) вызывается метод createEmail(), который открывает страницу редактирования EmailPageV2.

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

Добрый день!
Я создал в настройках пользователя CheckBox

который сохраняет в таблицу UsrTakeMail уникальный идентификатор пользователя (GUID) и значение моего CheckBox (Flag)

Существует процесс "Отправка email сообщения группе о назначении обращения"
В нём есть блок задание-сценарий "Prepare Recipient Emails"

var emailSelect = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "SysAdminUnit");
var emailColumn = emailSelect.AddColumn("Contact.Email");
var groupId = ReadCaseData.ResultEntity.GetTypedColumnValueGuid>("GroupId");
emailSelect.Filters.Add(emailSelect.CreateFilterWithParameters(FilterComparisonType.Equal, "[SysUserInRole:SysUser].SysRole", groupId));
var collection = emailSelect.GetEntityCollection(UserConnection);
IsNeedSendEmail = collection.Count > 0;
RecipientEmails = string.Empty;
foreach(var entity in collection) {
        var email = entity.GetTypedColumnValuestring>(emailColumn.Name);
        if (!string.IsNullOrEmpty(email)) {
                RecipientEmails += string.Format("{0};", email);
        }
}
return true;

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

Проблема:
Для того чтобы сделать замещающий бизнес-процесс я скопировал процесс "Отправка email сообщения группе о назначении обращения".
Отключил основной процесс через кнопку действия
Но при попытке создать обращение, видно что в журнале процессов выполняется основной процесс а не замещенная копия.
Подскажите что я делаю не так?

Нравится

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

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

Процесс "Отправка email сообщения группе о назначении обращения" вызывается в процессе "Запуск процесса Отправка email сообщения группе о назначении обращения". Для решения вам необходимо:
1) Скопировать процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"
2) Изменить логику копии, чтобы запускался созданный вами процесс
3) Отключить процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"

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

"Демьяник Алексей" написал:

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

Процесс "Отправка email сообщения группе о назначении обращения" вызывается в процессе "Запуск процесса Отправка email сообщения группе о назначении обращения". Для решения вам необходимо:

1) Скопировать процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"

2) Изменить логику копии, чтобы запускался созданный вами процесс

3) Отключить процесс "Запуск процесса Отправка email сообщения группе о назначении обращения"

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

Большое спасибо! Получилось!
Только нужно уточнить 2 пункт:
В скопированном запуске процесса необходимо изменить GUID процесса который он будет запускать.
GUID процесса можно узнать в строке браузера, зайдя в сам процесс.

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

При открытии мастера раздела появляется такая ошибка. "Ошибка Мастера разделов. Значение не может быть неопределённым. Имя параметра: path2"
Как можно её исправить?

Нравится

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

Антон, здравствуйте!

Для устранения данной ошибки необходимо зайти в [Дизайнер системы] - [Системные настройки] - [Текущий пакет].

И выбрать пакет Custom в [Значение по умолчанию]. Наглядный скриншот прикрепил ниже.

Сохранить. После этого необходимо перезайти в приложение и очистить кэш браузера.

"Вильшанский Дмитрий" написал:

Антон, здравствуйте!

Для устранения данной ошибки необходимо зайти в [Дизайнер системы] - [Системные настройки] - [Текущий пакет].

И выбрать пакет Custom в [Значение по умолчанию]. Наглядный скриншот прикрепил ниже.

Сохранить. После этого необходимо перезайти в приложение и очистить кэш браузера.


Сделал всё как вы написали, проблема не решилась

"Иванов Антон Генадиевч" написал:
Вильшанский Дмитрий пишет:

Антон, здравствуйте!

Для устранения данной ошибки необходимо зайти в [Дизайнер системы] - [Системные настройки] - [Текущий пакет].

И выбрать пакет Custom в [Значение по умолчанию]. Наглядный скриншот прикрепил ниже.

Сохранить. После этого необходимо перезайти в приложение и очистить кэш браузера.

Сделал всё как вы написали, проблема не решилась

Пакет "Custom" доступен для редактирования?

"Вильшанский Дмитрий" написал:
Иванов Антон Генадиевч пишет:

Вильшанский Дмитрий пишет:

Антон, здравствуйте!

Для устранения данной ошибки необходимо зайти в [Дизайнер системы] - [Системные настройки] - [Текущий пакет].

И выбрать пакет Custom в [Значение по умолчанию]. Наглядный скриншот прикрепил ниже.

Сохранить. После этого необходимо перезайти в приложение и очистить кэш браузера.

Сделал всё как вы написали, проблема не решилась

Пакет "Custom" доступен для редактирования?

Да, доступен

"Иванов Антон Генадиевч" написал:
Вильшанский Дмитрий пишет:

Иванов Антон Генадиевч пишет:

Вильшанский Дмитрий пишет:

Антон, здравствуйте!

Для устранения данной ошибки необходимо зайти в [Дизайнер системы] - [Системные настройки] - [Текущий пакет].

И выбрать пакет Custom в [Значение по умолчанию]. Наглядный скриншот прикрепил ниже.

Сохранить. После этого необходимо перезайти в приложение и очистить кэш браузера.

Сделал всё как вы написали, проблема не решилась

Пакет "Custom" доступен для редактирования?

Да, доступен

Странно.
Антон, напишите письмо с полным описанием проблемы, пожалуйста, в техническую поддержку (support@terrasoft.ru). Для того, чтобы оперативно помочь Вам решить проблему.

Спасибо!

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

Заполняем поле менеджер(пользователь системы), заполняем поле даты/время, при заполнении этого поля нужно проверить свободен ли в это время(и следующих 15 мин) менеджер, если да то делаем кнопку доступной.
Интересует как сделать саму проверку.

Нравится

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

Добрый вечер, Виталий.

Для решения Вашей задачи необходимо:
1) Привязать доступность кнопки к булевому атрибуту, имеющему по умолчанию значение false.
2) При каждом изменении поля Дата/Время делать запрос к базе данных проверяя свободен ли он и на основании результат менять значение атрибута из пункта 1.

Вот что получилось:
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "Activity"});
esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "Id");
esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"Owner",
this.get("Owner").value
));
esq.filters.addItem(this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.Greater,
"StartDate",
new Date()
));
esq.getEntityCollection(
function(response) {
var e = response.collection.getByIndex(0).get("Id");
e = e + e;
},
this
);
на строке var e = response.collection.getByIndex(0).get("Id"); выбивает ошибку - елемент не найден, если убрать фильтр по дате - выбирает все как есть, значит проблема в фильтре, что я сделал не так? возможно формат другой? я не смог найти пример с датами

... жесть, не Greater а GREATER

так, наткнулся на другую проблему, как я понял оно работает:
формируем запрос и отправили его на сервер и когда придет ответ - обрабатываем его, но не ждем пока он придет код выполняется дальше. когда приходит ответ - выполняется функция "getEntityCollection( function(response". И тут 2 вопроса можно ли сделать так чтоб все висло и ждало пока придет ответ и как передать в эту функцию параметры

Виталий, javascript асинхронный по умолчанию и с этим ничего сделать нельзя.

По поводу параметров:

1) В метод getEntityCollection вторым параметром передается scope выполнения функции обратного вызова. Т.е. если в него передать this - функция сможет работать с любыми атрибутами или методами карточки.

2) Аналогично можно перед вызовом getEntityCollection закешировать this.
var scope = this;
Тогда можно будет получить или изменить любой атрибут обращаясь к scope внутри функции обратного вызова.
var param = scope.get("Owner");
scope.set("Owner", {id: "", displayValue: "Supervisor"})

да но что делать когда нужно выполнить вот такой код:

esq.getEntityCollection(
	function(response) {
		var ActivitytCount = response.collection.getByIndex(0).get("Id");
		if (ActivitytCount === 0) {
			this.callParent([function() {
				this.Terrasoft.chain(this.publishOnSaveEvents, function() {
					this.onSaved(callback, scope);
				}, this);
			}, this]);

выбивает ошибку:
TypeError: e is undefined

Как вариант зависания - используйте метод showBodyMask() перед вызовом getEntityCollection. Это позволит отобразить на карточке маску загрузки которая не позволит менять данные.

В функции обратного вызова скройте маску this.hideBodyMask()

this.showBodyMask();
esq.getEntityCollection(function(response) {
	//вычисления
	this.hideBodyMask()
}, this);

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

Ошибка в том, что вызвать callParent в функции обратного вызова невозможно, контекст уже утерян.

Пример решения (метод onEntityInitialized взят для примера):

onEntityInitialized: function() {
	if(this.get("test") === true){
		this.set("test", false);
		this.callParent([function() {
			this.Terrasoft.chain(this.publishOnSaveEvents, function() {
				this.onSaved(callback, scope);
			}, this);
		}, this]
                return;
	}
	esq.getEntityCollection(
		function(response) {
			var ActivitytCount = response.collection.getByIndex(0).get("Id");
			if (ActivitytCount === 0) {
				this.set("test", true)
				this.onEntityInitialized();
			}
		},
	this);
}

Вау! Никогда не использовал такую логику!!! Сработало, благодарю!

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

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

Возможно ли напечатать fast report для документов из грида детали workSpace-а ?
см. picture1.jpg

С помощью этой строки:
var ID = ReportPreviewer.ParentWindow.Attributes.Values('DatasetIDs')[0];
получаю ID выбранного документа в основном гриде.

А как получить ID выбранного документа в гриде детали ?
Есть пример ?

Спасибо.

Нравится

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

Картинка не открывается.

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

Да, возможно.

Посмотрите, как реализован вызов отчета в функции ReportMenuItemExecute в скрипте scr_ReportUtils.

Получить ID выбранного документа в основном гриде можно ещё таким образом:

var ID = wndGridData.Window.ComponentsByName('grdData').SelectedIDs[0];

"Марина Карапетян" написал:А как получить ID выбранного документа в гриде детали ?

Не совсем понятно, что Вы имеете ввиду.

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

Если Вы просто хотите из детали получить ID документа, который выбран в данный момент в основном гриде, тогда это можно сделать через окно раздела (Workspace).
При инициализации детали в качестве аттрибута ему можно передать окно основного грида, а потом, получить ID выбранного документа аналогично описанному выше, получив значение из аттрибута.

Почему-то рисунок не прикрепляется.
Попытаюсь без рисунка объяснить.
 
Основной грид имеет деталь_1. 
В детали_1 находятся дочерние документы каждого из документов основного грида соответственно.
При выборе документа в основном гриде, происходит обновление детали_1.
 
    связь Родительский документ : дочерний документ 
                        один    : многие
 
Например: 
основной грид
          Родительский документ_Номер1
          Родительский документ_Номер2 
	  ...
	  Родительский документ_НомерN
 
деталь_1	(если выбран Родительский документ_Номер1)
        Дочерний документ_1_Родительского документа_Номер1
	Дочерний документ_2_Родительского документа_Номер1
	...
	Дочерний документ_N_Родительского документа_Номер1
 
деталь_1	(если выбран Родительский документ_Номер2)
        Дочерний документ_1_Родительского документа_Номер2
	Дочерний документ_2_Родительского документа_Номер2
	...
	Дочерний документ_M_Родительского документа_Номер2		
 
 
Нужно получить ID дочернего документа, который выбран в детали_1.
 
Но получить ID нужно в скрипте fast report-а в событии OnPreview, чтобы задать как параметр ADODataset - у, а там уже с помощью SQL запроса запрашиваются нужные данные.
 
Спасибо.

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

Вы можете передавать нужное значение ID документа через атрибут ReportPreviewer.

Так, например, как атрибут ReportPreviewer, передается объект Report в функции ShowSelectedRecordsReport.

А определять ID, как мы обсуждали в предыдущих комментариях к этому посту.

Здравствуйте Алла.

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

что это за поле и что означает деталь связана с основной таблицой документов?

Спасибо.

Здравствуйте, Марина.

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

То есть, если это раздел [Документы] и какая-то деталь этого раздела, то в датасете, запросе на выборку и таблице детали есть поле DocumentID, которое заполнено значением поля ID из таблицы документов.

В окно грида детали это значение передается через атрибут 'ParenItemtID'.

Таким образом получить значение поля DocumentID в окне грида детали, можно так: Self.Attributes('ParentItemID').

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

Да, у меня есть такая связь.

То есть, если это раздел [Документы] и какая-то деталь этого раздела, то в датасете, запросе на выборку и таблице детали есть поле DocumentID, которое заполнено значением поля ID из таблицы документов.

Это раздел [Заявки физ. лиц.]. В датасете, запросе на выборку и таблице детали есть соответствующее поле, которое заполнено значением поля ID из таблицы заявок.

В окно грида детали это значение передается через атрибут 'ParenItemtID'.

Это тоже сделала.

Таким образом получить значение поля DocumentID в окне грида детали, можно так: Self.Attributes('ParentItemID').

Но мне нужно получить не DocumentID (где записан ID записи основного грида) а ID именно записи детали. Ведь надо напечатать конкретную запись детали.

То есть, нажав на конкретную запись в основном гриде, в детали получаю соответствующие записи.
Далее нажимая на конкретную запись детали, надо напечатать ее с помощью fast report-а.
Спасибо

Получить ID выбранной записи грида можно так:

var ID = Window.ComponentsByName('grdData').SelectedIDs[0]

где Window - это название окна грида, его можно ещё заменить на Self

Так как я пишу в скрипте fast report-а, то Self в этом скрипте = "FastReport"
поэтому попыталась получить Window так:

var Window = Services.GetNewItemByUSI('wnd_XXXGridArea'); // где wnd_XXXGridArea - имя окна

var ID = Window.ComponentsByName('grdData').SelectedIDs[0];

и получаю undefined.

Посмотрела debugger-ом

Window.ComponentsByName('grdData').SelectedIDs
{...}
    CoClassGUID: "{D143A918-4CBE-48F9-AEB5-E373F6D6679D}"
    CommaText: ""
    Connector: {...}
    Count: 0
    InstanceID: "{83BD163D-9070-4543-9A89-A2A8FF3218BE}"
    IsCaseSensitive: false
    IsSorted: false
    IsUnique: false
    Items: Invalid number of parameters.
    ObjectState: 0
    Text: ""
Window.ComponentsByName('grdData').SelectedIDs[0]
undefined

Спасибо.

Вам нужно получить ID записи раньше, а потом передать его через атрибуты ReportPreviewer (выше я уже об этом писала).

Если писать так, как Вы, то получается, что обращение идет к другому экземпляру окна, а не к тому, которое является окном реестра в детали. Соответственно, что и никакие записи в нём не выбраны.

Здравствуйте Алла.

// scr_BaseWorkspace
function ReportMenuItemOnExecute(ActionMenuItem)
{
...
ChildIDs = Self.ComponentsByName('wndDetail1Grid').Window.ComponentsByName('grdData').SelectedIDs.CommaText;
// где Self-окно workspace-а(wnd_ContactCreditWorkspace) , wndDetail1Grid - деталь окна
ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, ExtractUSICodeEx(Self.USI), ChildIDs);
}

// scr_ReportUtils
function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName, ChildIDs)
{
...
ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, SelectedIDs, FilterForm, ChildIDs);
...
}

// scr_ReportUtils
function ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, GridDatasetIDs, FilterForm, ChildIDs)
{
...

SetAttribute(ReportPreviewer, 'ChildDatasetIDs', ChildIDs);
...
}

И все работает. Спасибо большое!!!
Может мой вопрос покажется глупым, но объясните пожалуйста, что такое окно реестра?

Окно реестра — это страница, на которой находится грид. Обычно название таких страниц заканчивается на «GridArea». В Вашем случае есть основное окно реестра в разделе и по одному для каждой детали.

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

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