BPMonline 7.7.0.2326

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

Нравится

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

Здравствуте, Виктория!

Для решения данной задачи можно использовать бизнес правило фильтрации для мобильного приложения.

Пример правила фильтрации, в котором поле "Контакт" фильтруется по колонке "Контрагент" в разделе "Счета".

Terrasoft.sdk.Model.addBusinessRule("Invoice", {
    ruleType: Terrasoft.RuleTypes.Filtration,
    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
    triggeredByColumns: ["Account"],
    filteredColumn: "Contact",
    filters: Ext.create("Terrasoft.Filter", {
        property: "Account"
    })
});

Здравствуте, Виктория!

Для решения данной задачи можно использовать бизнес правило фильтрации для мобильного приложения.

Пример правила фильтрации, в котором поле "Контакт" фильтруется по колонке "Контрагент" в разделе "Счета".

Terrasoft.sdk.Model.addBusinessRule("Invoice", {
    ruleType: Terrasoft.RuleTypes.Filtration,
    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
    triggeredByColumns: ["Account"],
    filteredColumn: "Contact",
    filters: Ext.create("Terrasoft.Filter", {
        property: "Account"
    })
});

Здравствуйте!
Не поняла, где именно это реализовывать.
Я создала через мастер мобильного приложения свое рабочее место "Агенты" и поместила туда раздел Лиды.
В Лиде есть новое поле справочник UsrAgent (выбор из контактов). Хотела бы его отфильтровать, чтобы при выборе из справочника были только контакты нашей компании с типом агент, наподобие ответственного в любых карточка BPMonline.
Но обратила внимания, что поле ответственный, например, в документе в мобильном приложении не фильтруется (хотела посмотреть пример реализации).
Скажите, возможно ли фильтровать поле в мобильном приложении?
и в какой именно схеме нужно делать изменения?

Начала разбираться в мобильном приложении, заметила, что обязательность и фильтрация полей написаны для раздела активности в MobileActivityModelConfig (я так поняла, что это модуль)

Мне нужно сделать фильтрация для полей раздела Лид. Нашла MobileLeadModelConfig (но написана она, как исходный код).

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

И как мне быть? Получается, что это ошибка системы? Как выйти из этой ситуации?

Добрый день, Виктория
Для решения Вашей задачи необходимо:

  • Желательно создать отдельную схему с типом «Модуль»
    И назвать ее так «UsrMobileLeadModelConfig» (чтоб она соответствовала базовым стилям именования файлов).
  • Внутри нее поместить такой код:
    Terrasoft.sdk.Model.addBusinessRule("Lead", {
    	name: "UsrMobileLeadUsrAgentFilter",
    	ruleType: Terrasoft.RuleTypes.Filtration,
    	events: [Terrasoft.BusinessRuleEvents.Load],
    	triggeredByColumns: ["UsrAgent"],
    	filters: Ext.create("Terrasoft.Filter", {
    		name: "filterName",
    		type: Terrasoft.FilterTypes.Group,
    		logicalOperation: Terrasoft.FilterLogicalOperations.And,
    		subfilters: [
    			{
    				property: "Account",
    				value: 'айдишникнашейкомпании'
    			},
    			{
    				property: "Type",
    				value: 'айдишниктипаконтактаагент'
    			}
    		]
    	})
    });
  • Затем эту схему необходимо подключить в манифесте:
    - Создаем/Открываем схему UsrMobileApplicationManifestDefaultWorkplace
    - Добавляем в блок Models такой код:
    "Models": {
       "Lead": {
          "PagesExtensions": ["UsrMobileLeadModelConfig"]
       }
    }
  • Сохраняем
  • Синхронизируемся на девайсе

Здравствуйте!
Весь день пробую код, который вы написали.

Заметила, что если в блоке "Models" добавить в "PageExtensions", то при синхронизации возникает ошибка, поэтому (по примеру в коде) добавила в "ModelExtensions" и проверила на обязательности этого поля, все срабатывает.
Terrasoft.sdk.Model.addBusinessRule('Lead', {
ruleType: Terrasoft.RuleTypes.Requirement,
triggeredByColumns: ['UsrAgent']
});

Но фильтрация не работает, пустой список, пробовала и просто по Account и по двум, пустой список и все.
Почему не работает фильтрация?
Почему пустой список хотя в sql с этими id есть 2 записи и в приложении на компе тоже 2 записи, а в мобильном приложении пусто?
Значение name: "filterName" должно быть любым или определенным? Или в чем-то другом причина?

Получилось настроить фильтрацию по текстовому полю:

Terrasoft.sdk.Model.addBusinessRule("Lead", {
ruleType: Terrasoft.RuleTypes.Filtration,
triggeredByColumns: ["UsrAgent"],
filters: Ext.create("Terrasoft.Filter", {
compareType: Terrasoft.ComparisonTypes.Equal,
property: "Name",
value: "Агент 1",
name: "test123"
})
});

Возможно, чтобы настроить фильтрацию по компании (это же справочник) нужно указать дополнительные свойства?

1)

"Чуплыгина Виктория Викторовна" написал:"PageExtensions", то при синхронизации возникает ошибка

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

2) Проверьте, что значения Id-шников указаны в нижнем регистре

{
   property: "Account",
   value: "e308b781-3c5b-4ecb-89ef-5c1ed4da488e"
},

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

1) Если получилось настроить обязательность и фильтрацию по текстовому полю, то, мне кажется, подключила я все верно.
Квадратные скобки я поставила.

2) да, в нижнем регистре.

Может, все-таки для фильтрации по справочнику нужно указать что-то еще?
Никак не могу понять, что именно.

Terrasoft.sdk.Model.addBusinessRule("Activity", {
ruleType: Terrasoft.RuleTypes.Filtration,
events: [Terrasoft.BusinessRuleEvents.Load],
triggeredByColumns: ["Owner"],
filters: Ext.create("Terrasoft.Filter", {
property: "Active",
modelName: "SysAdminUnit",
assocProperty: "Contact",
operation: Terrasoft.FilterOperations.Any,
name: "ActivityContact_SysAdminUnit_Filtration",
value: true
})
});

Фильтрация поля ответственный в разделе активности?
что означают свойства modelName и assocProperty?
modelName, наверно, там, где искать property?

Да, это она.
modelName - имя связанной таблицы.
assocProperty - имя колонки по которой связанная таблица ссылается на фильтруемую таблицу.

Это не обычный фильтр, а фильтр по обратным связям.
Он означает следующее: Берем всех контактов для которых существует запись в таблице SysAdminUnit которая ссылается на контакта через свое поле SysAdminUnit.Contact

Значение name: "filterName" может быть любым

Указанный пример должен работать.
Попробуйте еще такой пример:

Сначала с NotEqual

Terrasoft.sdk.Model.addBusinessRule("Lead", {
	ruleType: Terrasoft.RuleTypes.Filtration,
	triggeredByColumns: ["UsrAgent"],
	filters: Ext.create("Terrasoft.Filter", {
		compareType: Terrasoft.ComparisonTypes.NotEqual,
		property: "Id",
		value: "81d05412-d90c-440a-831a-03fc52489fa5",
		name: "name1"
	})
});

а затем с Equal

Похоже что данные по колонке Тип не забираются для таблицы "Контакт"
Добавьте в манифест колонку тип, примерно так:

"ModelDataImportConfig": [
{
	"Name": "Contact",
	"SyncColumns": [
		"Name",
		"Account",
		"Department",
		"JobTitle",
		"Photo",
		"Type"
	]
}
]

После чего лучше очистить кеш и пересинхронизироваться

Спасибо Вам большое!!!!!

Действительно данные по колонкам не забирались для таблицы контакт!

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