Доброго дня!
Мені потрібно розмістити довідникове поле для вибору відповідального контакту на сторінці постобробки дзвінка.
Додаю поле наступним чином:
{
className: 'Terrasoft.LookupEdit',
id: 'ownerEdit',
width: '300px',
prepareList: {
bindTo: 'prepareResults' // не працює
}/*,
},

Мені потрібно привязати це поле до обєкту контактів. Тобто щоб при виборі цього поля підгружались всі контакти.(тобто як працюють всі довідникові поля на сторінках)

Нравится

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

Здравствуйте, без доступа к конфигурации сложно что-то говорить, но, насколько понял, физического поля у вас в объекте нет, следовательно, вам нужно виртуальное поле, поищите в конфигурации по «VIRTUAL_COLUMN», там будут примеры как вывода виртуального LOOKUP, у меня нашлось такое в схеме RelationshipDetailPage.
Вот про примерно то же самое писали в этом комментарии:
http://www.community.terrasoft.ua/forum/topic/11510#comment-50868
Так и в EmailPage есть пример ENUM с конфигом который описывает два метода заполнения выпадающего списка. Выпадающий список еще встречался на форуме:
http://www.community.terrasoft.ua/forum/topic/9798#comment-41956

Віртуальні поля я можу додавати на сторінки, але не можу їх додавати на окремі контейнери (контейнер постобробки дзвінка - схема CtiPostProcessingUtilities). Зробмв так:
{
className: 'Terrasoft.LookupEdit',
id: 'ownerEdit',
width: '300px',
value: {
bindTo: 'ownerEdit'
},
loadVocabulary: {
bindTo: 'loadOwnerList'
}
}
loadOwnerList: function(args, tag) {
var config = {
entitySchemaName: "Contact",
multiSelect: false
};
var handler = function(args) {
var columnName = args.columnName;
var collection = args.selectedRows.collection;
if (collection.length > 0) {
this.set(columnName, collection.items[0]);
}
};
var centerPanel = Ext.get('centerPanel');
LookupUtilities.Open(sandbox, config, handler, this, centerPanel); // видає помилку message: Uncaught Terrasoft.UnsupportedTypeException: Message LookupInfo is not defined in undefined module
},

Соглашусь с Ильей - без доступа к конфигурации сложно что-то говорить.
Для поиска примера реализации выполните поиск в конфигурационных js файлах по слову “LookupInfo”.

Я всього лише хочу викликати метод базового модуля коробки LookupUtilities.Open

Повідомлення(message) "LookupInfo" має бути вже підключенне в базовому модулі LookupUtilities, де і використовується це повідомлення

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

По данному вопросу было оформлено обращение в техническую поддержку. Ответ будет предоставлен в рамках запроса.

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

Агенты-->Контрагенты. При нажатии на контрагента в контекстном меню правой кнопкой мышки открывается окно с функционалом(отправить е-mail, позвонить, объединить записи ........).
При наведении на отправить е-mail появляется окно(ответственный, создал, изменил). В это открытое окно надо добавить поле контакт. То есть должно появиться окно вида: отправить е-mail --> (контакт, ответственный, создал, изменил). Подскажите пожалуйста как найти функционал где реализован этот выпадающий список. Спасибо

Нравится

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

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

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

Здраствуйте. Не знаю как можно решить такую задачу: Есть раздел, в разделе выбирается запись1 и нажимается кнопка, на основе записи1 раздела должна создаваться запись2 в другом разделе с данными из записи1.

Нравится

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

Добрый день Павел!!!

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

Создано 2 раздела. Запросы и заявки. Из запроса должна формироваться заявка. В запросе есть кнопка, по нажатию на которую должна открываться заявка. В запросе есть несколько полей: контрагент, номер и тд(думаю это не слишком важно). В заявке есть аналогичные поля и они должны быть заполнены данными из запроса при создании заявки из запроса.

Для этого вам лучше воспользоваться инструментом Бизнес-процесс. И именно с помощью бизнес-процесса вы с легкостью выполните создание и копирование из одной сущности в другую. Примеры есть в конфигурации Sales к примеру - это создание Счета на Основание заказа. Или создание Заказа на основание Продажи. Можете ознакомиться с примерами данных бизнес-процессов и написать свой.

Спасибо за ответ. Первая идея и была сделать через БП, но решил убедиться, что иду в правильном направлении)

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

Добрый день!

Я занимаюсь разработкой интеграции с BPM'Online Sales.

Возникла проблема при авторизации через AuthService.svc.

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

Отправляю все как надо, в ответ получаю 200 OK и такой JSON:

24-May-2016 11:44:03.878 INFO [http-nio-8443-exec-5] org.glassfish.jersey.filter.LoggingFilter.log 1 * Sending client request on thread http-nio-8443-exec-5
1 > POST https://phonetcomua.bpmonline.com/ServiceModel/AuthService.svc/Login

1 > Accept: application/json
1 > Content-Type: application/json
{"UserName":"somename","UserPassword":"somepassword"}

24-May-2016 11:44:04.487 INFO [http-nio-8443-exec-5] org.glassfish.jersey.filter.LoggingFilter.log 2 * Client response received on thread http-nio-8443-exec-5
2 200
2 Cache-Control: private
2 Content-Length: 84
2 Content-Type: application/json; charset=utf-8
2 Date: Tue, 24 May 2016 08:43:51 GMT
2 Location: /0
2 Server: Microsoft-IIS/8.5
2 Set-Cookie: UserName=68, 101, 118, 101, 108, 111, 112, 101, 114; expires=Thu, 23-Jun-2016 08:43:51 GMT; path=/; HttpOnly,.ASPXAUTH=AEBC2921C6FBEBE4612FD14307AF11E804E0298A87BC385C174E603186BE8333241A99EA3772CDBC02B3AC8DFB606F1E9534F873B82B760736AA12BA20A0FFD874C00BF3AFB873A738AB6FC2CB76EE3F9CDA053F0EB93CC8401CE400461F06A85D398499283E9CF2E43FF97636D7727DD4014F44EFB0EA1CB06CF71737F81C7E5AEEEC759A663663E985D4A3FFF532A9DE867CE798F2B16F4A8E334E16244F2B839151AB7E6AF9A7C89E61B0683E45EA20EAAC47B223BA41752387F66940CDC65BA9CB3BB374403566677609E3C2312834E5E045B8F0BEF2A64AC13CA4D3D0D6C6868B94113D91DE4A25915B0E69E261034622F075CE48FA9A340076F80D439E6979DA6AFDEAF037828C7A98AA217C7DB41C9FEB; path=/; HttpOnly,BPMLOADER=5glxdkdc4po55ripfr4wrq5g; path=/; HttpOnly,BPMLOADER=5glxdkdc4po55ripfr4wrq5g; path=/; HttpOnly
2 X-AspNet-Version: 4.0.30319
2 X-Powered-By: ASP.NET
2 X-Terrasoft-UserCulture: ru-RU
{"Code":0,"Message":"","Exception":null,"PasswordChangeUrl":null,"RedirectUrl":null}

Как можно видеть из значения заголовка Set-Cookie сервер вернул мне 4 значения cookie: UserName, .ASPXAUTH и дважды BPMLOADER.

В куках нет BPMSESSIONID, который я получаю, если отправляю запрос через приложение для Chrome Postman.

Если я отправляю запрос через Postman, то в дальнейшем могу успешно проводить запросы на поиск контакта или лида, а при запросе через java при авторизации получаю не все cookie и поэтому дальнейшие запросы возвращают статус код 401
В чем может быть причина?

Нравится

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

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

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

В документации сказано, что делаем запрос на авторизацию и куки, которые вернулись нужно передавать в последующие запросы.

Когда делаю так, возвращается 401 ошибка.

Поэтому я и проверил через расширение. В нем после запроса на авторизацию сразу приходит BPMSESSIONID, что логично, по-моему.

А можно взглянуть на запрос, который Вы отправляете?

"Александр Зубков" написал:

А можно взглянуть на запрос, который Вы отправляете?

Да.

GET запрос на

25-May-2016 16:51:35.741 INFO [http-nio-8443-exec-2] org.glassfish.jersey.filter.LoggingFilter.log 1 * Sending client request on thread http-nio-8443-exec-2
1 > GET https://phonetcomua.bpmonline.com/0/ServiceModel/EntityDataService.svc/LeadCollection?$select=Id,LeadName,OwnerId&$filter=MobilePhone+eq+'%2B380442246595'+or+BusinesPhone+eq+'%2B380442246595'&$top=1
1 > Cookie: BPMSESSIONID=2jv1su0azu1kqpcy1jip4m4r;Version=1,.ASPXAUTH=01FF6F8F02911836A45EF840B527B75130FE1FFB263C1453F8A2C727370CAEEBF3DFD7773DA5C4FE0052509FC902AF8D80B5E91CB88309E5774A310E8E6711A8E27D9B185E3ECA38AD7D9F04F811DD11D82D2229299D3A13A2067ECE3B6FEE115658D844389757D4219890703C3CE3766482B86688E38F0FD3B660F878FA1D61F7AAED7CFE0564F56AAFBF5668B7882F6E8905928636E9CE1CF7305675E44058FB157B45D6BC830D7F74087FA9D2617A7312FE87413F932A7FD089D63F401B2929ABD44C20E5CE877E57E0C8C93C2799DBCCE844A2A20EC7B05A172E858424BDE13E6F1069877CD203E199674A92B7BEBB97E6C661470E9A23ADFCBF8C7D392436ED9195BCC9E171CC8EAF1E45DA346A4C537715;Version=1,BPMLOADER=zkjjiebb4gomec40pk1yemcy;Version=1,UserName="68, 101, 118, 101, 108, 111, 112, 101, 114";Version=1,BPMSESSIONID=2jv1su0azu1kqpcy1jip4m4r;Version=1,.ASPXAUTH=01FF6F8F02911836A45EF840B527B75130FE1FFB263C1453F8A2C727370CAEEBF3DFD7773DA5C4FE0052509FC902AF8D80B5E91CB88309E5774A310E8E6711A8E27D9B185E3ECA38AD7D9F04F811DD11D82D2229299D3A13A2067ECE3B6FEE115658D844389757D4219890703C3CE3766482B86688E38F0FD3B660F878FA1D61F7AAED7CFE0564F56AAFBF5668B7882F6E8905928636E9CE1CF7305675E44058FB157B45D6BC830D7F74087FA9D2617A7312FE87413F932A7FD089D63F401B2929ABD44C20E5CE877E57E0C8C93C2799DBCCE844A2A20EC7B05A172E858424BDE13E6F1069877CD203E199674A92B7BEBB97E6C661470E9A23ADFCBF8C7D392436ED9195BCC9E171CC8EAF1E45DA346A4C537715;Version=1,BPMLOADER=zkjjiebb4gomec40pk1yemcy;Version=1,UserName="68, 101, 118, 101, 108, 111, 112, 101, 114";Version=1
 
25-May-2016 16:51:36.236 INFO [http-nio-8443-exec-2] org.glassfish.jersey.filter.LoggingFilter.log 2 * Client response received on thread http-nio-8443-exec-2
2 < 401
2 < Cache-Control: private
2 < Content-Length: 6389
2 < Content-Type: text/html; charset=utf-8
2 < Date: Wed, 25 May 2016 13:51:20 GMT
2 < Server: Microsoft-IIS/8.5
2 < WWW-Authenticate: Basic
2 < X-Powered-By: ASP.NET
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>IIS 8.5 Detailed Error - 401.1 - Unauthorized</title> 
<style type="text/css"> 
<!-- 
body{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;} 
code{margin:0;color:#006600;font-size:1.1em;font-weight:bold;} 
.config_source code{font-size:.8em;color:#000000;} 
pre{margin:0;font-size:1.4em;word-wrap:break-word;} 
ul,ol{margin:10px 0 10px 5px;} 
ul.first,ol.first{margin-top:5px;} 
fieldset{padding:0 15px 10px 15px;word-break:break-all;} 
.summary-container fieldset{padding-bottom:5px;margin-top:4px;} 
legend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;} 
legend{color:#333333;;margin:4px 0 8px -12px;_margin-top:0px; 
font-weight:bold;font-size:1em;} 
a:link,a:visited{color:#007EFF;font-weight:bold;} 
a:hover{text-decoration:none;} 
h1{font-size:2.4em;margin:0;color:#FFF;} 
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.4em;margin:10px 0 0 0;color:#CC0000;} 
h4{font-size:1.2em;margin:10px 0 5px 0; 
}#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS",Verdana,sans-serif; 
 color:#FFF;background-color:#5C87B2; 
}#content{margin:0 0 0 2%;position:relative;} 
.summary-container,.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;} 
.content-container p{margin:0 0 10px 0; 
}#details-left{width:35%;float:left;margin-right:2%; 
}#details-right{width:63%;float:left;overflow:hidden; 
}#server_version{width:96%;_height:1px;min-height:1px;margin:0 0 5px 0;padding:11px 2% 8px 2%;color:#FFFFFF; 
 background-color:#5A7FA5;border-bottom:1px solid #C1CFDD;border-top:1px solid #4A6C8E;font-weight:normal; 
 font-size:1em;color:#FFF;text-align:right; 
}#server_version p{margin:5px 0;} 
table{margin:4px 0 4px 0;width:100%;border:none;} 
td,th{vertical-align:top;padding:3px 0;text-align:left;font-weight:normal;border:none;} 
th{width:30%;text-align:right;padding-right:2%;font-weight:bold;} 
thead th{background-color:#ebebeb;width:25%; 
}#details-right th{width:20%;} 
table tr.alt td,table tr.alt th{} 
.highlight-code{color:#CC0000;font-weight:bold;font-style:italic;} 
.clear{clear:both;} 
.preferred{padding:0 5px 2px 5px;font-weight:normal;background:#006633;color:#FFF;font-size:.8em;} 
--> 
</style> 
 
</head> 
<body> 
<div id="content"> 
<div class="content-container"> 
  <h3>HTTP Error 401.1 - Unauthorized</h3> 
  <h4>You do not have permission to view this directory or page using the credentials that you supplied.</h4> 
</div> 
<div class="content-container"> 
 <fieldset><h4>Most likely causes:</h4> 
  <ul> 	<li>The username supplied to IIS is invalid.</li> 	<li>The password supplied to IIS was not typed correctly. </li> 	<li>Incorrect credentials were cached by the browser.</li> 	<li>IIS could not verify the identity of the username and password provided.</li> 	<li>The resource is configured for Anonymous authentication, but the configured anonymous account either has an invalid password or was disabled.</li> 	<li>The server is configured to deny login privileges to the authenticating user or the group in which the user is a member.</li> 	<li>Invalid Kerberos configuration may be the cause if all of the following are true:</li> 	<ul> 		<li>Integrated authentication was used.</li> 		<li>the application pool identity is a custom account.</li> 		<li>the server is a member of a domain.</li> 	</ul> </ul> 
 </fieldset> 
</div> 
<div class="content-container"> 
 <fieldset><h4>Things you can try:</h4> 
  <ul> 	<li>Verify that the username and password are correct, and are not cached by the browser.</li> 	<li>Use a different username and password.</li> 	<li>If you are using a custom anonymous account, verify that the password has not expired.</li> 	<li>Verify that the authenticating user or the user's group, has not been denied login access to the server.</li> 	<li>Verify that the account was not locked out due to numerous failed login attempts.</li> 	<li>If you are using authentication and the server is a member of a domain, verify that you have configured the application pool identity using the utility SETSPN.exe, or changed the configuration so that NTLM is the favored authentication type.</li> 	<li>Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click <a href="http://go.microsoft.com/fwlink/?LinkID=66439">here</a>. </li> </ul> 
 </fieldset> 
</div> 
 
<div class="content-container"> 
 <fieldset><h4>Detailed Error Information:</h4> 
  <div id="details-left"> 
   <table border="0" cellpadding="0" cellspacing="0"> 
    <tr class="alt"><th>Module</th><td>&nbsp;&nbsp;&nbsp;AuthModule</td></tr> 
    <tr><th>Notification</th><td>&nbsp;&nbsp;&nbsp;EndRequest</td></tr> 
    <tr class="alt"><th>Handler</th><td>&nbsp;&nbsp;&nbsp;svc-Integrated-4.0</td></tr> 
    <tr><th>Error Code</th><td>&nbsp;&nbsp;&nbsp;0x00000000</td></tr> 
 
   </table> 
  </div> 
  <div id="details-right"> 
   <table border="0" cellpadding="0" cellspacing="0"> 
    <tr class="alt"><th>Requested URL</th><td>&nbsp;&nbsp;&nbsp;https://phonetcomua.bpmonline.com:443/0/ServiceModel/EntityDataService.svc/LeadCollection?$select=Id,LeadName,OwnerId&amp;$filter=MobilePhone+eq+'%2B380442246595'+or+BusinesPhone+eq+'%2B380442246595'&amp;$top=1</td></tr> 
    <tr><th>Physical Path</th><td>&nbsp;&nbsp;&nbsp;D:\App\phonetcomua\Terrasoft.WebApp\ServiceModel\EntityDataService.svc\LeadCollection</td></tr> 
    <tr class="alt"><th>Logon Method</th><td>&nbsp;&nbsp;&nbsp;Not yet determined</td></tr> 
    <tr><th>Logon User</th><td>&nbsp;&nbsp;&nbsp;Not yet determined</td></tr> 
 
   </table> 
   <div class="clear"></div> 
  </div> 
 </fieldset> 
</div> 
 
<div class="content-container"> 
 <fieldset><h4>More Information:</h4> 
  This error occurs when either the username or password supplied to IIS is invalid, or when IIS cannot use the username and password to authenticate the user. 
  <p><a href="http://go.microsoft.com/fwlink/?LinkID=62293&amp;IIS70Error=401,1,0x00000000,9600">View more information &raquo;</a></p> 
  <p>Microsoft Knowledge Base Articles:</p> 
 <ul><li>907273</li><li>871179</li><li>896861</li></ul> 
 
 </fieldset> 
</div> 
</div> 
</body> 
</html> 

Через Postman возвращает XML с данными, а если через Jersey(java-библиотека), получаю 401.

25-May-2016 17:00:17.050 INFO [http-nio-8443-exec-10] org.glassfish.jersey.filter.LoggingFilter.log 3 * Sending client request on thread http-nio-8443-exec-10
3 > POST https://phonetcomua.bpmonline.com/ServiceModel/AuthService.svc/Login
3 > Accept: application/json
3 > Content-Type: application/json
{"UserName":"Developer","UserPassword":"Password"}

25-May-2016 17:00:17.147 INFO [http-nio-8443-exec-10] org.glassfish.jersey.filter.LoggingFilter.log 4 * Client response received on thread http-nio-8443-exec-10
4 < 200
4 < Cache-Control: private
4 < Content-Length: 84
4 < Content-Type: application/json; charset=utf-8
4 < Date: Wed, 25 May 2016 14:00:00 GMT
4 < Location: /0
4 < Server: Microsoft-IIS/8.5
4 < Set-Cookie: UserName=68, 101, 118, 101, 108, 111, 112, 101, 114; expires=Fri, 24-Jun-2016 14:00:01 GMT; path=/; HttpOnly,.ASPXAUTH=B6CE704BC28B00303511E111A2C49FED9C626A2D1B630D24B2D621E84E9A758AC8D837E61C359C02E7CD6E3ABB2EC293E167CD753954949C5F114816676F61C3ED1CD7E9DCA769145CCE80BCE26948BFE588A030B64A446BC15F687B29E5A0D321FF6D09711E24E765B05B4E743D41EC5DDE4A05484446F79DECC8D37CA692D556CC54AB24D355A4EFD90D0B9A38AD5982AD941F0942D5C5758314EE7AC0DA62317C4505CF9B998B161050429109C83DDB76697522D4402478C615282EEA4328889425580751447BE7667DB33A532783E52A7486303B5C735480ECF02C25DB38CC52C78A1D196F7C23982F22ABB160C7C11EF7D0269969F32035906B3400EA2C7BDDB0F742A3A2C1F58025254588004A01F339EB; path=/; HttpOnly,BPMLOADER=cm20rhifoqh0xh2puzp0ovh4; path=/; HttpOnly,BPMLOADER=cm20rhifoqh0xh2puzp0ovh4; path=/; HttpOnly
4 < X-AspNet-Version: 4.0.30319
4 < X-Powered-By: ASP.NET
4 < X-Terrasoft-UserCulture: ru-RU
{"Code":0,"Message":"","Exception":null,"PasswordChangeUrl":null,"RedirectUrl":null}

78224 [http-nio-8443-exec-10] DEBUG teler.connector.bpmonline.BpmConnector  - authorize: Authorization is succeeded
25-May-2016 17:00:17.194 INFO [http-nio-8443-exec-10] org.glassfish.jersey.filter.LoggingFilter.log 5 * Sending client request on thread http-nio-8443-exec-10
5 > GET https://phonetcomua.bpmonline.com/0/ServiceModel/EntityDataService.svc/LeadCollection?$select=Id,LeadName,OwnerId&$filter=MobilePhone+eq+'%2B380442246595'+or+BusinesPhone+eq+'%2B380442246595'&$top=1
5 > Cookie: UserName=68;Version=1;Path=/;HttpOnly;Expires=Fri, 24 Jun 2016 14:00:01 GMT,.ASPXAUTH=B6CE704BC28B00303511E111A2C49FED9C626A2D1B630D24B2D621E84E9A758AC8D837E61C359C02E7CD6E3ABB2EC293E167CD753954949C5F114816676F61C3ED1CD7E9DCA769145CCE80BCE26948BFE588A030B64A446BC15F687B29E5A0D321FF6D09711E24E765B05B4E743D41EC5DDE4A05484446F79DECC8D37CA692D556CC54AB24D355A4EFD90D0B9A38AD5982AD941F0942D5C5758314EE7AC0DA62317C4505CF9B998B161050429109C83DDB76697522D4402478C615282EEA4328889425580751447BE7667DB33A532783E52A7486303B5C735480ECF02C25DB38CC52C78A1D196F7C23982F22ABB160C7C11EF7D0269969F32035906B3400EA2C7BDDB0F742A3A2C1F58025254588004A01F339EB;Version=1;Path=/;HttpOnly,BPMLOADER=cm20rhifoqh0xh2puzp0ovh4;Version=1;Path=/;HttpOnly

78301 [http-nio-8443-exec-10] INFO teler.connector.bpmonline.BpmConnector  - Request 'https://phonetcomua.bpmonline.com/0/ServiceModel/EntityDataService.svc/LeadCollection' returns 401 status
25-May-2016 17:00:17.269 INFO [http-nio-8443-exec-10] org.glassfish.jersey.filter.LoggingFilter.log 6 * Client response received on thread http-nio-8443-exec-10
6 < 401
6 < Cache-Control: private
6 < Content-Length: 6389
6 < Content-Type: text/html; charset=utf-8
6 < Date: Wed, 25 May 2016 14:00:00 GMT
6 < Server: Microsoft-IIS/8.5
6 < WWW-Authenticate: Basic
6 < X-Powered-By: ASP.NET
 
 
 
IIS 8.5 Detailed Error - 401.1 - Unauthorized 
 
 
 
 
 
 
 
 
  

HTTP Error 401.1 - Unauthorized

You do not have permission to view this directory or page using the credentials that you supplied.

Most likely causes:

  • The username supplied to IIS is invalid.
  • The password supplied to IIS was not typed correctly.
  • Incorrect credentials were cached by the browser.
  • IIS could not verify the identity of the username and password provided.
  • The resource is configured for Anonymous authentication, but the configured anonymous account either has an invalid password or was disabled.
  • The server is configured to deny login privileges to the authenticating user or the group in which the user is a member.
  • Invalid Kerberos configuration may be the cause if all of the following are true:
    • Integrated authentication was used.
    • the application pool identity is a custom account.
    • the server is a member of a domain.

Things you can try:

  • Verify that the username and password are correct, and are not cached by the browser.
  • Use a different username and password.
  • If you are using a custom anonymous account, verify that the password has not expired.
  • Verify that the authenticating user or the user's group, has not been denied login access to the server.
  • Verify that the account was not locked out due to numerous failed login attempts.
  • If you are using authentication and the server is a member of a domain, verify that you have configured the application pool identity using the utility SETSPN.exe, or changed the configuration so that NTLM is the favored authentication type.
  • Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click here.

Detailed Error Information:

Module   AuthModule Notification   EndRequest Handler   svc-Integrated-4.0 Error Code   0x00000000 Requested URL   https://phonetcomua.bpmonline.com:443/0/ServiceModel/EntityDataService.svc/LeadCollection?$select=Id,LeadName,OwnerId&$filter=MobilePhone+eq+'%2B380442246595'+or+BusinesPhone+eq+'%2B380442246595'&$top=1 Physical Path   D:\App\phonetcomua\Terrasoft.WebApp\ServiceModel\EntityDataService.svc\LeadCollection Logon Method   Not yet determined Logon User   Not yet determined

More Information:

This error occurs when either the username or password supplied to IIS is invalid, or when IIS cannot use the username and password to authenticate the user.

View more information »

Microsoft Knowledge Base Articles:

  • 907273
  • 871179
  • 896861

Здравствуйте.
На вскидку видно, что нужно передать http header-ы в запрос:
Authorization: Cookie
ForceUseSession: true

"Александр Зубков" написал:

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

На вскидку видно, что нужно передать http header-ы в запрос:

Authorization: Cookie

ForceUseSession: true

Спасибо! Я попробую, но в документации об этом ни слова)

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

Добрый день.
Необходимо создать всплывающее окно при нажатии на кнопку "Отправить смс" на CTI панели.
В всплывающем окне необходимо разместить Справочник, Текстовое поле, и две кнопки Отправить и Отмена. И реализовать Логику отправки XML на некий урл.
Похожее окно есть в мастере раздела при добавлении нового поля(например). Скрин прикреплю.
И похоже при добавлении адреса доставки в "Заказе". Как вызвать его я не очень понимаю.

Подскажите как правильно(легче) это реализовать(любое из этих двух окон)?
В каком направлении вообще искать?

Нравится

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

Добрый день Дмитрий!!!

судя по скриншотам у вас версия 7.7. на первой картинке изображено Модальное окно созданное вручную. Базового инструмента в 7.7 генерирующие Модальные окна нет, как это к примеру сделано с Базовой схемой карточки редактирования. На втором скриншоте изображено PopUp окно. и данное окно можно привязать к любой кнопке, к любому событию. Легче реализовать 2 скриншот, так как все инструменты для генерации данного окна в системе есть. И там его не так сложно создавать вручную. Нужно только разобраться как работает данное окно при Добавление адреса, на карточки редактирования Заказа. Но еще раз повторюсь сложностей там никаких нет.

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

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

Василий сам код вам ничего не даст. Если разбирать вызов окна по кнопке "Добавить адрес" на детали "Адрес доставки", то могу ответить, что метод с помощью которого происходит открытие PopUp окна это   showCard: . Данный метод вызывается и отрабатывается, когда пользователь нажимает на Радио-кнопку "Добавить адрес".

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

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

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

В объекты [Продукт в заказе] и [Продукт в счете] добавилось вычисляемое поле [Цена со скидкой]. Встала задача перенесения значения этого поля из продукта в заказе в продукт в счете при создании счета на основе заказа. Подскажите, пожалуйста, как это сделать? Заранее благодарю!

Нравится

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

Попробуйте с помощью бизнес процесса, который стартует по сигналу создания счета:
https://academy.terrasoft.ru/documents/technic-bpms/7-8-0/obzor-vozmozh…

Добрый день Дмитрий!!!

перенос продуктов из Заказа в Счет происходит при выполнение бизнес-процесса "CreateInvoiceFromOrder". Если вы Дмитрий добавили новые вычисляемые поля в таблицы продуктов Заказа и Счета и вам требуется их переносить. Тогда мой совет скопировать бизнес-процесс "CreateInvoiceFromOrder" с новым названием и отредактировать элемент бизнес-процесса "Добавить продукты в счет", добавив свои новые созданные поля. После сохранить и опубликовать процесс. Далее вам требуется заместить страницу редактирования OrderPageV2 и добавить в Методы следующий замещающий код: (пример)

     /**
     * Запускает процесс создания счета по заказу.
     * @private
     */
     createInvoice: function() {
          ProcessModuleUtilities.executeProcess({
               sysProcessName: "NewCreateInvoiceFromOrder",
                    parameters: {
                                          CurrentOrder: this.get("Id")
                                     }
          });
     }

где "NewCreateInvoiceFromOrder" - это наш созданный новый бизнес-процесс. Если вы Дмитрий желаете выполнить перенос продуктов другим способом, то прошу озвучить как вам требуется? спасибо!!!

Благодарю, Михаил! Но данный способ подходит, если счет создается из действия "Создать счет на основании заказа". В нашем случае счет создается со вкладки "Паспорт заказа" с детали "График поставок и оплат": "+"-> 100% предоплата -> "Создать" счет на строке "Полная оплата товара". Как запустить процесс в этом случае?

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

"Дмитрий Д." написал:В нашем случае счет создается со вкладки "Паспорт заказа" с детали "График поставок и оплат": "+"-> 100% предоплата -> "Создать" счет на строке "Полная оплата товара". Как запустить процесс в этом случае?

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

Спасибо, Михаил! Действительно, рабочее решение, только вместо метода getInvoiceInsertQuery() правильнее переопределить getInvoiceProductInsertQuery(). Вот что у меня получилось в SupplyPaymentDetailV2:

getSupplyPaymentProductEntitySchemaQuery: function() {
	var esq = this.callParent(arguments);
 
	esq.addColumn("Product.UsrPriceWithDiscount", "UsrPriceWithDiscount");
	return esq;
},
 
getInvoiceProductInsertQuery: function(config, i) {
	var insert = this.callParent(arguments);
 
	var product = config.products.getByIndex(i);
	insert.setParameterValue("UsrPriceWithDiscount", product.get("UsrPriceWithDiscount"), this.Terrasoft.DataValueType.MONEY);	
	return insert;
}

Пожалуйста Дмитрий. Сейчас все получилось, что вы хотели? или еще остались вопросы?

Да, есть еще вопрос. При добавлении к заказу продукта у него автоматически рассчитывается [Сумма], [Сумма налога] и [Итого]. Мне нужно сюда же добавить логику расчета поля [Цена со скидкой]. Где я могу это сделать? Можно, конечно, в методе onEntityInitialized() карточки редактирования OrderProductPageV2, но мне кажется, что этим занимается какой-то бизнес-процесс.

"Дмитрий Д." написал:

Да, есть еще вопрос. При добавлении к заказу продукта у него автоматически рассчитывается [Сумма], [Сумма налога] и [Итого]. Мне нужно сюда же добавить логику расчета поля [Цена со скидкой]. Где я могу это сделать? Можно, конечно, в методе onEntityInitialized() карточки редактирования OrderProductPageV2, но мне кажется, что этим занимается какой-то бизнес-процесс.

Добрый день Дмитрий!!!

Если я правильно вас понял Дмитрий, то речь идет об обновление полей Заказа, после добавления продукта в Заказ, весь расчет перечисленных вами полей происходит в бизнес-процессе схемы таблицы Продукты в заказе ("OrderProduct"), метод "RecalculateOrderAmount".

Если нужно пересчитывать поля в продукте заказа после сохранение заказа, то за это отвечает бизнес-процесс схемы таблицы Заказы метод "SetOrderProductCurrency"

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

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

"Дмитрий Д." написал:не совсем понятно, в какой схеме искать указанный вами метод?

Как выше написал Михаил, в схеме [OrderProduct].
Прикрепил скриншот для наглядности.

У нас в схеме [OrderProduct] нет такого метода, зато он есть в схеме [Order]. Каким образом возможно переопределить и дополнить этот метод в кастомном пакете?

Нужно просто заместить нужный Вам объект (в Вашем случае это [Order]). А уже в замещенном объекте можете переопределять этот метод в зависимости от своих потребностей. Если уже есть замещенный объект в пакете Custom, то просто открыть двойным кликом по методу и переопределить нужным Вам образом.

Давайте еще раз по порядку. Я переопределил схему [OrderProduct], открыл соответствующий ей процесс. Там есть методы UpdatePrimaryAmounts() и RecalculateOrderAmount() (как на скриншоте). Куда я могу вставить логику расчета кастомного поля объекта [OrderProduct], которая должна сработать при создании объекта (то есть при добавлении продукта в заказ)?

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

Дмитрий день добрый!!!

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

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

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

Есть SQL-запрос:

SELECT [Name] [ProductName], [UsrProductS1].[UsrBalanceProduct] [Balance]
   FROM [Product] [Product]
LEFT OUTER JOIN [UsrProductStockStore] [UsrProductS1]
  ON ([UsrProductS1].[UsrProductId] = [OrderProduct].[ProductId]
  AND [UsrProductS1].[UsrStoreHouseId] = '168cee1e-d573-432e-b5f7-c945c85aa6fe')

Необходимо перевести его на EntitySchemaQuerry. На community и в SDK не нашел как реализовать подобный запрос. Прошу помочь, заранее спасибо!

Нравится

3 комментария
var usrStoreHouseId = "168cee1e-d573-432e-b5f7-c945c85aa6fe";
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
     rootSchemaName: "Product"
});
esq.addColumn("Name", "ProductName");
esq.addColumn("UsrProductStockStore.UsrBalanceProduct", "Balance");
esq.addColumn("UpoDayInCalendar");
esq.filters.add("storeHouseFilter", this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrProductStockStore.UsrStoreHouse", usrStoreHouseId));

рекомендации usrStoreHouseId выводить в константы, чтобы код был читабельным.

"Шамшин_Олег" написал:LEFT OUTER JOIN [UsrProductStockStore] [UsrProductS1]
  ON ([UsrProductS1].[UsrProductId] = [OrderProduct].[ProductId]

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

Да, в запросе опечатался, вместо   [OrderProduct] нужно  [Product] .
Немного переделал ваш запрос и всё заработало, спасибо.

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

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

В нашей системе есть раздел Отправка писем почтой и необходимо, чтобы была возможность массовой печати писем. Если пользоваться штатными средствами (multiselect и выбор печатной формы в меню печать), то у нас открываются множество диалогов с предложением сохранить файл печатной формы (количество соответствует количеству выбранных записей в реестре), что очень неудобно. Можно ли, и как сделать, чтобы в случае такой массовой печати не открывались диалоги, а печатные формы сохранялись сразу, например, в папку указанную в специально созданной системной настройке?

Нравится

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

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

а из какого браузера выполняете массовое сохранение файлов на диск? к примеру у меня Google Chrome. И настройка "предлагать куда сохранять файл" выключена. И файлы сохраняются в любом количестве в определенное место на моем диске. Но я данный функционал еще и реализовал через бизнес-процесс. Т.е запускается бизнес-процесс и сохраняет файлы в опеределенную папке. Задача стояла выгрузить из программы Файлы со структурой проекта. Я ее решал посредствам логики бизнес-процесса.

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

"Орленко Андрей Николаевич" написал:Браузер Опера 35. Действительно забыл про эту настройку. Выгружать нужно на сетевую папку. То есть, чтобы это работало через клиента, нужно, чтобы каждый клиент был настроен на сохранение в эту папку и чтобы имел доступ к ней. Все же лучше бы это (сохранение куда следует) выполнял сервер.

Вопросы:
1. Конфигурация у вас On-Site или On-Demand?
2. Как вы хотите чтобы Пользователь узнал о сохранение через уведомление или как?
3. Настройка на папку выгрузки для каждого пользователя должны быть своя или для всех идентичная?
4. Как часто данную задачу будут выполнять пользователи?

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

Спасибо!!!

1. On-Site
2. Да было бы замечательно, чтобы было какое-то уведомление.
3. Для всех идентичная
4. Ежедневно. Может раз в несколько дней.

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

Здравствуйте.
Пробую настроить валидацию для поля Начало активности.
Делаю как описано тут: https://academy.terrasoft.ru/documents/technic-sdk/7-8-0/dobavlenie-vali...

Вот по этому коду у меня получилось настроить поле чтобы Начало было пощдже чем дата создания

define("ActivityPageV2", [],
    function () {
        return {
            // Название схемы объекта страницы редактирования.
            entitySchemaName: "Activity",
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
            // Коллекция методов модели представления.
            methods: {
                // Метод-валидатор значения колонок [DueDate] и [CreatedOn].
                dueDateValidator: function () {
                    // Переменная для хранения сообщения об ошибке валидации.
                    var invalidMessage = "";
                    // Проверка значений колонок [DueDate] и [CreatedOn].
                    if (this.get("DueDate") this.get("CreatedOn")) {
                        // Если значение колонки [DueDate] меньше значения колонки [CreatedOn],
                        // в переменную invalidMessage помещается значение локализуемой строки с сообщением
                        // об ошибке валидации.
                        invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");
                    }
                    // Объект, свойства которого содержат сообщения об ошибке валидации.
                    // Если валидация прошла успешна, в объекте возвращаются пустые строки.
                    return {
                        // Сообщение об ошибке валидации, которое отображается в информационном окне
                        // при сохранении страницы.
                        fullInvalidMessage: invalidMessage,
                        // Сообщение об ошибке валидации, которое отображается под элементом управления.
                        invalidMessage: invalidMessage
                    };
                },
                // Переопределение базовой функции, инициализирующей пользовательские валидаторы.
                setValidationConfig: function () {
                    // Вызывает инициализацию валидаторов родительской модели представления.
                    this.callParent(arguments);
                    // Для колонки [DueDate] добавляется метод-валидатор dueDateValidator.
                    this.addColumnValidator("DueDate", this.dueDateValidator);
                    //Для колонки [CreatedOn] добавляется метод-валидатор dueDateValidator.
                    this.addColumnValidator("CreatedOn", this.dueDateValidator);
                }
            }
        };
    });

Но мне еще нужно сделать так чтобы начало было не поздже чем через две недели после создания.
Я знаю что это нужно добавить в условие if, но не понимаю как написать...
Будет что-то такого типа?

if ((this.get("DueDate") this.get("CreatedOn"))&&((this.get("DueDate") > this.get("CreatedOn")+14))

Подскажите пожалуйстя этот момент.
Спасибо!

Нравится

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

Добрый день Николай!!!

вы не знаете как средствами JavaScript к числу прибавить 14 дней? вам это подсказать? или в чем у вас возникла трудность при написании валидации?

Да, именно в этом вопрос - как прибавить к дате 14 дней.

"Сергиенко Николай Петрович" написал:

Да, именно в этом вопрос - как прибавить к дате 14 дней.


http://stackoverflow.com/questions/563406/add-days-to-datetime

var today = new Date(),
     inFourteen = new Date();
inFourteen.setDate(today.getDate()+14);
alert("сегодня: "+today+" Через 14 дней: "+inFourteen);

вот пример прибавление к текущей дате 14 дней

"Власов Михаил Викторович" написал:вот пример прибавление к текущей дате 14 дней

А можно пример добавления 14 рабочих дней в bpm'online?

"Владимир Соколов" написал:А можно пример добавления 14 рабочих дней в bpm'online?

Владимир вам требуется пример на C# или JavaScript?

Здравствуйте.
Попробовал на демо Версии 7.8.0.1005 - код работает. И логика валидации работает.
Код:

define("ActivityPageV2", [],
    function () {
        return {
            // Название схемы объекта страницы редактирования.
            entitySchemaName: "Activity",
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
            // Коллекция методов модели представления.
            methods: {
                // Метод-валидатор значения колонок [DueDate] и [CreatedOn].
                dueDateValidator: function () {
                    // Переменная для хранения сообщения об ошибке валидации.
                    var invalidMessage = "";
                    var today = this.get("CreatedOn"),
                    inFourteen = new Date();
                    inFourteen.setDate(today.getDate()+14);
                    //alert("сегодня: "+today+" Через 14 дней: "+inFourteen+" StartDate: "+this.get("StartDate"));
                    //alert("сегодня: "+this.get("StartDate"));
                    // Проверка значений колонок [DueDate] и [CreatedOn].
                    if ((this.get("StartDate") < this.get("CreatedOn"))||(this.get("StartDate") > inFourteen)) {
                        // Если значение колонки [DueDate] меньше значения колонки [CreatedOn], 
                        // в переменную invalidMessage помещается значение локализуемой строки с сообщением
                        // об ошибке валидации.
                        invalidMessage = this.get("Resources.Strings.CreatedOnLessDueDate");
                    }
                    // Объект, свойства которого содержат сообщения об ошибке валидации.
                    // Если валидация прошла успешна, в объекте возвращаются пустые строки.
                    return {
                        // Сообщение об ошибке валидации, которое отображается в информационном окне
                        // при сохранении страницы.
                        fullInvalidMessage: invalidMessage,
                        // Сообщение об ошибке валидации, которое отображается под элементом управления.
                        invalidMessage: invalidMessage
                    };
                },
                // Переопределение базовой функции, инициализирующей пользовательские валидаторы.
                setValidationConfig: function () {
                    // Вызывает инициализацию валидаторов родительской модели представления.
                    this.callParent(arguments);
                    // Для колонки [DueDate] добавляется метод-валидатор dueDateValidator.
                    this.addColumnValidator("StartDate", this.dueDateValidator);
                    //Для колонки [CreatedOn] добавляется метод-валидатор dueDateValidator.
                    this.addColumnValidator("CreatedOn", this.dueDateValidator);
                }
            }
        };
    });

У нас стоит система bpm online sales commerce Версия 7.7.0.2875. Если я прописую этод код тут, то страница редактирования активности перестает загружаться и в консоли вижу ошибки:

С чем это может быть связано и как эти ошибки устранить. Спасибо.

"Сергиенко Николай Петрович" написал:var today = this.get("CreatedOn"),

Здесь синтаксическая ошибка. Заканчивается на "," а должна строка для интерпритатора заканчиваться ";". Это первое что увидел. Второе проверьте в Дебагере что возвращает или не возвращает строка  this.get("CreatedOn")

у вас ошибка Николай выходит на строчке

inFourteen.setDate(today.getDate()+14);

система в консоли говорит что не может получить метод  getDate() у переменной  today

Так запятая стоит потому что после переменной today идет еще переменная inFourteen - поэтому там запятая.
Я проверял alert-ом this.get("CreatedOn"). Там записывается дата создания.
Да и код этот работает в демо Версии 7.8.0.1005.

Я не понимаю почему не работает в версии 7.7.0.2875

"Сергиенко Николай Петрович" написал:Я проверял alert-ом this.get("CreatedOn"). Там записывается дата создания.

Проверяли Сергей в 7.7? я просто у себя проверил в 7.7 да на странице редактирование при получение реквизита "CreatedOn" доступен свободно метод "getDate()".

Проверял в 7.8. В 7.7 this.get("CreatedOn") тоже нормально работает.
Может в 7.7 нужно еще какие-то пакеты подлючать?
Реально проблема в строчке

inFourteen.setDate(today.getDate()+14);

Если ее закоментить работает, но мне нужно както передать в inFourteen дату через 14 дней.

Подскажите что можна тут поделать?

Если честно Николай магия да и только. пробовал ваш код применить на своей 7.7 конфигурации. У меня все работает без ошибок. Моя рекомендация все разделить на отдельные переменные как вариант и в Дебаггере протестировать что возвращается и какого типа возвращается. Такое ощущение у меня складывается что переменная "today" у вас не локальная а глобальная и где то она переопределяется, но это всего лишь предположение. Больше мысли в голову новые пока никакие не лезут. Пакеты подключать никакие новые не нужно, они никакого влияния не окажут. Поэтому только совет разделить задачу на очень мелкие кирпичики и в Дебагере смотреть, что пошло в одном из кирпичиков не по плану.

"Сергиенко Николай Петрович" написал:Подскажите что можна тут поделать?

Вот так получилось в 7.7, попробуйте:

addDays: function(date, days) {
	var result = new Date(date);
	result.setDate(result.getDate() + days);
	return result;
},
dueDateValidator: function() {
	var invalidMessage = "";
	var today = this.get("CreatedOn");
	var inFourteen = this.addDays(today, 14);
 
	if (this.get("StartDate") > inFourteen) {
		invalidMessage = "Дата начала не может быть больше чем 14 дней спустя даты оздания";
	}
		if (this.get("StartDate") < this.get("CreatedOn")) {
		invalidMessage = "Дата начала не может быть меньше даты создания.";
	}
 
	return {
		fullInvalidMessage: invalidMessage,
		invalidMessage: invalidMessage
	};
},
 
setValidationConfig: function() {
	this.callParent(arguments);
	this.addColumnValidator("StartDate", this.dueDateValidator);
	this.addColumnValidator("CreatedOn", this.dueDateValidator);
}

"Власов Михаил Викторович" написал:
Владимир Соколов пишет:

А можно пример добавления 14 рабочих дней в bpm'online?

Владимир вам требуется пример на C# или JavaScript?

В данном случае C#, но может быть и JavaScript

"Владимир Соколов" написал:
Власов Михаил Викторович пишет:

Владимир Соколов пишет:

А можно пример добавления 14 рабочих дней в bpm'online?

Владимир вам требуется пример на C# или JavaScript?

В данном случае C#, но может быть и JavaScript


С учётом праздников на 2017-2018 года.

public DateTime AddWorkDays(DateTime date, int workingDays)
{
    int direction = workingDays < 0 ? -1 : 1;
    DateTime newDate = date;
    while (workingDays != 0)
    {
        newDate = newDate.AddDays(direction);
        if (newDate.DayOfWeek != DayOfWeek.Saturday &&
        newDate.DayOfWeek != DayOfWeek.Sunday &&
        !IsHoliday(newDate) || newDate == new DateTime(2018,06,06))
        {
            workingDays -= direction;
     	}
    }
    return newDate;
}
 
public bool IsHoliday(DateTime date)
{
    DateTime[] holidays = new DateTime[] {
    	new DateTime(2017,05,01),
        new DateTime(2017,05,08),
        new DateTime(2017,05,09),
        new DateTime(2017,06,12),
        new DateTime(2017,11,06),
        new DateTime(2018,01,01),
        new DateTime(2018,01,02),
        new DateTime(2018,01,05),
        new DateTime(2018,01,06),
        new DateTime(2018,01,07),
        new DateTime(2018,01,08),
        new DateTime(2018,01,09),
        new DateTime(2018,02,23),
        new DateTime(2018,03,09),
        new DateTime(2018,05,01),
        new DateTime(2018,05,04),
        new DateTime(2018,05,11),
        new DateTime(2018,06,12),
        new DateTime(2018,11,04)
    };
    return holidays.Contains(date.Date);
}
Показать все комментарии

Добрый день!!!

тестирую конфигурацию 7.8.0.1005_SalesEnterprise_Marketing_ServiceEnterprise_Softkey_MSSQL_RUS и обнаружил следующую ошибку: При редактирование Рабочего календаря, к примеру заполняя "Рабочее время", для полей где указано "Установите рабочее время", ошибка выходит следующая запись в таблице "WorkingTimeInterval" создается запись, но поле "DayInCalendarId" не заполняется. В результате на экране ничего не видно. стал разбираться и обнаружил где ошибка. Ошибка закралась в схеме "DayInCalendarMiniPage" в методе "insertIntervalQuery"

    insertIntervalQuery: function(item) {
        var insert = this.Ext.create("Terrasoft.InsertQuery", {
            rootSchemaName: "UpoWorkingTimeInterval"
        });
        insert.setParameterValue("Id", item.get("Id"), this.Terrasoft.DataValueType.GUID);

insert.setParameterValue(this.entitySchemaName, this.get("Id"), this.Terrasoft.DataValueType.GUID);
        insert.setParameterValue("To", item.get("ToValue"), this.Terrasoft.DataValueType.DATE_TIME);
        insert.setParameterValue("From", item.get("FromValue"), this.Terrasoft.DataValueType.DATE_TIME);
        return insert;
    },

в строчке выделенной жирным и закралась ошибка - this.get("Id") ничего не возвращает.

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

Нравится

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

Добрый день, Михаил!
Данная функциональность "миникарточка сроков" в продукте пока выключена. И в релизе, на данном этапе, не участвует.
Схема, которую Вы указали "DayInCalendarMiniPage", как и весь функционал в целом - находиться на стадии альфа тестирования и находиться в разработке.

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

Спасибо за понимание и удачного Вам дня!

"Михайленко Михаил" написал:Данная функциональность "миникарточка сроков" в продукте пока выключена. И в релизе, на данном этапе, не участвует.

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

"Александр Кудряшов" написал:А как же топикстартеру обратиться то к ней удалось и ошибку увидеть?

Мы гуру и все видем :)

"Александр Кудряшов" написал:Данная функциональность "миникарточка сроков" в продукте пока выключена. И в релизе, на данном этапе, не участвует

Добрый день Михаил!!!

я к данной функциональности смог обратиться, тестирую работу раздела Обращения, и в карточке обращения, выбирая "календарь", увидел что можно редактировать календарь, и программа мне дала открыть карточку редактирования календаря. И поэтому я и написал об ошибки. Решения я и не требую я уже данную ошибку в рамках своего теста поправил, и для меня это не критичная ошибка была.

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

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

"Власов Михаил Викторович" написал:Мы гуру и все видем :)

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

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

Под замок не нужно, я считаю что нужно выделять Девелоперов среди партнеров или Пользователей, что решили принимать участие в продуктивном тестирование Продукта, как это к примеру делает компания Apple, и выдавать нерелизные сборки для тестирования. И уже поверте, какая бы команда не была огромная в команде Террасофт, если бы помогали Партнеры и Опытные пользователи, подписавшиеся на тестирование, то это было бы просто здорово. И продукты компании Террасофт становились все лучше и лучше , совершенствовались все быстрее и быстрее, с каждым днем. Вот мое мнение. И я безумно был бы рад если бы руководство компании пересмотрела данный регламент по тестированию. Спасибо!!!

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

Можно и на этапе проектирования :)

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