QR-код
7.14
Studio_Creatio_enterprise_edition

ВРМ запрашивает доступ к камере и микрофону и пользователи как правило его дают. Хочу этим воспользоваться для распознавания QR-кодов.

Например, кнопка в разделе "добавить элемент из QR-кода" - открывается окошко с видом камеры, пользователь подносит QR-код, тот сканируется, распознается и создается новый элемент раздела по параметрам из расшифрованного QR-кода.

Кто-нибудь делал что-нибудь подобное? Есть примеры или , может быть, компоненты? Пусть и платные?

Нравится

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

На английском Community спрашивали, говорят, сейчас нет, но завели идею для будущих версий.

 

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

 

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

 

В этом случае потребуется обращение напрямую к серверу, что вызывает вопрос об авторизации до момента открытия запроса из QR-кода. Или как-то разработать дополнительную логику определённой мобильной карточки, отрабатывающей при её открытии и учитывающей значения полей из своего URL.

Кстати, сделал на библиотеке instascan.js. Кому надо, обращайтесь.

 

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

Добрый день,

При попытке нажать на значок трубки выходит сообщение - "Отсутствует подключение к серверу телефонии. Возможно не настроены параметры соединения или сервер телефонии недоступен". Через Infinity Phone звонки идут. Все настройки сделаны согласно инструкции. Где можно точнее узнать в чем причина

Нравится

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

Рустем, обратите ещё внимание на эту статью.

Александр, это я читал и как бы все сделано. Если войти в BPM как Supervisor и нажать F12, то можно увидеть сообщение об ошибке -

all-combined.js:7 2020-04-14 19:02:30,0430 [Telephony] System.Exception: FailedToConnect ---> Terrasoft.Messaging.Common.TelephonyException: FailedToConnect ---> CxConnector.LogonException: Logon failed.  Can not connect to server.

   в CxConnector.CxConnector.CheckLogonResult(LogonResult logonResult, InitializeResult initializeResult, String ErrorDescription)

   в CxConnector.CxConnector.InternalConnect(String ConnectionString, Boolean bDirectLogon, LogonResult& LogonResult, InitializeResult& InitializeResult)

   в CxConnector.CxConnector.InternalConnect(String ConnectionString, Boolean AlwaysKeepConnection)

   в AgatInfinityConnector.BaseConnector.Connect(String connectionString_, Boolean alwaysKeepConnection_)

   в Terrasoft.Messaging.Infinity.InfinityConnectionFactory.ReConnectWithTimeOut(IAgatInfinityConnector connector, String connectionString)

   --- Конец трассировки внутреннего стека исключений ---

Проверьте доступность сервера на который ссылается в сообщении с ошибкой, так же проверьте доступность сервера по порту 2013 и проверьте, чтобы в списке служб Windows была запущена служба TerrasoftMessagingService. Также служба интеграции разрабатывается конкретно под версию Infinity, у Вас версии TerrasoftMessagingService и Infinity могут не соответствовать. Нужную версию по запросу предоставляет поддержка.

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

Александр, поясните пожалуйста вот этот параграф из приведенной вами статьи -

"На стороне bpm'online профиле в странице настройки телефонии указать линию пользователя, у которого есть роль «Оператор» (например, Оператор5), для этого пользователя надо включить клиент с ролью Оператор." Не понята последняя часть -" ...

для этого пользователя надо включить клиент с ролью Оператор."

 

 

Там дальше написано: «Все описанные роли должны быть назначены пользователю на стороне АТС (Infinity)».

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

Добрый день!

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

Скажите, а как я могу управлять (изменить) под каким пользователем запускается бизнес-процесс по таймеру?

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

Нравится

3 комментария
Лучший ответ

Владимир Соколов,

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

Насколько я знаю никак)

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

а если процесс будет сохранён другим пользователем, то не запустится от его имени?

 

Владимир Соколов,

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

Показать все комментарии
ICompositeObjectList
ICompositeObject
Business Process
UserTask
7.15
Studio_Creatio_enterprise_edition

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

Задача:

Необходимо создать User Task, в которой создать объект ICompositeObjectList и для последующей передачи значения в другую User Task.

 

Данный пример не работает:

1 SoureCode:

namespace JustTestCompositeObject
{
    using System;
    using System.Collections.Generic;
    using Terrasoft.Common;
    public class A : ICompositeObject
    {
        internal string test;
        public bool TryGetValue(string key, Type valuetype, out object value) { value = default; return true; }
        public bool TryGetValue<TValueType>(string key, out TValueType value) { value = default; return true; }
    }
    public class TestCompositeObjectList : List<A>, ICompositeObjectList<A>
    {
        void ISerializableObject.Serialize(DataWriter dataWriter) { }
        void ISerializableObject.Deserialize(DataReader dataReader) { }
    }
    public class test
    {
        public static ICompositeObjectList<ICompositeObject> GnerateTestList()
        {
            TestCompositeObjectList list = new TestCompositeObjectList();
            list.Add(new A { test = "test1" });
            list.Add(new A { test = "test2" });
            return list;
        }
 
        public static string PrintTest(ICompositeObjectList<ICompositeObject> list)
        {
            string output = "";
            if (list == null)
            {
                output = "this collection is null";
            }
 
            foreach (A v in list)
            {
                output += v.test + " ";
            }
            return output;
        }
    }
}

UserTask1:

list = test.GnerateTestList();
return true;

, где list задан как тип: Serializable list of composite values

 

UserTask2:

output=test.PrintTest(list);
return true;

, где list имеет тип: Serializable list of composite values; output имеет тип: string

 

Процесс выглядит вот так:

Изображение удалено.

На Auto-generated page выводится output из UserTask2 

Конфигурация успешно компилируется.

 

Пробовал прописывать Usings на необходимый namespace в свойствах процесса, не работает...

 

Вещи типа: 

Изображение удалено.

не работают и не возвращаются значение

 

В Visual Studio все ок работает в конфигурации при передачи значений через процесс - нет.

 

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

 

Пожалуйста подскажите как можно решить подобную задачу.

Нравится

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

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

А сейчас скрипты работают автономно и обмениваются значениями с параметрами через Get и Set.

Get&lt;T&gt;(string path)
Set(string path, T value)

Получится ли таким образом передать объект ICompositeObjectList, нужно экспериментировать, а по поводу возможности существования внутри БП класса с вызовом статических методов, сомневаюсь.

 

Больше об этом можно почитать тут и тут, а также тут и тут.

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

Здравствуйте, появилась следующая задача:

В детали есть поле цены (float), которое заполняется автоматизированно. При значении 0 нужно отображать некий текст вроде "Нет данных", "Н/Д" или "N/A", в целом конкретная формулировка не важна. Каким образом это можно сделать?

Нравится

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

Посмотрите в этой теме, может быть это то, что вам нужно https://community.terrasoft.ru/questions/placeholder

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

К сожалению нет. Плейсхолдер работает только в случае отсутствия контента в инпуте. У меня же а) не инпут, а просто поле в гриде; б) поле не пустое, а содержит значение "0,00".

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

Если поле с ценой заполняется только программно, то можно сделать его не числовым, а текстовым и прямо писать либо число, либо нужное сообщение. Либо в объекте сделать два разных поля — числовое для учёта и текстовое для отображения, заполняя оба одновременно.

Показать все комментарии
виджет
итоги
html
7.13
Studio_Creatio_enterprise_edition

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

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

Как создать виджет с произвольным html разобрался (использовал вот этот пример https://community.terrasoft.ru/questions/vidzet-knopka), а вот как передать в этот виджет какой-нибудь параметр в виде JSON не совсем понятно.

 

Нравится

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

В примере виджета в академии у него есть параметры в JSON:

И в коде виджета создаются эти параметры:

columns: {
    // Название валюты.
    CurrencyName: {
        type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
        dataValueType: Terrasoft.DataValueType.TEXT,
        value: null
    },
    // Значение валюты.
    CurrencyValue: {
        type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
        dataValueType: Terrasoft.DataValueType.FLOAT,
        value: null
    }
},

 

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

Приветствую!

Подскажите каким образом можно перенести текст из из поля "Тема" в "Описание".

Хотим избавиться от строкового поля "тема" в карточке. В настоящий момент в системе много заполненных записей с названием темы.

Каким образом лучше перенести эти значения? Кто нибудь сталкивался с подобным вопросом?

Нравится

3 комментария
Лучший ответ

Легче всего написать SQL (названия объекта и полей примерные)  UPDATE UsrObject SET Description = Subject

 

Доступ к БД есть с помощью дополнения на Marketplace

Вижу 2 варианта:

1. Бизнес-процессом

2. Напрямую в БД.

Еще зависит от того стоит ли сохранять существующее значение поля Описание или просто заменять на значение поля тема.

Я бы выбрал второй вариант, если есть доступ к БД

Легче всего написать SQL (названия объекта и полей примерные)  UPDATE UsrObject SET Description = Subject

 

Доступ к БД есть с помощью дополнения на Marketplace

Владимир Соколов, Алексей Следь, - спасибо за ответ!

 

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