Как динамически задавать значение текстового поля в Terrasoft.utils.inputBox, когда он уже открыт?

Нравится

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

Добрый день, Олег!

К сожалению, динамически выполнить изменение данного поля не получится.

Через Ext.JS можно все :)

var controls = {
	content: {
		customConfig: {
			className: "Terrasoft.MemoEdit",
			height: "200px",
			markerValue: "html-edit"
		},
		dataValueType: Terrasoft.DataValueType.TEXT,
		value: ""
	}
};
Terrasoft.utils.inputBox(
	"Заголовок",
	function(){},
	["ok", "cancel"],
	this,
	controls
);
 
Ext.get("t-comp0-wrap").select("textarea").update("Some text 2")

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

Достучаться до компонента и повеситься на его рендер конечно не получится... ну только если "оверрайдить" ашь от самого "Ext.dom.AbstractElement"

Но если вы можете как либо событийно завязаться на показ инпутбокса - то как заменить я показал.

Спасибо :)

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

Добрый день!

В какой переменной храниться версия клиента XRM террасофт?

Нравится

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

Совсем не ясна механика согласно которой, формируются поля с гиперссылками на связанные с ними объекты (карточки их редактирования).

Т.е. вот мы открываем реестр с объектами созданного нами раздела выводим колонки, одна из них (текстовая) - будет выводиться как гиперссылка на сам объект но визуально содержать свое значение.
Как и где это устанавливается ?

Если где либо вставляется справочное поле, то элементы выбираемые в нем - отображаются как гиперссылки в displayValue которых содержится значение конкретной колонки, почему именно ее, как это настраивать ?

Далее в деталях часто выводятся какие либо колонки, и хочется чтобы они были гиперсылками на карточку объекта связанного с деталью... как этого добиться, почему одни поля гиперссылки другие - нет ?

Нравится

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

Сам отвечаю на свой вопрос,
За это отвечает поле "Отображаемое значение" в доп.настройках объекта, секция "Системные настройки"


Важно: Именно объекта - корневого элемента в дереве, а не его колонок

А вот теперь вопрос...
Можно ли все таки управлять сим на уровне схем (карточки раздела)
В исходных кодах было обнаружено свойство в values конфигурационном объекте вьюхи

"values": {
		"itemType": this.Terrasoft.ViewItemType.HYPERLINK,
                 ...

Может быть это оно ?

юзкейс который нужен:
Допустим у нас есть сущность с каким-то номером, пусть это будет сферический в ваккуме "Тендер"
У объекта есть поля "Номер тендера" и "Наименование".
Так вот на уровне объекта в "Отображаемое значение" мы устанавливаем "Номер тендера"
для того чтобы во всех справочных полях системы которые ссылаются на этот объект во въюхе гиперлинк-поля отображаемым значением (displayValue) был "Номер тендера"
А вот в само реестре объекта, колонка "Номер тендера" - скрывается за ненадобностью, но выводится колонка "Наименование", и вот конкретно в реестре хочется чтобы оно выводилось гиперлинком, как выводится поле "Номер проекта".
Надеюсь смысл понятен.

"Севостьянов Илья Сергеевич" написал:Надеюсь смысл понятен.

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

define("UsrSchema1Detail", [], function() {
 return {
  entitySchemaName: "UsrTest",
  details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
  diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
  attributes: {
  },
  methods: {
   init: function() {
    this.callParent(arguments);
    document.scope = this;
   },
   getIsLinkColumn: function(entitySchema, column) {
    if (column.columnPath === "UsrString") {
     return true;
    }
    return this.callParent(arguments);
   },
   addColumnLink: function(item, column) {
    this.callParent(arguments);
   },
   linkClicked: function(recordId, columnName) {
    if (columnName === "UsrString") {
     console.log("UsrString column clicked! and recordId is " + recordId);
    }
    this.callParent(arguments);
   }
  }
 };
});

"Максим Шевченко" написал:текстовую колонку "UsrString" делаю ссылочной

вот это не понятно как вы делаете ?
Где этот diff или генератор с "itemType": this.Terrasoft.ViewItemType.HYPERLINK

Далее... гиперссылочное поле оно же в сути должно содержать href т.е. при наведении на А-тег должны быть все браузерные "Копировать ссылку" и "Открыть в новой вкладке" и т.д. работать
А как-же это методом обработаешь... а как ссылку формировать, а куда ложить ?
Какая-то не гиперссылка получается а ее полу-имитация.

так... немного начинаю разбираться

   getIsLinkColumn: function(entitySchema, column) {
    if (column.columnPath === "UsrString") {
     return true;
    }
    return this.callParent(arguments);
   }

Вот это, вы замещаете метод, который я так понимаю при построении UI вызыватеся для каждой колонки, а результат его выполнения определяет будет-ли элемент гиперссылочным полем, и разбавляете его логику, возвращая true в специально определенном случае с именем колонки UsrString
так..

   addColumnLink: function(item, column) {
    this.callParent(arguments);
   },

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

Вы обрабатываете клик... встает вопрос, а как же клик по ссылке от браузера (или там вообще в итоге не будет ссылки в понятии тега A)?
Или может он прерывается на уровне приложения ? (клик по ссылке)
Если мне непосредственно нужен переход по целевой ссылке (к связанной сущности), мне надо руками openCardInChain реализовывать, или есть другой подход ?

"Севостьянов Илья Сергеевич" написал:вот это, что это за метод ?

Метод из, GridUtilitiesV2 замещение не нужно, но может быть полезен для формирования браузерного линка, на случай если будут открывать через контекстное меню, см. FileDetailV2
"Севостьянов Илья Сергеевич" написал:а как же клик по ссылке от браузера

прерывается
"Севостьянов Илья Сергеевич" написал:openCardInChain

если в рамках bpmonline, то openCardInChain, либо переходом по линку в формате:
http://сайт/0/Nui/ViewModule.aspx#CardModuleV2/AccountPageV2/edit/40594…

"Максим Шевченко" написал:Метод из, GridUtilitiesV2 замещение не нужно, но может быть полезен для формирования браузерного линка

Т.е. я так понимаю именно в этом методе надо формировать линк, чтобы он был в теге A целевого поля/колонки ?
его нужно возвращать в return или куда-то устанавливать ?

"Севостьянов Илья Сергеевич" написал:его нужно возвращать в return или куда-то устанавливать ?

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

Спасибо, за подробный ответ.

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

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

Добрый день, сегодня ночью BPMonline обновилась до версии 7.10 и перестала работать авторизация: 403 - Forbidden: Access is denied. You do not have permission to view this directory or page using the credentials that you supplied.
Раньше осуществляли авторизацию по примеру из данной темы (https://community.terrasoft.ru/forum/topic/9613).
Можете, пожалуйста скинуть пример авторизации на php c добавлением CSRF-токена в заголовок запроса.

Нравится

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

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

Готового запроса нет - его нужно писать. Если у вас получится, пожалуйста, поделитесь.

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

$file = "cookie.txt";
$lines = file( $file ); 
$str =  $lines[6]; 
$prefix = "BPMCSRF";
$index = strpos($str, $prefix) + strlen($prefix);
$token = trim(substr($str, $index));

и добавили в заголовок:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
		'BPMCSRF:' .  $token,
        'Content-Length: ' . strlen($json))
);

После обновления необходимо теперь добавить CSRF токен
Есть пакет который уже предоставляет интерфейс для BPM

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

добрый день.

обнаружили проблему, может кто-то сталкивался и подскажет.

мы интегрируемся с bpm online по API. примерно неделю назад перестала работать выборка данных из системы (при этом логин работает).

отдает 403 ошибку, а именно:

403 - Forbidden: Access is denied.

You do not have permission to view this directory or page using the credentials that you supplied.

есть подозрение что bpm online обновился и не обновил документацию как к нему обращаться.

спасибо заранее

Нравится

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

Добрый день!

Техподдержка прислала набор ссылок для последовательного обновления до 7.10.0.

До 7.9.0.1228 обновления проходили без видимых проблем. После попытки обновления с 7.9.0.1228 до 7.9.1.3284 вывалилась ошибка. Может быть какая-то промежуточная конфигурация/версия пропущена? Подскажите, кто что знает, плиззз.

Нравится

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

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

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

Логи прикрепил

"Андрей Шеленговский" написал:вывалилась ошибка.

"Ошибка: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information."

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

"Варфоломеев Данила" написал:
Андрей Шеленговский пишет:

вывалилась ошибка.

"Ошибка: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information."

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


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

Спасибо, Данила!

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

Хотелось бы реализовать такую деталь, которая будет отображать некоторый набор информации, без возможности взаимодействия (создания/удаления), просто демонстрация данных, причем не хочется раздувать базу создавая под это дело реестрище.
Хочется при инициализации детали - сделать запрос, получить данные из которых сформировать несколько записей и отобразить их в этой детали, это возможно ?
Как бы виртуальные, динамические записи реестра в детали...
Просто предыдущий опыт показывает что добавление записей в реестр детали - напрямую связано с записью в БД, некий объект-реестр. Как собственно и первичное ее отображение связано с чтением из БД объекта-реестра.

Нравится

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

Добрый день, Илья!

К сожалению, реализовать такую деталь Вы не сможете, так как в любом случае деталь завязана на какой-то объект, то есть на таблицу в БД. Рекомендую посмотреть в сторону детали Средства связи контакта, она формируется динамически, возможно это поможет решить Вашу бизнес-задачу.

"Севостьянов Илья Сергеевич" написал:отобразить их в этой детали, это возможно ?

Создать коллекцию, в коллекцию ложить данные (каждая строка - baseviewmodel), выбранные esq запросом, всю коллекцию биндить в ContainerList, написать ручками генератор ряда, натянуть стили.
Не Grid, конечно, но тоже сойдёт

Добрый день, Илья! Получилось ли у вас это выполнить?

Добрый день. Что Вы имеете в виду, получилось ли посмотреть на деталь средств связи? Вы сами можете это сделать, это схемы BaseCommunicationDetail, AccountCommunicationDetail или ContactCommunicationDetail. 

Прошу прощения за неточность вопроса. Он предназначался Севостьянову Илье. Интересует возможность отобразить некоторый набор информации в табличном виде (как в детали), который не хранится в базе данных, а получен, например, с помощью веб-сервиса.

Как  вариант, можно использовать обычную деталь, но использующую объект на основе view. Запрос в базу будет, но данные не хранятся в одной конкретной таблице, а берутся из нескольких или вычисляются. Можно, наверно, и к веб-сервису обратиться из скриптов на стороне сервера MS SQL.

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

В нашей конфигурации есть редактируемый реестр (он уже содержит некоторый набор записей), в котором реализована возможность добавления информации в некоторое поле путем считывания штрих-кода сканером. Сейчас для того, чтобы выполнить переход на новую строку мне нужно брать мышку и устанавливать фокус на новой строке.
Каким образом можно сделать так, чтобы переход на новую строку выполнялся либо автоматически при заполнении нужно поля, либо по нажатию на некоторую кнопку на клавиатуре, например, на Enter?
И можно ли вообще такое реализовать в версии 7.10?

Нравится

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

"Алла Савельева" написал: выполнялся либо автоматически

Можно поковыряться в ConfigurationGrid, метод onUpdateItem. Вызывается при каждом изменении яйчеек ряда. Но там гемор, ибо функция вызывается по 3-4 раза + надо брать из item.changedValues нужную колонку, смотреть не изменена ли она, накладывать кучу фильтров + сложно будет изменить запись вручную(при каждом изменении выбранного поля будет создавать новый элемент) и т.п.

"Алла Савельева" написал:либо по нажатию на некоторую кнопку на клавиатуре, например, на Enter

Вот тут можно. Тестил на детали Продукты в карточке заказа. Добавляем свой листенер и обработчик в ConfigurationGrid и биндим свою функцию в детали. Итого если изменим какую-то яйчейку в ряде, нажмём ENTER, создаётся новая запись. Схемы прикладываю.

Добрый день, Алла!

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

Илья)

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

Данила,

спасибо, что поделились своими наработками - будем пробовать!:wink:

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

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

Возникла задача: при публикации сообщения в Ленту в карточке обращения, выполнять определенные действия.

Делаю бизнес-процесс, у которого в качестве входного элемента - сигнал, который срабатывает на добавление записи в объект "Сообщение\комментарий". Далее, как я понимаю, мне надо указать Id_Схемы, в которой было опубликовано сообщение (у меня это id раздела Обращение). Указываю Id_Схемы в фильтре входного элемента. Процесс не срабатывает.
Может кто-нибудь подскажет что я делаю не так? Как отловить только нужные мне сообщения?

P.S.: если указываю этот же Id_Схемы при вставке комментария в ленту из процесса (через элемент добавления данных -> в поле Схема указываю Id_Схемы), все отлично отрабатывает

Нравится

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

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

Нужно указывать не Id схемы, а UId.
UId можно получить следующим запросом:

select distinct UID from SysSchema
where Name = 'Case' /*Указываем название схемы*/
and ExtendParent = 0 /*Указываем, что нужна незамещенная схема*/

В разных конфигурациях Id схемы будет разным, но UId будет совпадать.

Также обращаю внимание, что если сообщение является комментарием, тогда у него будет заполнено поле ParentId, а поле EntitySchemaUId останется пустым.

"Демьяник Алексей" написал:Нужно указывать не Id схемы, а UId.

Доброе утро. Спасибо, указала UId вместо Id_Схемы и получилось отловить комментарий, который был опубликован в обращении!

Но теперь возник другой вопрос - а как мне узнать в каком именно обращении было опубликовано сообщение?
Пробовала элементом "чтение данных" прочитать сообщение в ленте и у него поле "Экземпляр объекта" и потом найти обращение, у которого Id = экземпляр_объекта (который я получила при чтении данных). Но что-то не срабатывает.

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

Скриншоты чтений данных предоставьте, пожалуйста.

"Демьяник Алексей" написал:Скриншоты чтений данных предоставьте, пожалуйста.

Добрый день. Скриншот прикрепила.

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

Такая реализация будет работать, если было добавлено обычное сообщение, которое не является комментарием другого сообщения.

Если сообщение является комментарием, тогда необходимо дополнительно прочитать значение поля "Родительское сообщение". Сообщение является комментарием, если:

  1. У сообщения не заполнено поле "Экземпляр объекта"
  2. У сообщения заполнено поле "Родительское сообщение"

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

Также хочу обратить внимание, что для раздела "Обращения" есть два объекта, которые хранят обычные сообщения и портальные сообщения. В зависимости от бизнес-задачи необходимо вычитывать данные из разных объектов.

"Демьяник Алексей" написал:Также, такой процесс будет запускаться при добавлении сообщения в любом разделе системы (зависит от настроек стартового сигнала).

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

"Демьяник Алексей" написал:Такая реализация будет работать, если было добавлено обычное сообщение, которое не является комментарием другого сообщения.

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

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

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

Случайно получилось так что был запущен рекурсивный БП, и теперь в журнале висит 100 копий процесса в стадии "Выполняется".
Через множественный выбор и "Остановить выполнение" - приложение просто виснет.
Перезапуск пула и сайта в IIS - тоже

Как быть ?

Нравится

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

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

Можно экспортировать схему БП из конфигурации (т.е. сделать копию), после этого удалить схему БП из конфигурации - записи из журнала также будут удалены.

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