Доброго времени суток!
Столкнулся с проблемой: добавил исходный код "MyTools", язык указал JavaScript. В коде написал функцию "MyFunction". В процессе, где нужно выполнение моей функции, пишу
Что поместить в переменную
script
, чтобы вызвать MyFunction?
Нравится
Добрый день.
Примерно так:
Page.ExitButton.AjaxEvents.Click.OnClientEvent = myStringJavaScriptFunction;
Код поместить на событии Init страницы.
На сколько я понял, в переменной myStringJavaScriptFunction тело самой javascript-функции, а это не совсем то. Как раз таки, чтобы не плодить одни и те же функции по всей конфигурации, я создал в конфигурации исходный код, и хочу обращаться к нему примерно таким образом
Page.MyButton.AjaxEvents.Click.OnClientEvent = "Terrasoft.MyTools.MyFunction()";
т. е. аналогичным способом, как вызывается справка по разделу
Page.ContextHelpButton.AjaxEvents.Click.OnClientEvent = "Terrasoft.HelpContext.showHelp(null, '" + Page.ContextHelpButton.ClientID + "')";
В таком случае, к своей Source схеме Вы можете обратиться как
Terrasoft.Common.Configuration.MySourceScheme.MyMethod();
в случае c# класс должен быть статическим, в ином случае нужно изначально создать объект класса, а затем вызвать метод:
Terrasoft.Common.Configuration.MySourceScheme myClass = new Terrasoft.Common.Configuration.MySourceScheme(); myClass.myMethod();
т.е. аналогично
Page.ContextHelpButton.AjaxEvents.Click.OnClientEvent = "Terrasoft.Common.Configuration.MySourceScheme.MyMethod()";
Попробовал как Вы советуете, не вышло.
TSConfiguration.MySourceScheme.MyMethod();
Класс TSConfiguration.MySourceScheme виден, но методов у него нет.
Способ
Page.ContextHelpButton.AjaxEvents.Click.OnClientEvent = "Terrasoft.Common.Configuration.MySourceScheme.MyMethod()";
тоже не подошел, так как у объекта Terrasoft нет объекта Common или Configuration. Это можно увидеть в консоли.
Возможно, нужно его как-то регистрировать?
Page.AddScript(script);
где script - строка с методом JS, добавляет данный JS код на страницу в клиенте.
Соответственно, если вы добавите таким же образом JS код вызова какого либо метода, то он запустится.
Page.AddScrpit(myMethod);
Page.AddScript(executeMyMethod);
По поводу консоли - cs файлы (классы и методы) они на сервере, в консоли браузера (клиентский код) Вы их и не увидите.
Обращаться можно через Terrasoft.Configuration.MySourceScheme.
Дмитрий, в шапке темы я указал
"Constantine" написал:. После я указал, что способдобавил исходный код "MyTools", язык указал JavaScript. В коде написал функцию "MyFunction".
"Олейник Дмитрий" написал:Page.AddScript(script);
где script - строка с методом JS, добавляет данный JS код на страницу в клиенте.
мне не подходит, так как мне придется везде, где нужен вызов моей функции, тупо делать копи-паст тела самой функции. Чтобы избавиться от перегрузки кода, я вынес ее (функцию) в отдельную схему, у которой указал язык JavaScript, а не C#.
То что классы и методы *.cs файлов в консоли я не увижу, это понятно. Задача и состоит, в том, чтобы перенести JavaScript код из моей схемы в клиентский код, так как функции, которые он исполняет, должны работать на клиентской стороне, а не на стороне сервера. Потому я приводил пример с
Page.ContextHelpButton.AjaxEvents.Click.OnClientEvent = "Terrasoft.HelpContext.showHelp(null, '" + Page.ContextHelpButton.ClientID + "')";
так как этот же метод
Terrasoft.HelpContext.showHelp(null, какой-то_там_ID)
Здравствуйте.
У меня получилось так:
1. Source код схема С#:
namespace Terrasoft.Configuration { public static class Alert { public static string RenderScript() { return "function myFunction() {alert(\"Hello World!\"");}"";
Спасибо, Дмитрий, за пример, но это не совсем то, что нам нужно было. Решение нашли сами
Здравствуйте.
Вот так:
Page.AddScript("function myFunction() {alert(\"Hello World!\"");}"");
Page - это текущая клиентская страница (т.е. процесс страниц системы).
Элемент "Скрипт" выполняется на сервере, там никакой клиентской логики нет... По идее, Вам необходимо создавать страницу (или использовать текущие) и уже в контексте их выполнять какой то клиентский код.
А можно уточнить Вашу задачу?
Дмитрий, задачу я описывал в обращении 0160719. Нужно автоматически сгенерировать документ после создания документа в рамках БП. То есть сначала элемент "Страница редактирования", потом "Задание-сценарий", вызывающий метод ReportUtilities.generateReport() для генерации документа, затем открытие карточки e-mail для отправки этого документа.
Добрый день.
А, так а зачем Вам JavaScript?
Вызовите Вашу функцию в рамках БП:
Terrasoft.Configuration.ReportUtilities.generateReport();
А вот пример Source-код схемы:
namespace Terrasoft.Configuration { public static class ReportUtilities { public static string generateReport() { return "Hello world!"; } } }
Нет, смотрите, если в конфигурации в какой либо Source код схеме уже есть нужная Вам функция - разумеется, дублировать её не нужно.
Просто вызывайте её:
Namespace.StaticClass.StaticMethod();
т.е. если метод определен так:
namespace Terrasoft.Configuration { public static class ReportUtilities { public static string generateReport() { return "Hello world!"; } } }
то вызывать так:
Terrasoft.Configuration.ReportUtilities.generateReport();
Это то, что я хотел сказать в прошлом посте.
Можно.
Генерация документа - это создание новой записи?
Попробуйте просто написать insert запрос.
К примеру:
var str = "Test"; var insert = new Insert(UserConnection) .Into("ConfItemsCode") .Set("Name", Column.Const(str)); insert.Execute();
Посмотрел код схемы WordReportUtilities, которая генерит отчеты. Все просто - необходимо создать объект этого класса, воспользовавшись конструктором, затем вызвать метод GenerateReport с двумя параметрами - айди шаблона, и айди записи, для которой нужно построить отчет.
Попробуйте так:
Guid templateId = new Guid("АйДи шаблон"); Guid recordId = new Guid("АйДи документа"); Terrasoft.Configuration.WordReportUtility myReport = new Terrasoft.Configuration.WordReportUtility(UserConnection); var myRepGuid = myReport.GenerateReport(templateId, recordId);