Подскажите, как  получить файл описания сервиса (WSDL) ?

/0/dataservice/soap12 отвечает "Autogenerated WSDLs are not supported with this configuration"

 

Service Enterprise 7.11

Нравится

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

Добрый день,

Для того, что бы получить описание сервиса, к примеру EntityDataService, необходимо перейти по адресу:  

[адрес приложения BPMonline]/0/ServiceModel/EntityDataService.svc/?singleWsdl

Ели не wsdl не поддерживается, то же описание вы можете получить по адресу:

[адрес приложения BPMonline]/0/ServiceModel/EntityDataService.svc/?xsd=1

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

Товарищи помогите решить задачу.

Есть справочное поле и собственно сам справочник, открывающийся в модальном окне.

Справочник вида :Название - Описание.

Задача фильтровать значения по колонке описание

Я так понимаю что в атрибутах я должен сделать что-то вроде

"UsrDebtorStatus":{
  dataValueType: Terrasoft.DataValueType.LOOKUP,
  lookupListConfig: {
      filter: function() {
      var description= "Дебитор";
      return Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "????????????",description);
              }
      }
  }

 

Нравится

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

если UsrDebtorStatus — обычный справочник, то скорее всего Name. Обычно 2 параметром идёт колонка из объекта (в "кубик" UsrDebtorStatus загляните). Ну и лучше всего по guid-у сортировать

Роман, добрый день!

Необходимую Вам фильтрацию поля в версии 7.11 можно реализовать с помощью пользовательской настройки "Бизнес-правила". 

Для реализации Вашей бизнес-задачи необходимо выполнить следующие шаги:

1. Согласно базовой логике приложения, для того, чтоб иметь возможность реализовать фильтрацию в зависимости от типа клиента, колонка, которая содержит записи типов клиентов (в справочнике), должна быть с типом "Справочник". Данную колонку необходимо добавить в разделе "Конфигурация":

  - найти объект, который является Вашим справочником

  - открыть объект, развернуть его наполнение объекта, нажать правой кнопкой мыши на "Inherited Columns", выбрать "Добавить", выбрать тип колонки "Справочник";

  - в свойствах созданной колонки, в поле «Справочник» указать справочник типов, по которому необходимо будет выполнять фильтрацию;

  - опубликовать объект.



2. На странице раздела, в которой будет присутствовать справочное поле, настроить бизнес-правило:

  - добавить действие бизнес-правила "Добавлять фильтр значений в поле"

  - указать в поле "какую колонку фильтровать и по какой связи в справочнике этого поля" - созданное справочное поле по связи с полем, в котором указан тип клиента;

  - указать в поле "по какому полю фильтровать" поле на странице раздела, в котором указан тип клиента;

  - сохранить изменения.

Больше о настройке бизнес-правил Вы сможете узнать на Академии: https://academy.terrasoft.ru/documents/sales-enterprise/7-11/nastroyka-biznes-pravil

Также на Академии есть информация по разработке бизнес-правила фильтрации: https://academy.terrasoft.ru/documents/technic-sdk/7-11/primer-primeneniya-pravila-filtration, но мы рекомендуем использовать функционал Бизнес-правил в Мастере раздела.

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

Коллеги, Доброго дня.

По требованиям в системе был создан новый раздел "Клиенты". Раздел "Контрагент" остался. 

Как правильно изменить связь в разрезе "контакт- контрагент" на "контакт-клиент".  Для контрагента контакты доступны через клиентов.

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

Заранее спасибо

Нравится

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

что-то тут не хватает в описании... чем клиент отличается от контрагента? 

Клиент - это новый созданный объект в системе. Для компании клиент и контрагент разные объекты по требованиям в ТЗ.

У одного клиента связь с контрагентами один ко многим.

 

 

>У одного клиента связь с контрагентами один ко многим.

А какое отношение контрагента с клиентом? Может такое быть, что контрагент "принадлежит" многим клиентам? Если нет, то достаточно в объект контрагента внести поле клиент и его проставлять. Можно еще будет сделать деталь для клиентов, где будут отображаться все контрагенты, у который клиент = текущему клиенту.

 

По поводу контактов. Я так полагаю, что вопрос в том, что клиент также должен иметь свои контакты, которые отличны от контактов контрагентов. Тут довольно просто. Добавляется поле для связи с клиентом в контакт и пишутся бизнес-правила отображения полей контрагент/клиент в зависимости от типа контакта.

Рекомендую прислушаться к рекомендациям Максима.

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

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

Добрый день.

Есть скрипт обработки лида. Предположим, вопрос 1, 2, 3. Как только менеджер отмечает ответ клиента на первый вопрос, происходит переход к новому вопросу. Можно ли реализовать иерархию вопросов? Чтобы после выбора ответа на экран ниже выводился новый вопрос, а не происходил переход к новой странице со вторым вопросом

Нравится

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

Настроить элемент [Вопрос пользователю] не получится.

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

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

Приветствую, коллеги, вот вопрос. Есть некое поле (допустим поле "Name" в таблице "Printers"). Но поле не всегда корректно заполнено (т.е. вместо HP LJ 1100 например там содержится только "1100"), приходит при этом значение корректное (т.е. HP LJ 1100). Мне  же нужно выбрать такие записи таблицы, где значение Name входит во входящую строку (фильтр contain или LIKE SQL, только наоборот). Таким образом нужно сделать аналог вот такой sql функции:

SELECT Name, CHARINDEX ('1100', Name) as Pos

FROM [!test].[dbo].[Printer]

where CHARINDEX ('1100', Name) > 0

средствами esq. Это реализуемо вообще?

Нравится

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

Приветствую

Такую функциональность можно написать с помощью комбинации фильтров contain и not start with. А именно CONTAIN and NOT_START_WITH

Артем Гура,

Приветствую, прошу прощения, не понял? Левая часть выражения (значение Name в справочнике) равна "1100", правая часть выражения (строковая переменная) равна "HP LJ 1100". И как вы это себе представляете? Если бы наоборот было - так никаких проблем. То, что вы предлагаете будет выглядеть как: (xxxx.CONTAIN, Name, "HP LJ 1100") AND (xxxxx.NOT_START_WITH, "HP LJ 1100"), если я правильно понял? 

Дмитрий, тогда я не совсем понял :) 

К примеру данные:

1   HP Lj 1100
2   1100

Ваш запрос 

SELECT Name, CHARINDEX ('1100', Name) as Pos
FROM [!test].[dbo].[Printer]
where CHARINDEX ('1100', Name) > 0

выдаст одну запись: HP Lj 1100. При  этом, как я понял, параметр поиска будет = "1100"

Этот запрос на SQL можно и так сделать:

Select Name 
from ... [Printers]
where 
   Name like '%1100%' 
and
   Name not like '1100%'

если перевести на ESQ, то 

Name like '%1100%'     - это CONTAIN
Name not like '1100%'  - это NOT_START_WITH

при этом входящим параметром будет "1100"

Таким образом вы найдете все строки, в которые входит 1100, но не начинается с "1100"

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

Добрый день!

Как можно быстро убрать всех старых сотрудников из ответственных в записях разных разделов? При попытке удалить пользователя из системы выдает сообщение "Выбранного пользователя удалить невозможно, так как он используется в других объектах." Пробовал процессами переназначать ответственного в различных разделах, но все равно выдает данное сообщение. 

+ При попытке через @ указать сотрудника в сообщении ленты также выдает уволенных сотрудников.

Нравится

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

Здравствуйте, Александр!

К сожалению, пользовательскими методами нет возможности удалить пользователя из системы, так как он имеет множество связей (например, со страницей контакта). Данную манипуляцию необходимо выполнять на уровне базы данных.

В качестве обходного решения можем предложить убрать признак "Активен" в карточке пользователя у старых сотрудников. После данных действий, пользователь будет не активен. Либо, если есть необходимость стереть все данные о неактивных сотрудниках, обратитесь, пожалуйста, в техническую поддержку по адресу support@terrasoft.ru.

Одеяненко Юлия,

Добрый день! Только что проверил еще раз. Признак активности пользователя не влияет на возможность его выбора (по крайне мере, попробовал в карточке Активности) 

В BaseFiltersGenerateModule описана очень простая функция по фильтрации. Возможно, её где-то можно переопределить



    function OwnerFilter() {

        return Terrasoft.createColumnIsNotNullFilter('[SysAdminUnit:Contact].Id');

    }

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

Пытаюсь соедениться с 1С, вот код:

namespace Terrasoft.Configuration.ImportAllAccountsService

{

    using System;

    using System.ServiceModel;

    using System.ServiceModel.Web;

    using System.ServiceModel.Activation;

    using System.Collections.Generic;

    using System.Collections.ObjectModel;

    using System.Data;

    using Terrasoft.Common;

    using Terrasoft.Core;

    using Terrasoft.Core.DB;

    using Terrasoft.Core.Entities;

    using Newtonsoft.Json;

    using Newtonsoft.Json.Linq;

    using System.CodeDom.Compiler;

    using System.Linq;

    using System.Runtime.Serialization;

    using System.Text;

    using System.Text.RegularExpressions;

    using System.Web;

    using Terrasoft.Core.Packages;

    using Terrasoft.Core.Factories;

    using V83;

    

    [ServiceContract]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    public class ImportAllAccountsService

    {

        [OperationContract]

        [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,

        ResponseFormat = WebMessageFormat.Json)]

        public string ImportAllAccounts()

        {

            COMConnector comConnector = new COMConnector();

            return "Import complite1!!!";

            dynamic connection = comConnector.Connect(@"File='D:\1С-Install\FOP NEW';Usr='xxx';Pwd='yyy'");

            return "Import complite2!!!";

            dynamic dataArray1C = connection.Справочники.Контрагенты.Выбрать();

            return "Import complite3!!!";

            while (dataArray1C.Следующий == true)

            {

                return (string)dataArray1C.Наименование;

            }

        }

    }

}

в обычном проэкте в студии - работает, тут вылетает уже на строке  COMConnector comConnector = new COMConnector();

Нравится

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

У кого есть идеи почему BPM не хочет работать с библиотекой 1С? Хотя при компиляциии шибок - нет...

Нашел еще такой код:

string ConnectString = @"File='D:\1С-Install\FOP NEW';Usr='xxx';Pwd='yyy'";

            var v81comConnector = Type.GetTypeFromProgID("V83.ComConnector");

            var v81 = Activator.CreateInstance(v81comConnector);

            Object[] arguments = { ConnectString };

            dynamic Connect = v81comConnector.InvokeMember("Connect", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v81, arguments);

            int count = Connect.Метаданные.Справочники.Количество();

            MessageBox.Show(count.ToString());

Работает без библиотеки!!! Тут выбивает ошибку на строке

var v81 = Activator.CreateInstance(v81comConnector);

Хотя в визуалке этот код отрабатывает на ура

С чем вылетает-то? 

Виталий, какая ошибка?

УРА!!! Решено!!! проблема была в сервере 64, помогла вот эта ссылка:

https://infostart.ru/public/197627/

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

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

Версия 7.11.



В карточке можно управлять видимостью колонок в зависимости от значения некоторой из колонок объекта. К примеру, в карточке контрагента можно настроить видимость колонок таким образом, что колонки будут отображаться только в случае, если значение колонки Owner равно текущему контакту пользователя, либо текущий пользователь относится к роли системных администраторов. Для этого необходимо добавить bind видимости колонки на значение виртуальной колонки.



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

Нравится

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

Добрый день. А администрирование по полям эту задачу не решают?

Иванов Александр А.,

... ну да, получается, что определённые колонки должен видеть только owner... правами надо заморочиться, чтобы такое сделать... к примеру прицепить событийный процесс "Перед сохранением", в котором пользователю из колонки Owner раздать права на чтение колонок, а остальным как-то запретить. Не доводилось подобных задач решать, но, может, как вариант...

 

Добрый день!

Если я правильно понял вопрос, то можно попробовать вклиниться в формирование грида (onGridDataLoaded в GridUtilitiesV2) и кодом делать соответствующие проверки и не показывать ненужные колонки.

Тёскин Дмитрий Валерьевич,

не помогло, к сожалению. Разобрал onGridDataLoaded и связанные функции, как я понял непосредственно генерация таблицы происходит в

addItemsToGridData, то есть в gridData.loadAll(dataCollection, options);

Для примера перед этим в prepareResponseCollectionItem там, где происходит перебор всей коллекции, добавляю

 if (!item.values.Address){

                    item.values.Address = "test";

                }

Просто ради теста. То есть если у меня колонка Адрес (выведена на страницу) пустая, то должно быть отображена строка "test". Это намного проще даже, чем проверка id пользователей.

И всё равно ничего не происходит - на странице загружаются по прежнему пустые блоки (и адреса, если они заполнены). При этом если вывести console.log(dataCollection); уже внутри addItemsToGridData, то есть непосредственно перед генерацией, там будут мои правки.

Здравствуйте, можете использовать для этих целей метод: loadGridData из схемы GridUtilitiesV2, и в колбеке esq запроса

esq.getEntityCollection(function(response) {

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

К примеру:

response.collection.collection.items[0].set("Name", "");

Скроет имя из первой строки коллекции. В итоговом варианте конечно стоит использовать циклы и проверки.

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