Отмена публикации на рекламных плащадках листингов.

Надо создать БП который при совпадении нужных факторов удалит листинг с рекламных площадок.
В данный момент это делается вручною вот так:
ы

Но вот как это сделать через БП я не понимаю. Нужна помощь!

Нравится

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

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

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

Ссылка на скрин: 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 метода удаления текущего листинга.

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