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

мой код выглядит сейчас вот так

}/**SCHEMA_BUSINESS_RULES*/,
        methods: {
            init: function() 
            {
              this.callParent(arguments);
              this.sandbox.subscribe("NeedUpdatedGrid", this.myNameMethod, this);
            },
            myNameMethod: function(arguments) {
                if(this.get("Id") === arguments){
                    alert("все сработало");
                    this.reloadEntity();
                    var D = new Date(this.get("UsrDatetimeStart"));
                      D.setDate(D.getDate() + 31);
                      alert(D);
                }
                
            }
        }, 

Нравится

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

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

 

Представим, что есть колонка типа Date с кодом UsrCustomDate. Представим, что есть задача при открытии страницы проставлять в этой колонке (вне зависимости от текущего значения в этой колонке) дату 15.02.2022. Тогда код будет такой:

onEntityInitialized: function() {
				this.callParent(arguments);
				this.set("UsrCustomDate", new Date(2022,1,15));
			},

Все дело в конструкции new Date(2022,1,15) - она создаст объект в котором запишет дату, которую мы передали аргументом в конструктор. Если в Вашем случае это нужно делать после получения сообщения от бизнес процесса, то в сообщении можно передать необходимые параметры строкой (или несколькими строками), а потом в методе-обработчике полученного сообщения на клиенте распарсить полученное с сервера в результате БП сообщение и в конструктор Date записать нужные данные, а потом через this.set проставить их колонке типа Date.

 

С уважением,

Олег

Дата не изменяется, но ивент вызывается при нажатии "создать запись" и я проверя дату в alert она правильная но не изменяется  можно ли сделать чтобы он срабатывал после выполнения первой активности скажем оформления договора. и где можно посмотреть доступные ивенты? Спасибо большое

или подскажите где посмотреть ивенты доступные, я искал в доке не нашел!

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

Добрый день. Может кто сталкивался с таким вопросом о применении ES6 в проекте? Думаю, что всем известно о ситуации с поддержкой браузеров новых форматов ES. То, что IE тяжело работает с ES6 и т.д., в связи с чем возникает вопрос о использовании такой штуки, как Babel, который так сказать конвертнет в поддерживаемый синтаксис.
Пытался ли кто прикрутить Babel в проекте?
Или же может есть идеи какие-то, как сделать это?

Нравится

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

Добрый день!
E11 не поддерживает стандарт ES6.

Для того чтобы код написанный с применением фич ES6 работал, выполняются следующие приемы: добавление полифилов и транспайлинг.
Полифилы имитируют классы и дополнительные методы к существующим классам (например добавляют класс Promise).
Транспайлинг - процесс преобразования кода в формате ES6 в формат ES5 (например дает поддержку таких конструкций как лямбды, импорты, экспорты и т.д.)
В ядровой части системы (которая потом собирается в all-combined) используется библиотека полифилов corejs и транспайлинг с помощью инструмента babel. Соответственно в коде для ядра могут использоваться фичи ES6. 
В конфигурации же ситуация другая, потому что транспайлинг кода не применяется, но так как библиотека corejs уже подключена там можно использовать некоторые фичи, например такие классы как Promise (которые не видоизменяют синтаксис языка и соответственно не требуют транспайлинга).

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

Добрый день! Пытаюсь реализовать маску ввода телефона при помощи jQuery и InputMask, т.к. MultiMaskEdit некорректно отрабатывает на смартфонах Android. Подключил клиентские модули с кодом библиотек. Вне Creatio данные библиотеки проверены и работают. В Creatio же получаю следующую ошибку: Uncaught TypeError: $(...).inputmask is not a function

Использую следующий код:

define("HbkNewTrustNumberPage", ["HbkjQuery","HbkInputMask"], function() {
	$(document).ready(function() {
		$("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el").inputmask("+\\9\\96 999999999");
	});
	return {
		entitySchemaName: "",
		attributes: {},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/

 

Нравится

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

Здраствуйте, рекомендую для реализации валидации поля воспользоваться инструкцией по ссылке:https://academy.terrasoft.ru/docs/developer/interface_elements/page/pol…

Алёна Доля,

Добрый день! Валидация и маска ввода, это немного разные вещи. Меня интересует конкретно маска ввода.

Шарафутдинов Фаиль Русланович,

Здраствуйте, в таком случае реализацию рекомендую рассмотреть через DOMNodeInserted.
Добавить метод, в котором будет указываться маска для поля, и добавить его вызов в Init, например:
    setPhoneMask: function(that) {
                            $(document).bind("DOMNodeInserted", function(e) {
                        if ( $("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el")) {
                        $("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el").on("focus", function() {
                        $("#HbkNewTrustNumberPageHbkNewTrustNumberTextEdit-el").mask("+7(999)999-99-99", { autoclear: false, placeholder: "_" });
                          });
                        $(document).unbind("DOMNodeInserted");                      
                        }
                    });
                },

 

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

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

 

Кто-нибудь знает, возможно ли в модальное окно, описанное в данной статье, добавить детали?

Нравится

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

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

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

В методе схемы JS требуется сделать паузу.
Какие у вас используются методы?
Я пока нашёл вот такой подход.

wait: function (ms) {
    var start = new Date().getTime();
    var end = start;
    while (end < start + ms) {
        end = new Date().getTime();
    }
},

Вызов метода: this.wait(1000);

Нравится

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

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

В JS есть готовые функции таймера, куда параметром передают обработчик. См. статью.

Пример использования:

window.setTimeout(function, 1000);
function myFunction() {
  alert('Hello');
}

Аналогично и с регулярным запуском, вместо setTimeout написать setInterval.

А тут пример его использования в Creatio.

Спасибо за пример. Но пока не разобрался как быть с методом с параметрами.

// Вызовы.
setTimeout(this.foo1, 1000);
setTimeout(this.foo2("some"), 1000);
// Методы.
foo1() {
  console.info("foo1");  // есть ожидание
},
foo2(args) {
  console.info("foo2 with args");  // нет ожидания
},

 

Разобрался. Вот так будет вызов с аргументами и ожиданием.

let dt = new Date();
console.info("start: " + dt.getMinutes() + "." + dt.getSeconds() + "." + dt.getMilliseconds() + ".");
setTimeout(this.foo1, 1000);
setTimeout(this.foo.bind(this, "some"), 1000);
foo1() {
  console.info("foo1");
  let dt = new Date();
  console.info("foo1: " + dt.getMinutes() + "." + dt.getSeconds() + "." + dt.getMilliseconds() + ".");
},
foo2(args) {
  console.info("foo2(" + args + ")");
  let dt = new Date();
  console.info("foo2: " + dt.getMinutes() + "." + dt.getSeconds() + "." + dt.getMilliseconds() + ".");
},

 

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

Добрый день, какое свойство отвечает за сохранение с игнорированием обязательных полей на js
я знаю что есть такое на c# entity.save(false)
Мне надо нечто подобное

Нравится

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

Попробуйте 

this.save({isSilent: true});

 

Александр Тыра
не подходит(

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

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

Добрый день! Бьюсь уже 2 неделю и никак не могу найти информацию о том, как можно динамические регулировать количество полей на модальном окне, либо мини-карточке.

 

Задача: открывать модальное окно с параметрами из объекта Specification (Характеристика), что бы просто показать информацию из него.

 

Но проблема в том, что для каждой сущности, которая привязана к Характеристике необходимо в зависимости от типа данных выставить тип поля, а от количества этих сущностей - вывести поля.

Нравится

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

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

 

Как обходное решение, можно заранее создать несколько скрытых полей и программно показывать нужное их количество в зависимости от потребности. Но ведь Вам ещё нужно разных типов.

 

Либо, если нужно только смотреть, можно создать многострочное поле, где вывести в каждой строке название и содержимое каждого параметра. А синхронизировать с деталью можно в БП на событиях её объекта.

 

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

Добрый день.

 

Не могу понять в чем дело, среда настроена на разработку в файловой системе файлы .cs выгружаются без проблем в папку  Autogenerated\Src, но файлы .js почему то нет. Можете помочь разобраться в чем дело?

Нравится

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

Здравствуйте! Вам не эта папка нужна, а Pkg. Разблокируйте пакет и в интерфейсе Конфигурации, сделайте действие - Выгрузить пакеты в файловую систему. Данный пакет выгрузится в данную папку. 

Нигрескул Алексей,

Нет, я именно про те которые выгружаются в 

Autogenerated\Src там обычно хранятся файлы из тех пакетов которые недоступны для редактирования, у меня туда перестали выгружатся js файлы

 

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

Михаил, Вы делаете то же, что автор этой темы?

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

Нет. я просто включил разработку в файловой системе.

Михаил, уточнил у разработчиков функциональности:

Если надо посмотреть код js схемы это надо делать через веб-интерфейс, а смотреть его в Autogenerated\Src это лайфхак, а не фича.

Как включить генерацию js кода в Autogenerated\Src (Обходное решение):

  1. Создается новый временный пакет
  2. В нем создается новая временная js схема
  3. Нажать на кнопку "Выгрузить в файловую систему" и в папке Autogenerated\Src появятся js файлы.
  4. Затем временный пакет со схемой можно удалить

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

Спасибо большое

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

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

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

В случае, если на карточке редактирования присутствует вкладка с определенным ключом - необходимо "привязать" к ней деталь из diff (код ниже)
В случае, если вкладка найдена не была - добавить вкладку с привязкой детали (то есть выполнить процедуру вставки на основе diff)

Есть ли возможность динамически изменить свойство "parentName" у детали? (или как получить объектное представление детали для изменения свойства)

define("SomeModuleName", [], function() {
    return {
    details: {
        "DetailName": {
            "schemaName": "schemaName",
            "entitySchemaName": "entitySchemaName",
            "filter": {
                "detailColumn": "detailColumn",
                "masterColumn": "Id"
            }
        }
    },
    diff: /**SCHEMA_DIFF*/[ 
        {
            "operation": "insert",
            "name": "AddedTabName",
            "values": {
                "items": [],
                "caption": {
                    "bindTo": "Resources.Strings.AddedTabNameCaption"
                },
            },
            "parentName": "Tabs",
            "propertyName": "tabs",
            "index": 1
        },
    {
        "operation": "insert",
        "name": "CardDetail",
        "values": {
            "itemType": this.Terrasoft.ViewItemType.DETAIL,
            "visible": { "bindTo": "CardDetailVisible" }
        },
        "parentName": "AddedTabName",
        "propertyName": "items",
        "index": 0
        },
    ]/**SCHEMA_DIFF*/,
    methods: {
        onEntityInitialized: function() {
            this.callParent(arguments);
            // myMethodToUpdateVisibility();
        },
        }
    };
});

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

Спасибо

Нравится

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

Добрый день! Возможно, проще добавить 2 детали на разные вкладки, и в зависимости от условий ненужное скрывать, чем динамически вставлять\перемещать

Добрый день! Возможно, проще добавить 2 детали на разные вкладки, и в зависимости от условий ненужное скрывать, чем динамически вставлять\перемещать

Лопатин Константин,

Спасибо за ваш вариант, попробую такой подход.

или как предложил Лопатин Константин или технически есть возможность закидывать и изымать элемент через ext, если вам вдруг не хватает геморроя в вашем проекте)

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

Добрый день, сообщество!

 

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

Для этого выбран один из вариантов: отобразить ActionsDashboard продажи в активности.

Приведенный в конце (без лишних частей) код модуля ActivityPageV2 дает в консоли ошибку:


SectionActionsDashboard.js:2051 Uncaught (in promise) TypeError: Cannot read property 'name' of undefined
    at i._findVisaManagerItem (SectionActionsDashboard.js:2051)
    at i.<anonymous> (SectionActionsDashboard.js:501)
    at i.e (all-combined.js:7)
    at Object.callback (all-combined.js:6)
    at all-combined.js:7

 

Ошибка приводит нас к тому, что в функции _findVisaManagerItem не находится свойство this.get("EntitySchema").name.

 

Подскажите, пожалуйста, как справиться с этой ошибкой (и вообще отобразить кейс)

 

 

 

Код модуля:

define("ActivityPageV2", ["OpportunityConfigurationConstants","ServiceHelper","ProcessModuleUtilities","MaskHelper"], 
function(OpportunityConfigurationConstants, ServiceHelper,ProcessModuleUtilities,MaskHelper) {
  return {
    entitySchemaName: "Activity",
    modules: /**SCHEMA_MODULES*/{
      "ActionsDashboardModule": {
        "config": {
          "isSchemaConfigInitialized": true,
          "schemaName": "OpportunityActionsDashboard",
          "useHistoryState": false,
          "parameters": {
            "viewModelConfig": {
              "entitySchemaName": "Opportunity",
              "actionsConfig": {
                "schemaName": "OpportunityStage",
                "columnName": "Stage",
                "colorColumnName": "Color",
                "filterColumnName": "ShowInProgressBar",
                "orderColumnName": "Number",
                "innerOrderColumnName": "End",
                "decouplingConfig": {
                  "name": "OppStageDecoupling",
                  "masterColumnName": "CurrentStage",
                  "referenceColumnName": "AvailableStage"
                }
              },
            //  "useDashboard": false,
            //  "contentVisible": false,
            //  "headerVisible": true
              "dashboardConfig": {
                "Activity": {
                  "masterColumnName": "Opportunity",
                  "referenceColumnName": "Opportunity"
                }
              }
            }
          }
        }
      }
    }/**SCHEMA_MODULES*/,
    diff: /**SCHEMA_DIFF*/[
      {
        "operation": "insert",
        "name": "ActionsDashboardModule",
        "values": {
          "classes": {
            "wrapClassName": [
              "actions-dashboard-module"
            ]
          },
          "itemType": 4
        },
        "parentName": "ActionDashboardContainer",
        "propertyName": "items",
        "index": 0
      }
    ]/**SCHEMA_DIFF*/
  };
});

 

Нравится

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

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

Кисловский Михаил Андреевич,

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

Так что тут подошла бы кнопка "Перейти на следующую стадию". Может быть, у вас есть идеи на тему того, как достать id следующей стадии кейса, в котором находится продажа? Это бы сильно помогло.

 

Мария, согласно академии:

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

То есть единой «следующей»  стадии нет, при нормальной работе переходы возможны в любую из разрешённых. Если точно знаете, куда нужно перевести по нажатию кнопки, можно в объект добавить справочное поле, ссылающееся на нужную запись и в логике кнопки её считывать.

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