Доброго времени суток, коллеги.

Вопрос: Мне нужен сложный справочник c такими полями, как его правильно сделать в системе?

[Название]
[Описание]
[Тип договора] = справочник типов договоров
[Страна] = справочник стран
[Шаблон документа] = шаблон документа

Я пытался сделать в разделе Справочники отнаследовавшись от Базового справочника, но ничего не получилось.

Нравится

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

Доброго.
Такие темы уже поднимались:
http://www.community.terrasoft.ru/forum/topic/13139

А в каком справочнике он должен отображаться? В "Тип договора"?

Это наш справочник, в котором описываются типы договоров.
Уже реализовал, спасибо всем.

Илья, я читал эту тему.
У меня не двухуровневый справочник, а просто полей там больше.
Я в начале описал объект, в конфиге, а затем по нему создал справочник. Все получилось элегантно.

Показать все комментарии
Технические вопросы
7.x

Доброго времени суток, коллеги.

Есть такой кейс:
В разделе "Договоры" добавить Действие "Печать", которое соответственно будет генерировать документ на печать, из шаблона. Шаблоны документов могут быть разные, для каждого из них сделана соответствующая страница.

В код страницы добавил:

/**
 * Печать договора
 */
printContract: function() {
 ...
},
/**
 * Возвращает коллекцию действий карточки.
 * @protected
 * @overridden
 * @return {Terrasoft.BaseViewModelCollection} Возвращает коллекцию действий карточки
 */
getActions: function() {
  var actionMenuItems = this.callParent(arguments);
  actionMenuItems.addItem(this.getActionsMenuItem({
    Type: "Terrasoft.MenuSeparator",
    Caption: ""
  }));
  actionMenuItems.addItem(this.getActionsMenuItem({
    "Caption":  {bindTo: "Resources.Strings.PrintActionCaption"},
    "Tag": printContract,
    "Enabled": {"bindTo": "canEntityBeOperated"}
  }));
  return actionMenuItems;
}

И есть такая штука Terrasoft.configuration.mixins.PrintReportUtilities, как ее прилепить к распечатке соответствующего документа?

Нравится

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

Евгений, есть вопрос, чем Вас не устраивает реализация ПФ WORD в системе?
Воспользуйтесь готовым решением:

Илья, когда настраиваешь Печатную Форму, на возможность печати из рееста, то при выбранном документе и нажатии на появившуюся кнопку "Печать" он выводит все 4 типа документа, а не конкретно нужный тип. Мало того, что в задаче стоит привязка печати именно к списку "Действие".

Евгений, для реализации данной задачи, Вам необходимо видимость определенной печатной формы привязать к Id типа документа. Id текущего документа хранится в аттрибуте "ActiveRow" (this.get("ActiveRow")). Далее строите запрос к бд используя entitySchmaQuery. Id типа документа хранится в колонке "TypeId" в таблице документов. И затем на основании типа документа делаете нужную печатную форму активной или видимой.

Илья, спасибо. Но я сделал несколько по другому.
У меня эти шаблоны документов должны выбираться и по типу документа и по стране.
В общем, задачу решил путем создания промежуточного справочника.

Показать все комментарии
7.x
импорт данных из Exсel
Технические вопросы

Добрый день!

Есть ли примеры добавления действия (BPM7.6) "Загрузить средства связи" в разделе Контрагенты или любые другие аналогичные?

Нравится

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

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

Воспользуйтесь функционалом импорта данных из Excel в объект "Средство связи контрагента".

"Демьяник Алексей" написал:Воспользуйтесь функционалом импорта данных из Excel в объект "Средство связи контрагента".

Алексей, спасибо!
Но данный вариант не подходит. Нужно именно так как описано, а именно действие где-то в разделах, которое вызывает форму Импорта с предустановленным объектом...

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

Уточните, какого программного продукта касается Ваш вопрос?

Если вопрос касается bpm'online 7.6, то вы можете посмотреть реализацию на примере объекта 'Средство связи контрагента'.

Если вопрос относится к Terrasoft 3.4, то готовых примеров решения нет.
Вы можете реализовать его самостоятельно по аналогии с тем, как реализован обработчик кнопки [Выполнить импорт] в разделе [Интеграции].

"Савельева Алла" написал:

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

Уточните, какого программного продукта касается Ваш вопрос?

Если вопрос касается bpm'online 7.6, то вы можете посмотреть реализацию на примере объекта 'Средство связи контрагента'.

Если вопрос относится к Terrasoft 3.4, то готовых примеров решения нет.

Вы можете реализовать его самостоятельно по аналогии с тем, как реализован обработчик кнопки [Выполнить импорт] в разделе [Интеграции].


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

Вопрос по Sales7.6. К сожалению не могу найти реализацию загрузки чего-либо с помощью Действия. Как увидеть этот пример в объекте 'Средство связи контрагента'?

"AlexLS" написал:

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

Вопрос по Sales7.6. К сожалению не могу найти реализацию загрузки чего-либо с помощью Действия. Как увидеть этот пример в объекте 'Средство связи контрагента'?

--

Terrasoft 3.4.1.171 (&& .84 &&BPM.7.6)

SQL Server 10.50.2500.0

Microsoft Windows NT 6.1 (7601) x64 en

Chrome 48.0.2564.116 m

Opera 35.0.2066.68

Firefox 44.0.2

Как вариант:
1. Создаете действие в разделе
2. Замещаете старицу импорта и заполняете поля согласно бизнес-задаче.
3. Копируете url окна импорта и вешаете на кнопку атрибут/метод, который откроет новую вкладку в браузере.

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

Доброго времени суток!
Сервис Террасофта под названием SaveWebFormLeadData использует данные со стороны клиента и отправляет на их ссылку обработки.
Интересует возможность отправки этих же данных со стороны сервера, например cURL ( PHP ).

С уважением, Сергиенко Николай

Нравится

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

Здравствуйте, Николай!

Этот вес сервис используется для сохранения лидов с вебформ в продукте Marketing. Какую задачу Вы хотите решить таким образом?

Здравствуйте, Алексей!

Нужно отправлять через Лиды информацию с помощью утилиты CRON

Показать все комментарии
7.x
импорт данных из Exсel
планирование
Технические вопросы

Добрый день!

Очень нужен пример реализации загрузки планов по клиентам из эксельки.

Возможно любой другой пример (может есть реализация из "коробки")?

Нравится

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

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

Данная информация хранится в объекте "Элемент планирования". Единственная проблема - Id записи, по которой проводится планирование, хранится в поле "Значение элемента планирования". Это значение не получится импортировать с файла Excel.

"Демьяник Алексей" написал:Единственная проблема - Id записи, по которой проводится планирование, хранится в поле "Значение элемента планирования". Это значение не получится импортировать с файла Excel.

Алексей, спасибо за ответ! Ни разу, за свою жизнь, не встречал ничего невозможного! Трудно, сложно - да, но "не получится" - это не мой подход.

Надеюсь, есть коллеги, кто реализовывал подобные действия...

"AlexLS" написал:

Алексей, спасибо за ответ! Ни разу, за свою жизнь, не встречал ничего невозможного! Трудно, сложно - да, но "не получится" - это не мой подход.

Надеюсь, есть коллеги, кто реализовывал подобные действия...

Создайте объект, который будет дублировать поля объекта "Элемент планирования" и импортируйте в созданный Вами объект. Замените поле с типом Guid на обычное текстовое поле.

Сложность - организовать перенос и созданного объекта в объект "Значение элемента планирования". Таким образом можно будет реализовать.

"Демьяник Алексей" написал:Таким образом можно будет реализовать.

Спасибо, Алексей! Надеюсь удастся воплотить в реальность такой замысел.
Пока мой уровень "новичка" не позволяет осознать сложность данной реализации.

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

Добрый день!

Есть ли примеры добавления вкладки (возможно через Terrasoft.sdk.RecordPage.addColumnSet ) в мобильном приложении 7.X и настройки правил видимости, к примеру: если тек.дата больше даты начала Активности и пользователь есть в участниках Активности...

Нравится

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

Добрый вечер, Алекс.

Мобильное приложение не поддерживает несколько вкладок на странице просмотра/редактирования.
Если вам необходимо делать видимой группу колонок в зависимости от значений полей записи,
то можно добавить в пользовательскую схему примерно такой код:

Ext.define("CustomContactPreviewPage.Controller", {
    override: "ContactPreviewPage.Controller",
 
    onLoadRecord: function(record) {
        this.callParent(arguments);
        var view = this.getView();
        var panel = view.getPanel();
        var account = record.get("Account");
		var accountId = account && account.getId();
        var panelItems = panel.getItems();
        for (var i = 0, ln = panelItems.getCount(); i < ln; i++) {
            var item = panelItems.items[i];
            if (item.id === "Contact_Preview_ContactCommunicationDetailEmbeddedDetail_ColumnSet") {
                var isItemHidden = item.getHidden();
                if (accountId === "5aa4ace7-bfef-4fd0-ab0c-b7d5711d9e27") {
                    if (!isItemHidden) {
                        item.setHidden(true);
                    }
                } else if (isItemHidden) {
                    item.setHidden(false);
                }
            }
        }
    }
});

*пример для версий 7.6
либо версии 7.7 с сис.настройкой MobileApplicationMode = UIV1

"Кривонос Максим" написал:Если вам необходимо делать видимой группу колонок в зависимости от значений полей записи

Спасибо, Максим!

Именно группа колонок внутри ColumnSet. Но есть нюанс, в item.id вижу "ext-tscolumnset-38" (цифры всегда разные) и оно никак не связано с объявленным title:

Terrasoft.sdk.RecordPage.addColumnSet("VisitActions", {
    name: "MerchandisingStandardsColumnset",
    position: 2,
    title: "VisitActionsDetailConfig_MerchandisingStandardsColumnset_title"
},
[

Попробуйте использовать это свойство

item.config && item.config.name

"Кривонос Максим" написал:Попробуйте использовать это свойство

Максим, огромное спасибо!

Показать все комментарии
Web services/Веб-сервисы
Технические вопросы
7.x

Доброе утро, коллеги.

Есть вопрос.

Сделал тестовый вэб-сервис , по примеру из https://community.terrasoft.ru/forum/topic/9811 , но у меня что-то не сработал.
В логах результат:

При выполнении запроса возникла ошибка  статус ответа: 404 (Not Found) url запроса: [url]/0/rest/RegistrationService/TestServiceMethod метод: POST данные запроса: test data1

all-combined.js:462:345
.log() all-combined.js:462
.error() all-combined.js:462
.logResponseError() all-combined.js:722
.validateResponse() all-combined.js:723
.request/a.callback() all-combined.js:721
.callback() all-combined.js:1
.onComplete() all-combined.js:1
.onStateChange() all-combined.js:1
Ext.Function.bind/() all-combined.js:1

Код регистрационного сервиса:

namespace Terrasoft.Configuration.CommandLineService
{
  using System;
  using System.Collections.Generic;
  using System.Security;  
  using System.ServiceModel;
  using System.ServiceModel.Activation;
  using System.Web;
  using Newtonsoft.Json;
  using Terrasoft.Common;
  using Terrasoft.Web.Common;
  using Terrasoft.Configuration.RegistrationHelper;
  using Terrasoft.Core;
  using Terrasoft.Core.Configuration;
  using Terrasoft.Core.DB;
  using Terrasoft.Core.Scheduler;
  using System.CodeDom.Compiler;
  using System.ServiceModel;
  using System.ServiceModel.Web;
  using Terrasoft.Core.Entities;
  using Terrasoft.Core.Store;
  using System.Data;
  using System.Collections.Generic;

  #region Class: RegistrationService
 
  [ServiceContract]
  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
  public class RegistrationService{

    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    public string TestServiceMethod(string data) {
      var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
      string key = string.Format("ExportFilterKey_{0}", Guid.NewGuid());
      userConnection.SessionData[key] = data;
      return key;
    }
  }

  #endregion
}

код запроса к нему, на клиенте:

// тест
Terrasoft.AjaxProvider.request({
  url: Terrasoft.workspaceBaseUrl + "/rest/RegistrationService/TestServiceMethod",
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  method: 'POST',
    jsonData:  'test data',
    callback: function(request, success, response) {
    if (success) {
      console.log(response.responseText);
    }
  },
  scope: this
});

Нравится

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

Мой промах, забыл опубликовать. Сделал публикацию и получил теперь:

POST [url]/0/rest/RegistrationService/TestServiceMethod 400 (Bad Request)

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

Такая ситуация связана с тем, что по умолчанию веб-сервис требует авторизции. Можно реализовать ее в клиеннтском приложении или создать сервис, доступный без авторизации. Информацию о том, как это сделать добавляю во вложение.

Также обратите внимание, что в большинстве случаев для обмена данными с системой удобнее использовать не веб сервис, а протокол Odata.

Средства интеграции bpm'online достаточно подробно описаны в документации по разработке, раздел "Примеры решения типовых задач" - "Рекомендуемые средства интеграции".

Показать все комментарии
email mail почтовый клиент
Технические вопросы
7.x

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

Настраиваю почтовый ящик.
Если же регистрирую на Email вида myemail@gmail.com - то после того как надал доступ к ненадежным приложениям и enable Imap - все создалось и подключилось.

Если же регистрирую на корпоративную почту (тоже на Gmail) вида myemail@mycompany.ru и проделываю те же шаги - всеравно не пропускает и пишет неверный логин или пароль или не настоенныя доступ ненадежным приложениям.

Как можна решить эту проблему?
Спасибо!

Нравится

1 комментарий
лендинг
Технические вопросы
7.x

Здравствуйте. Не работает Лендинг.
Если перейти по ссылке serviceUrl:

https://goldcoachcrm.bpmonline.com/0/ServiceModel/GeneratedWebFormServic...

то выдает ошибку Method not allowed.

Месяц назад все работало, а теперь что-то перестало. Что это может значить и как это починить? Спасибо!

Нравится

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

Добрый день!

Для решения этого вопроса необходимо заменить ссылку в коде лендинга (на сайте, где расположена форма)
С ссылки:
http://call-center.extremehealth.ru/create-lead.js ( в коде лендинга указана сслыка: https://webtracking-v01.bpmonline.com/JS/create-lead.js)
На ссылку:
http://ajax-lib.bpmonline.com/marketing/7.6.0/create-lead.js

Приятной работы!

Здравствуйте! После внесенных правок Лендинг заработал. Но почемуто создается сразу по ДВА единтичных контакта в карточке контакты. А если убрать галочку в Лендинге (создавать контакт) то вообще не создает ни одного. Как это починить? Спасибо!

Добрый день!

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

Приятной работы!

Євген, добрий день!

 

Чи доданий у вас повністю код:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

<script src="https://webtracking-v01.bpmonline.com/JS/track-cookies.js"></script>

<script src="https://webtracking-v01.bpmonline.com/JS/create-object.js"></script>

<script>
?

 

Показать все комментарии
бизнес-процесс
ошибка
Технические вопросы
7.x

Здравствуйте!
Интересует такой момент.
Вот допустим есть бизнесс процесс и в нем есть поле чтение данных по некоторому условию. Если в ходе выполнения процесса этот элемент не находит соответствующюю условиям запись, то в журнале процессов выдает ошибку и процесс останавливается.

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

Спасибо.

Нравится

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

Добрый день!
Для таких случаев используйте условные потоки и дополнительные проверки на наличие записей.
Исключения можно обрабатывать только в элементе Задание-сценарий.

А как я могу сделать проверку в условном потоке, если я проверяю допустим счет. Я читаю данные счет и по названию фильтрую. Но если такого нет, то Читать данные выдает ошибку и все. Процес останавливается.

Добрый день!

Как вариант:
После чтения данных добавить условный поток.
[#Читать данные. Id#] != Guid.Empty

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