Надо создать БП который при совпадении нужных факторов удалит листинг с рекламных площадок.
В данный момент это делается вручною вот так:
Но вот как это сделать через БП я не понимаю. Нужна помощь!
Нравится
Добрый день, Виктор!
Опишите, пожалуйста, более подробно, о каких факторах идет речь, а также прикрепите, пожалуйста, скриншот в другом формате, так как этот, к сожалению, отобразить не удается.
Ссылка на скрин: http://cs630829.vk.me/v630829418/126ed/gSvd7QmP4to.jpg
По сути не важно что должно вызывать БП. Главное как запустить из БП данный функционал для листинга.
Есть 2 варианта:
1. Если при нажатии на кнопку вызывается Web-сервис, то с C# кода вызвать необходимый Web-сервис с корректными параметрами.
2. Если при нажатии на кнопку вызывается метод из js, то можно использовать WebSocket'ы.
Пример с использованием WebSocket'ов:
Создать замещающую страницу и добавитьтакой код:
methods: {
init: function() {
Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, this.onTest, this);
this.callParent(arguments);
},
onTest: function(scope, response) {
if (response && response.Header.Sender !== "Test") {
return;
}
--логика метода при нажатии на кнопку
}
В БП добавить задание-сценарий с таким кодом:
var userConnection = UserConnection;
MsgChannelUtilities.PostMessage(userConnection, "Test", String.Empty);
Что то я не понял. Что из этого отменит выгрузку через зипал?
Кнопку мне нажимать не надо. Это должен делать БП.
Добрый день!
Вручную листинги удаляются с рекламных площадок при нажатии на соответствующую кнопку, за нажатием на кнопку скрывается определенная логика.
Это может быть вызов метода или web-сервиса, поэтому Вам было предложено два варианта решения. Если эта логика - вызов web-сервиса, то необходимо воспользоваться первым вариантом, если же это вызов метода, то вторым.
Данная проблема все еще актуальна.
Саппорт ответил вот что:
Это весь необходимый c# код для "задание-сценарий": var userConnection = UserConnection; MsgChannelUtilities.PostMessage(userConnection, "Test", String.Empty); С помощью этого кода вызывается метод на JS, который удаляет листинги с рекламных площадок. Сам метод по удалению листингов должен быть написан на JS.
на схеме страницы за эту функцию отвечает вот что как я понял:
deleteListings: function(silent) { this.showConfirmationDialog(this.get("Resources.Strings.DeleteListingConfirmation"), function(result) { if (result === Terrasoft.MessageBoxButtons.YES.returnCode) { AssisHelper.deleteListings.call(this, silent, function() { this.set("IsListingPublished", false); }); } }, ["yes", "no"]); }
Где должен быть этот метод на js?
Как я понял он должен создаться отдельно как то?
Как мне в него передать определенный листинг?
Просто добавить в js схему такой код:
methods: {
init: function() {
Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE, this.onTest, this);
this.callParent(arguments);
},
onTest: function(scope, response) {
if (response && response.Header.Sender !== "Test") {
return;
}
--логика метода при нажатии на кнопку
}
А там где написано "--логика метода при нажатии на кнопку" - вставить реализацию метода deleteListings
Ну это я понял.
К примеру у меня в БП читаются данные по 100 листингам. И для каждого надо реализовать вызов как я понял:
var userConnection = UserConnection; MsgChannelUtilities.PostMessage(userConnection, "Test", String.Empty);
Как лучше это сделать? Что за переменная userConnection? Как оно поймет для какого листинга вызвать метод из схемы?
Этот код нужно просто вставить в задание-сценарий:
var userConnection = UserConnection;
MsgChannelUtilities.PostMessage(userConnection, "Test", String.Empty);
А какие листинги надо удалять и как оно поймёт - это уже зависит от того как Вы придумаете логику, по какому признаку Вы хотите удалять листинги...это уже в JS всё надо делать.
А в С# вызыввается "Test".
Похоже у нас легкое недопонимание.
Давайте я опишу задачу.
У листингов есть поле - Дата окончание договора
Процесс:
1. БП запускается выбирает все листинги у которых дата окончания договора равна сегодня
2. Получаем к примеру 500 листингов в результате.
3. Эти 500 листингов мне надо удалить с выгрузки Зипал.
Вопрос, как запустить действие Удалить листинг с рекламной площадки для всех 500 записей листинга.
Если можно хотелось бы увидеть рабочий пример.
В БП сначала считываете данные , добавляете условие : если "Дата окончание договора" = Сегодня, то выполнить Задание-сценарий(задание-сценарий связывает БП с методом на JS, кот. удаляет листинг).
Рабочего примера, к сожалению, нет.
Я просто не пойму, как этот код:
var userConnection = UserConnection; MsgChannelUtilities.PostMessage(userConnection, "Test", String.Empty);
понимает что это листинг, где искать js метод, и как передаёт в этот js листинг
В PostMessage передается параметр "Test".
А в JS методе Вы проверяете, если сигнал не равен "Test", то ничего не происходит, иначе отрабатывает логика удаления листингов.
if (response && response.Header.Sender !== "Test") {
return;
}
--логика метода при нажатии на кнопку
}
Уже лучше! Спасибо! Мне надо понять что именно на до сделать и как это работает. Есть еще пару вопросов:
1. Могу ли я пережать еще параметры? К примеру Ид записи?
2. Как данный метод поймет что надо обращаться именно к схеме листинга где лежит метод? И вызвать именно этот метод?
3.
AssisHelper.deleteListings.call(this, silent, function() { this.set("IsListingPublished", false); });
Я так понимаю что this это сущность данного листинга? Что есть silent?
Не будут ли эти переменные null если вызвать так метод?
В C# коде Вы больше ничего не передаёте, этот код служит только для передачи сигнала.
Все действия,которые вы хотите сделать с листингами, необходимо описывать в JS коде.
Id записи и необходимые значения полей в листинге можно считывать в БП с помощью блока Читать данные.
this - это теккущая сущность, silent - параметр, кот. передается в deleteListings: function(silent) {...}
Почему переменные должны быть null, если метод будет вызываться для того листинга, у которого будет выполнятся определенное условие (Дата окончания договора = сегодня).
Тоесть, БП проходится по всем листингам и проверяет каждый на условие, если условие удовлетворяется, то переходит в блок задание-сценарий, в котором передается сигнал для JS метода удаления текущего листинга.