Вообще, использовать такие сложные механизмы, как мне кажется, не всегда уместно. Справочники обычно меняют только админы, по умолчанию у пользователей и прав таких нет. Если есть необходимость добавлять значение, может, лучше будет создать процесс с преднастроенной или автогенерируемой страницей, который принимает от пользователя строку, выполняет проверки и в случае выполнения условий добавляет строку в справочник, можно даже в обход проверки прав. И пользователю дать возможность его запускать, а доступ на редактирование справочника напрямую убрать.
попытался реализовать через ClientMessageBridge, хочу повторить пример со статьи, но опять есть вопрос, с Процесса сообщение уходит, в ClientMessageBridge попадает, но потом хочу получить сообщение в нужной мне схеме,
я беру (BaseLookupConfigurationSection) так как этот функционал мне нужен при добавлении строки, но туда сообщение NewUserSet не доходит, как понять в чем ошибка?
А почему у Вас на странице, где будет ловиться сообщение, указано «"direction": Terrasoft.MessageDirectionType.PUBLISH», а не «"direction": Terrasoft.MessageDirectionType.SUBSCRIBE», как в примере? Не в этом ли дело?
Есть задача по интеграции сайта со сторонним приложением. На стороне реализовано api с рядом запросов. Но реализация сторонних запросов такова, что мне приходится в бизнес процессе вызывать запросы в цикле. Может кто-то подскажет вариант вызова вэб-сервиса в тексте задания-сценария БП?
Ольга, можно либо самостоятельно реализовать логику вызова сервиса кодом (пример есть тут), либо настроить нужный веб-сервис в разделе обычным образом, а затем взять код запуска в схеме WebServiceUserTask и скопировать его в функцию в разрабатываемом БП вместе со всеми вспомогательными функциями и параметрами, которую затем запускайте в своём скрипте в цикле. Вот основная логика оттуда:
if (ServiceUrl == Guid.Empty || string.IsNullOrEmpty(ServiceMethod)) {
return true;
}
string serviceUrl = (new Select(UserConnection)
.Column("URL")
.From("WebServiceURL")
.Where("Id").IsEqual(new QueryParameter("Id", ServiceUrl)) as Select)
.ExecuteScalar<string>();
HttpWebRequest webRequest = CreateWebRequest(serviceUrl, ServiceMethod);
string Request = @"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:web=""http://www.webserviceX.NET/"">
<soap:Header/>
<soap:Body>";
Request += RequestBodyInternal;
Request += @"
</soap:Body>
</soap:Envelope>";
webRequest.ContentLength = Request.Length;
using (Stream stream = webRequest.GetRequestStream()) {
using (StreamWriter streamWriter = new StreamWriter(stream)) {
streamWriter.Write(Request);
streamWriter.Close();
}
}
using (WebResponse response = webRequest.GetResponse()) {
using (StreamReader rd = new StreamReader(response.GetResponseStream())) {
Responce = rd.ReadToEnd();
}
}
PrepareResponceResult();
if (!IsLoggingRequestAndResponce) {
Request = string.Empty;
Responce = string.Empty;
}
return true;