Вопрос

Добрый день.

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

Подскажите где генерируются данные кнопки?

Прикрепленные файлы

У меня такой же вопрос

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

Все намного проще, обычно определяется (меняется в diff)

{
        "operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.BLUE,
                                "markerValue": "myButtonAction",
                                "tag": "myAction",
                                "caption": "MyButton"
                        }
                ]
        }
}

Подробнее тут

Григорий Чех пишет:

Григорий Чех у меня нет цели засорять код дифтами.

У меня будет 100 секций в которой будет такая же задача и я буду в каждой дифт делать? 

Мне проще заместить схему и внести свою логику.

Казанцев, 

см в ConfigurationGrid метод renderRowActions

Но его нет при генерации секции

Этот метод перебирает значения из массива activeRowActions:

  renderRowActions: function(renderTo, id) {
   var rowActions = Ext.clone(this.activeRowActions);
   var self = this;
   var isGridEnabled = this.model.get("IsEnabled");
 
   function actionHandler() {
    self.onActionItemClick(this.tag, id);
   }
 
   for (var i = 0, c = rowActions.length; i < c; i += 1) {
    var action = rowActions[i];
    if (isGridEnabled === false && action.tag !== "card") {
     continue;
    }
    action = Ext.apply({}, action, {
     renderTo: renderTo,
     handler: actionHandler,
     classes: {
      wrapperClass: ["configuration-grid-action-button"]
     }
    });
    var actionItem = Ext.create(action.className, action);
    var selectedViewModel = this.getActiveRowViewModel(id);
    actionItem.bind(selectedViewModel);
    actionItem.setEnabled(this.enabled);
    this.actionItems.push(actionItem);
   }
  },

Соответственно, в схемах с дополнительными кнопками в него добавляются элементы. Например, в схеме ContactOpenCasesDetail:

{
	"operation": "merge",
	"name": "DataGrid",
	"values": {
		"activeRowAction": {"bindTo": "onActiveRowAction"},
		"activeRowActions": []
	}
},
{
	"operation": "insert",
	"name": "OpenRecordButton",
	"parentName": "DataGrid",
	"propertyName": "activeRowActions",
	"values": {
		"className": "Terrasoft.Button",
		"style": Terrasoft.controls.ButtonEnums.style.BLUE,
		//TODO localizablestring
		"caption": "Open",//{ "bindTo": "Resources.Strings.OpenButtonCaption"},
		"tag": "open"
	}
},
{
	"operation": "insert",
	"name": "MergeRecordButton",
	"parentName": "DataGrid",
	"propertyName": "activeRowActions",
	"values": {
		"className": "Terrasoft.Button",
		"style": Terrasoft.controls.ButtonEnums.style.GREY,
		//TODO localizablestring
		"caption": "Merge doubles",//{ "bindTo": "Resources.Strings.MergeCaption"},
		"tag": "merge"
	}
}

 

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

Добрый день!

Столкнулся со следующей ошибкой во время билда/ребилда через WorkSpaceConsole, настроенный в VS.

Error: Dependency 'TripUsefulConfigurationService' of package 'Business_Trip_Objects' was not found.

Нашел статью, параметры в консоли и WebConfig значение флага CompileByManagerDependencies совпадает и равняется true.

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

Заранее спасибо!

У меня такой же вопрос

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

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

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

Коллеги, всем доброго времени суток!

В мобильном приложении необходимо логировать некоторые данные. В приложении есть свой логгер -  http://prntscr.com/noti8j
Подскажите где смотреть логи если назначение будет Terrasoft.LogDestination.Analytics?

 

У меня такой же вопрос

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

Логи Terrasoft.LogDestination.Analytics не предназначены для просмотра пользователем. Можно посмотреть только Terrasoft.LogDestination.File, сформировав письмо с отчётом для отправки.

 

Зверев Александр,

 Благодарю.

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

Коллеги, добрый день. 

Подскажите, пожалуйста, как в системе реализовано 2 задачи:

 

1) Шаблоны ответов представлены на английском(почему только на нём?), как сменить язык пакетно? Почему при добавлении русской локализации шаблон не переводится или не предоставляется аналог ? 

2) Если первая функция не реализована, почему нельзя выбрать весь пул ответов и сменить локализацию(пусть и пустую)? 

У меня такой же вопрос

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

Стандартные шаблоны предоставлены на обоих языках. Нужно открыть шаблон на редактирование и сверху будет переключение в виде двух вкладок:

chapter_content_designer.png

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

Вопрос связан с задачей загрузки курсов валют из 1С в bpmonline.

Мы написали для этого веб-сервис на стороне 1С, который в формате JSON выдает текущие курсы валют (имеется виду наши внутрикорпоративные управленческие курсы).

На стороне bpmonline был написан бизнес-процесс, который читает данные из этого веб-сервиса и добавляет записи в сущность bpmonline CurrencyRate.

Проблема возникла с тем, что bpmonline, по каким-то неизвестным нам алгоритмам, одновременно добавляет в CurrencyRate, кроме нашей записи, еще и другие строки – «закрывает» курс с незаполненной датой окончания, добавляет еще одну запись где дата начала и дата окончания равны текущей дате и т.п.. В результате табличка курсов валют (сущность bpmonline CurrencyRate) становится нечитабельной.

Вы не подскажете, как нам правильно добавить курсы валют в сущность CurrencyRate, чтобы не срабатывали эти скрытые механизмы?

Заранее спасибо за ответ.

У меня такой же вопрос

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

Посмотрите это обсуждение

И если изменения вносить через Insert или Update  то БП не будут их чувствовать и срабатывать, но это не корректно зато быстро.

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

Доброго времени суток! Возникла задача реализовать фильтр для детали, одно из условий - чтоб длина номера телефона превышала 4 символа. Возможно ли это реализовать?Если да то как?

У меня такой же вопрос

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

Добрый день!
Посмотрите тут

Сидоров Александр В.,

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

 

На esq реализовать это довольно сложно. Предлагаю сделать представление (view) и фильтровать уже на уровне представления

Либо сделать в объекте ещё одно числовое поле и при добавлении/изменении номера в БП/встроенном БП/триггере вычислять и записывать туда его длину.

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

Добрый день! Прошу помочь со следующим кейсом:

В обращении при наступлении события X запускается бизнес-процесс и отправляется email. Необходимо прикрепись к нему все вложения с детали Файлы и ссылки.

Какие есть пути реализации? Заранее спасибо!

У меня такой же вопрос

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

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

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

Добрый день!

Существует следующая необходимость - изменить в уведомлениях по активностям ФИО связанного контакта на номер обращения (потому что все равно на то с кем общаться, главное знать по какому обращению надо сделать задачу и быстро перейти в это обращение). Можно ли вообще осуществить такое изменение в версии 7.13 и выше? Если до, то как это осуществить? Может кто делал что-то подобное?

У меня такой же вопрос

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

Можно попробовать в схеме ActivityNotificationProvider переделать функцию GetBody и остальные, где формируется список колонок.

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

Доброе утро!

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

Примечание: нужно завершать процессы группы 1 только в рамках выбранного объекта (например задолженность), при этом все процессы группы 1 должны работать по остальным записям объекта.

У меня такой же вопрос

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

Добрый день!
Вам нужно в процессы группы 1 вставить блок "Привязать данные к процессу". Тогда по заданной сущности сможете находить бизнес процессы (через объект SysProcessEntity: SysProcessId - ссылка на БП, EntityId - ссылка на сущность).
Завершить бизнес процессы можно через ProcessEngine (есть в UserConnnection).

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

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

BPMO Service Enterprise, версия 7.14.0.597

У меня такой же вопрос

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

Логика интеграции конкретных полей реализована в схеме LDAPUtilities, там есть структуры LdapUser и LdapGroup:

public struct LdapUser
{
	#region Fields: Public
 
	public string Id;
	public string Name;
	public string FullName;
	public string Company;
	public string Email;
	public string Phone;
	public string JobTitle;
	public bool IsActive;
	public string Dn;
	public DateTime ModifiedOn;
 
	#endregion
}
 
public struct LdapGroup
{
	#region Fields: Public
 
	public string Id;
	public string Name;
	public string Dn;
	public DateTime ModifiedOn;
 
	#endregion
 
	#region Constructors: Public
 
	public LdapGroup(string id, string name, string dn) {
		Id = id;
		Name = name;
		Dn = dn;
		ModifiedOn = DateTime.MinValue;
	}
 
#endregion
}

 И дальше есть методы, с ними работающие. Например:

private LdapUser CreateLdapUser(SearchResultEntry entry, string attributeDefValue) {
	LdapUser ldapUser = new LdapUser();
	ldapUser.Id = GetEntryIdentityAttribute(entry, _ldapUserIdentityAttribute);
	ldapUser.Name = GetEntryRequiredAttributeStringValue(entry, _ldapUserLoginAttribute);
	ldapUser.FullName = GetEntryAttributeStringValue(entry, _ldapUserFullNameAttribute, attributeDefValue);
	ldapUser.Company = GetEntryAttributeStringValue(entry, _ldapUserCompanyAttribute, attributeDefValue);
	ldapUser.Email = GetEntryAttributeStringValue(entry, _ldapUserEmailAttribute, attributeDefValue);
	ldapUser.Phone = GetEntryAttributeStringValue(entry, _ldapUserPhoneAttribute, attributeDefValue);
	ldapUser.JobTitle = GetEntryAttributeStringValue(entry, _ldapUserJobTitleAttribute, attributeDefValue);
	string accountControlAttributeValue =
		GetEntryAttributeStringValue(entry, LdapUserAccountControlAttributeName, string.Empty);
	ldapUser.IsActive = string.IsNullOrEmpty(accountControlAttributeValue) ||
		IsActive(accountControlAttributeValue);
	bool useLoginUserLDAPEntryDN = _userConnection.AppConnection.UseLoginUserLDAPEntryDN;
	ldapUser.Dn = useLoginUserLDAPEntryDN ? entry.DistinguishedName : attributeDefValue;
	ldapUser.ModifiedOn = GetEntryDateTimeAttributeValue(entry, _ldapEntryModifiedOnAttribute);
	return ldapUser;
}
 
private LdapGroup CreateLdapGroup(SearchResultEntry entry) {
	LdapGroup ldapGroup = new LdapGroup();
	ldapGroup.Id = GetEntryIdentityAttribute(entry, _ldapGroupIdentityAttribute);
	ldapGroup.Name = GetEntryRequiredAttributeStringValue(entry, _ldapGroupNameAttribute);
	ldapGroup.Dn = entry.DistinguishedName;
	ldapGroup.ModifiedOn = GetEntryDateTimeAttributeValue(entry, _ldapEntryModifiedOnAttribute);
	return ldapGroup;
}

Для добавления новых атрибутов потребуется дорабатывать по аналогии с существующими. Сами названия атрибутов, а также параметры подключения к LDAP не жёстко зашиты, а хранятся в системных настройках (все можно найти по «LDAP» в их коде) и считываются на ходу тут же в конструкторе класса LdapUtilities.

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