Вопрос

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

В рамках исполнения бизнес-процесса необходимо несколько раз открывать страницу записи разным пользователям. На странице есть деталь с редактируемым реестром.

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

По идее можно добавить на основную запись скрытую колонку, и как-то загружать деталь в зависимости от условий.. есть, например, решение как скрыть лишние записи - https://community.terrasoft.ua/node/26289

Но вот можно ли вообще реализовать показ разных колонок?

У меня такой же вопрос

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

чисто в теории:
колонки подтягиваются из профиля при загрузке грида. я бы расковырял метод initProfile(из BaseGridDetailV2) и в зависимости от условий подставлял нужную мне настройку реестра.

Данила, спасибо, интересная идея.

А можно ли подставлять настройки реестра на лету?

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

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

Прошу поделиться опытом по следующим вопросам:
1. Как корректно привязать в данные пакета признак актуальности версии БП (На данный момент делаю через insert в таблицу SysSchemaProperties)?
2. Как корректно привязать в данные пакета признак активности кейса раздела (На данный момент Update записи в SysSchemaUserProperty)?
3. Как корректно отключить БП и привязать в данные пакета этот признак (На данный момент Insert в SysProcessDisabled) 

У меня такой же вопрос

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

Добрый день!

А можете предоставить пошаговый кейс?

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

Можно ли создать новую и привязать её к объекту?

Если да, то как это сделать?

Версия 7.11.

У меня такой же вопрос

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

Денис, здравствуйте!

Да, конечно. На Community есть несколько постов по ручной регистрации раздела (например, https://community.terrasoft.ru/node/26721), алгоритм установки нужных связей с объектом там также есть. Для страницы справочника достаточно будет создать схему и зарегистрировать связи с объектом в таблицах SysModuleEntity и SysModuleEdit аналогично регистрации страниц раздела. 

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

Добрый день!

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

Возникают такие ошибки:

У меня такой же вопрос

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

Нужно в IIS разрешить доступ с другого домена, как описано тут.

 

 

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

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

На детали с редактируемым реестром можно добавлять кнопки (см. скриншот)

Добавил туда две дополнительных кнопки:

// Настройка действия [Открыть].
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "card",
                            "markerValue": "card",
                            "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
                        },
                        // Настройка действия [Открыть внешнюю ссылку].
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "click": {
								"bindTo": "openDoc"
							},
                            //"tag": "open",
                            //"markerValue": "open",
                            "imageConfig": {"bindTo": "Resources.Images.CardIcon"}
                        },

С открытием - всё хорошо, поправил обработчик в функции editRecord. А где происходит перехват тега? Нужен полностью свой обработчик.

Вариант с "click" (в примере кода) - не сработал.

У меня такой же вопрос

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

Обычно обработчик этих кнопок указывается в настройке грида:

и в Conf.GridUtilities содержится метод. Туда в 1 параметр приходит тег

Данила, спасибо, помогло.

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

Доброго времени! 

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

Задача:
1. Поставить фильтр (допустим выдало 100 записей)
2. Нажать "Выбрать все" (показано что выбрано 100)
3. Снять 1 галочку (показано что выбрано 99)
4. Нажать "Изменить ответственного"

Методы:
var selectedRows = this.getSelectedItems();
var selectedRows = this.get("SelectedRows");

Возвращают Id только отображенных записей (29)!

Как получить ожидаемые 99 Id записей?

У меня такой же вопрос

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

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

Когда загружается реестр посылается один запрос (который оптимизирован и загружает не все записи, а 30 – если у вас 100000 записей то не будет накладки по производительности). Когда вы нажимаете «Выбирать все», то не произойдет загрузки всех записей(оптимизация описанная выше), а отправится отдельный запрос который просто вернет количество и обновит название кнопки (при дебаге в network это видно). Чтобы добиться требуемого результата нужно самостоятельно посылать запрос.

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

Добрый день.

Где-то в темах проскакивало взаимодействие php и odata. Решил сделать свой запрос на добавление контакта, запросы кросс-доменные, пример . Авторизация проходит(code=0), но данные в bpm не добавляются. в iis 500 ошибка.

<!DOCTYPE html>
<html>
<head></head>
<body>
<?php
$url = "http://localhost:8001/ServiceModel/AuthService.svc/Login";
$requestData["UserName"] = "User";
$requestData["UserPassword"] = "Password";
$jcres = json_encode($requestData);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jcres))
);
$result = curl_exec($ch);
echo $result;
curl_close($ch);

//Запрос odata
$urlGetCardInfo = "http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactCollection";
$requestDataService["Name"] = "123";
$jcres = json_encode($requestDataService);
$ch = curl_init($urlGetCardInfo);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR,'cookie.txt');
$file = "cookie.txt";
$lines = file( $file );
$str =  $lines[6];
$prefix = "BPMCSRF";
$index = strpos($str, $prefix) + strlen($prefix);
$token = trim(substr($str, $index));
echo $token;
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
      'BPMCSRF:' .  $token,
        'Content-Length: ' . strlen($jcres))
);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
curl_close($ch);

echo $jcres;

echo "
";
echo var_dump($result);
?>
</body>
</html>

 

Куки:

# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_localhost    FALSE    /    FALSE    0    BPMLOADER    fnmuevt2z4bpsxmyookyy3g3
#HttpOnly_localhost    FALSE    /    FALSE    0    .ASPXAUTH    BCF0752E4949BD3D6EC56072B957CB5C1B9517D2F7C19B9C3F70E0BBA6ED4BD46FE55B0E90853EF5E88CD83EE9AA689C5595517AA5B7F7DF913873919C440E5ED7607A04F4C0C14D61216682067F860D1EC6DC3872811FFAF710CA7F8FC8A8B0C0F77A146D40447FBEE6629EC37546E4C7B08DAFFC8EA37F2F5D7AF522D1816B16A968A0BAAC80738D874AEE3C2A0A9730B7C7155430F3B033C6A934F56AF04FF659C62C191822CC743FEA070757841FF4C73B7FC67EFA5CE4C4B430CFA8E798B085E84BAD37C56D80FFBB9244AC5ED83DCF8052F30D442637EB668DD93B2A4C591382EC09F3A0CE8CB18C56BD327745A983E70A9D3F911439AE4173AF04849AA84713883CEB089AB5D9F89A324ADA0FC02CDA670B07FBCD0B10670FD9F6ADC8D58B7DB2E9A27CD49FE0DCB9E21AEDAD76EA95134024BACE86C9BDFAEB2A30FDC177927BFFF25A16AC80A3B37084D0D4067DBAFD992CB95E14BEC365E5CB26BA82CB393B
localhost    FALSE    /    FALSE    0    BPMCSRF    Ao/SdrXnBoquQZZ39643ue
#HttpOnly_localhost    FALSE    /    FALSE    1526629837    UserName    83|117|112|101|114|118|105|115|111|114 

У меня такой же вопрос

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

Добрый день, Евгений!

Вы пробовали создать такой-же контакт используя Fiddler? Тут есть инструкция: https://academy.terrasoft.ru/documents/technic-sdk/7-12/vypolnenie-zaprosov-po-protokolu-odata-s-pomoshchyu-fiddler-0

Также, хочу обратить внимание что если на сайте ключена Csrf-защита то куки стоит формировать следующим образом: Но это явно не причина ошибки, так как в результате бы вернулся статус код 403.

 

Через Fiddler

отправляю post http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactColle…

Accept: application/atom+xml
Content-Type: application/atom+xml;type=entry
Cookie: BPMCSRF=fBo.TKVbav4GK31oDrDQTu; BPMLOADER=c3wb3plqvydzx1rgfsy5mgst; .ASPXAUTH=CEE35EFBF41088EA3F2835F9509497C89CF69A9E856192FCC0C9CF74DD91D9A5D5AAF37048F2326F4AFC1C9FE051CE91DF622A5345F143761E4D6B42668043C96506AAED141C4FA97802D4992C3DF49F134750F147D6320D2899561B45FC468F66D531151A067788195CED937DD3192FAA0B3A804F01BBDBEA0C0BDFECB36277C3FABC5CE02474B1B5C21317D3FD2ED64F946504935FD19D09598CB65640AE332309D198200160CF53715714FB16DAD11B4B8FAB76204FCAA1A99B1F77D99E1AD804197342D8D3F7B8604BE9BCFC559029ED353C877190547E03C8F51AA780665361BF5EBE144A7A0E1E0911507B2027E71F7BE3D452AF4AEF6A74B2777546230FBB1236F088074EB2C7345157666D71E0D437489538D4F4D4CBFF82B36721B105CE2A96458E01AF0A9E010579B42532DF808B9EA0C9B3272C83283E74BF037C02029FBF65C2A84F3B25275F48F3DDA4C868C4EE;
BPMCSRF: fBo.TKVbav4GK31oDrDQTu;
Host: localhost:8001
Content-Length: 597
 

Тело 

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
    <content type="application/xml">
        <properties xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
            <Title xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">Title</Title>
            <Notes xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">mail@mail.ru</Notes>
            <OwnerId xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">410006E1-CA4E-4502-A9EC-E54D922D2C00</OwnerId>
        </properties>
    </content>
</entry>

 

Возвращает 403 ошибку, пользователю прав доступа на операции к Odata и объекту Contact для доступа к внешним сервисам дал.

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

Кстати проверил через Fiddler запрос, который указан в первичном тексте вопроса на php

POST http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactColle… HTTP/1.1
Content-Type: application/json;odata=verbose
Cookie: BPMCSRF=uUgOi6S8fuXqmug7vK2Ixe; BPMLOADER=lbe4eo5r33xib5qzd4ilx0bo; .ASPXAUTH=9630392393DE5EA7C5C41399383A5C111A47ABD6DCE480276852590B03DBD938B354ACB488248FB6B2DE737C412A6CAD487A526C576BCAEA8D48B4751FB045606900009B81DCBACC54C4802571A4AF339B05F101E2993A6AD6D93708FC79FCDACAB6F7411105FC0E2A2D9AB123968243E02990824FC08B401999FFF8F5A7A1240AB69D56771E64F9495EEAB17F094FAB101016326A99081644034ABA4C64F797E974EC2D833037F7282F04E46D6FA8F04FFC85BFD9030D39916F99F082C122CEFE53EFF585FD40E913474A949B9E38601E86C0C4C921541B4082B0E9732B8645F73E508304ABFBC92D7BB581858040760374F25368001F2DEF1CE2458A0B4DC81352952FBBAEE05F59E4C9D330198361B929FF0A4D5392D4956CB7F46CD6B97D3D909A92A37D3FCA07AAD00396BB38F911BAA1DEEA23E53395A7C6D88009B148F468F2D237EF132055A71C8ABD923EA22460A916B38F17DE2DDB202622EEF54424D06F7B;
BPMCSRF: uUgOi6S8fuXqmug7vK2Ixe
Host: localhost:8001
Content-Length: 16

{"Name": "1233"}

Запись создается удачно. Почему тогда через php не работает? есть пример post на php для odata ?

Получилось.

$url_1 = "http://localhost:8001/0/ServiceModel/EntityDataService.svc/ContactCollection/";

$requestDataService["Name"] = "123";
$jcres = json_encode($requestDataService);
$ch5 = curl_init($url_1);
curl_setopt($ch5, CURLOPT_COOKIEFILE, 'cookie.txt');

//curl_setopt($ch5, CURLOPT_HTTPHEADER, array(
//    'Accept: application/json;odata=verbose'));

curl_setopt($ch5, CURLOPT_COOKIEJAR,'cookie.txt');
curl_setopt($ch5, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch5, CURLOPT_POSTFIELDS, $jcres);
curl_setopt($ch5, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch5, CURLOPT_HEADER   ,FALSE);
curl_setopt($ch5, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json;odata=verbose',
        'BPMCSRF: ' .$token,
        'Content-Length: ' . strlen($jcres))
);

$result5 = curl_exec($ch5);
curl_close($ch5);
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

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

1. В BaseCommunicationDetail существует биндинг поля enabled на метод getCommunicationEnabled, но метод getCommunicationEnabled не вызывается.
2. Сможем ли мы в теории посмотреть в таком методе на параметр новизны записи?

У меня такой же вопрос

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

Добрый день, Егор!

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

Этот метод достаточно сложно переопределить, так как он находится в BaseComunicationViewModel.

Проще переопределить метод getCommunicationItemViewConfig в BaseCommunicationDetail в котором модифицировать поле enabled у редактируемого поля.

А чтобы определить новый это объект создается или нет, можно в этой же детали добавить атрибут или переменную булеовго типа и переопределить метод addItem, в котором переменную (например, isNewItem) менять на true, тогда в getCommunicationItemViewConfig смотря на эту переменную вы определите дальнейшее поведение.

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

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

Вопрос - возможно ли в элементе "Вопрос пользователю" бизнес-процесса вывести в тексте рабочую ссылку? Попытка задать ссылку в формуле с помощью html-тегов:

"<a href='ya.ru' target='_blank'>Яндекс</a>"

пока привела только к такому результату:

Ещё лучше было бы вывести ссылку в тексте, например "Перейти на <a href='ya.ru'>Яндекс</a>?" А вообще изначальная идея - формировать ссылку на заданную запись в самой же системе, "Что делать с " + [#Продукт#] + "?"

У меня такой же вопрос

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

Денис, здравствуйте!

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

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

Или же можно по аналогии сформировать ссылку на запись, примерный вид ссылки будет следующим:

"<a href = https://yourwebsite.bpmonline.com/0/Nui/ViewModule.aspx#CardModuleV2/Pr…"+[#Читать данные 1.Первый элемент результирующей коллекции.Id#].ToString()+">LinkBody</a>"

Но для корректной работы такой ссылке в подсказке необходимо проставить признак Компилируемый в процессе.

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

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

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

Станислав

У меня такой же вопрос

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

Добрый вечер!

В схеме ContactCareerPageInAccount есть цепочка методов:
1) save - всё идёт от сохранения
2) getContactCareerCollection - выборка из детали
3) onGetSelectResult - дальнейшая обработка с вопросом пользователю
4) getSelectedButton - обработка ответа пользователя
5) onAnswerNo - здесь Current ставится в false

Сергей, подскажите, пожалуйста, немного детальнее.

Если я правильно понял - мне нужно:
1. Создать "Замещающий клиентский модуль".

2. В качестве родительского объекта выбрать "Страница редактирования карьеры контакта в контрагенте".

3. Скопировать весь код из "ContactCareerPageInAccount"

4. Изменить функцию "onAnswerNo", чтобы значение "Current" не менялось.

5. Сохранить все

После проделывания этой операции ничего не меняется. Пробовал варианты:
а) удалял строчку update.setParameterValue('Current', true);

б) менял строчку update.setParameterValue('Current', false); на update.setParameterValue('Current', true);

в) удалял полностью функцию "onAnswerNo"

г) в функции "getSelectedButton" вместо вызова функции "onAnswerNo" вызывал "onAnswerYes"

Реакции ноль. Подскажите, пожалуйста, что я делаю не так.

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

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

Замещающая схема находится в пакете Custom, он, на сколько я понимаю, связан со всеми другими пакетами.

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

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

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