Добрый час суток!

Немного не могу понять как построить запрос на UPDATE в мобильном приложении.

Например я хочу сделать такой запрос SQL

UPDATE TEST SET IsChecked = 1 WHERE Question = '' and Answer = ''

Я делаю так:

        var filters = Ext.create("Terrasoft.Filter", {

                type: Terrasoft.FilterTypes.Group,

                logicalOperation: Terrasoft.FilterLogicalOperations.And

            });

        filters.addFilter(Ext.create("Terrasoft.Filter", {

                property: "Question ",

                value: multiAnswerId // тут Id Question (для фильтра как выше)

        }));

        filters.addFilter(Ext.create("Terrasoft.Filter", {

                property: "Answer ",

                value: answerVariantId // тут Id Answer(для фильтра как выше)

        }));

        var sql = Terrasoft.Sql.UpdateBuilder.build({

                model: "Test", //Таблица в которую хочу сделать запрос

                queryConfig: queryConfig, //что это ?

                record: record, // что это?

                filter: filters,// это у меня есть

                includeOnlyModifiedColumns: true // что это?

        });

        sqls.push(sql);

        

Подскажите пожалуйста,как мне в мой обьект который я бросаю (var sql = ...) добавить по сути SET IsChecked =1 ? Ведь фильтры я уже сделал,а как сформировать немного не пойму.. может мне даже QueryConfig и includeOnlyModifiedColumns вообще ну нужны ? и достаточно как то константами сделать ? Спасибо заранее!

Нравится

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

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

Вот пример фильтрации и перебора:

// Создание экземпляра хранилища для данных модели Contact.
var store = Ext.create('Terrasoft.store.BaseStore', {
    model: 'Contact'
});
 
// Создание конфигурационного объекта с дополнительными параметрами запроса на выборку данных.
var queryConfig = Ext.create('Terrasoft.QueryConfig', {
    // Определение колонок, которые будут возвращены в запросе.
    columns: ['Name', 'Id', 'Account'],
    // Имя модели, к которой выполняется запрос.
    modelName: 'Contact'
});
 
// Загрузка данных в хранилище. Будет возвращена первая страница данных.
store.loadPage(1, {
    queryConfig: queryConfig,
    // Дополнительно указывается фильтрация возвращаемых данных по колонке Name.
    filters: Ext.create('Terrasoft.Filter', {
        // Имя колонки, по которой выполняется фильтрация.
        property: 'Name',
        // Значение для фильтрации.
        value: 'Test Name'
    }),
    // Функция обработки результатов выполнения запроса.
    callback: function(records, operation, success) {
        // Получение первой записи возвращенного набора.
        var loadedRecord = records[0];
        if (loadedRecord) {
            // Получение значения поля Account.
            var contactAccount = loadedRecord.get('Account');                                                                                                    
            if (contactAccount) {                                                                                                                   
                // Выполнение действий с полученным значением.
            }
        }
    },
    scope: this
});

Вот пример изменения и сохранения записи (но новой, а не существующей):

var record = Ext.create('Contact');
record.phantom = true;
//свойство модели phantom указывает на то, новая ли это запись или существующая
record.set('Name', 'New Contact');
 
record.save({
    success: function() {
        ...
    },
    failure: function(exception) {
        Terrasoft.MessageBox.showException(exception);
    },
    queryConfig: Ext.create('Terrasoft.QueryConfig', {
        modelName: record.self.modelName,
        columns: ['Name']
    }
}, this);

 

А,разобрался,засейвить забыл. Спасибо,но результат тот же что и при обычном выполнении синхронизация с освновной базой  не работает. Вот полный код:

var store = Ext.create('Terrasoft.store.BaseStore', {

            model: 'SuInterviewAnswerChoice'

        });

        var queryConfig = Ext.create('Terrasoft.QueryConfig', {

            columns: ['SuInterviewQuestion', 'SuAnswer', 'SuIsChecked'],

            modelName: 'SuInterviewAnswerChoice'

        });

        

        store.loadPage(1, {

            queryConfig: queryConfig,

            filters: Ext.create('Terrasoft.Filter', {

                property: 'SuInterviewQuestion',

                value: multiAnswerId

            }),

            callback: function(records, operation, success) {

                for(var i =0; i<records.length;i++){

                    if(records[i].data.SuAnswer === answerVariantId){

                        var isChecked = records[i].get('SuIsChecked');

                        if(!isChecked){

                            records[i].set('SuIsChecked',true);

                            records[i].save({

                                success: function() {

                                    console.log('Successfully');

                                },

                                failure: function(exception) {

                                    Terrasoft.MessageBox.showException(exception);

                                },

                                queryConfig: Ext.create('Terrasoft.QueryConfig', {

                                    modelName: records[i].self.modelName,

                                    columns: ['SuIsChecked']

                                })

                            }, this);

                            return;

                        }

                    }

                    

                }

            },

            scope: this

        });

 

 

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

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

да,меняет. Поле ModifiedOn меняется. Подскажите пожалуйста еще,как правильно написать Insert,спасибо!

Зверев Александр, Просто документации по мобилке в плане этого очень мало.обрываю исходники пишу по примерам +- но синхронизация так и не появляется.

Зверев Александр пишет:

Вот пример изменения и сохранения записи (но новой, а не существующей):


 
var record = Ext.create('Contact');
record.phantom = true;
//свойство модели phantom указывает на то, новая ли это запись или существующая
record.set('Name', 'New Contact');
 
record.save({
    success: function() {
        ...
    },
    failure: function(exception) {
        Terrasoft.MessageBox.showException(exception);
    },
    queryConfig: Ext.create('Terrasoft.QueryConfig', {
        modelName: record.self.modelName,
        columns: ['Name']
    }
}, this);

или я так понимаю вот это можно использовать вместо InsertBuilder?

 

Да, лучше вместо InsertBuilder использовать редактирование и сохранение записи.

Зверев Александр,Спасибо

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

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

Зверев Александр пишет:

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

Вот пример фильтрации и перебора:


 
// Создание экземпляра хранилища для данных модели Contact.
var store = Ext.create('Terrasoft.store.BaseStore', {
    model: 'Contact'
});
 
// Создание конфигурационного объекта с дополнительными параметрами запроса на выборку данных.
var queryConfig = Ext.create('Terrasoft.QueryConfig', {
    // Определение колонок, которые будут возвращены в запросе.
    columns: ['Name', 'Id', 'Account'],
    // Имя модели, к которой выполняется запрос.
    modelName: 'Contact'
});
 
// Загрузка данных в хранилище. Будет возвращена первая страница данных.
store.loadPage(1, {
    queryConfig: queryConfig,
    // Дополнительно указывается фильтрация возвращаемых данных по колонке Name.
    filters: Ext.create('Terrasoft.Filter', {
        // Имя колонки, по которой выполняется фильтрация.
        property: 'Name',
        // Значение для фильтрации.
        value: 'Test Name'
    }),
    // Функция обработки результатов выполнения запроса.
    callback: function(records, operation, success) {
        // Получение первой записи возвращенного набора.
        var loadedRecord = records[0];
        if (loadedRecord) {
            // Получение значения поля Account.
            var contactAccount = loadedRecord.get('Account');                                                                                                    
            if (contactAccount) {                                                                                                                   
                // Выполнение действий с полученным значением.
            }
        }
    },
    scope: this
});

 

Работайте асинхронно, через callback.

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

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

Основная логика bpm'online реализуется в веб-версии, мобильная имеет вспомогательное применение, её SDK не настолько подробен и не включает всех возможных сценариев. Если у Вас есть необходимость в какой-то логике, которую не реализовать иначе, можете завести идею, описать там подробно своё пожелание и, возможно, в новых версиях такое реализуют.

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

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

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

Ну и соотвественно обратно снимать, если это условие перестает соблюдаться.

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

Спасибо!!)

 

 

 

Нравится

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

Бп. А в странице к описанию детали влепить subscriber и делать loadEntity (грубо говоря — аналогично стандартной логике в заказе)

Бп. А в странице к описанию детали влепить subscriber и делать loadEntity (грубо говоря — аналогично стандартной логике в заказе)

Можно и триггером в базе вместо БП. Особенно, если на деталь льют записи извне в обход движка EntitySchemaQuery.

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

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

ContactAnniversary: {
	schemaName: "ContactAnniversaryDetailV2",
	filter: {
		masterColumn: "Id",
		detailColumn: "Contact"
	},
	subscriber: {
		"methodName": "sendSaveCardModuleResponse"
	}
}

Вот, допустим, из базовой страницы контакта. Метод sendSaveCardModuleResponse располагается в BasePageV2. Встаньте туда дебаггером через консоль и попробуйте поудалять/подобавлять записей в деталь "знаменательные события". При каждом изменении чего-нибудь в детали - тут же отрабатывает метод. В идеале в нём же делать this.reloadEntity (чтобы обновились поля карточки, которые были перерасчитаны по бп)

Варфоломеев Данила,

Данила, спасибо огромное! Сделали. 

Только тут асинхронность проявилась. Сабскрайбер отрабатывает и обновляет страницу быстрее чем отрабатывает БП. Как послать сигнал из БП чтобы страница обновилась после завершения БП. Ну кроме, как таймаут ставить). Спасибо!!!

Елена К,

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

Варфоломеев Данила,

Да, так и сделали. Спасибо вам!!)

 

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

Установили BPM версии 7.12. БД Oracle. Настроили согласно инструкции. При входе под Supervisor возникает ошибка.

текст в файле во вложение

OS:Windows Server 2012 R2

IIS 8.5

Текст ошибки :

Date: 7/11/2018 1:44:25 AM

Date (UTC): 7/11/2018 8:44:25 AM

Exception Message: Object reference not set to an instance of an object.

Exception Type: System.NullReferenceException

Exception Source: Terrasoft.Messaging.Common

Exception Stack Trace:

   at Terrasoft.Messaging.Common.ClientChannelHelper.GetConnectionParamsInitScript(Uri appUrl)

   at Terrasoft.WebApp.Nui.ViewModule.SetupWebSocketConnectionParams()

   at Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)

   at System.Web.UI.Control.OnLoad(EventArgs e)

   at System.Web.UI.Control.LoadRecursive()

   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

SessionID: teyxvagwz43zhbinbjhx4c0u

Request URL: /0/Nui/ViewModule.aspx

Request Path: /0/Nui/ViewModule.aspx

Request UrlReferrer: http://localhost/

Request Type: GET

User Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

User Host Address: ::1

User: Supervisor

Is Authenticated: True

Authentication Type: Forms

Is Secure Connection: False

 

 

Нравится

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

В адресной строке после адреса сайта допишите 0/dev (например, если сайт localhost:82, то ссылка будет следующая localhost:82/0/dev). Это прямая ссылка в конфигурацию системы. На этой страницы в блоке действий выберите "компилировать все". После завершения компиляции очистите Redis и можете снова пробовать авторизоваться на сайте.

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

У клиента установил систему Marketing 7.12.0.

После авторизации вылетает следующая ошибка:

This page isn’t working. localhost redirected you too many times. Try clearing your cookies

Куки чистил. Пробовал запускать в других браузерах. Не помогло.

В чем может быть проблема? 

Заранее благодарен.

 

 

 

Нравится

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

Данная ошибка связана со старой версией Redis-сервера. Установите последнюю актуальную версию: 4.0 дл Linux или 3.2 для Windows - http://ftp.bpmonline.com/support/pub/redis32.rar

Данная ошибка связана со старой версией Redis-сервера. Установите последнюю актуальную версию: 4.0 дл Linux или 3.2 для Windows - http://ftp.bpmonline.com/support/pub/redis32.rar

Антон Малий,

Спасибо, помогло

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

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

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

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

Нравится

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

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

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

Александр, в стартовом сигнале галочка тоже отсутствует, но все равно возникает такая ситуация.

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

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

Спасибо большое! Сейчас посмотрю.

Александр, Проверил все еще раз. Ответственный - текущий пользователь. Таймеров никаких нет, что может еще переводить процесс в фон?

 

Ещё он будет в фоне, если запускать из дизайнера процессов, поскольку в этот момент не активна вкладка, на которой должна появится страница.

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

Спасибо!

Так у Вас процесс или кейс?

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

 

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

odins41,

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

1. Процесс не выполняется в фоне, т.е:

- в расширенных свойствах стартового элемента не должна стоять галочка "выполнять в фоне"

- по ходе процесса не должно быть таймеров 

2. Пользователь, которому должна открыться страница, должен быть инициатором процесса

3. Пользователь должен быть ответственным за элемент

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



Если все описанные више условия выполняются, а страница все равно не открывается напишите, пожалуйста, на support@bpmonline.com

В версии 7.16 должно появиться восстановление контекста, то есть при одновременном запуске второго БП его интерактивные элементы будут тоже на экране, а не в фоне.

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

Добрый день Комрады.

В общем пытаюсь реализовать отправку уведомления.

Проблема в том что та инструкция которая есть не подходит для моего случая.

https://academy.terrasoft.ru/documents/technic-sdk/7-12/kak-sozdavat-po…

В Бизнес процессе происходит следующее, стоит событие на изменение стадии Продажи.

Потом идет Скрипт-таск. Интерпретируемый.

Проблема в том что при вызове 

var remindingConfig = new RemindingConfig(campaign);

Ругается на ошибку 

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в Terrasoft.Core.Entities.Entity.get_PrimaryColumnValue()
   в Terrasoft.Configuration.RemindingConfig..ctor(Entity entity)
   в Terrasoft.Core.Process.UsrProcess4MethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

 

var id = Get<Guid>("ProcessSchemaParameter1");
Set("Par2",id.ToString());
var userConnection = context.UserConnection;
 
var campaignESQ = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Opportunity");
var campaignTitle = campaignESQ.AddColumn("Title").Name;
var campaignid = campaignESQ.AddColumn("Id").Name;
var campaign = campaignESQ.GetEntity(userConnection, id);
 
 
if (campaign == null) 
{
   return false;	
}
DateTime remindTime = DateTime.Now;
 
IRemindingTextFormer textFormer = ClassFactory.Get<UsrLeadRemindingTextFormer1>(
	                                 new ConstructorArgument("userConnection", userConnection));
 
string leadName = campaign.GetTypedColumnValue<string>(campaignTitle);
string subjectCaption = textFormer.GetBody(new Dictionary<string, object> {
            {"LeadName", leadName}
        });
 
string popupTitle = textFormer.GetTitle(null);
 
var remindingConfig = new RemindingConfig(campaign);
remindingConfig.AuthorId = userConnection.CurrentUser.ContactId;
remindingConfig.ContactId = userConnection.CurrentUser.ContactId;
remindingConfig.NotificationTypeId = RemindingConsts.NotificationTypeRemindingId;
remindingConfig.RemindTime = remindTime;
remindingConfig.Description = subjectCaption;
remindingConfig.PopupTitle = popupTitle;
var remindingUtilities = ClassFactory.Get<RemindingUtilities>();
remindingUtilities.CreateReminding(userConnection, remindingConfig);
 
 
return true;

 

Может кто  нибудь сделать внятную инструкцию как отправлять уведомления через БП скриптом ???

Нравится

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

Добрый день!

Судя по call stack у вас campaign == null

Проверьте

Артем Гура,

А нет, не заметил проверку :)

Для того, чтобы понять что не так, нужно произвести debug. С виду все нормально. Обратитесь в поддержку, но для отладки нужна будет ссылка на обезличенную копию БД. Только таким образом можно будет установить причину, т.к. отладка по картинке сложная штука :)

Спасибо!

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

Всем доброго времени суток. Версия 7.12.

В своё время работал с настройкой мобильного приложения, в т.ч. с добавлением кастомных элементов на страницы. Вроде тогда всё работало (в 7.10 и эмуляторе приложения для 7.10) - https://community.terrasoft.ru/questions/dobavlenie-kastomnyh-elementov…

Хотелось бы ещё раз разобрать задачу замещения страниц и добавления своих элементов по пунктам.

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

Есть схема MobileContactPreviewPage, которая подключена в MobileApplicationManifestDefaultWorkplace у контакта в Models:

"Contact": {
			"Preview": "MobileContactPreviewPage",
			"RequiredModels": [
				"Account",
				"Contact",
				"ContactCommunication",
				"CommunicationType",
				"Department",
				"ContactAddress",
				"AddressType",
				"Country",
				"Region",
				"City",
				"ContactAnniversary",
				"AnniversaryType",
				"Activity",
				"SysImage",
				"FileType",
				"ActivityPriority",
				"ActivityType",
				"ActivityCategory",
				"ActivityStatus",
				"Job"
			],
			"ModelExtensions": [],
			"PagesExtensions": [
				"MobileContactRecordPageSettingsDefaultWorkplace",
				"MobileContactGridPageSettingsDefaultWorkplace",
				"MobileContactActionsSettingsDefaultWorkplace",
				"MobileContactModuleConfig"
			]
		}

Я заместил схему MobileContactPreviewPage, перенёс содержимое из оригинальной реализации полностью, добавил свою небольшую доработку-  просто добавление кнопки на страницу:

/* globals Contact: false */
Terrasoft.LastLoadedPageData = {
	controllerName: "ContactPreviewPage.Controller",
	viewXType: "contactpreviewpageview"
};
 
Ext.define("ContactPreviewPage.View", {
	extend: "Terrasoft.view.BasePreviewPage",
	xtype: "contactpreviewpageview",
	config: {
		id: "ContactPreviewPage"
	}
});
 
Ext.define("ContactPreviewPage.Controller", {
	extend: "Terrasoft.controller.BasePreviewPage",
 
	statics: {
		Model: Contact
	},
 
	config: {
		refs: {
			view: "#ContactPreviewPage"
		}
	},
 
	/**
	 * @inheritdoc
	 * @protected
	 * @overridden
	 */
	onCallPhoneStarted: function() {
		this.callParent(arguments);
		Terrasoft.PhoneCallLogUtils.openPage({
			activityLinkColumnNames: [
				{
					parentColumnName: "Id",
					activityColumnName: "Contact"
				},
				{
					parentColumnName: "Account",
					activityColumnName: "Account"
				}
			],
			record: this.record
		});
	},
 
	onLoadRecord: function(loadedRecord, callback) {
      this.callParent([loadedRecord, function() {
        Terrasoft.MessageBox.showMessage("onLoadRecord");
         var panelItems = this.getView().getPanel().getItems();
         var primaryColumnSet = panelItems.first();
 
		//Кнопка
		var controlbutton = this.getOurCustomButton(loadedRecord);
        controlbutton.on("tap", function () {
    		loadedRecord.set("UsrImgData","");
        }, this);
 
        primaryColumnSet.add(controlbutton); //если добавляем в конце панели
 
      }]);
    },
    getOurCustomButton: function(record) {
        return Ext.create('Ext.Button', {
              xtype: "button",
              cls: "x-button x-button-primary-blue",
              text: "Очистить"
            });
    },
 
});

 

Собственно, кнопки так и не появилось, сообщение showmessage тоже отсутствует. Версия приложения последняя, установил прямо с GooglePlay, проверяю всё непосредственно с телефона.

 

И ещё общий вопрос - что собственно, представляет собой приложение? Могу ли я туда выводить непосредственно html- или нативный javascript-код как в браузер? Будет ли при этом работать javascript-код на всех видах устройств?

Нравится

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

Добрый день, Денис!

А вы смотрели в dom дереве кнопка создалась? Может она есть, но просто не видна. Тогда придется поработать со стилями.

Приложение собой представляет одностраничное веб-приложение, т.е. html можно разве что в iframe'е попробовать вставить. А нативный JavaScript должен работать без проблем.

Золотарев Артем Андреевич,

Артём, спасибо за ответ.

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

html как-то добавляли в той теме по ссылке.

Ещё пробовал вместо MobileContactPreviewPage создавать свою версию с названием UsrMobileContactPreviewPage и аналогичным содержимым и подключать её на место оригинала в манифесте - тогда в приложении страница контакта вообще перестаёт открываться.

https://sun9-5.userapi.com/c830309/v830309684/143865/aieJi10t5ks.jpg (MobileContactPreviewPage)

https://sun9-7.userapi.com/c834401/v834401309/18b001/y7z3N8IY2FQ.jpg (UsrMobileContactPreviewPage)

Смородинов Денис,

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

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

Добрый день, делаю звонок с кнопки:

 this.sandbox.publish("CallCustomer", {
                    number: mobNumber, 
                    customerId: userId, 
                    entitySchemaName: "SxCandidate",
                    callRelationFields: undefined
                });

Есть ли возможность как то узнать Id этого звонка? Той записи которая добавляется в таблицу "Call". Спасибо!

Нравится

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

Смотря какая телефония. У вебитела, например есть чудеснейшая функция UpdateDbCall в провайдере, которая делает запись в бд через insert (пока-пока событийные бп), и возвращает Id вставленной записи в onUpdateDbCall

Телефония Asterisk

mcNosferatum,

Есть у меня подозрение, что для asterisk-а интеграция встроена в dll в виде класса и звонок там вставляется через те же insert-ы. Тогда смотреть стоит в сторону обработчиков событий звонка в ctipanel. Мб там где-нибудь guid звонка приходит...

А что в Network'е? Какие запросы/ответы при звонке? Просто в стандартном Webitel запрос на звонок к серверу как раз возвращает в ответе Id звонка, может у Asterisk такая же логика.

На самый крайний случай можно просто сделать esq запрос в БД с таким количеством параметров, которые однозначно идентифицируют звонок.

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

Коллеги, добрый день! Может быть подобный вопрос уже обсуждали, но не нашел ссылок.



Необходимо сделать авторизацию в bpm через учетные данные Яндекс паспорта и Facebook. Подозреваю, что тут нужно делать авторизацию через oauth 2.0



Может быть есть у кого-то подобный опыт и сможете подсказать основные моменты и возможные проблемы? 

Нравится

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

Насколько понимаю, поддержки OAuth ещё нет, возможно, в новых версиях сделают. Сейчас есть вход через Single Sign-On. Там есть примеры для провайдеров ADFS и OneLogin.

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

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

Начал решать задачу создания активностей на основании поставок в паспорте заказа.

Почитал этот форум, создал процесс 

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

В задании-сценарии код:

EntityCollection entities = Get<EntityCollection>("ReadSupply.ResultEntityCollection");
var result = new Collection<string>();
foreach(Entity entity in entities) {
	var supply = entity.GetTypedColumnValue<string>("Name");
	string temp = supply.ToString();    
	result.Add(temp);    
}
string displayValue = result.ConcatIfNotEmpty(",");
Set("Supply", supply);

Пример взял отсюда 

При запуске процесса на переборе коллекции ошибка:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. в Terrasoft.Core.Process.ZLOrderProcessingMethodsWrapper.SupplyCycleExecute(ProcessExecutingContext context) в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Через отладку выяснил, что вылетает на первой строке задания-сценария EntityCollection entities = Get("ReadSupply.ResultEntityCollection");

Все таки, существует способ получить коллекцию элемента "Читать данные" в задании-сценарии?

 

Нравится

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

У меня на версии 7.12.1 получилось(процесс компилируемый ):

Сигнал на изменение контакта, в "Читать данные 1", считываю измененную запись из "Контакта"

 

Изменил Supervisor:

 

 

Есть подозрение, что нет.

Я пытался и с компилируемым скрипт-таском и нет - всё время null. Кстати, получение коллекции - в роадмапе, чуть ли не в след. релизе.

У меня на версии 7.12.1 получилось(процесс компилируемый ):

Сигнал на изменение контакта, в "Читать данные 1", считываю измененную запись из "Контакта"

 

Изменил Supervisor:

 

 

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