Добрый день. Есть задача с помощью элемент веб сервис вызвать soap сервис.

Но для авторизации в  блок header нужно добавить метод. Не подскажете как это можно реализовать через мастер? Так как параметр заголовка в SOAP это другое.



-



-



-

POLIESCHUKT

YHcauQXSLgJtWAJIOCYaqxuaMWaOCOQqagkn



-



-

2600700000002

UAH

POLIESCHUKT

Нравится

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

Игорь, здравствуйте.



Обращаю Ваше внимание на следующую информацию:

Настройка аутентификации идентична для REST и SOAP-сервисов.



Для любого типа аутентификации (Basic/Oauth), есть официальная документация на этот счёт.

https://academy.terrasoft.ua/docs/7-17/user/kastomizacija_no_code/web_s…



Для использования же JSON Web Tokens, например, необходимо писать пользовательский методы аутентификации,



Рекомендую ознакомиться не только с данной статьёй, но и с веткой в целом.

Роман Казекин,

Роман, с веткой ознакомился, но вопрос в том, что стороний сервис ожидает именно блока 

-<ns1:UsernameToken>

<ns1:Username>POLIESCHUKT</ns1:Username>

<ns1:Password>YHcauQXSLgJtWAJIOCYaqxuaMWaOCOQqagkn</ns1:Password>

</ns1:UsernameToken>

 

В теле запроса а не в заголовке вот тут

 

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

Добрый день!

 

Реализовали функционал копирования деталей при копировании записи частично на примере существующего дополнения:

- в методе onSaved если режим  isCopy мы вызываем БП, в который отправляем конфиг с id старой\новой записи, название схемы и тд. Бизнес-процесс на основе заполненного справочника с колонками деталей создает новые связи с новой (скопированной записью).

 

К сожалению, создание новых связей не всегда происходит корректно -- иногда выпадает в ошибку внешнего ключа. Есть подозрение, что это связано с тем, что в момент работы БП еще может быть не создана новая запись (не скопирована).

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

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

Нравится

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

А данное дополнение не подошло под ваши задачи? https://marketplace.terrasoft.ru/app/copy-detail-records-creatio

Трефилов Павел Сергеевич,

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

Если это единичный случай, то я делал по другому:

Для страницы раздела переделать вызов метода copyRecord, в нем вызывать процесс, который делать поэтапно сначала делает копирование основной записи, а потом копирование записей деталей. К сожалению в БП нету элемента "сделать копию". Поэтому приходилось делать Читать данные - Добавить данные (режим одна запись) - Сохранить в id новой записи в переменную - Добавить данные в деталь (результат выборки) - открыть запись.

		methods: {
			copyRecord: function(primaryColumnValue) {
				this.runCustomCopyProcess(primaryColumnValue);
			},
 
			runCustomCopyProcess: function(primaryColumnValue){
				var args = {
					sysProcessName: "UsrCopySpecificationCustomer",
					parameters: {
						specificationsId: primaryColumnValue
					}
				};
				ProcessModuleUtilities.executeProcess(args);
			},
		}

Это все можно сделать и через isCopy, но там надо отловить момент, когда основная запись уже сохранилось и тогда запускать копирование детали, пример есть в InvoiceSection, правда код крайне замороченный, плюс там еще и вьюшки задействованы. По мне так проще через БП сделать, как у меня, пусть и не очень "красиво".

Трефилов Павел Сергеевич,

В плане копирования связей проблем нет -- сделали БП, там все работает. Проблема скорее в отлавливании момента, когда запись копии основной страницы уже создалась. Казалось бы, у нас для этого есть onSaved -- бери и делай. Но нет, не всегда в момент срабатывания onSaved запись уже создана в бд видимо...

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

Добрый день,

В базовом разделе Контрагенты создала новую деталь на основе того же раздела: клиенты этого контрагента.

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

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

Нравится

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

Екатерина, здравствуйте.



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



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

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

При установке приложения Field surveys for Creatio

получаю ошибку:

System.ApplicationException: Зависимый пакет "FieldForce" не найден
   at Terrasoft.Core.Packages.PackageDBStorage.SavePackageDependencies(Package package)
   at Terrasoft.Core.Packages.PackageDBStorage.SaveDependencies()
   at Terrasoft.Core.Packages.PackageDBStorage.Save(IPackageContentProvider packageContentProvider)
   at Terrasoft.Core.Applications.Packages.Operations.SystemPackageOperations.PackageDBStorageInternal.Save(IPackageContentProvider packageContentProvider)
   at Terrasoft.Core.Applications.Packages.Operations.SystemPackageOperations.Save(IEnumerable`1 packages, PackageInstallOptions options)
   at Terrasoft.Core.Applications.Packages.SystemPackageManager.Save(PackageInstallOptions installOptions)
   at Terrasoft.Core.Applications.Installation.AppInstaller.Install(String sourcePath, String destinationPath, PackageInstallOptions installOptions, IInstalledAppInfo installedAppInfo)
   at Terrasoft.Core.ServiceModelContract.PackageInstaller.AppInstallerServiceInternal.<>c__DisplayClass10_0.<InstallApp>b__0()
   at Terrasoft.Core.ServiceModelContract.PackageInstaller.BaseInstallerServiceInternal.InvokeWithLogging[TResult](Func`1 action)

Подскажите, в чем может быть причина?

Нравится

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

Александр,

 

приложение может быть установлено только на Sales Creatio, enterprise edition с предварительно установленным приложением Field sales for Creatio (пакет FieldForce).

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

Добрый день!



Может ли кто-то пояснить как работает контроль целостности?

 

Есть объект "журнал", в котором есть колонка Контакт. 

1) заполняем колонку Контакт в записи "журнал".

2) удаляем запись контакта.

 

1. Если стоит радиобаттон"удалять" у поля "Контакт" в Журнале, то по идее должна удаляться запись журнала -- удаляется

2. Если стоит радиобаттон "блокировать" у поля "Контакт" в Журнале, то выходит окно с контролем целостности с указанием на страницу Журнала. Тут есть возможность удалить связанные записи, но в нашем случае происходит какое-то зацикливание и после ожидания "подготовки данных к удалению" мы снова попадаем в окно контроля целостности

 

Самое интересное как работает галка "не контролировать целостность"

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

- если будет поставлена галка "не контролировать" и радиобаттон "блокировать", то при удалении объекта все равно попадаем в окно контроля целостности

- если стоит галка "не контролировать" и радиобаттон "удалять"  -- только в этом случае обычно все нормально работает.



Почему вообще при постановке галки "не контролировать" доступны радиобаттоны? не было бы логичнее делать их тдч и вообще не учитывать при удалении?



В общем какое-то странное поведение, которое не дает нам полностью реализовать необходимую логику.



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

Нравится

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

Добрый день.

Ниже описано как в приложении Creatio реализованы три стратегии удаления.



Блокировать удаление (RESTRICT):

Если установлен признак "Блокировать удаление", то при наличии связей будет выводиться диалоговое окно.



При этом у пользователя остается возможность выполнить удаление связанной записи, то-есть остается возможность использовать 2 стратегии удаления: удалять связанный объект (CASCADE) и&nbsp;очищать связь со связанным объектом (SET NULL)







Удалять связанный объект (CASCADE):

Если установлен признак "Удалять записи из...", то при наличии связей с этим объектом, диалогового окна не будет и связанная запись будет удалена.



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







Очищать связь со связанным объектом (SET NULL):

Если установлен признак "Блокировать удаление", то при наличии связей будет выводиться диалоговое окно и пользователь сможет удалить запись без удаления связанной записи.

 

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

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

Можно ли у Вас уточнить? Мне нужна логика детали "Продукт в продаже".

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

Нравится

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

Добрый день!

Логика расчета суммы продажи находится во внутреннем процессе объекта OpportunityProductInterest

Yanina Ryssjanova,

Эм, а можно подробнее. Тут я вижу БП с сценарием. И в бизнес процессе событие срабатывает, только когда нажата кнопка сохранить. 

Не совсем понимаю какие подробности вам необходимы, при всех действиях Добавления/Изменения записи "Продукт в продаже" происходит событие OpportunityProductInterestSaved (или OpportunityProductInterestDeleted при удалении) в которых вызываться метод CalckOpportunityAmount.

Как и было сказано ранее, посмотреть это можно здесь.

Тамже и находится реализация метода CalckOpportunityAmount.

 

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

Приветствую. Представьте себе ситуацию. Есть некоторое событие, которое наступит через n  дней. Событие важное, а потому в системе отправляется уведомление "через n дней произойдет событие" , соответственно на следующий день отправляется новое уведомление "через n-1 дней произойдет событие", что очевидно не очень хорошо. В связи с этим появилась идея: обновить текст раннее отправленных уведомлений во вкладке системных уведомлений Изображение удалено.

С помощью бизнес-процесса удалось обновить колонку description в объекте Reminding, который как раз и хранит в себе все системные уведомления. Однако после обновления данных в бд, на фронте никаких изменений не последовало, т.е. боковое меню с системными уведомлениями не обновилось. 

 

Вопрос: как принудительно обновить список системных уведомлений?

Нравится

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

У вас после обновления страницы данные обновляются?

Если да и вам требуется обновить записи без участия пользователя, то нужно использовать механизм сообщений. Пример реализации описан в этой статье https://academy.terrasoft.ru/documents/technic-sdk/7-16/clientmessagebr…

 

Из БП нужно послать сигнал на клиент и потом SystemNotificationsSchema вызвать метод обновления реестра записей, либо написать свой, либо найти что-то похожее из базовых.

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



Во вкладке  хранятся уведомления с типом Notification (id = 685e7149-c015-4a4d-b4a6-2e5625a6314c). Что касается объекта Reminding, это другой тип уведомлений (напоминания), который находится в первой вкладке центра уведомлений. 

 

Если Вам необходимо поменять текст в уведомлениях с типом Notification, то Вам потребуется изменить содержимое колонки SubjectCaption. В бизнес-процессе Вы можете сделать это выбрав объект "Уведомление" и поле "Заголовок" в нём. 

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

Удалял рабочее место вместе с пакетом, и после этого начали возникать ошибки компиляции

Contact.BackReferences.Base.cs The type or namespace name 'UsrContractorFile' could not be found (are you missing a using directive or an assembly reference?) CS0246473

ContactType.BackReferences.Base.cs The type or namespace name 'UsrContacts' could not be found (are you missing a using directive or an assembly reference?) CS024638

FileType.BackReferences.Base.cs The type or namespace name 'UsrContractorFile' could not be found (are you missing a using directive or an assembly reference?) CS0246188



Как решить эту проблему?

Нравится

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

Добрый день!

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

Если на элементах есть ошибки требующие установки или обновления БД, то нужно по каждому элементу провести установку, а потом выполнить компиляцию

 

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

Добрый день! Пытаюсь реализовать маску ввода телефона при помощи 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");                      

                        }

                    });

                },

 

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

Доброе время суток!



Есть такая задача:

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

{

  "range": "'Лист1'!A1:T985",

  "majorDimension": "ROWS",

  "values": [

    [

      "id",

      "created_time",

      "ad_id",

      "ad_name",

      "adset_id",

      "adset_name",

      "campaign_id",

      "campaign_name",

      "form_id",

      "form_name",

      "is_organic",

      "platform",

      "full_name",

      "phone_number",

      "email"

    ],

    [

      "l:264287232248572",

      "2021-12-03T14:08:57+02:00",

      "ag:23849343099100250",

      "S1R",

      "as:23849343099080250",

      "Широкая / 21-45 / no Ex / Exp off",

      "c:23849343098930250",

      "Bid",

      "f:1560978927585929",

      "S1R-copy",

      "FALSE",

      "fb",

      "Валера Булдужкин",

      "380999586316",

      "mariapirogova86@ukr.net"

    ],

    [

      "l:663271345038273",

      "2021-12-03T13:12:49+02:00",

      "ag:23849343099100250",

      "S1R",

      "as:23849343099080250",

      "Широкая / 21-45 / no Ex / Exp off",

      "c:23849343098930250",

      "Bid",

      "f:1560978927585929",

      "S1R-copy",

      "FALSE",

      "fb",

      "Татьяна Муховна",

      "380675683876",

      "tat.ign@ukr.net"

    ]

  ]

}



Каким образом средствами обработки ответа в вебсервисе можно его расспарсить в отдельные колонки, так как в массиве нет идентификаторов полей?

Нравится

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

Стрилец Антон,

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

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